W jądrze Linuksa odnaleziono zapomnianą łatkę wpływającą na wydajność procesorów AMD

Jądro Linuksa 6.0, które ma zostać wydane w przyszły poniedziałek, zawiera zmianę rozwiązującą problemy z wydajnością w systemach działających na procesorach AMD Zen. Stwierdzono, że źródłem spadku wydajności był kod dodany 20 lat temu w celu obejścia problemu sprzętowego w niektórych chipsetach. Problem sprzętowy został już dawno rozwiązany i nie pojawia się w obecnych chipsetach, ale stare obejście problemu zostało zapomniane i stało się źródłem degradacji wydajności w systemach opartych na nowoczesnych procesorach AMD. Stare obejście nie ma wpływu na nowe systemy wyposażone w procesory Intel, ponieważ uzyskują one dostęp do interfejsu ACPI za pomocą osobnego sterownika intel_idle, a nie ogólnego sterownika Processor_idle.

W marcu 2002 roku do jądra dodano obejście mające na celu zablokowanie pojawiania się błędu w chipsetach związanego z nieprawidłowym ustawieniem stanu bezczynności z powodu opóźnienia w przetwarzaniu sygnału STPCLK#. Aby obejść ten problem, implementacja ACPI dodała dodatkową instrukcję WAIT, która spowalnia procesor, dzięki czemu chipset ma czas na przejście w stan bezczynności. Podczas profilowania przy użyciu instrukcji IBS (Instruction-Based Sampling) na procesorach AMD Zen3 odkryto, że procesor spędza znaczną ilość czasu na wykonywaniu kodów pośredniczących, co prowadzi do błędnej interpretacji stanu obciążenia procesora i ustawiania głębszych trybów uśpienia (C- State) przez procesor cpuidle.

To zachowanie znajduje odzwierciedlenie w zmniejszonej wydajności w przypadku obciążeń, które często zmieniają się między stanami bezczynności i zajętości. Na przykład, w przypadku korzystania z łatki wyłączającej manewr obejścia, średnie wyniki testów na stole testowym wzrastają z 32191 MB/s do 33805 MB/s.

Źródło: opennet.ru

Dodaj komentarz