В ядрото на Linux 6.0, чийто релиз се очаква в следния понеделник, беше прието изменение, което решава проблемите с производителността на системите с AMD Zen процесори. Източникът на спада в производителността се оказа код, добавен преди 20 години, за да заобиколи хардуерен проблем в някои чипсети. Хардуерният проблем отдавна е отстранен и не се проявява в актуалните чипсети, но старият обходен метод беше забравен и стана източник на намалена производителност в системи, базирани на съвременни AMD CPU. Новите системи с Intel CPU не засягат стария обходен маневр, тъй като достъпът до ACPI се осъществява чрез отделен драйвер intel_idle, а не чрез общ драйвер processor_idle.
Обходният маневр беше добавен в ядрото през март 2002 г. за блокиране на проявата на грешка в чипсетите, свързана с липсата на адекватна настройка на състояние на покой (idle) поради забавяне на обработката на сигнала STPCLK#. За заобикаляне на проблема в реализацията на ACPI беше добавена допълнителна инструкция WAIT, която забавя процесора, за да може чипсетът да премине в състояние на покой. При профилиране с помощта на инструкции IBS (Instruction-Based Sampling) на AMD Zen3 процесорите беше установено, че процесорът прекарва значително време, изпълнявайки заглушка, която води до неправилна интерпретация на натоварването на процесора и настройката на по-дълбоки режими на сън (C-State) от cpuidle обработчика.
Такова поведение се отразява в намаляване на производителността при натоварвания, при които често се редуват състояния на покой (idle) и активност (busy). Например, при използване на пач, който деактивира обходния маневр, средните стойности от теста tbench нарастват от 32191 MB/s до 33805 MB/s.
Източник: opennet.ru
