Prof. Giovanni Neri Prof. Stefano Mattoccia Realizzato da:
Simone Berardi Daniele Di Donato Isabella Gottardi Stefano
Poli
Slide 2
Lo Scenario Il Protocollo MESI Protocollo di contesa a bus Uno
sguardo al Progetto Introduzione
Slide 3
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 3 Introduzione Lobbiettivo presentato allinizio
del progetto era la creazione si un controllore di memoria tramite
lutilizzo di FPGA opportunamente programmate tramite software
Xilinx. Questo componente doveva garantire lintegrit di dati
presenti in una memoria centrale comune a pi processori muniti di
diversi livelli di cache.
Slide 4
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 4 Lo Scenario Nel dettaglio il nostro progetto
si basava su di una visione ben specifica di sistema. Lambiente
comprendeva due processori in grado di lavorare contemporaneamente
con una stessa memoria centrale comune entrambi dotati di due
livelli di memoria cache. Tutte le ipotesi formulate sono state
virtualizzate tramite ambiente Xilinx.
Slide 5
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 5 Lo Scenario
Slide 6
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 6 Un interfaccia verso il bus Partendo dallidea
di riutilizzare alcuni componenti che lavorano in sistemi con
singolo master, abbiamo definito un interfaccia tramite la quale
questi componenti potessero accedere alle risorse senza accorgersi
della natura condivisa di questultime. Abbiamo quindi definito un
interfaccia che si connettesse in modo naturale ai componenti gi
presenti come la cache e il DLX.
Slide 7
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 7 Un interfaccia verso il bus
Slide 8
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 8 Un interfaccia verso il bus La CPU e le Cache
accedono in modo trasparente alle risorse come se fossero a loro
dedicate. Il Controller della cpu fornisce un interfaccia tramite
cui i componenti accedono come se stessero accedendo al bus ed alla
memoria. Inoltre il controller controlla e gestisce la coerenza
allinterno delle cache presenti.
Slide 9
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 9 La Coerenza Un aspetto fondamentale di tutto
il progetto era incapsulato dal concetto di coerenza interna ai due
processori nonch di coerenza a livello di sistema multiprocessore.
La soluzione adottato fin dalla fase di progetto stata quella di un
protocollo MESI per garantire tale propriet allintero sistema
virtuale.
Slide 10
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 10 Il Protocollo Mesi Il protocollo sfruttato
allinterno del progetto si basa sulla discriminazione della
validit, in termini di aggiornamenti disponibili, dei dati presenti
nelle cache dei due processori. Ogni dato pertanto etichettato con
uno stato che identifica il suo livello di freschezza riferita
allintero sistema multiprocessore.
Slide 11
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 11 Il Protocollo Mesi Gli stati possibili sono
quattro: 1. Modified: indica lavvenuta modifica della linea di
cache in una sua parte; 2. Exclusive: legato al concetto di livelli
multipli di memoria cache indica nello specifico la concordanza tra
la linea corrente e quella presente nel livello inferiore (verso la
memoria centrale) che pu a sua volta risultare modificata rispetto
ad un livello successivo; 3. Shared: in parte sfruttato nel
contesto di livelli multipli di cache ma soprattutto utilizzato nel
caso di processori multipli garantisce la coerenza tra la linea
corrente e quella nel livello successivo, nel caso in cui la linea
si trovi subito sopra alla memoria centrale (RAM) questo stato
garantisce la coerenza dei dati con tutte le linee identiche
caricate da parte di altri processori nello stesso sistema; 4.
Invalid: utilizzato in presenza di processori multipli indica la
presenza di dati non pi aggiornati poich modificati da una cpu
presente nel sistema; in caso la linea sia necessaria in un secondo
momento al processore, la cache dovr provvedere a reperirli
nuovamente aggiornati dalla memoria centrale.
Slide 12
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 12 Il Protocollo Mesi Caso Di Studio Il
progetto nello specifico interessa una particolare configurazione
di riferimento del protocollo MESI in presenza, per lappunto, di
processori multipli.
Slide 13
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 13 Il Protocollo Mesi Caso Di Studio Il
progetto nello specifico interessa una particolare configurazione
di riferimento del protocollo MESI in presenza, per lappunto, di
processori multipli. In figura sono presenti tutte le possibili
configurazioni dello stato allegato a due eventuali linee di cache.
Queste linee sono presenti in livelli differenti della stessa cache
presupponendo la presenza di un altri processori. L1 identifica il
primo livello di cache mentre L2 identifica il secondo livello di
cache (a valle).
Slide 14
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 14 Il Protocollo Mesi Visione Generale Le
transizioni previste dal protocollo MESI implementato a qualunque
livello, mono o multi processore prevede il seguente grafo delle
transizioni. Limmagine evidenzia tutte i passaggi corretti fra gli
stati possibili delle linee presenti in una qualunque delle
cache.
Slide 15
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 15 Protocollo di Contesa a Bus Gestisce
laccesso contemporaneo della risorsa bus Il protocollo utilizzato
di tipo request- grant, implementato modificando la modalit base
del Pentium in configurazione master-slave
Slide 16
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 16 Dominare La Complessit Lapproccio adottato
nella soluzione stato rappresentato in una divisione in parti di
ambiente virtuale (due processori con doppio livello di cache) e
soluzione alla problematica (controllore di memoria). Questa
soluzione offre il vantaggio della modularit e della ridotta
complessit delle parti singolarmente esaminate e sintetizzate.
Slide 17
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 17 Le Cache Uno degli obbiettivi secondari
stato rappresentato dalla resa modulare di un componente prelevato
da una presentazione di alcuni nostri colleghi : la Cache DLK.
Aggiungere un secondo livello di cache e rendere i due moduli
interagenti ha comportatolo smussamento di alcuni punti principali.
Le attivit di re-factoring hanno portato sostanzialmente
allaggiunta di alcuni segnali di comodo per la gestione
multilivello della cache.
Slide 18
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 18 Le Cache Nello specifico si sono rese
necessarie due attivit di re-factoring: 1. stato installato un
segnale aggiuntivo in grado di indicare la fine di una risposta ad
unoperazione di snoop cos da poter sequenzializzare pi operazioni
di questo tipo; 2. stato esplicitato il protocollo adottato dalla
cache di secondo livello per effettuare un caricamento dalla
memoria principale per adeguare cos anche il primo livello di cache
alle stesse convenzioni.
Slide 19
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 19 Il Sequencer In presenza di una cache di
secondo livello si subito posta la problematica di effettuare
letture multiple atte al caricamento di una linea dalla memoria
centrale. Il componente effettua una serie di letture allineate
alla dimensione delle linee della cache di primo livello in modo da
caricare completamente la parte di memoria necessaria alla cache di
secondo livello.
Slide 20
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 20 I Controller Componente principe del lavoro
svolto che racchiude in se tutta la logica di applicazione del
protocollo MESI per rendere coerente tutto lambiente di lavoro. La
progettazione di questo componente ha richiesto una ulteriore
suddivisione in sottoparti: due nello specifico.
Slide 21
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 21 Cpu Controller La prima funge da substrato
per la ogni cpu che diventa capace di gestire in modo formale le
richieste del bus condiviso di dati, effettuare richieste di snoop
ad una terza parte per suo conto in lettura e scrittura ed infine
di garantire una risposta efficace allo snoop stesso effettuato a
suo carico.
Slide 22
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 22 Memory Controller La seconda parte carica di
tutta la logica necessaria alla risoluzione di conflitti in
operazioni in lettura e scrittura veri e propri; la dicotomia tra
meccanismi e politiche assume in questa scelta la sua valenza pi
ampia separando la parte di substrato alla cpu dalla parte del
componente incaricato di gestire i conflitti tra le diverse
richieste dei processori.
Slide 23
Introduzione Il Protocollo MESI Protocollo contesa a bus Uno
sguardo al progetto 23 Una Visione Panoramica Nel complesso
lintuizione alla base della soluzione implementata racchiusa nella
divisione modulare dei componenti in grado di interfacciarsi per
ottenere un risultato finale perfettamente sincronizzato e
coerente.
Slide 24
RandomNumberGenerator_32Bit Sequencer Dummymemory Cpucontroller
Memorycontroller Cache_cmp _2 Cache_2_livelli Cache_with_Sequencer
Cpu Descrizione dei componenti
Slide 25
Descrizione dei componenti: RandomNumberGenerator_32bit 25
RandomNumberGenerator_32Bit Genera numeri casuali a 32 bit con lo
scopo di simulare dati letti e scritti dal processore da e verso le
cache e la memoria. Utilizzato allinterno del componente
DummyMemory Registro a scorrimento retroazionato con xor modulo
2
Slide 26
Descrizione dei componenti: RandomNumberGenerator_32bit 26
RNGenerator_32Bit : Segnali ENABLE : in STD_LOGIC segnale di
attivazione del componente CLK : in STD_LOGIC clock RESET : in
std_logic segnale di reset del componente U : out
std_logic_vector(31 downto 0) bus a 32 bit che consente di
trasferire il dato generato signal sr: std_logic_vector(31 downto
0) := x1045ACE1 registro a scorrimento inizializzato con un seme
scelto a caso signal sr_in: std_logic bit inserito nel registro a
scorrimento
Slide 27
Descrizione dei componenti: RandomNumberGenerator_32bit 27
RNGenerator_32Bit: Processo Unico processo del componente Se il
componente abilitato (ENABLE=1), ad ogni fronte di salita del
clock: shift del registro (sr) immissione del nuovo bit nel
registro abilitazione delluscita collegandovi sr
Slide 28
Descrizione dei componenti: RandomNumberGenerator_32bit 28
RNGenerator_32Bit : Calcolo del bit da reinserire Concorrentemente
al precedente processo viene calcolato il bit da inserire nel
registro tramite la formula sr_in
Descrizione dei componenti: Sequencer 30 Segnali di
Input/Output DataIn_2_level : in STD_LOGIC_VECTOR
(dataOutParallelism-1 downto 0) dati in ingresso dalla memoria con
parallelismo a 32 bit AddressIn : in STD_LOGIC_VECTOR
(PARALLELISM-1 downto 0) indirizzo da sequenzializzare DataLineIn :
in data_line_2 dati in ingresso dalla cache di dimensione pari ad
una linea di cache di livello 2 (128 byte) AddressOut_2_level : out
std_logic_vector(PARALLELISM-1 downto 0) indirizzo in uscita per la
memoria Rd_in : in STD_LOGIC segnale di lettura dei dati fornita
dalla cache per trasferimenti memoria-cache Ready_from_2_level : in
STD_LOGIC segnale di ready ricevuto dalla memoria, utilizzato per
sequenzializzare le operazioni Reset : in STD_LOGIC segnale di
reset del componente Enable : in STD_LOGIC segnale di abilitazione
del componente Wr_in : in STD_LOGIC segnale di scrittura dei dati
fornita dalla cache per trasferimenti cache => memoria
DataLineOut : out data_line_2 linea di cache in uscita per la cache
di secondo livello (una volta caricata) DataOut_2_level : out
std_logic_vector(dataParallelism-1 downto 0) dati in uscita per la
memoria con parallelismo a 32 bit Ready : out std_logic segnale di
ready verso la cache di secondo livello Rd_out_2_level : out
std_logic segnale di read in uscita verso la memoria Wr_out_2_level
: out std_logic segnale di write in uscita verso la memoria
Slide 31
Descrizione dei componenti: Sequencer 31 Processi Operazione di
lettura (memoria - cache) inizializza variabili interne per la
sincronizzazione delle operazioni aggiorna il segnale di ready ad
ogni clock inizializza le variabili interne necessarie al
trasferimento cache - memoria effettua i cicli di scrittura per
trasferire lintera linea di cache in memoria inizializza le
variabili interne necessarie al trasferimento memoria - cache
effettua cicli di lettura per trasferire lintera linea di cache
dalla memoria Operazione di scrittura (cache - memoria) Processi
accessori
Slide 32
Descrizione dei componenti: Sequencer 32 Operazioni e processi
Write (cache => memoria), processi in gioco: SplitProcess_Write
WriteLoop Read (memoria => cache), processi in gioco:
SplitProcess_Read ReadLoop
Slide 33
Descrizione dei componenti: Sequencer 33 SplitProcess_Write
Prepara il componente allesecuzione della reale operazione di
trasferimento dellintera linea dalla cache alla memoria Attivato al
variare dei segnali Enable, Wr_in, Rd_in o Reset Disattiva il ready
Setta variabili e segnali interni (loopEnabled_var, loopIndex,
InAddress, toSplitRegister, tempDataLine)
Slide 34
Descrizione dei componenti: Sequencer 34 WriteLoop Effettua le
reali operazioni di scrittura dalla cache alla memoria Pilota
write, bus indirizzi e bus dati della memoria Effettua 32 cicli di
scrittura (ognuno da 4 byte) per trasferire lintera linea di cache
da 128 byte Attivato al variare dei segnali Ready_From_2_level,
Wr_in, Rd_in o Reset
Slide 35
Descrizione dei componenti: Sequencer 35 SplitProcess_Read
Prepara il componente allesecuzione della reale operazione di
trasferimento dellintera linea dalla memoria alla cache Attivato al
variare dei segnali Enable, Wr_in, Rd_in o Reset Disattiva il ready
Setta variabili e segnali interni (loopEnabled_var, loopIndex,
InAddress)
Slide 36
Descrizione dei componenti: Sequencer 36 ReadLoop Effettua le
reali operazioni di lettura dalla memoria alla cache Pilota read,
bus indirizzi e bus dati della memoria Effettua 32 cicli di lettura
(ognuno da 4 byte) per trasferire lintera linea di cache da 128
byte Attivato al variare dei segnali Ready_From_2_level, Wr_in,
Rd_in o Reset Registro tempDataLine che svolge il ruolo di deposito
di dati in attesa del completamento dellintera linea di cache
Slide 37
Descrizione dei componenti: DummyMemory 37 DummyMemory Memoria
fittizia per le operazioni di read/write da parte della cpu Per le
operazioni di read utilizza un generatore di numeri casuali
(RandomNumberGenerator_32Bit) Le operazioni di write non vengono
realmente eseguite
Slide 38
Descrizione dei componenti: DummyMemory 38 Segnali di
input/output chipEnable : in STD_LOGIC segnale di abilitazione
della memoria CLK : in STD_LOGIC clock InputAddress : in
STD_LOGIC_VECTOR (addressParallelism-1 downto 0) bus degli
indirizzi MemRd : in STD_LOGIC segnale che se asserito indica una
lettura dalla memoria MemWr : in STD_LOGIC segnale che se asserito
indica una scrittura in memoria Ready : out STD_LOGIC segnale di
ready DataInOut : inout STD_LOGIC_VECTOR (dataParallelism-1 downto
0) dati in ingresso/uscita signal temp_dataout : STD_LOGIC_VECTOR
(dataParallelism-1 downto 0) contiene il numero casuale generato
dal RandomNumberGenerator_32Bit
Slide 39
Descrizione dei componenti: DummyMemory 39 ProcessoMemoria
Unico processo del componente Riceve e risponde alle richieste di
read/write provenienti dalla cpu Utilizza il generatore di numeri
casuali RandomNumberGenerator_32Bit
Slide 40
Descrizione dei componenti: DummyMemory 40 Lettura di un dato
Il segnale di ingresso MemRd viene collegato al clock del
generatore di numeri casuali Luscita del generatore viene collegata
alluscita della DummyMemory
Slide 41
Descrizione dei componenti: DummyMemory 41 Scrittura di un dato
Loperazione di write non viene realmente eseguita Alza il segnale
di Ready
Slide 42
Descrizione dei componenti: Cpucontroller 42 CpuController Il
CpuController rappresenta linterfaccia verso lesterno per i vari
componenti Gestisce il lato client del protocollo di gestione per
laccesso ai bus esterni. Gestione delle operazioni di snoop verso
le cache interne.
Slide 43
Descrizione dei componenti: Cpucontroller 43 Interfacciamento
con i componenti interni alla cpu MemWr_from_cpu ch_memwr
DLXCPU_CONTROLLER Il cpuController necessita di conoscere se
loperazione in corso di lettura o scrittura per poter eseguire
delle operazioni coerenti al protocollo mesi.
Slide 44
Descrizione dei componenti: Cpucontroller 44 Interfacciamento
con i componenti interni alla cpu I segnali inviati dalle Cache e
che normalmente sarebbero diretti alle memorie vengono intercettati
dallinterfaccia del cpu_controller. Ram_Address Ram_data_out
Ram_data_in Ram_we Ram_oe Ram_ready ch_hit_1 ch_hit_2 ch_hitm_1
ch_hitm_2 ch_inv_1 ch_inv_2 ch_eads ch_wtwb_2 ch_snoop_addr
transaction_complete Address_from_cache Data_from_cache
Data_to_cache WriteBack_from_cache MemRd_from_cache Ready_to_cache
Hit_1 Hit_2 HITM_1 HITM_2 invalidate_to_cache EADS_to_cache WbWt_2
snoop_address transaction_complete CACHE L1 L2 CPU_CONTROLLER
Slide 45
Descrizione dei componenti: Cpucontroller 45 Interfacciamento
con i componenti esterni alla cpu Il cpuController si collega al
MemoryControll er per gestire tutte le operazioni del protocollo
Mesi BReq BGrnt Eads_from_controller Invalidate_out invalidate Hit
HITM WbWt Restart_op snoop_address_in Address MemRd MemWr Breq[ ]
BGrnt[ ] Eads Invalidate_in Invalidate Hit[ ] Hitm[ ] WbWt[ ]
Restart_op[ ] snoop_addr[] Address_for_snoop MemRd MemWr
CPU_CONTROLLER MEMORY_CONTROLLER
Slide 46
Descrizione dei componenti: Cpucontroller 46 Interfacciamento
con i componenti esterni alla cpu Linterfaccia mento con la memoria
rappresenta il collegamento della cpu con la risorsa condivisa. La
cpu potr leggere o scrivere solo quando le sar concesso.
CPU_CONTROLLER MEMORY MemRd MemWr Address DataInOut Ready MemRd
MemWr InputAddress DataInOut Ready
Slide 47
Descrizione dei componenti: Cpucontroller 47 Segnali di input
Address_from_cache: in STD_LOGIC_VECTOR (PARALLELISM-1 downto 0)
indirizzo richiesto dalla cache in lettura o scrittura BGrnt : in
STD_LOGIC segnale di Bus Grant per l'utilizzo del Bus
MemRd_from_cache: in STD_LOGIC segnale di lettura proveniente dalla
cache WriteBack_from_cache: in STD_lOGIC segnale di scrittura a
causa di un writeBack. (unico caso in cui la cache emette un
segnale di Wr) MemWr_from_cpu: in STD_LOGIC segnale di scrittura da
parte della memoria, utilizzato per invalidare le altre cache
snoop_address_in: in STD_LOGIC_VECTOR(PAR ALLELISM-1 downto 0)
indirizzo di snoop in ingresso Ready_from_mem: in STD_LOGIC segnali
di ready dalla memoria, verr propagato direttamente alla cache
Invalidate : in STD_LOGIC segnale in ingresso per indicare di
invalidare i dati trovate dallo snoop HITM_2: in STD_LOGIC hitm
dalla seconda cache transaction_complete : in STD_LOGIC segnale di
completamento del trasferimento dalla cache alla memoria e
viceversa. Attivato al termine dallesterno al termine del
trasferimento di una linea di livello2
Slide 48
Descrizione dei componenti: Cpucontroller 48 Segnali di input
Eads : in STD_LOGIC ingresso del segnale eads esterno proveniente
dal memory controller WbWt: in STD_LOGIC indica lo stato in cui
portare la linea in caricamento Reset : in STD_LOGIC segnale di
reset Data_from_cache : in STD_LOGIC_VECTOR( dataparallelism-1
downto 0) dati dalla cache in caso di scrittura HITM_1: in
STD_LOGIC hitm dalla prima cache Hit_2 :in STD_LOGIC hit dalla
seconda cache Hit_1 : in STD_LOGIC hit dalla prima cache
Slide 49
Descrizione dei componenti: Cpucontroller 49 Segnali di output
AddressOut : out STD_LOGIC_VECTOR (PARALLELISM-1 downto 0)
indirizzo in uscita verso la memoria BReq : out STD_LOGIC segnale
di richiesta del bus MemRd : out STD_LOGIC segnale di lettura verso
la memoria (propaga quello della cache - segnale in input
MemRd_from_cache) MemWr: out STD_LOGIC segnale di scrittura verso
la memoria (propaga quello della cache - segnale in input
WriteBack_from_cache) HITM: out STD_LOGIC segnale inviato a seguito
di uno snoop in ingresso Inv_to_others_cpu: out STD_LOGIC segnale
inviato al memory controller nel caso di scritture con propagazione
per fare invalidare le cache degli altri processori Ready_to_cache:
out STD_LOGIC segnali di ready per la cache snoop_address: out
STD_LOGIC_VECTOR(PAR ALLELISM-1 downto 0) indirizzo di snoop da
inviare alle cache
Slide 50
Descrizione dei componenti: Cpucontroller 50 Segnali di output
EADS_to_cache: out STD_LOGIC segnale di EADS per le cache (propaga
il segnale inviato dal MemoryController - segnale in input EADS)
inv_to_cache : out STD_LOGIC segnale di invalidazione per le cache
(propaga quello del MemoryController - segnale in input Invalidate)
Data_to_cache : out STD_LOGIC_VECTOR (dataparallelism-1 downto 0)
Dati in uscita per la cache WbWt_2 : out STD_LOGIC segnale per
indicare lo stato finale della linea di secondo livello al
caricamento HIT: out STD_LOGIC segnale inviato a seguito di uno
snoop in ingresso DataInOut : inout STD_LOGIC_VECTOR(datap
arallelism-1 downto 0) dati da/per la memoria
Slide 51
Descrizione dei componenti: Cpucontroller 51 Gestione
protocollo di Accesso Arbitraggio lato client laccesso al bus dati,
al bus indirizzi ed ai segnali di controllo della memoria.
Adattamento dei segnali provenienti dalle cache ai segnali di
protocollo utilizzati.
Slide 52
Descrizione dei componenti: Cpucontroller 52
ProcessoRichiestaBus Il processo si comporta da 245 per i segnali
provenienti da e verso le cache il cui segnale di abilitazione dato
dal segnale BGrnt inviato dal memory controller. Conforma la
semantica dei segnali a quella richiesta dal memory controller per
gestire correttamente la coerenza del protocollo Mesi.
Slide 53
Descrizione dei componenti: Cpucontroller 53
IndirizzoOperazioneDati Breq Indirizzo OperazioneDati BGrnt CPU
CONTROLLER Gestione protocollo di Accesso
Slide 54
Descrizione dei componenti: Cpucontroller 54 Gestione snoop Il
componente Cpu Controller si occupa della gestione dello snoop a
livello di processore Provvede linvio dei segnali di snoop ricevuti
dal MemoryController verso le cache Fornisce le risposte alle
richieste di snoop.
Slide 55
Descrizione dei componenti: Cpucontroller 55 Gestione snoop I
processi che gestiscono le problematiche di snoop sono:
ProcessoRispostaASnoop ProcessoSnoopEsterno
Slide 56
Descrizione dei componenti: Cpucontroller 56
ProcessoSnoopEsterno Gestisce la propagazione verso le cache dei
segnali di snoop Invia i segnali di Eads ed Invalidate alle cache.
Invia lindirizzo di snoop alle cache.
Slide 57
Descrizione dei componenti: Cpucontroller 57
ProcessoRispostaASnoop Il processo si occupa di gestire le risposte
allo snoop ricevute dalle due cache. Fa confluire i segnali Hit ed
Hitm generati dalle due cache in due segnali Hit ed Hitm inviati al
memory controller.
Slide 58
Descrizione dei componenti: Cpucontroller 58
Hit_1Hit_2Hitm_1Hitm_2 HitHitm EadsInvalidateSnoop Address Eads
Invalidat e Snoop Address CPU CONTROLLER
Slide 59
Descrizione dei componenti: Memorycontroller 59
MemoryController Gestisce la parte server del protocollo di accesso
al bus da parte dei processori Viene utilizata la politica a
priorit rotanti Altra problematica gestita lattivazione dello snoop
verso gli altri processori durante le operazioni di lettura e
scrittura del processore che possiede il BGrnt
Slide 60
Descrizione dei componenti: Memorycontroller 60 Segnali di
Input Address_for_snoop: in STD_LOGIC_VECTOR(addre ssParallelism-1
downto 0) indirizzo di snoop da propagare verso le altre cpu BReq :
in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) nei sistemi
multiprocessore, utilizzato per segnalare al controllore di memoria
la necessit di avere il controllo del bus Hit : in STD_LOGIC_VECTOR
(cpuNumber-1 downto 0) indica allesterno se il ciclo di snoop ha
trovato il dato richiesto allinterno di una cache HitM : in
STD_LOGIC_VECTOR (cpuNumber-1 downto 0) indica allesterno se il
ciclo di snoop ha trovato il dato richiesto allinterno di una
delle, ma tale dato stato ivi modificato Reset: in STD_LOGIC
segnale di reset del dispositivo BOff : in STD_LOGIC segnale di
input, obbliga il processore ad abortire il ciclo di bus in corso e
a porsi in 3state nei confronti del bus fino alla disattivazione
del segnale MemWR : in STD_LOGIC_VECTOR (cpuNumber-1 downto 0)
segnali di scrittura dalle cpu MemRD: in STD_LOGIC_VECTOR
(cpuNumber-1 downto 0) segnali di Lettura dalle cpu Ready_from_mem:
in STD_LOGIC segnali di ready proveniente dalla memoria
Invalidate_in: in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) segnale
di richiesta invalidazione da parte della cpu master
Slide 61
Descrizione dei componenti: Memorycontroller 61 Segnali di
Output snoop_addr: out STD_LOGIC_VECTOR(addr essParallelism-1
downto 0) indirizzo di snoop in uscita verso le altre cpu BGrnt :
out STD_LOGIC_VECTOR (cpuNumber-1 downto 0) segnali di permesso
accesso al bus Invalidate: out STD_LOGIC determina lo stato finale
di una linea di cache dopo uno snoop EAds : out STD_LOGIC External
ADdress Strobe. Segnale utilizzato dai controllori di memoria per
verificare se il dato il cui indirizzo pilotato sul bus address in
cache al processore WbWt : out STD_LOGIC_VECTOR (cpuNumber-1 downto
0) utilizzato per la gestione del protocollo MESI, consente di
definire, per ogni linea di cache, il tipo di politica di scrittura
(Write Back o Write Through). Restart_op: out
std_logic_vector(cpuNumber-1 downto 0) segnale di restart
dell'operazione per la cpu master in caso di writeBack
Slide 62
Descrizione dei componenti: Memorycontroller 62 Processi Il
componente costituito da quattro processi: Processo di
aggiornamento del BGrnt alla cpu attualmente master Processo di
risoluzione conflitti per l'accesso al bus Processo Attivazione
dello snoop Processo che attende l'attivarsi dei segnali Hit ed
Hitm da parte delle varie cpu
Slide 63
Descrizione dei componenti: Memorycontroller 63
ProcessoAggiornamentoBGrnt Si occupa dellaggiornamento del bus
grant Viene risvegliato quando una Cpu fa richiesta del bus Se gi
occupato non posso assegnarlo Se libero allora lo assegno e
aggiorno che la cpu che ha fatto richiesta ora la master
Slide 64
Descrizione dei componenti: Memorycontroller 64
ProcessoRichiestaBus E possibile che durante lesecuzione pi
processori richiedano il bus contemporaneamente La politica delle
priorit applicata rotazione, lultimo processore che ha ottenuto il
bus viene inserito in coda ottenendo la priorit pi bassa Se il bus
non occupato procedo allassegnazione scorrendo la lista delle
cpu
Slide 65
Descrizione dei componenti: Memorycontroller 65
ProcessoAttivazioneSnoop Si occupa di attivare i segnali per lo
snoop dellindirizzo di ogni linea di cache di secondo livello che
deve essere trasferita I segnali sono inviati alle cpu che non
hanno il possesso del bus (non hanno assegnato il bus grant)
Slide 66
Descrizione dei componenti: Memorycontroller 66
ProcessoRilevazioneEsitiSnoop Si occupa di verificare ciclicamente
quali sono gli esiti degli snoop attivati. Due casi: Una cpu ha la
linea modificata Nessuna cpu ha la linea modificata Se la linea
presente in unaltra cache verr caricata in stato shared Altrimenti
in stato Exclusive
Slide 67
Descrizione dei componenti: Cache_2_livelli 67 Cache_2_livelli
Unisce i componenti Cache_cmp e Cache_cmp_2 in un'unica entit
Questo permette un accesso da parte della cpu alla cache in modo
del tutto trasparente Per risolvere problematiche di coerenza del
protocollo Mesi vengono eseguiti snoop consecutivi alla cache di
primo livello ed infine a quella di secondo livello
Slide 68
Descrizione dei componenti: Cache_cmp_2 Cache_with_sequencer
Cpu 68 Altri componenti Cache_cmp_2 un evoluzione del componente
Cache_cmp, sviluppato nel progetto Cache_dlx la differenza risiede
solamente nella dimensione delle linee memorizzate e trasferite
verso lesterno Cache_with_sequencer unisce la Cache_2_livelli al
component Sequencer per eseguire trasferimenti di linee di cache di
secondo livello in modo sequenziale in base al parallelismo del bus
dati del processore Cpu contiene tutte le componenti sopracitate
con laggiunta del controller della CPU (CPU Controller) fornisce
linterfaccia di ingresso da parte della pipeline e linterfaccia
duscita verso i bus dati.
Slide 69
Caso Monoprocessore Caso Multiprocessore TestBench
Slide 70
TestBech 70 Testbench Monoprocessore Nelle slide successive
sono riportati i testbench eseguiti per i seguenti casi di
interesse in un sistema monoprocessore. Mono processore: Lettura di
un dato non presente in Cache L1 e Cache L2 Lettura di un dato non
presente in Cache L1 e presente in Cache L2 in stato Exclusive o
Modified. Scrittura con dato presente in Cache L1. Scrittura con
dato non presente in Cache L1 o in entrambe.
Slide 71
TestBech 71 Lettura di un dato non presente in Cache L1 e Cache
L2 La lettura di un dato non presente allinterno delle cache genera
una richiesta di trasferimento per il Cpu Controller. La linea di
cache viene quindi caricata dalla memoria non appena la cpu riceve
il diritto di accesso ai bus.
Slide 72
TestBech 72 Lettura di un dato non presente in Cache L1 e Cache
L2 La lettura della linea viene sequenzializza ta dal sequencer. Le
linee saranno caricate in stato Shared per la cache L1 e Exclusive
per la cache L2
Slide 73
TestBech 73 Caso 2: se la linea della cache L2 presente in
stato Modified la linea di livello 1 sar caricata in stato
Exclusive Lettura di un dato non presente in Cache L1 e presente in
Cache L2 in stato Exclusive o Modified. In questo caso la linea
della cache L1 pu assumere due stati in base allo stato della linea
della cache L2 Caso 1: se la linea della cache L2 presente in stato
Exclusive o Shared la linea di livello 1 sar caricata in stato
Shared
Slide 74
TestBech 74 Scrittura con dato presente in Cache L1. La
scrittura di un dato presente in cache L1 in stato Shared produce
una scrittura nella cache L2. Ci porter ad avere la cache L1 in
stato exclusive mentre la cache L2 verr portata in stato Modified.
Diversamente se la linea presente nella cache L1 in stato
Exclusive, questa verr portata in stato Modified senza scrittura a
valle
Slide 75
TestBech 75 Scrittura con dato non presente in Cache L1 o in
entrambe. In questo caso,utilizzando la strategia write-allocate,
si avr una lettura dalla cache di livello due o dalla memoria e
successivamente una scrittura. Si avranno quindi la successione dei
due punti precedentemente discussi: Lettura di un dato non presente
in cache L1 e L2 o Lettura di un dato non presente in Cache L1 e
presente in Cache L2 in stato Exclusive o Modified Scrittura con
dato presente in Cache L1.
Slide 76
TestBech 76 Testbench Multiprocessore Nelle slide successive
sono riportati i testbench eseguiti per i seguenti casi di
interesse in un sistema multiprocessore. Multi processore: lettura
di dato non presente nella cache con snoop hit. Snoop di
Invalidazione dei dati a causa di una scrittura. WriteBack a
seguito di uno snoop in lettura. Protocollo contesa bus.
Slide 77
TestBech 77 Lettura di dato non presente nella cache con snoop
hit. Il testbench prevede la lettura consecutiva da parte delle due
cpu ad indirizzi contenuti allinterno della stessa linea di cache
di livello 2.
Slide 78
TestBech 78 Lettura di dato non presente nella cache con snoop
hit. La seconda lettura provocher un cache hit che caricher le
linee in stato shared su entrambi i livelli di cache.
Slide 79
TestBech 79 Snoop di Invalidazione dei dati a causa di una
scrittura. Nel caso in cui una scrittura venga propagata fino alla
memoria (cache di livello 1 e 2 in stato shared). La scrittura
provocher un invalidazione delle altre cpu che contengono il dato
nelle loro cache. Dopo la scrittura lo stato delle linea di primo
livello sar Shared mentre quella di socondo livello avr stato
Exclusive. La cache dellaltro processore sar invece invalidata
Slide 80
TestBech 80 WriteBack a seguito di uno snoop in lettura. Questo
testbench mostra il comportamento del sistema a seguito di un
operazione di snoop che trova la linea cercata in stato modified.
La linea verr quindi scritta in memoria togliendo il Bgrnt alla Cpu
che ha eseguito lo snoop ed assegnandolo alla Cpu con la linea
modificata per permettergli di eseguire il Writeback
Slide 81
TestBech 81 Protocollo contesa Bus Il protocollo di accesso al
bus mostra le sue politiche di assegnamento per priorit solo nel
caso in cui gli accessi avvengano in modo contemporaneo. Laccesso
multiplo al bus fa si che questultimo venga assegnato al processore
conLac priorit pi alta. Limmagine si riferisce a due accessi
contemporanei successivi alla risorsa bus ed a come il protocollo
gestisce le priorit assegnando il bus, nel primo conflitto a CPU1,
nel secondo a CPU2.
Slide 82
Conclusioni e possibili estensioni
Slide 83
83 Conclusioni Il controllore di memoria in grado di gestire in
maniera accademica i conflitti fra letture e scritture sulla
memoria comune ed in generale le problematiche di coerenza fra dati
in cache ed in memoria principale. Il cuore pulsante del progetto
definito dal memory controller resta legato a principi che
garantiscono la presenza di una forte modularit, la quale persiste
nelleventualit di una possibile futura espansione ad un sistema
virtuale che supporti una moltitudine qual si voglia elevata di
processori e livelli di cache.
Slide 84
Conclusioni e possibili estensioni 84 Possibili Estensioni
Alcune parti software hanno lasciato spazio a delle possibili
migliorie nel campo delle prestazioni. Si potrebbe modificare il
sequencier in modo da far pervenire alla cpu in maniera prioritaria
i dati necessari a continuare lesecuzione dellistruzione corrente
per poi caricare in un secondo momento la parte restante della
linea.