Che cos’è la coerenza della cache?

La coerenza della cache è il problema naturale che si sviluppa quando più agenti accedono e modificano il set di dati di un sistema. L’area principale dell’architettura dei computer in cui questo diventa un problema è nei computer multiprocessore. Ogni processore in un computer multiprocessore ha la propria cache che carica e memorizza le informazioni dalla memoria ad accesso casuale (RAM). Quando due processori accedono alla stessa area di memoria, la coerenza della cache andrebbe persa se non si adottassero determinate precauzioni.

Senza la coerenza della cache, un sistema multiprocessore non sarebbe in grado di funzionare. Esistono diversi metodi che sono stati sviluppati per affrontare questo problema ed evitare potenziali problemi. Coerenza basata su directory, snooping e snarfing sono tre metodi utilizzati per prevenire la perdita di coerenza della cache.

La coerenza basata su directory funge da filtro per garantire la coerenza. I dati vengono inseriti in una porzione di memoria accessibile a tutti i processori. Quando le informazioni archiviate in quell’area di memoria vengono modificate, il sistema aggiornerà le cache o le invaliderà.

Lo snooping richiede al processore di monitorare tutti gli accessi alle posizioni di memoria che sono state memorizzate nella cache. Ciò consente al processore di sapere quando si è verificata un’operazione di scrittura. Sapendo quando si verifica un’operazione di scrittura, il processore può aggiornare la sua cache.

Snarfing è abbastanza simile allo snooping. Lo snarfing implica non solo il monitoraggio degli accessi alle posizioni di memoria che sono state memorizzate nella cache, ma anche il monitoraggio delle informazioni effettive archiviate nella memoria. Quando si verifica una scrittura in memoria, la cache può essere aggiornata con le nuove informazioni.

I sistemi di coerenza basati su directory hanno una latenza relativamente elevata, con conseguente elaborazione più lenta. Requisiti di larghezza di banda inferiori consentono ai sistemi di coerenza basati su directory di essere pratici in applicazioni su larga scala di coerenza della cache. Più processori utilizza un sistema, maggiori sono i vantaggi che può avere dall’utilizzo di un sistema di coerenza basato su directory.
Snooping è un metodo molto più veloce. Questo metodo richiede più larghezza di banda rispetto all’approccio basato su directory. Questo metodo può essere utilizzato efficacemente in sistemi che hanno relativamente pochi processori.
Lo snarfing non viene solitamente utilizzato come metodo per mantenere la coerenza della cache. Ciò è dovuto principalmente al fatto che lo snarfing richiede l’utilizzo di più risorse rispetto ai metodi di snooping e basati su directory. Affinché un sistema di snarfing funzioni, deve tenere traccia sia degli indirizzi di memoria che dei dati memorizzati in quelle aree di memoria. La quantità di larghezza di banda e di elaborazione assorbita da questo metodo rende indesiderabile per la maggior parte delle applicazioni il mantenimento della coerenza della cache.