Write-back vs write-through caching?


93

La mia comprensione è che la differenza principale tra i due metodi è che nel metodo "write-through" i dati vengono scritti nella memoria principale tramite la cache immediatamente, mentre nel "write-back" i dati vengono scritti in un "ultimo tempo".

Dobbiamo ancora aspettare la memoria in "ultima volta", quindi qual è il vantaggio della "scrittura"?


@EricWang penso che vuoi dire write backha prestazioni migliori?
wlnirvana

@wlnirvana Sì, hai ragione, è un mio errore materiale. Vorrei rimuoverlo e inserire un nuovo commento qui per evitare futuri fuorvianti.
Eric Wang

6
In poche parole, write backha prestazioni migliori, perché la scrittura nella memoria principale è molto più lenta della scrittura nella cache della cpu e i dati potrebbero essere brevi durante (i mezzi potrebbero cambiare di nuovo prima, e non c'è bisogno di mettere la vecchia versione in memoria). È complesso, ma più sofisticato, la maggior parte della memoria nelle moderne CPU utilizza questo criterio.
Eric Wang

Vedo che è stata data una risposta esplicativa. Ti consiglio di guardare i tag Write-Allocate, Write-NoAllocate dopo aver coperto l'algoritmo di write-back.
Çağlayan DÖKME

La risposta alla tua domanda è che con il caching write-through, quando si scrive all'interno dello stesso blocco, è necessaria solo una scrittura nella memoria principale. Vedi la mia risposta per i dettagli.
qwr

Risposte:


111

Il vantaggio della scrittura nella memoria principale è che semplifica la progettazione del sistema informatico. Con la scrittura, la memoria principale ha sempre una copia aggiornata della riga. Quindi, quando viene eseguita una lettura, la memoria principale può sempre rispondere con i dati richiesti.

Se viene utilizzato il write-back, a volte i dati aggiornati si trovano nella cache del processore e talvolta nella memoria principale. Se i dati si trovano in una cache del processore, tale processore deve impedire alla memoria principale di rispondere alla richiesta di lettura, poiché la memoria principale potrebbe avere una copia obsoleta dei dati. Questo è più complicato della scrittura.

Inoltre, il write-through può semplificare il protocollo di coerenza della cache perché non necessita dello stato di modifica . Lo stato Modifica registra che la cache deve riscrivere la riga della cache prima che invalidi o rimuova la riga. In write-through una riga della cache può sempre essere invalidata senza riscrivere poiché la memoria ha già una copia aggiornata della riga.

Un'altra cosa: su un'architettura write-back, il software che scrive su registri I / O mappati in memoria deve eseguire passaggi aggiuntivi per assicurarsi che le scritture vengano immediatamente inviate dalla cache. Altrimenti le scritture non sono visibili al di fuori del core fino a quando la linea non viene letta da un altro processore o la linea non viene rimossa.


7
Per l'I / O mappato in memoria, questi indirizzi vengono in genere mappati come non nella cache. La scrittura può essere utilizzata anche per aumentare l'affidabilità (ad esempio, se L1 ha solo la protezione di parità e L2 ha ECC). La scrittura è anche più popolare per le cache più piccole che non utilizzano l'allocazione di scrittura (ovvero, una mancata scrittura non alloca il blocco alla cache, riducendo potenzialmente la domanda di capacità L1 e larghezza di banda L2 di lettura / riempimento L1) poiché gran parte dell'hardware il requisito per la scrittura è già presente per tale scrittura in giro.
Paul A. Clayton,

1
è possibile verificare se il mio metodo di cache nel mio core è write-back o write-through?
ArtificiallyIntelligence

4
Può essere fuorviante affermare che la riscrittura è più complessa perché il processore deve impedire alla memoria principale di rispondere alla richiesta di lettura. È più importante che la cache tenga traccia di quali dati sono dati (non allineati con la memoria principale) e cosa no usando "dirty bit", quindi è possibile non controllare affatto la memoria principale.
steviejay

@Shaowu "lshw" comando che mostra le capacità della cache come "
riscrittura

Continuo a non capire quali siano i veri passaggi utilizzati nella riscrittura, ma so solo che è complicato ... Potresti fornire maggiori risorse / dettagli a riguardo?
qwerty9898

10

Diamo un'occhiata a questo con l'aiuto di un esempio. Supponiamo di avere una cache mappata direttamente e di utilizzare la politica di riscrittura. Quindi abbiamo un bit valido, un bit sporco, un tag e un campo dati in una riga della cache. Supponiamo di avere un'operazione: scrivi A (dove A è mappato alla prima riga della cache).

Quello che succede è che i dati (A) dal processore vengono scritti nella prima riga della cache. Vengono impostati i bit validi e i bit dei tag. Il dirty bit è impostato su 1.

Dirty bit indica semplicemente che la riga della cache è stata scritta dall'ultima volta che è stata inserita nella cache!

Supponiamo ora che venga eseguita un'altra operazione: leggi E (dove E è anche mappato sulla prima riga della cache)

Poiché abbiamo una cache mappata direttamente, la prima riga può essere semplicemente sostituita dal blocco E che verrà portato dalla memoria. Ma poiché l'ultimo blocco scritto nella riga (blocco A) non è ancora stato scritto nella memoria (indicato dal bit sporco), quindi il controller della cache eseguirà prima una riscrittura nella memoria per trasferire il blocco A in memoria, quindi sostituirà la riga con il blocco E emettendo un'operazione di lettura in memoria. il bit sporco è ora impostato su 0.

Quindi la politica di riscrittura non garantisce che il blocco sarà lo stesso in memoria e nella riga della cache associata. Tuttavia, ogni volta che la riga sta per essere sostituita, viene eseguita inizialmente una riscrittura.

Una politica di scrittura è esattamente l'opposto. In base a ciò, la memoria avrà sempre dati aggiornati. Cioè, se il blocco della cache viene scritto, anche la memoria verrà scritta di conseguenza. (nessun uso di pezzi sporchi)


7

forse questo articolo può aiutarti a collegarti qui

Write-through: la scrittura viene eseguita in modo sincrono sia nella cache che nell'archivio di backup.

Write-back (o write-behind): la scrittura viene eseguita solo nella cache. Un blocco della cache modificato viene riscritto nell'archivio, appena prima di essere sostituito.

Write-through: quando i dati vengono aggiornati, vengono scritti sia nella cache che nell'archivio back-end. Questa modalità è facile da usare ma è lenta nella scrittura dei dati perché i dati devono essere scritti sia nella cache che nella memoria.

Write-back: quando i dati vengono aggiornati, vengono scritti solo nella cache. I dati modificati vengono scritti nell'archivio back-end solo quando i dati vengono rimossi dalla cache. Questa modalità ha una velocità di scrittura dei dati elevata ma i dati andranno persi se si verifica un'interruzione di corrente prima che i dati aggiornati vengano scritti nella memoria.


3

Il write-back e il write-through descrivono i criteri quando si verifica un hit di scrittura , ovvero quando la cache dispone delle informazioni richieste. In questi esempi, si presume che un singolo processore stia scrivendo nella memoria principale con una cache.

Scrittura: le informazioni vengono scritte nella cache e nella memoria e la scrittura termina quando entrambe sono terminate. Questo ha il vantaggio di essere più semplice da implementare e la memoria principale è sempre coerente (in sincronia) con la cache (per il caso monoprocessore - se qualche altro dispositivo modifica la memoria principale, questa politica non è sufficiente) e una lettura mancante non risulta mai in scritture nella memoria principale. L'ovvio svantaggio è che ogni scrittura deve fare due scritture, una delle quali accede alla memoria principale più lenta.

Write-back: le informazioni vengono scritte in un blocco nella cache. Il blocco della cache modificato viene scritto in memoria solo quando viene sostituito (in effetti, una scrittura lenta ). Un bit speciale per ogni blocco della cache, il dirty bit , indica se il blocco della cache è stato modificato o meno mentre si trovava nella cache. Se il dirty bit non è impostato, il blocco della cache è "pulito" e una mancata scrittura non deve scrivere il blocco in memoria.

Il vantaggio è che le scritture possono avvenire alla velocità della cache e se la scrittura all'interno dello stesso blocco è necessaria solo una scrittura nella memoria principale (quando il blocco precedente viene sostituito). Gli svantaggi sono che questo protocollo è più difficile da implementare, la memoria principale può non essere coerente (non sincronizzata) con la cache e le letture che comportano la sostituzione possono causare scritture di blocchi sporchi nella memoria principale.

Le politiche per una mancata scrittura sono dettagliate nel mio primo collegamento.

Questi protocolli non si prendono cura dei casi con più processori e più cache, come è comune nei processori moderni. Per questo, sono necessari meccanismi di coerenza della cache più complicati . Le cache write-through hanno protocolli più semplici poiché una scrittura nella cache si riflette immediatamente nella memoria.

Buone risorse:


0

Il write-back è più complesso e richiede un complicato Cache Coherence Protocol (MOESI), ma ne vale la pena perché rende il sistema veloce ed efficiente.

L'unico vantaggio del Write-Through è che rende l'implementazione estremamente semplice e non è richiesto alcun complicato protocollo di coerenza della cache.


1
WT ha ancora bisogno di un protocollo di coerenza. Un archivio da un core deve ancora invalidare le copie in altre cache in modo che non continuino a leggere i dati obsoleti a tempo indeterminato. Atomic RMW necessita di un supporto speciale. Tutto questo è più facile con WT, penso, ma la coerenza richiesta è ancora un po 'complicata.
Peter Cordes

O forse stavi parlando di un sistema single-core con una gerarchia di cache di L1 / L2 (e forse di più). In tal caso, non è necessario utilizzare MESI / MOESI per le cache interne che vengono caricate attraverso le cache esterne, a meno che non si desideri supportare DMA coerente con la cache che può accedere alla direzione della cache più esterna. Ma poi hai ancora bisogno di coerenza per una scrittura DMA per invalidare la cache interna.
Peter Cordes,

1
Il protocollo di coerenza della cache è necessario solo se è necessario il supporto per più cache / processori o se qualcosa influisce sulla memoria come DMA. Il write-through ha i suoi vantaggi anche per i sistemi a processore singolo, ovvero la velocità di scrittura.
qwr

Per DMA il sistema operativo può svuotare esplicitamente la cache dopo l'I / O. Essendo un software è meno efficiente.
qwr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.