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

Дадаць каментар