SMPCache Cos’è? È un simulatore software per l’analisi e lo studio della memoria cache e di altri componenti di un calcolatore. Da chi è stato sviluppato? Miguel A. Vega Rodriguez prof. del Dipartimento di Informatica dell’Università di Extremadura (Spain). e-mail: mavega@unex.es
Utilizzo Principalmente per scopo didattico o di ricerca, è un ottimo strumento che facilita gli studenti alla comprensione dei meccanismi di funzionamento della cache. Ottimo spunto per un progetto di Architettura degli Elaboratori!
Proprietà di SMPCache Compatibile con sistemi Windows 98 e superiori Scritto con un linguaggio visuale Interfaccia grafica con menus, toolbars, statusbar ecc.. Userfriendly Contiene un completo sistema contestuale di help Include una serie di esempi Simula il funzionamento della cache anche su architetture multiprocessore Permette di analizzare tracce di memoria create con linguaggi di programmazione comuni (es. C, Fortran)
Interfaccia grafica di SMPCache
Conoscenze basilari per l’uso Struttura fondamentale di un calcolatore elettronico La memoria cache: funzione; metodi di indirizzamento; algoritmi di sostituzione; politiche di scrittura; principio di località (spaziale e temporale).
Cosa analizza L’analisi effettuata da SMPCache consiste nel fornire all’utente una serie di risultati di alcuni parametri come: numero di accessi in memoria e tipo di accesso (instruction captures, data readings and data writings); numero di accessi in cache; numero operazioni effettuate dalla CPU;
numero di transazioni sul bus; numero dello stato di transazione (ogni blocco in cache ha associato uno stato che specifica come cambia la disposizione di un blocco); numero di cache hits and misses.
Inoltre, SMPCache usando dei dati statistici è capace di estrapolare dei grafici in relazione ai risultati ottenuti, come lo hit rate e il miss rate, cioè la percentuale di successi e fallimenti di ricerca in cache.
La simulazione Un simulatore è un programma che modella il comportamento di un sistema fisico nel corso del tempo. La simulazione, quindi, consiste nella riproduzione di operazioni che devono essere effettuate dalla memoria cache e dagli altri componenti di un sistema reale. Per questo motivo è necessario utilizzare una combinazione di parametri significativa.
Tipi di simulazione Step by step (la simulazione si ferma dopo ogni accesso in memoria) With breakpoint (la simulazione si ferma dopo un numero specifico di accessi in memoria) Complete execution (la simulazione termina quando tutta la traccia di memoria viene esaminata)
Organizzazione hardware Prima di poter effetuare un’analisi è necessario impostare i parametri hardware salvando la configurazione necessaria in un file *.cfg In relazione alle caratteristiche delle memorie e dei processori, SMPCache supporta le seguenti opzioni di parametri:
Architectural characteristics supported by the simulator 16 MB Maximum cache size (excluded labels, block state bits, counts, etc.) 32 GB Maximum main memory size 8 KB Maximum block size To memory words Reference 1 Cache levels in the memory hierarchy Write Back (for cache coherence protocol used) Writing strategies Random, LRU, FIFO or LFU Replacement policies 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, or 2048 Cache sets (for set associative caches) Direct, Set-Associative or Fully-Associative Mapping 1, 2, 4, 8, 16, 32, 64, 128, 256, 1024 or 2048 Blocks in cache 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32728, 65536, 131072, 262144, 524288, 1048576, 2097152 or 4194304 Blocks in main memory 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, or 1024 Words by block 8, 16, 32 or 64 World wide (bits) Random, LRU or LFU Schemes for bus arbitration MSI, MESI OR DRAGON Cache coherence protocols 1, 2, 3, 4, 5, 6, 7, or 8 Processors in SMP Architectural characteristics supported by the simulator
Tracce di memoria Dopo aver configurato il sistema è necessario aprire una traccia di memoria per avviare la simulazione. Oltre a dare all'utente la possibilità di esaminare una propria traccia, SMPCache include una serie di tracce di memoria che rappresentano una grande varietà di programmi applicativi reali. Tali esempi sono stati forniti da Nadeem Malik di IBM. Per informazioni sulla disponibilità di queste ed altre tracce contattare l’indirizzo email: tracebase@nmsu.edu
Name Classification Description Hydro - - - Astrophysics: Hydrodynamic Naiver Stokes equations Nasa7 Fortran A collection of 7 kernels. For each kernel, the program generates its own input data, performs the kernel and compares the result against an expected result Cexp C Portion of a Gnu C compiler that exhibits strong random behaviour Mdljd Solves the equations of motion for a model of 500 atoms interacting through the idealized Lennard- Jonnes potential. It is a numerical program that exhibits mixed looping and random behaviour Ear Comp Uses Lempel-Ziv coding for data compression. Compresses a 1 MB file 20 times Wawe Solves Maxwell’s equations and electromagnetic particle equations of motion Swm Solves a system of shallow water equations using finite difference approximations on a 256*256 grid Ucomp The uncompress version of comp
SMPCache permette di effettuare diverse tipologie di simulazione: Dopo aver configurato il sistema e aperto una traccia di memoria è possibile avviare la simulazione. SMPCache permette di effettuare diverse tipologie di simulazione: Simulazione della cache; Simulazione del processore; Evoluzione dei blocchi di memoria centrale.
1) Simulazione della cache Se si è scelto di effettuare una simulazione della cache, sarà possibile visualizzare l’evoluzione in maniera grafica o testuale. Col primo metodo verranno forniti dei grafici su: blocchi trasferiti, transazioni sul bus, cache hits, hit rate (%), cache misses, miss rate (%) . Col secondo metodo, invece, sarà possibile verificare lo stato di ogni signola linea di cache, oltre al numero e alla percentuale di misses e hits.
Evoluzione cache in formato grafico
Evoluzione cache in formato testo
2) Evoluzione del processore Effettuando un’analisi del processore, o dei processori, SMPCache fornisce un grafico in cui viene visualizzato lo stato dei processori attivi e le transazioni dei blocchi di memoria. Inoltre, è possibile stabilire il numero di dati letti e scritti dal processore e la percentuale di successi e fallimenti nella ricerca.
Evoluzione del processore
3) Evoluzione della memoria La simulazione della memoria centrale consiste nell’osservare l’evoluzione di un particolare blocco di memoria a seconda dei parametri scelti. È possibile selezionare il blocco di memoria da studiare e il livello di visione desiderato (all’interno del processore o all’interno di una particolare cache). I risultati ottenuti saranno relativi al blocco selezionato.
Evoluzione di un blocco di memoria all’interno del processore
Evoluzione di un blocco di memoria all’interno della cache
Il problema della coerenza SMPCache simula l’evoluzione della cache anche su sistemi multiprocessore. La presenza di più cache introduce il problema della coerenza della cache, che causa l’inconsistenza dei dati. Es. Un processo A gira nel processore I che produce il dato X che è consumato dal processo B, che gira sul processore J. Il processo A scrive X nella sua cache, mentre il processo B continua ad utilizzare il vecchio valore di X presente nella sua cache senza essere informato del nuovo valore assunto da X.
Protocolli di coerenza Per ovviare a tale problema SMPCache supporta tre principali protocolli di coerenza utilizzati nei più moderni sistemi di elaborazione che utilizzano una politica di scrittura write-back: MSI MESI DRAGON L’idea che sta alla base di questi protocolli è di associare ad ogni blocco di memoria uno stato che indica la disposizione del blocco stesso (invalid, valid or dirty) MSI e MESI sono dei protocolli basati sull’invalidazione, mentre DRAGON è basato sull’aggiornamento
Protocolli basati sull’invalidazione Nei protocolli basati sull’invalidazione, quando una locazione condivisa viene modificata da un processore, lo stato della cache di quel blocco è settato ad invalido nella cache di tutti gli altri processori che possiedono quel blocco.
Protocolli basati sull’aggiornamento Nei protocolli basati sull’aggiornamento, quando un processore modifica una locazione condivisa il suo valore viene aggiornato nelle caches di tutti i processori che possiedono quel blocco. Per questo motivo i protocolli basati sull’aggiornamento hanno un miss-rate più alto e generano più traffico nel bus, risultando più complessi nella gestione.
Il bus, invece, può supportare le seguenti transazioni: In entrambe le classi di protocolli, il processore può effettuare diverse richieste: PrRd: lettura; PrWr: scrittura. Nel protocollo Dragon esistono due ulteriori richieste PrRdMiss e PrWrMiss, che si verificano quando un nuovo blocco di memoria è richiesto per la prima volta dal processore. Il bus, invece, può supportare le seguenti transazioni: BusRd: il controllore della cache invia l’indirizzo al bus e chiede una copia del blocco che non intende modificare (in caso di ricerca fallita nella cache); BusRdX: il controllore della cache invia l’indirizzo al bus e chiede una copia esclusiva del blocco che intende modificare; BusWB: il controllore della cache invia l’indirizzo e il contenuto del blocco di memoria al bus; la RAM viene aggiornata; Bus Upd: è una nuova transazione che prende una parola specifica scritta dal processore e la trasmette al bus così che tutte le altre caches si possono aggiornare. (usata solo in DRAGON) Ogni BusUpd è seguito da un’azione di Update sulla linea di cache da aggiornare.
In aggiunta al cambiamento dello stato dei blocchi, il controllore della cache può intervenire nelle transazioni del bus e mettere il contenuto del blocco referenziato sul bus (“flush”), piuttosto che permettere alla memoria centrale di fornire i dati. Poiché più processori possono avere una copia del blocco di memoria nella loro cache, è necessario selezionare un solo processore che fornisce il dato al bus. Il “flush” risulta valido per quel processore, mentre gli altri processori effettuano un’azione nulla.
MSI Questo protocollo di coerenza utilizza tre stati per identificare la situazione dei blocchi di memoria: I (invalid): il blocco di memoria è invalido; S (shared): il blocco è presente in uno stato non modificato in una o più cache; le copie in memoria centrale e nelle altre caches sono tutte aggiornate; M (modified or dirty): solo un processore ha una copia valida del blocco nella sua cache; la copia in memoria centrale è obsoleta e nessun altra cache ha una copia valida.
Transition diagram for the MSI protocol
MESI Il protocollo MESI utilizza quattro stati: I (invalid): come per MSI; S (shared): due o più processori hanno questo blocco nella loro cache in uno stato non modificato; E (exclusive): solo una cache ha una copia del blocco ed essa non è stata modificata. La memoria centrale è aggiornata; M (modified): come per MSI.
Transition diagram for the MESI protocol
DRAGON Questo protocollo usa quattro stati: E (exclusive): come per MESI; SC (shared-clean): potenzialmente due o più processori hanno questo blocco nella cache. La memoria centrale può essere o non essere aggiornata. SM (shared-modified): potenzialmente due o più processori hanno questo blocco nella loro cache. La memoria centrale non è aggiornata ed è responsabilità di tale processore ad aggiornare la memoria centrale quando il blocco è rimpiazzato. M (modified): come per MESI.
Transition diagram for the DRAGON protocol
Spunti per possibili progetti di architettura degli elaboratori Evoluzione delle prestazioni del sistema utilizzando architetture multiprocessore. La cache e il problema della coerenza: come incidono i protocolli e quali sono i rispettivi vantaggi e svantaggi. Implementare una versione limitata del simulatore. Simulare il funzionamento di caches multilivello, analizzando le differenze rispetto a sistemi che utilizzano un solo livello di cache. Come sfruttare la località dei riferimenti: studio della località spaziale e della località temporale.
Alcuni testi da consultare: [1] Stallings W.; “Architettura e organizzazione dei calcolatori. Progetto e prestazioni 6a ed.” Addison Wesley, 2003. [02] Tanenbaum A.; “Structured Computer Organization” Prentice Hall,1999. [03] Hwang, K.; Briggs, F. A.; “Computer Architecture and Parallel Processing”. McGraw-Hill, 1984. [4] Lovett, T.; Thakkar, S.; “The Symmetry Multiprocessor System”. Proc. Int. Conf. Parallel Processing, Vol. I, August 1988. [5] McCreight, E. M.; “The Dragon Computer System: An Early Overview”. Technical Report, Xerox Corporation, September 1984.