Новый планировщик задач для ОС Linux способен ускорить работу системы вдвое

Техника Открытое ПО
, Текст: Дмитрий Степанов
Для Linux разрабатывают новый планировщик задач Nest, который ускоряет работу системы в среднем на 10-100% при небольших нагрузках. Nest не пытается «размазать» задачи по всем ядрам процессора, вместо этого отбирая из них небольшое количество наиболее разогнанных в данный момент на роль приоритетных и не давая им «остыть» в дальнейшем.

Новый планировщик для Linux

Ядро Linux в будущем может обзавестись новым планировщиком задач. Экспериментальная программная разработка под названием Nest была представлена на конференции Linux Plumbers 2022, которая проходит в Дублине (Ирландия), пишет Phoronix.

Разработкой Nest занимается Джулия Лаваль (Julia Lawall) и ее коллеги из Национального института исследований в информатике и автоматике (INRIA, Франция). Также в проекте принимает участие Oracle Labs (ранее – Sun Microsystems Labs) – исследовательское подразделение американской корпорации Oracle.

Планировщик задач (process scheduler) – это компонент многозадачной операционной системы, обеспечивающий распределение процессорного времени между запущенными процессами (потоками, программами) по заранее заданному алгоритму.

linuks600.jpg
Linux может стать быстрее на 10-100% в определенных сценариях с планировщиком Nest

Ключевой особенностью Nest является его стремление приоритизировать «разогретые», то есть недавно (по меркам планировщика) использовавшиеся ядра центрального процессора. Такие ядра, как отмечает Phoronix, вероятно, уже работают на высокой тактовой частоте (в режиме Turbo/Boost), поэтому нет нужды тратить лишнее время на ожидание их «пробуждение» и наращивание частоты.

Благодаря такому подходу достигается повышение отзывчивости системы и, по оценке разработчиков, производительность в определенных сценариях при использовании Nest с ядром Linux 5.9 возрастает на 10-100%, сокращается энергопотребление.

Есть нюансы

Однако стоит иметь в виду, что подобные результаты могут быть достигнуты только на малых и средних вычислительных нагрузках, когда имеется возможность выжимать максимум (по тактовой частоте) из небольшого количества активных ядер при неактивности остальных. При полной же загрузке процессора работой данный подход не имеет смысла.

Производительность различного ПО при использовании Nest и «чистого» CFS

Разработчики отмечают, что Nest хорошо себя показывает при работе на Linux-серверах на базе современных процессоров Intel (в одно-, двух-, и четырехпроцессорных конфигурациях), а также на AMD-серверах и десктопах.

Кроме того, подчеркивается, что влияние планировщика на производительность зависит в том числе от подхода к управлению питанием, принятого в целевых ОС и «железе».

Принцип работы Nest

Текущим планировщиком задач в Linux по умолчанию с 2007 г. является CFS (Completely fair scheduler). Алгоритм построении очереди процессов в CFS построен на основе механизма взвешенной справделивой очереди (Weighted fair queuing). Если же говорить о подходе к распределению нагрузки, то CFS стремится задействовать все доступные ядра процессора, что вполне рационально при высоких нагрузках.

Nest, хоть, судя по документации, и работает «поверх» CFS, в этом отношении действует принципиально иначе. Планировщик отслеживает активность ядер процессора (или процессоров) и распределяет их по двум кластерам или в терминологии разработчиков – гнездам: основному (primary nest) и резервному (reserve nest). В первый попадают используемые в данный момент или использованные недавно ядра, которые, как ожидает планировщик, пригодятся в самое ближайшее время – те самые «разогретые» ядра. Во второй – ядра, ранее пребывавшие в основном гнезде, но выброшенные оттуда в силу собственной невостребованности в течение некоторого времени. Кроме того, в резерве могут оказаться ядра, отобранные CFS, но пока не пригодившиеся в основном гнезде.

Состав гнезд изменяется автоматически в зависимости от условий. К примеру, если имеющиеся в primary nest не могут справиться с текущим уровнем нагрузки или сделать это эффективно, то на подмогу будут направлены ядра из резерва.

Nest может периодически обращаться к незадействованным ядрам из основного гнезда, чтобы те не «засыпали».

Примечательно, что нечто подобное реализовано в Windows 10 и 11: при наличии процессора AMD Ryzen собственный планировщик ОС Microsoft стремится отдать приоритет конкретным физических ядрам при сравнительно невысокой нагрузке, отмечает Tom’s Hardware. Однако, судя по документации к Nest, новый Linux-планировщик отличается большей гибкостью.

Linux и Alder Lake

До выхода версии 5.18 Linux не самым оптимальным образом использовал новейшие гибридными процессорами Intel семейства Alder Lake (12 поколение).

Ключевой особенностью процессоров этого семейства, представленных в конце октября 2021 г., является разделение входящих в их состав ядер на производительные (архитектура Golden Cove) и энергоэффективные (Gracemont).

По задумке разработчиков, быстрые производительные ядра должны заниматься решением наиболее приоритетных задач, а энергоэффективные, но медленные – обслуживать фоновые процессы. За реализацию данной схемы ответственна технология Intel Thread Director, которая использует интерфейс Hardware Feedback Interface (HFI) для обмена сведениями о производительности отдельных ядер, поддержка которого появилась только в Linux 5.18, в мае 2022 г. Как писал CNews, в ее отсутствие планировщик задач Linux нередко отдавал предпочтение быстрым ядрам, оставляя энергоэффективные без какой-либо полезной нагрузки.