Инго Молнар представил запланированные изменения для ядра Linux 6.0, которое в настоящее время находится в стадии разработки. Большинство из нас ожидало, что версия будет называться 5.20, однако при объявлении о выпуске Linux Kernel 5.19 Линукс Торвальдс заявил, что он начинает беспокоиться о том, что снова запутается из-за больших чисел, и решил назвать следующую версию 6.0. Инго Молнар также назвал новую версию 6.0.
Улучшения балансировки нагрузки
Обновления планировщика ядра для Linux Kernel 6.0 в основном сосредоточены на балансировке нагрузки. Одним из них является балансировка NUMA в системах AMD Zen для аффинных рабочих нагрузок, которая связана с патчем от AMD для дальнейшей настройки планировщика ядра Linux вокруг дисбаланса NUMA в функции «find_idlest_group».
Еще одно изменение планировщика под руководством Intel направлено на более эффективный поиск бездействующих процессоров при большой нагрузке на систему. Некоторые другие изменения включают улучшения обработки ЦП с уменьшенной мощностью при балансировке нагрузки, планировании ядра, балансировке пробуждения, модели энергопотребления и других оптимизациях и исправлениях. Окно слияния Linux Kernel 6.0 все еще открыто, и вы можете просмотреть представленные изменения планировщика в запросе на вытягивание .
Улучшения балансировки нагрузки:
- Улучшите балансировку NUMA в системах AMD Zen для аффинных рабочих нагрузок.
- Улучшите обработку ЦП с уменьшенной мощностью при балансировке нагрузки.
- Усовершенствования модели энергопотребления: исправление и уточнение всех показателей справедливого энергопотребления (PELT) и удаление консервативного порога, требующего 6%-ной экономии энергии для переноса задачи. Это повышает эффективность энергопотребления для большинства рабочих нагрузок, а также повышает надежность планирования энергоэффективности.
- Оптимизируйте/настройте select_idle_cpu(), чтобы тратить (намного) меньше времени на поиск простаивающего процессора в перегруженных системах. Есть отчеты о нескольких миллисекундах, потраченных на большие системы с большими рабочими нагрузками.
- Улучшено поведение дисбаланса NUMA. В некоторых системах с резервной емкостью начальное размещение задач недетерминировано, и такой искусственный дисбаланс размещения может сохраняться в течение длительного времени, снижая (а иногда и помогая) производительность.
- Улучшите планирование ядра, исправив ошибку в sched_core_update_cookie(), которая приводила к ненужному принудительному бездействию.
- Улучшите балансировку пробуждения, разрешив пробуждение бездействующих ЦП с помощью одного и того же LLC для вновь запущенных задач.
- Исправлена новая ошибка балансировки бездействия, приводившая к ненужным задержкам пробуждения.
Улучшения/исправления ABI:
- Не проверяйте возможности и не выдавайте сообщения об отказе в проверке возможностей, если системный вызов планировщика не требует привилегий.
- Также добавьте учет принудительного бездействия в cgroups.
- Исправьте/улучшите RSEQ ABI, чтобы он не просто молча принимал неизвестные флаги.
- Отмените (неиспользуемые) флаги RSEQ_CS_FLAG_NO_RESTART_ON_*.
Оптимизации:
- Оптимизация и упрощение leaf_cfs_rq_list()
- Микрооптимизируйте set_nr_{and_not,if}_polling() с помощью try_cmpxchg().
Разные исправления и очистки:
- Исправьте самотестирование RSEQ в системах RISC-V и Glibc 2.35.
- Исправьте ошибку полного NOHZ, которая в некоторых случаях может привести к тому, что галочка не будет повторно включена, когда последняя задача SCHED_RT исчезнет из очереди выполнения, но все еще есть задачи SCHED_OTHER.
- Различные исправления, связанные с PREEMPT_RT.
- Различные очистки и мелкие исправления.