Nel kernel Linux 6.0, il cui rilascio è previsto per lunedì prossimo, è stata adottata una modifica che risolve i problemi di prestazioni sui sistemi con processori AMD Zen. La causa del calo delle prestazioni si è rivelata essere un codice aggiunto 20 anni fa per aggirare un problema hardware in alcuni chipset. Questo problema hardware è stato risolto da tempo e non si manifesta nei chipset attuali, ma il vecchio lavoro di aggiramento è stato dimenticato ed è diventato una fonte di riduzione delle prestazioni nei sistemi basati su moderni CPU AMD. I nuovi sistemi con CPU Intel non sono colpiti dal vecchio lavoro di aggiramento, poiché accedono a ACPI tramite un driver separato intel_idle, anziché tramite il driver generale processor_idle.
Il lavoro di aggiramento è stato aggiunto al kernel nel marzo 2002 per bloccare l'emergere di un errore nei chipset, legato alla mancanza di un corretto stato di inattività (idle) a causa del ritardo nell'elaborazione del segnale STPCLK#. Per aggirare il problema nella realizzazione di ACPI, veniva aggiunta un'istruzione supplementare WAIT, che rallentava il processore affinché il chipset potesse passare allo stato di inattività. Durante la profilatura usando istruzioni IBS (Instruction-Based Sampling) sui processori AMD Zen3, è stato riscontrato che il processore trascorreva un tempo significativo eseguendo uno stallo, che portava a un'interpretazione errata dello stato di carico sul processore e all'assegnazione di modalità di sonno più profonde (C-State) dal gestore cpuidle.
Questo comportamento si riflette in una riduzione delle prestazioni sotto carichi in cui gli stati di inattività (idle) e attività (busy) si alternano frequentemente. Ad esempio, utilizzando una patch che disabilita il lavoro di aggiramento, i valori medi del benchmark tbench aumentano da 32191 MB/s a 33805 MB/s.
Fonte: opennet.ru
