Che cos'è la coerenza della cache?
La coerenza della cache è il problema naturale che si sviluppa quando si accede e si modifica il set di dati di un sistema da più agenti. L'area primaria dell'architettura informatica in cui ciò diventa un problema è rappresentata dai 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 fossero state prese alcune precauzioni.
Senza la coerenza della cache, un sistema multiprocessore non sarebbe in grado di funzionare. Esistono diversi metodi sviluppati per affrontare questo problema ed evitare potenziali problemi. Coerenza, snooping e snarfing basati su directory sono tre metodi utilizzati per prevenire la perdita di coerenza della cache.
La coerenza basata su directory funziona come filtro al fine di garantire coerenza. I dati vengono inseriti in una porzione di memoria accessibile a tutti i processori. Quando le informazioni archiviate all'interno di 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.
Il ringhio è abbastanza simile allo snooping. Snarfing comporta non solo il monitoraggio degli accessi alle posizioni di memoria che sono stati memorizzati nella cache, ma anche il monitoraggio delle informazioni effettive archiviate nella memoria. Quando si verifica una scrittura della 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. I requisiti di larghezza di banda inferiore consentono ai sistemi di coerenza basati su directory di essere pratici in applicazioni su larga scala della coerenza della cache. Più processori utilizza un sistema, più vantaggi può avere dall'uso di un sistema di coerenza basato su directory.
Lo snooping è un metodo molto più veloce. Questo metodo richiede più larghezza di banda rispetto all'approccio basato su directory. Questo metodo è in grado di 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 snarfing richiede più risorse da utilizzare rispetto ai metodi snooping e basati su directory. Affinché un sistema 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 ed elaborazione utilizzata da questo metodo lo rende indesiderabile per la maggior parte delle applicazioni per mantenere la coerenza della cache.