Ciao Mondo 3!

AMD Llano A-series: Analisi dell'architettura - Architettura delle cache

Indice articoli


Architettura delle cache

I core Llano sono dotati di una cache L1 istruzioni, una cache L1 dati e di una cache L2 unificata. E’ stata eliminata la cache L3, rispetto ad alcuni dei core Stars, quindi la struttura della cache ricalca il core Propus. Questo può far perdere qualche punto percentuale in prestazioni, su applicazioni avide di memoria, ma come vedremo più avanti, le migliorie al core, alla cache L2 e al controller di memoria, abbinato a memorie più veloci, compensano in molti casi tale mancanza.

Il motivo della eliminazione della cache L3 è per una questione di risparmio energetico, oltre al risparmio di spazio. L’architettura a cache esclusiva delle CPU AMD implica che quando si deve cercare un dato, esso deve essere cercato nella cache L3 e in tutte le altre cache della CPU. Ma con lo stato di risparmio energetico C6, è possibile che queste debbano essere svegliate, rendendo il tutto molto lento, complicato e dispendioso. In sostanza l’implementazione dello stato C6 sarebbe stata inefficiente con una cache L3.

Un’altra differenza tra le cache di Llano e dei core Stars è che la cache L1 dati è del tipo ad 8 transistor in Llano, contro i 6 della precedente generazione. Le cache ad 8 transistor aumentano, come è intuibile, lo spazio occupato dalle celle, ma consentono una maggiore velocità, una maggiore affidabilità, una minore tensione e quindi un minor consumo.

 

Cache L1 istruzioni

La cache istruzioni ha dimensioni di 64KB ed è set-associativa a due vie, con linee da 64 byte ognuna. Tale unità si occupa di caricare le istruzioni, effettuarne il prefetching, il pre-decoding, per determinare la fine di una istruzione e l’inizio dell’altra e mantenere le informazioni per il branch prediction.

I dati non presenti in cache sono richiesti alla cache L2 o alla memoria di sistema. In tal caso la cache esegue richieste per due linee di 64 byte naturalmente allineate e consecutive, effettuando in tal modo un prefetch delle istruzioni eventualmente successive, dato che tipicamente il codice presenta località spaziale.

Le linee della cache sono rimpiazzate con l’algoritmo LRU (Least Recently Used, usati meno di recente).

Durante questi riempimenti della cache, le informazioni di pre-decoding, che determinano i confini delle istruzioni, sono generate e memorizzate con le istruzioni in appositi bit. Questo per poter più efficientemente decodificare le istruzioni a valle nel decoder. La cache è protetta solo da bit di parità.

 

Cache L1 dati

La cache dati ha dimensioni di 64KB ed è set-associativa a due vie, con linee da 64 byte ognuna e con due porte a 128 bit. E’ gestita con la politica del write-allocate (ossia quando si scrive un dato, esso viene conservato in ogni caso nella cache L1) e del write-back (ossia il dato è scritto fisicamente nei livelli inferiori, come cache L2 o memoria RAM, solo quando deve essere eliminato dalla cache).

Le linee della cache sono rimpiazzate con l’algoritmo LRU.

E’ divisa in 8 banchi ognuno di 16 byte. Due accessi nelle due porte sono possibili contemporaneamente solo se sono indirizzati a banchi diversi. La cache supporta il protocollo di coerenza MOESI (Modified, Owner, Exclusive, Shared, and Invalid) e la protezione ECC. Ha un prefetcher che carica in anticipo i dati per evitare miss ed ha una latenza di 3 cicli di clock.

 

Cache L2

La cache L2 è integrata on die, procede alla stessa frequenza della CPU e ce n’è una per ogni core. Inoltre è una cache con architettura esclusiva: la cache contiene solo linee modificate provenienti dalla L1 che devono essere scritte in RAM e che sono state designate dall’algoritmo LRU per essere eliminate dalla cache L1, perché devono essere rimpiazzate da dati più nuovi. Tali linee sono dette victim (vittime).

La latenza della cache L2 è di 9 cicli di clock in aggiunta a quella della cache L1. In Llano la cache L2 è da 1MB a 16 vie, contro i 512KB a 8 vie della maggior parte dei core Stars (solo il dual core Regor ha cache da 1MB). La cache L2 è protetta con il codice di protezione errore ECC.

Translation-Lookaside Buffer

Il translation-lookaside buffer (TLB) mantiene le più recenti informazioni di traduzione di indirizzi virtuali utilizzate e perciò ne accelera il calcolo.

Ogni accesso in memoria passa per varie fasi. La prima fase è l’indirizzamento. Una istruzione specifica una modalità di indirizzamento che non è altro il procedimento di calcolo per trovare l’indirizzo (lineare anche detto virtuale) di un determinato dato.

Esistono vari metodi di indirizzamento. Il più semplice è l’immediato, in cui il dato è contenuto nell’istruzione stessa. In tal caso non è necessario accedere ulteriormente in memoria. Poi esiste il diretto, in cui nella istruzione è specificato l’indirizzo assoluto del dato. Esistono altri tipi di indirizzamento (indiretto, indicizzato, con offset eccetera) e altre peculiarità della architettura x86-64 (la segmentazione), che richiedono il calcolo, più o meno complicato, dell’indirizzo finale (in genere effettuato nelle AGU, descritte più avanti), ma il risultato finale è un indirizzo lineare o virtuale.

Se la memoria virtuale è abilitata (e nei moderni sistemi operativi lo è sempre), tale indirizzo virtuale deve essere tradotto in un indirizzo fisico. E’ qui che entrano in gioco i TLB. La traduzione dell’indirizzo comporta la divisione dello spazio di indirizzamento in pagine di 4KB (anche se la CPU supporta pagine di 4KB, 2MB, 4MB e 1GB) dove per ognuna sono memorizzate le informazioni di protezione e di posizione fisica dei dati.

Per ogni processo esiste perciò una tabella di pagine, organizzata come un albero a più livelli. Per ogni accesso in memoria si dovrebbe accedere e scorrere tale albero, accedendo alla RAM. Senza i TLB sarebbe un processo molto lento. Invece i TLB fanno da cache alle ultime informazioni di traduzione usate.

Llano usa una struttura di TLB a 2 livelli.

 

TLB istruzioni di Livello 1

Il TLB istruzioni L1 è completamente associativo, con spazio per 32 traduzioni di pagine da 4KB e 16 per pagine di 2MB. Pagine di 4MB richiedono 2 locazioni da 2MB.

 

TLB dati di Livello 1

Il TLB dati L1 è completamente associativo, con spazio per 48 traduzioni di pagine da 4KB, 2MB, 4MB e 1GB. Pagine di 4MB richiedono 2 locazioni da 2MB.

 

TLB istruzioni di Livello 2

Il TLB istruzioni L2 è associativo a 4 vie, con spazio per 512 traduzioni di pagine da 4KB.

 

TLB dati di Livello 2

Il TLB dati L2 ha spazio per 1024 traduzioni di pagine da 4KB (contro le 512 dei core Stars: questo comporta una maggiore probabilità di trovare la traduzione in cache e la possibilità di gestire il doppio della memoria a parità di prestazioni), associativo a 4 vie, 128 traduzioni da 2MB, associativo a 2 vie e 16 traduzioni da 1GB, associativo a 8 vie. Pagine di 4MB richiedono 2 locazioni da 2MB.

Pubblicità


Corsair

Articoli Correlati - Sponsored Ads