Мы через несколько дней после выхода стабильной версии Linux 6.10, версию, которая будет включать в себя ряд весьма интересных изменений, а также значительные улучшения с точки зрения поддержки устройств, функций и многого другого.
Со временем мы поговорим об этом выпуске, поскольку цель этой статьи связана со следующей ожидаемой версией Linux, то есть «Linux 6.11», в выпуске которой были объявлены некоторые изменения, о которых я упоминаю. достаточно времени, я хотел бы обратиться к ним в другом посте.
Хорошо, теперь перейдем к сути статьи, которая находится в ссылка на объявление Линуса Торвальдса о своем желании включить в ядро Linux 6.11 некоторые патчи, реализующие механизм «sched_ext» (SCX).
Этот механизмили предназначен для использования eBPF для создания планировщиков ЦП в ядре Linux. Вот краткое описание того, как это будет работать:
- Программисты eBPF и CPU: С помощью eBPF планировщики ЦП можно динамически загружать и выполнять в ядре Linux. Компиляция Just-In-Time (JIT) преобразует байт-код eBPF в машинные инструкции для выполнения.
- Класс SCHED_EXT: Это новый класс программирования, приоритет вызова ядра которого находится среди классов SCHED_IDLE и SCHED_NORMAL. Драйверы BPF, связанные с SCHED_EXT может обрабатывать задачи, которые имеют более низкий приоритет, чем выполнение в реальном времени, не затрагивая задачи, уже прикрепленные к обычному планировщику SCHED_NORMAL.
- Операция: Драйверы BPF анализируют очереди задач, ожидающих выполнения на ЦП, и выбирают, какую задачу назначить, когда ядро ЦП освобождается. Если на компьютере нет активных драйверов BPF SCHED_EXT, задачи решаются с помощью планировщика SCHED_НОРМАЛЬНЫЙ.
- Преимущества: Механизм sched_ext облегчает динамическое экспериментирование с различными методами и стратегиями программирования. Это позволяет быстро создавать функциональные прототипы программистов и заменять их на лету в производственных средах. Например, его можно настроить в соответствии с конкретными характеристиками приложения и изменить стратегию планирования в зависимости от состояния системы и других факторов.
Стоит отметить, что «sched_ext» изначально был предложен на рассмотрение разработчикам ядра в 2022 году., за которым последовал выпуск шести версий патчей. Несмотря на то, что он не поддерживается в основном ядре, Некоторые дистрибутивы, такие как Ubuntu, Arch Linux, Fedora и NixOS, предлагают установку «sched_ext» через дополнительные пакеты.. Canonical рассматривает возможность включения компонентов «sched_ext» в Ubuntu 24.10, и Valve работает над его интеграцией в Steam Deck. В Meta программист на основе «sched_ext» уже используется в производственной инфраструктуре.
Кроме того, упоминается, что в настоящее время около десятка программистов, основанных на "sched_ext", каждый из которых имеет логику планирования задач, определенную в пользовательском пространстве и загружаемую в ядро с помощью программ BPF.
- scx_layered: гибридный планировщик, который делит задачи на уровни, каждый из которых имеет собственную стратегию планирования. Позволяет назначать определенные задачи определенным уровням с гарантированными ресурсами ЦП или повышать приоритет отдельных приложений. Логика пользовательского пространства, разработанная Meta, написана на Rust.
- scx_rustland: оптимизирован для определения приоритета интерактивных задач над задачами, требующими интенсивного использования ЦП. Например, он повышает FPS в игре Terraria при одновременной компиляции ядра по сравнению со стандартным планировщиком EEVDF. Разработан сотрудником Canonical с логикой на Rust.
- scx_lavd: реализует алгоритм LAVD (виртуальный дедлайн с учетом критичности задержки), сокращающий задержку в компьютерных играх и интерактивных задачах, учитывая актуальность сокращения задержек и прогресса процесса. Разработано Igalia и Valve, с логикой на Rust.
- scx_rusty, scx_rlfifo, scx_mitosis: Планировщики, которые балансируют группы задач в зависимости от нагрузки, реализуют простой планировщик FIFO и привязывают группы задач к ядрам ЦП. Все с компонентами Rust.
- scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland: Примеры программистов с компонентами C, демонстрирующие различные возможности «sched_ext».
Наконец, стоит добавить, что Google экспериментирует с использованием собственной платформы ghOSt, чтобы влиять на решения планировщика задач с помощью программ BPF, и начал миграцию ghOSt на sched_ext. Кроме того, Google разрабатывает порт «sched_ext» для ChromeOS.
источник: https://lkml.org