У ядрі 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

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