Питер Зейлстра (Peter Zijlstra), один из ведущих разработчиков ядра Linux, опубликовал набор патчей под названием «sched: Flatten the pick». Цель инициативы — радикально повысить эффективность планировщика задач CFS, упростив иерархический отбор процессов, который десятилетиями оставался узким местом, особенно на системах с большим числом ядер.
Ключевая проблема, решаемая в патчах, заключается в фрагментации весов контрольных групп (cgroups) на многоядерных процессорах. При масштабировании системы до 64 и более ядер вес каждой задачи в группе может упасть до эквивалента низкоприоритетного процесса, что сводит на нет все преимущества группового распределения ресурсов.
Патчи Зейлстры вводят несколько режимов обработки весов, наиболее перспективным из которых автор считает «concur»: сохраняя многоуровневый учёт нагрузки, хранить все готовые к выполнению процессы в едином плоском списке. Пересчёт эффективного веса каждого процесса производится в трёх ключевых точках: при постановке в очередь, при выборе задачи и на каждом тике.
Эффективность подхода наглядно демонстрирует эксперимент с запуском игры на довольно старой системе: Intel Core i7-2600K в паре с Radeon RX 580. При запуске восьми фоновых процессов, создающих искусственную конкуренцию за процессор, игра Shadows: Awakens становилась практически неиграбельной: минимальный FPS проседал до 3.8 кадров в секунду. Активация изменений планировщика подняла минимальную производительность более чем в пять раз — до 20.6 FPS. Средний FPS вырос с 48 до 57.2, а «время кадра» сократилось почти вдвое (с 34.5 мс до 19.5 мс в среднем), что сделало игровой процесс более комфортным.
Если патчи будут приняты в основную ветку, они могут появиться в одном из ближайших релизов ядра Linux, обеспечив прирост отзывчивости на широком спектре оборудования — от устаревших систем до многопроцессорных серверов.
