Обычно scheduler в Linux один для всей системы: задачи попадают в общую модель планирования, а kernel решает, когда и на каком CPU их запускать.
sched_ext позволяет вынести часть этой логики в BPF-программу. А новая модель sub-schedulers позволяет применять отдельную policy только к выбранной группе задач.Упрощённо:
Linux scheduler
│
├── обычные процессы → CFS / fair scheduling
│
└── выбранная группа → sched_ext
│
└── своя BPF policy
Например, можно представить систему с двумя группами:
cgroup A → обычный scheduler
cgroup B → sched_ext policy
При этом
sched_ext не заменяет scheduler ядра целиком. Он получает управление только там, где задача попала под соответствующую policy, а остальные задачи продолжают обслуживаться обычным scheduler path.Проверить доступность механизма можно через:
ls /sys/kernel/sched_ext
А состояние scheduler’а:
cat /sys/kernel/sched_ext/state
Главная сложность здесь в границе ответственности. BPF-policy должна решать, какую задачу и когда запускать, но CPU, migration, interrupts и остальные базовые механизмы ядра никуда не исчезают.
То есть получается не:
один BPF scheduler вместо Linux schedulerа скорее:
kernel scheduler
│
┌───────────┴───────────┐
↓ ↓
обычные задачи sched_ext tasks
│
BPF scheduling policy
