В тесте планировщика Linux 7.3 минимальный FPS вырос с 4 до 29

2026-08-20 271 комментарии
В тесте к серии правок планировщика ядра Linux 7.3 на Core i7-2600K с Radeon RX 580 и восемью фоновыми нагрузками минимальный FPS поднялся с 4 до 29, а средний с 47,5 до 59,2. Прирост дало более частое переключение задач, а не сам переход на новое ядро

Серия правок планировщика sched: Flatten the pick вошла в ядро Linux 7.3 – о слиянии стало известно 2026 года. Очередь выполнения EEVDF стала одноуровневой: иерархия контрольных групп сохранена для учёта нагрузки, но следующая задача выбирается из плоского списка. Изменение задумано против рывков кадров под фоновой нагрузкой – той самой ситуации, когда игра делит процессор со сборкой, браузером и системными службами. Вместе с плоским выбором появился переключатель cgroup_mode с четырьмя способами распределения веса между группами, и значением по умолчанию стал concur. В приложенном к серии тесте на связке Core i7-2600K и Radeon RX 580 минимальная частота кадров поднялась с 4 до 29 FPS, но сравнивались там не старое и новое ядро, а две настройки кванта времени.

comss img 2026 08 20 172805

Почему вес контрольной группы дробится между ядрами

Планирование по контрольным группам в описании к серии названо давней болью ядра: сложности начинаются с распределения веса и заканчиваются иерархическим выбором задачи. Суммарный вес группы делится между всеми процессорами системы по глобальной дроби, и уже на 64 логических процессорах доля каждого сводится к весу одной задачи с приоритетом nice 19. Системы на 256 процессоров давно перестали быть редкостью, и там доля ещё меньше.

Контрольная группа (cgroup) – механизм ядра Linux, который объединяет процессы в группы и распределяет между ними процессорное время, память и другие ресурсы. В настольных системах в отдельные группы попадают, в частности, пользовательские сеансы и службы systemd.

Привычный обходной путь – умножать вес группы на число процессоров. Он ломается, когда вся нагрузка группы концентрируется на одном ядре: вес легко выходит за пределы, соответствующие nice -20, а вычисления упираются в ограничения разрядности. Из-за этого верхний предел суммарного веса группы приходится держать искусственно низким, что давно раздражало пользователей.

Единая очередь вместо иерархического выбора

Иерархия контрольных групп в новой схеме остаётся на месте вместе с промежуточными операциями постановки в очередь и снятия с неё, но сама очередь EEVDF вынесена наружу. Все готовые к выполнению задачи оказываются на одном уровне, и промежуточные узлы больше не заслоняют собой готовность отдельных процессов – именно они и порождали задержки, на которые жаловались чаще всего. Приближение shares_weight при этом сохраняется полностью, то есть привычное соотношение долей между группами не меняется.

EEVDF (Earliest Eligible Virtual Deadline First) – основной планировщик задач в Linux, пришедший на смену CFS. Он выбирает из задач, которым система ещё должна процессорное время, ту, у которой ближе виртуальный срок выполнения.

Плата за плоский список – постоянный пересчёт эффективного веса. Он выполняется при постановке задачи в очередь, при выборе следующей задачи и по тику таймера. Постановка и снятие по-прежнему пропорциональны глубине иерархии, зато сам выбор стал одноуровневым, а логика вытеснения заметно упростилась.

Четыре режима cgroup_mode и смена значения по умолчанию

Способ распределения веса переключается параметром cgroup_mode в отладочном интерфейсе планировщика. Доступны варианты up, max, concur и tasks. По умолчанию теперь работает concur – самый точный и одновременно самый затратный: он добавляет счётчик задач в группе и утяжеляет обновление усреднённой нагрузки.

Смена умолчания объясняется подготовкой к плоской очереди, где иерархический вес значит куда больше прежнего, поэтому мелкие доли веса групп понадобилось убрать. В описании правки прямо сказано, что перемена кому-то помешает: часть администраторов успела приспособиться и вручную завышала вес там, где это допускалось. Параметр остаётся настраиваемым именно на такой случай.

Что показал тест на Core i7-2600K с Radeon RX 580

