Volver al inicio

sched_ext: Planificadores BPF en Linux 6.12

sched_ext en Linux 6.12 introduce políticas dinámicas de programación de tareas BPF, separando la lógica del núcleo. Describe ganchos enqueue/dispatch, ejemplos scx_horoscope/lavd/rusty, benchmarks y casos de uso.

Políticas BPF sched_ext en Linux: De Experimentos a Producción
Advertisement 728x90

sched_ext en el núcleo de Linux 6.12: Planificadores dinámicos con BPF

La versión 6.12 del núcleo de Linux introduce la clase de planificador sched_ext, que permite reemplazar dinámicamente la lógica de programación de tareas mediante programas BPF. Esto elimina la necesidad de parches y recompilaciones del núcleo al experimentar con algoritmos. Las políticas se cargan desde el espacio de usuario, con el núcleo garantizando la seguridad mediante un mecanismo de retroceso a SCHED_NORMAL en caso de fallos.

La clase sched_ext divide las responsabilidades: el núcleo maneja las colas de despacho (DSQ), la migración de tareas y la gestión de estados, mientras que la política BPF decide sobre la clasificación, el rango y el quantum de tiempo. Al despertar una tarea, se invoca el gancho enqueue(); en el despacho del núcleo, se llama a dispatch().

Ciclo de Vida de las Tareas en sched_ext

Una tarea despierta mediante try_to_wake_up(), y la política analiza sus características: patrones de despertar, uso de CPU/E-S, cgroup y presencia de políticas RT (SCHED_FIFO, SCHED_RR). La política coloca la tarea en una cola global o local, utilizando tiempo virtual para la priorización.

Google AdInline article slot

En dispatch(), la tarea se extrae de la cola y se entrega al núcleo mediante scx_bpf_dispatch() junto con un quantum de tiempo en nanosegundos. La migración se activa con scx_bpf_kick_cpu() para equilibrado de carga o localidad de caché.

Las colas DSQ operan en modo FIFO o por prioridad según el método de inserción:

  • scx_bpf_dispatch() — semántica FIFO.
  • scx_bpf_dispatch_vtime() — ordenación por vtime.

El rango (puntuación) interno de la política no afecta las prioridades del núcleo (nice, prio).

Google AdInline article slot

Ejemplo: scx_horoscope como Demostración de Capacidades

El proyecto scx_horoscope utiliza datos astrológicos para ajustar quantums de tiempo, mostrando el patrón sched_ext. Cada 60 segundos, calcula posiciones planetarias, retrogradaciones y fases lunares para generar coeficientes.

Clasificación de tareas por:

  • Políticas RT.
  • Patrones de despertar.
  • Uso de CPU/E-S.
  • cgroup.

El quantum base se ajusta con multiplicadores: signos zodiacales aumentan o reducen quantums para tipos de tareas, las retrogradaciones imponen una penalización del 50 %, y las lunas llenas otorgan bonos a tareas interactivas. Los quantums están limitados por min_slice_ns y max_slice_ns.

Google AdInline article slot

Se trata de un ejemplo educativo: cálculos reales con operación estable, pero sin base científica para uso en producción.

Planificadores Prácticos en sched_ext

El ecosistema scx incluye políticas orientadas a producción:

  • scx_lavd (Latency-Aware Virtual Deadline): plazos virtuales basados en patrones de despertar, reduciendo latencias en el percentil 99 en un 15–30 % frente a CFS en escritorios.
  • scx_rusty: optimización NUMA, migraciones minimizadas y conciencia de límites térmicos para servidores.
  • scx_flash: predicciones de ML desde el espacio de usuario vía memoria compartida.

Los ciclos de desarrollo se han reducido a horas: compilar, cargar, métricas, iterar — sin necesidad de reinicios.

Herramientas para Evaluación

Evaluación mediante:

  • /sys/kernel/sched_ext/ — métricas de despacho y migración.
  • bpftrace — rastreo de eventos.
  • perf sched — latencias de cambio de contexto.
  • cyclictest — latencias de cola.

Enfocarse en percentiles, no en promedios: las colas son críticas para la capacidad de respuesta.

Casos de uso:

  • Servidores de juegos: quantums garantizados para lógica de juego, aislamiento de tareas de fondo.
  • Sistemas empotrados: agrupación de tareas para reducir frecuencia de cambios.
  • Nube: garantías de ancho de banda más allá de cgroup.
  • Audio/video: reserva de núcleos, minimización de jitter.

Limitaciones y Desarrollo

La sobrecarga de llamadas de despacho crece con tasas altas de cambios. Errores lógicos degradan el rendimiento sin provocar pánicos. La API está en evolución y la funcionalidad sigue siendo experimental.

Puntos clave:

  • sched_ext en 6.12 con CONFIG_SCHED_CLASS_EXT.
  • Políticas BPF para prototipado rápido.
  • Retroceso a SCHED_NORMAL en fallos.
  • Enfoque en percentiles en evaluaciones.
  • Aplicaciones en escenarios de latencia crítica y NUMA.

— Editorial Team

Advertisement 728x90

Leer después