Linux 6.15 поставляется с неприятной ошибкой в работе некоторых систем

Ядро Linux 6.15, выпущенное в качестве стабильной версии на прошлой неделе, по ошибке содержало неприятный регресс энергопотребления процессора для некоторых систем. Эта проблема теперь устранена в Linux 6.16 Git и будет устранена в ближайшее время в точечных выпусках Linux 6.15.

В дополнение к некоторым более ранним проблемам с производительностью в Linux 6.15, которые в конечном итоге были устранены для стабильной версии, поздняя проблема с Linux 6.15 привела к значительному снижению производительности процессора. Эта проблема присутствует в Linux 6.15, но должна быть устранена к следующему выпуску Linux 6.15.

Инженер Intel и разработчик подсистемы управления питанием Рафаэль Высоцки также занимался устранением этого регрессионного сбоя. Он объяснил откат, который был внесён в Linux 6.16 Git в конце недели:

Отменить коммит 96040f7273e2 («x86/smp: исключить mwait_play_dead_cpuid_hint()»), поскольку он привёл к значительному снижению производительности в системах, которые запускаются с «nosmt» в командной строке ядра.

А именно, в таких системах младшие братья и сёстры SMT постоянно отключаются на раннем этапе, когда cpuidle ещё не инициализирован, поэтому после описанного выше коммита для них вызывается hlt_play_dead(). Позже, когда процессор пытается перейти в глубокое состояние C, включая PC10, необходимое для достижения минимального энергопотребления в режиме ожидания, он не может этого сделать из-за того, что младшие братья и сёстры SMT остаются в C1 (в который их поместил HLT).

В результате в этих системах довольно резко возрастает энергопотребление в режиме ожидания (включая переход из режима ожидания в режим ожидания) со всеми вытекающими последствиями, которых (излишне говорить) пользователи могут не ожидать.

Эту проблему сложно отладить, и она потенциально опасна, поэтому её необходимо решить как можно скорее таким образом, чтобы это работало в версии 6.15.y, отсюда и возврат к предыдущей версии.

Конечно, после этого возврата проблема, которую пытался решить коммит 96040f7273e2, вернётся, и её нужно будет исправить позже.

Регрессия была вызвана x86/smp: устранением mwait_play_dead_cpuid_hint(), которое было добавлено в Linux 6.16 Git. Это первоначальное исправление было направлено на решение проблемы, затрагивающей как минимум Intel Xeon 6 «Sierra Forest» C-состояния.

В запросе на исправление управления питанием, который привел к откату, Рафаэль охарактеризовал это как «неприятную проблему с питанием в некоторых системах». В этом запросе на исправление также были добавлены новые абстракции Rust для CPUFreq, OPP, CLK и Cpumasks, которые позволят в будущем писать больше кода для управления питанием Linux на языке программирования Rust.


🔄 Автоматический перевод источника: www.phoronix.com.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *