Codice ACPI obsoleto di Linux rallenta ancora le moderne CPU AMD

Un ingegnere AMD, che ha scoperto il guaio, ha già presentato una patch che risolverà il problema la prossima settimana.

Avatar di Gabriele Giumento

a cura di Gabriele Giumento

Un ingegnere di AMD ha da poco scoperto un bug Linux, causato da una patch risalente a ben 20 anni fa, che provoca il rallentamento delle moderne CPU Ryzen basate sull'architettura Zen. L'inconveniente è causato, nello specifico, dal codice relativo al supporto ACPI (Advanced Configuration and Power Interface) aggiunto al kernel Linux nel 2002. Quello che in sostanza succede è la lettura di dati senza alcuno scopo, ritardando l'istruzione successiva fino a quando la CPU non si arresta completamente tramite il comando STPCLK#. Questo tipo di soluzione era utile a ottimizzare il risparmio energetico nei primi anni dell'introduzione dell'ACPI con l'hardware dell'epoca, ma penalizza adesso le moderne architetture, come nel caso dei processori Zen.

Come riportato dall'ingegnere, la CPU viene particolarmente penalizzata in specifici carichi di lavoro. I test svolti con IBS (Instruction Base Sampling) mostrano che una quantità significativa di prestazioni viene persa durante l'operazione di attesa causata dal supporto ACPI datato, la quale viene erroneamente categorizzata come "C-State Residency". Il basso carico di lavoro dell'operazione può quindi spingere la CPU in modalità C-State più profonde, ritardando la riattivazione di quest'ultima. Il problema si accentua in quei carichi di lavoro dove il processore passa repentinamente da uno stato idle all'essere attivo e viceversa.

L'ingegnere AMD ha già presentato una patch correttiva che risolve il problema al volo. I benefici sono ovviamente immediati: in un test eseguito su un sistema dual-socket Zen 3 con modalità C2 State disabilitata, i throughput minimi e medi sono rispettivamente saliti del 1,390% e del 51%, il che da l'idea delle performance perse a causa del codice datato. Se vi state chiedendo come mai il problema non riguarda anche le CPU Intel, la risposta risiede nel differente uso dell'istruzione MWAIT.

La patch contenente la correzione per le CPU AMD dovrebbe a ogni modo essere pubblicata la prossima settimana, aggiornando così il kernel Linux alla versione 6.0.