Проверку проводили на конфигурации, которую в самой серии назвали «картошкой»: Core i7-2600K поколения Sandy Bridge и Radeon RX 580 на архитектуре Polaris. Игра Shadows: Awakening из магазина GOG запускалась через Lutris с GE-Proton10-34 и Steam Runtime 3 (sniper); в разрешении 1080p на такой системе она обычно идёт ровно. Чтобы создать нагрузку, параллельно запускались восемь копий скрипта, полностью занимающего процессорное время, – по одной на каждый логический процессор. С таким фоном игра, по описанию автора серии, становилась почти неиграбельной. Показания снимал MangoHud.

Затем игра перезапускалась с укороченным квантом времени – одной десятой от базового значения. На опубликованной диаграмме приведён и сам префикс команды запуска:

chrt -o --sched-runtime 100000 0

Квант времени (slice) – отрезок процессорного времени, который планировщик отдаёт задаче до следующего пересмотра очереди. Чем он короче, тем раньше наступает виртуальный срок задачи и тем чаще она возвращается на процессор, но тем выше и накладные расходы на переключения.

ПоказательСтандартный квантУкороченный квант
Минимальный FPS4,029,0
Средний FPS47,559,2
Максимальный FPS83,783,7
Минимальное время кадра, мс9,310,2
Среднее время кадра, мс34,017,0
Максимальное время кадра, мс121,230,0

Средняя частота кадров выросла примерно на четверть, среднее время кадра сократилось вдвое, максимальное – вчетверо. Для плавности важнее всего последняя строка: самый долгий кадр укоротился со 121,2 до 30,0 мс, то есть заметные рывки исчезли. При этом верхняя граница частоты кадров не сдвинулась вовсе, а минимальное время кадра стало чуть хуже: 10,2 мс против 9,3 мс.

Почему цифры теста не равны выигрышу от перехода на Linux 7.3

Обе колонки сняты на одном и том же ядре с уже применёнными правками. В сопроводительном письме отдельно оговорено, что с ядром без плоской очереди результат не сравнивали: задача была прогнать нетривиальную нагрузку и посмотреть, как ведёт себя изменение кванта. Значит, семикратный рост минимального FPS описывает эффект укороченного кванта под искусственной нагрузкой в восемь потоков, а не прибавку, которую даст сам переход на Linux 7.3.

Разброс между прогонами тоже заметен. В майской редакции серии те же измерения дали 3,8 против 20,6 FPS по минимуму и 48,0 против 57,2 по среднему, а максимум тогда не удержался и просел с 87,4 до 80,3 FPS. Один прогон игры с ручным замером через MangoHud остаётся иллюстрацией, а не воспроизводимым бенчмарком.

От RFC в марте до слияния в августе

Первая редакция серии с пометкой RFC появилась в списке рассылки , вторая, третья – . К правки лежали в ветке sched/core дерева tip, а в основную ветку попали уже в окне слияния Linux 7.3, которое открылось после выхода Linux 7.2 .

Вместе с плоским выбором в планировщик 7.3 приняли и другие изменения: снижение задержки для задач с коротким квантом, исправление кластерного балансирования на гибридных процессорах Intel и предпочтение полностью свободных ядер при балансировке в режиме NOHZ. Разбор всего набора опубликован на Phoronix.

Первый кандидат в выпуски ожидается , стабильный Linux 7.3 – во второй половине октября. Раньше остальных правки достанутся тем, кто собирает ядро из основной ветки: в проекте CachyOS сообщили, что перенесут изменения к себе, но сроков не назвали.

Заключение

При плоском выборе задачи промежуточные уровни иерархии перестают мешать планировщику видеть, кто из процессов действительно готов работать, а в режиме concur вес между контрольными группами распределяется точнее. Выигрыш заметнее там, где под нагрузкой конкурируют десятки процессов из разных групп: фоновая сборка, браузер с десятком вкладок и запущенная игра одновременно. Проверять эффект придётся на своей конфигурации – единственное опубликованное измерение снято на одной машине и показывает влияние кванта времени, а не самих правок. Владельцам старых систем разумнее дождаться независимых замеров на готовом Linux 7.3, а не на ветке разработки.

© .
Комментарии и отзывы

Нашли ошибку?

Новое на сайте