Итог годовой разработки: от диспетчеризации к полному контролю
После года интенсивной разработки команда Linux Kernel, возглавляемая Tejun Heo, объявила поддержку подпланировщиков в фреймворке sched_ext «feature complete» (готовой к использованию) в релизе Linux 7.3. Ключевое изменение заключается в переходе от простой делегации диспетчеризации к полному контролю над процессами планирования. Теперь корневой BPF-планировщик может передать поддерево cgroup вложенному подпланировщику вместе с отзывными правами на CPU, после чего суб-планировщик принимает все решения по расписанию задач на этих ядрах.
Технические детали и исправления уязвимостей
Интеграция включает не только новые возможности, но и критические исправления безопасности и стабильности. Разработчики закрыли векторы коррупции памяти, добавив валидацию BPF-доступной памяти арены перед использованием ядром. Также устранены проблемы с гонками данных при записи slice и vtime, введя явные правила синхронизации. Важным улучшением стала защита от зависаний: если задача «голодает» из-за отсутствия доступа к CPU, ядро теперь запускает её напрямую в рамках небольшого бюджета пропускной способности, превращая фатальную ошибку планировщика в контролируемое деградацию.
Ключевые изменения в Linux 7.3 для sched_ext
| Категория | Изменение / Исправление | Значение |
|---|---|---|
| Делегирование CPU | Родительские планировщики теперь передают права на enqueueing, preemption и контроль частоты | Полный контроль суб-планировщика над выделенными ядрами, а не только диспетчеризация |
| Безопасность (Hardening) | Валидация BPF-writable arena памяти и синхронизация vtime | Защита от коррупции состояния при использовании баговых или злонамеренных планировщиков |
| Стабильность (Rescue) | Запуск «голодающих» задач на небольшом бюджете пропускной способности | Предотвращение полного зависания системы при сбое кастомного планировщика |
| Core Scheduling | Исправление потери rq lock и перезапуск выбора | Устранение возможности взаимной блокировки (hard-hang) при интерливинге выборов |
| Интеграция cgroup | Правильный перенос задач при миграции через границы суб-планировщика | Исправление use-after-free и ошибок планирования при перемещении задач |
Практическое применение: scx_qmap
Для демонстрации возможностей иерархического планирования используется утилита scx_qmap, которая теперь полностью поддерживает суб-планировщики. Это позволяет администраторам и разработчикам создавать изолированные среды планирования: например, выделять один BPF-планировщик для высокопроизводительных вычислений, а другой — для интерактивных задач или контейнеризованных сред, оптимизируя поведение системы под конкретные workload'ы без конфликтов.
Почему это важно
Раньше sched_ext позволял заменять основной планировщик, но не давал гибкости для управления разными типами задач внутри одной системы. Теперь же архитектура поддерживает многоуровневое планирование, что критически важно для облачных инфраструктур и гиперконвергентных систем, где требуется строгая изоляция и оптимизация ресурсов для различных сервисов. Изменения уже включены в Git-репозиторий Linux 7.3, а фиксы для core scheduling помечены для backporting в стабильные ветки.
Источник: Phoronix ↗
