Linux kernel 6.0, čije se izdanje očekuje sljedeći ponedjeljak, uključuje promjenu koja rješava probleme s performansama AMD Zen procesora. Izvor pada performansi bio je kod dodan prije 20 godina kako bi se zaobišao hardverski problem u nekim čipsetovima. Hardverski problem je odavno riješen i više se ne pojavljuje u trenutnim čipsetovima, ali staro rješenje je napušteno i postalo je izvor degradacije performansi na sustavima temeljenim na modernim AMD CPU-ima. Noviji sustavi s Intel CPU-ima nisu pogođeni starim rješenjem jer pristupaju ACPI-ju pomoću zasebnog upravljačkog programa intel_idle, a ne dijeljenog upravljačkog programa processor_idle.
U ožujku 2002. u kernel je dodano zaobilazno rješenje kako bi se spriječila greška u čipsetima povezana s neispravnim postavljanjem stanja mirovanja zbog kašnjenja u obradi signala STPCLK#. Kako bi se zaobišao ovaj problem, u ACPI implementaciju dodana je dodatna WAIT instrukcija, usporavajući procesor kako bi čipset mogao ući u stanje mirovanja. Profiliranje korištenjem instrukcija Instruction-Based Sampling (IBS) na AMD Zen3 procesorima otkrilo je da procesor troši značajno vrijeme izvršavajući stub, što dovodi do netočne interpretacije opterećenja procesora i postavljanja dubljih stanja mirovanja (C-States) od strane cpuidle handlera.
Ovo se ponašanje odražava u padu performansi pod opterećenjima koja se često izmjenjuju između stanja mirovanja i zauzetosti. Na primjer, kada se koristi zakrpa koja onemogućuje zaobilazno rješenje, prosječni rezultati tbench testa povećavaju se s 32191 MB/s na 33805 MB/s.
Izvor: opennet.ru
