У ядрі Linux знайдено забуту лату, що впливає на продуктивність CPU AMD

У ядро ​​Linux 6.0, реліз якого очікується наступного понеділка, прийнято зміну, яка вирішує проблеми з продуктивністю систем на процесорах AMD Zen. Джерелом падіння продуктивності виявився код, доданий 20 років тому для обходу апаратної проблеми в деяких чіпсетах. Апаратна проблема давно усунена і не виявляється в актуальних чіпсетах, але старий обхід проблеми був забутий і став джерелом зниження продуктивності на системах на базі сучасних CPU AMD. Нові системи на CPU Intel старий обхідний маневр не торкається, тому що в них доступ до 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

Додати коментар або відгук