Ещё одна захватывающая функция, которая, как ожидается, будет добавлена в предстоящий цикл Linux 6.13, — это модель отложенного вытеснения.
Патчи для внедрения режима «ленивого вытеснения» PREEMPT_LAZY были вчера добавлены в ветку «sched/core» Git в tip/tip.git. Поскольку патчи для «ленивого вытеснения» проходят проверку в ветке TIP, они должны быть представлены для слияния в Linux 6.13, которое откроется в конце этого месяца.
Разработчик Linux Питер Зейлстра объясняет в патче, добавляющем модель отложенного вытеснения:
“sched: добавить модель отложенного вытеснения
Измените функцию fair на resched_curr_lazy(), которая при выборе модели отложенного вытеснения устанавливает TIF_NEED_RESCHED_LAZY.
Этот бит LAZY будет преобразован в полный бит NEED_RESCHED при тике. Таким образом, средняя задержка между установкой LAZY и фактической перепланировкой составит TICK_NSEC/2.
Короче говоря, отложенное вытеснение будет задерживать вытеснение для справедливого класса, но будет работать как полное вытеснение для всех остальных классов, особенно для классов реального времени (RR/FIFO/DEADLINE).
Цель состоит в том, чтобы сократить разрыв в производительности с помощью Voluntary, чтобы в конечном итоге мы могли полностью отказаться от этой опции.
Опция Kconfig для включения этой новой опции — PREEMPT_LAZY. Текст Kconfig PREEMPT_LAZY описывает этот новый режим вытеснения следующим образом:
«Эта опция обеспечивает модель вытеснения, управляемую планировщиком, которая по своей сути аналогична полному вытеснению, но с меньшей вероятностью вытесняет задачи SCHED_NORMAL в попытке уменьшить вытеснение задач, удерживающих блокировку, и восстановить часть прироста производительности, наблюдаемого при использовании добровольного вытеснения.»
Когда Питер отправлял патч в список рассылки, у него также был патч, представляющий режим «ленивого» вытеснения, но он не был включён в sched/core, а предназначался для более надёжного пути «ленивого» вытеснения.
Патчи позволяют включить PREEMPT_LAZY для архитектур x86/x86_64 и RISC-V. Это дополнение PREEMPT_LAZY появилось всего через один выпуск ядра после того, как PREEMPT_RT в реальном времени наконец-то стало основной функцией в Linux 6.12.