TLB

La presentazione dei nuovi processori Intel Core i7 è alle porte. In attesa dei benchmark, iniziamo con il dare un'occhiata all'architettura su cui saranno basati: Nehalem.

Avatar di Andrea Ferrario

a cura di Andrea Ferrario

Editor in Chief

TLB

Per molti anni fino a oggi, i processori non hanno lavorato con indirizzi di memoria fisici, ma virtuali. Tra gli altri vantaggi, quest'approccio permette di allocare più memoria a un programma rispetto a quella che ha il computer, mantenendo i dati necessari in un dato momento nella memoria fisica, con il resto che rimane sull'hard disk. Ciò significa che per ogni accesso di memoria un indirizzo virtuale deve essere tradotto in uno fisico e per fare questo viene creata un enorme tabella per tenere traccia delle corrispondenze. Il problema è che questa tabella diventa così grande che non può essere immagazzinata on-chip - ed è collocata nella memoria principale e può essere persino numerata (parte della tabella può non trovarsi nella memoria e collocata sull'hard disk).

Se questo stadio di traduzione è necessario a ogni accesso di memoria, insorgono problemi di latenza. Perciò, gli ingegneri sono ritornati al principio dell'indirizzamento fisico aggiungendo una piccola cache di memoria direttamente nel processore che immagazzina le corrispondenze per alcuni degli indirizzi recenti usati. Questa memoria cache è chiamata Translation Lookaside Buffer (TLB). Intel ha completamente rivisto le operazioni del TLB nella sua nuova architettura. Fino ad oggi, il Core 2 usava un TLB level 1 estremamente piccolo (16 entries) ma anche molto veloce per soli loads e un più grande TLB level 2 (256 entries) che amministrava e immagazzinava i loads missed nella TLB level 1.

Nehalem ha ora un vero TLB a due livelli: il TLB level 1 è condiviso tra dati e istruzioni. Il TLB level 1 data immagazzina 64 entries per small pages (chiamate - 4K) o 32 per large pages (2M/4M), mentre il TLB level 1 instruction immagazzina 128 entries per small pages (come il Core 2) e sette per large pages. Il secondo livello è una cache unificata che può immagazzinare fino a 512 entries e opera solo con small pages. L'intento di questo miglioramento è incrementare le prestazioni delle applicazioni che usano grandi set di dati. Come con l'introduzione dei branch predictors a due livelli, questa è un'altra evidenza di un'architettura con un orientamento server.

Torniamo a SMT per un momento, poiché anch'esso ha un impatto sui TLB. Il TLB level 1 data e il TLB level 2 sono condivisi dinamicamente tra due thread. Al contrario, il TLB level 1 instruction è staticamente condiviso per small pages, laddove quello dedicato alle large pages è interamente replicato - questo è concepibile date le dimensioni ridotte (sette entrate per thread).