Glömd patch hittades i Linux-kärnan som påverkar AMD CPU-prestanda

Linux 6.0-kärnan, som förväntas släppas nästa måndag, innehåller en förändring som tar itu med prestandaproblem med system som körs på AMD Zen-processorer. Källan till prestandafallet visade sig vara kod som lades till för 20 år sedan för att lösa ett hårdvaruproblem i vissa styrkretsar. Hårdvaruproblemet har länge åtgärdats och förekommer inte i nuvarande styrkretsar, men den gamla lösningen för problemet har glömts bort och har blivit en källa till prestandaförsämring på system baserade på moderna AMD-processorer. Nya system på Intel-processorer påverkas inte av den gamla lösningen, eftersom de kommer åt ACPI med en separat intel_idle-drivrutin och inte den allmänna processor_idle-drivrutinen.

En lösning lades till i kärnan i mars 2002 för att blockera uppkomsten av en bugg i chipset som är förknippad med att inte ställa in viloläget korrekt på grund av en fördröjning i behandlingen av STPCLK#-signalen. För att komma runt problemet lade ACPI-implementeringen till ytterligare en WAIT-instruktion, som saktar ner processorn så att chipsetet hinner gå in i viloläge. Vid profilering med IBS-instruktioner (Instruction-Based Sampling) på AMD Zen3-processorer upptäcktes att processorn spenderar en betydande tid på att exekvera stubbar, vilket leder till en felaktig tolkning av processorns belastningstillstånd och inställning av djupare vilolägen (C- State) av processorns cpuidle.

Detta beteende återspeglas i minskad prestanda under arbetsbelastningar som ofta växlar mellan viloläge och upptaget. Till exempel, när du använder en patch som inaktiverar bypass-manövern, ökar tbench-testgenomsnittet från 32191 MB/s till 33805 MB/s.

Källa: opennet.ru

Lägg en kommentar