|
||
| Pubblicato il: 22.04.2008 | A cura di: Francesco Fortino |
L’introduzione delle cpu Quad-core di AMD è stata accolta con incertezza dal mercato: dopo i primi ritardi dell’iniziale programmazione, il core Agena – cuore dei nuovi microprocessori – ha ricevuto un duro colpo a causa dell’incredibile pubblicità negativa ottenuta per il tristemente noto TLB bug.

Acronimo di Traslation Lookaside Buffer, si tratta di un buffer – ovvero un piccolo quantitativo di memoria tampone – controllato dall’unità di gestione della memoria. Al suo interno memorizza le ultime corrispondenze dirette fra indirizzi virtuali (ad esempio quelli usati dai processi e non riferibili ad un unità fisica) e indirizzi fisici (ovvero corrispondenti ad una relativa unità fisica, come può essere la cache o la ram): lo scopo è ridurre le latenze per evitare di dover ricorrere a dati presenti nella memoria di sistema ottimizzando la traduzione degli indirizzi virtuali in fisici. Nel caso ci sia un TLB hit, ovvero i dati richiesti erano disponibili nel TLB, allora questi saranno immediatamente disponibili. Nel caso ci sia un TLB miss, invece, sarà necessario accedere alla page table all’interno della cache L2 e caricare il dato nel TLB.
Le page table sono strutture di dati particolari: ogni volta che viene modificato un dato all’interno della page table, è necessario scrivere alcuni bit (tag) che ne segnalano lo stato e avvisano delle modifiche effettuate. Ecco il problema.Nelle cpu AMD Phenom della serie 9x00 (stepping BA e B2) i dati presenti nella page table potrebbero essere copiati nella cache L3 con flag di stato diversi. Questo avviene unicamente in particolari condizioni: quando cioè un processo tenta di modificare i flag di stato nella page table all’interno della cache L2 mentre un altro processo cerca di spostare lo stesso dato nella cache L3. In questo caso il dato presente nella cache L3 condivisa sarà disponibile per gli altri core della cpu con informazioni errate, generando di conseguenza dati corrotti.
E’ in realtà una condizione estremamente rara e, ad oggi, non si hanno notizie di system fault causati da questo bug se non cercando di riprodurre le condizione necessarie alla sua apparizione. A dir la verità, ogni cpu nasce con una certo numero di errori hardware che vengono poi corretti nel corso della sua vita, ma questo bug specifico interessa un mondo particolarmente sensibile a problematiche del genere: quello dei server, dove freeze inaspettati del sistema e corruzione di dati non sono tollerabili.
Il workaround inserito nei BIOS a seguito dell’uscita di Phenom opera in modo piuttosto diretto disabilitando completamente l’accesso alla cache L2 da parte del TLB: in questo modo diventa necessario accedere alla cache L3 o, all’occorrenza, alla memoria di sistema, di modo che vengano aggiornati correttamente i tag relativi. Questo porta, ovviamente, ad aumentare le latenze medie verso la memoria ed influisce negativamente sull’efficienza complessiva del memory controller.

Il nuovo step B3, identificato dalle cpu siglate 9x50, risolve il problema grazie ad alcune modifiche apportate all’algoritmo di funzionamento del TLB: ogni qualvolta venga modificato un dato nella page table presente all’interno della cache L2, questo verrà copiato automaticamente nella cache L3. L’operazione richiede comunque risorse aggiuntive, ma la perdita in performance è assolutamente ininfluente se confrontata al workaround via BIOS.
AMD, da parte sua, non ha rilasciato informazioni più specifiche, affermando unicamente che le prestazioni delle nuove cpu sono allineate a quelle dei Phenom 9600 quando entrambe si trovano a parità di frequenza: ecco un’attenta analisi.