Coerența cache-ului
O memorie cache poate fi utilizată pentru a îmbunătăți performanța accesării unei anumite resurse. Atunci când există mai multe astfel de cache-uri pentru aceeași resursă, așa cum se arată în imagine, acest lucru poate duce la probleme. Coerența memoriei cache sau Coerența memoriei cache se referă la o serie de modalități prin care se asigură că toate memoriile cache ale resursei au aceleași date și că datele din memoriile cache au sens (numită integritate a datelor). Coerența cache-ului este un caz special de coerență a memoriei.
Pot apărea probleme dacă există mai multe memorii cache pentru o resursă de memorie comună, deoarece datele din memoria cache ar putea să nu mai aibă sens sau o memorie cache ar putea să nu mai aibă aceleași date ca și celelalte. Un caz obișnuit în care apare această problemă este memoria cache a unităților centrale de procesare dintr-un sistem multiprocesare. După cum se poate vedea în figură, dacă clientul de sus are o copie a unui bloc de memorie de la o citire anterioară și clientul de jos schimbă acel bloc de memorie, clientul de sus ar putea rămâne cu o memorie cache invalidă,fără să știe. Coerența cache-ului are rolul de a gestiona astfel de conflicte și de a menține coerența între cache și memorie.
Memorii cache multiple de resurse partajate
Definiție
Coerența definește comportamentul citirilor și scrierilor în aceeași locație de memorie. Memoriile cache sunt coerente, dacă sunt îndeplinite toate condițiile următoare:
- Atunci când un procesor P citește o locație X, după ce a scris în acea locație, P trebuie să primească valoarea pe care a scris-o, dacă niciun alt procesor nu a scris o altă valoare în acea locație. Acest lucru este valabil și pentru sistemele monoprocesor, ceea ce înseamnă că memoria este capabilă să păstreze o valoare scrisă.
- Să presupunem că există două procesoare, P 1și P2, și că P1 a scris o valoare X1, iar ulterior, P a 2scris o valoare X2, dacă P 1citește valoarea, trebuie să primească valoarea scrisă de P2, X2, și nu valoarea scrisă de el, X1, dacă nu există alte scrieri între cele două. Aceasta înseamnă că vizualizarea memoriei este coerentă. În cazul în care procesoarele pot citi aceeași valoare veche după scrierea făcută de P2, memoria nu ar fi coerentă.
- Nu poate exista decât o singură scriere într-o anumită locație din memorie la un moment dat. Dacă există mai multe scrieri, acestea trebuie să aibă loc una după alta. Cu alte cuvinte, dacă locația X a primit două valori diferite A și B, în această ordine, de către oricare două procesoare, procesoarele nu pot citi niciodată locația X ca B și apoi să o citească ca A. Locația X trebuie să fie văzută cu valorile A și B în această ordine.
Aceste condiții sunt definite presupunând că operațiile de citire și scriere se efectuează instantaneu. Cu toate acestea, acest lucru nu se întâmplă în hardware-ul calculatoarelor din cauza latenței memoriei și a altor aspecte ale arhitecturii. Este posibil ca o scriere efectuată de procesorul X să nu fie văzută de o citire efectuată de procesorul Y dacă citirea se face într-un interval de timp foarte scurt după ce a fost efectuată scrierea. Modelul de consistență a memoriei definește momentul în care o valoare scrisă trebuie să fie văzută de o instrucțiune de citire ulterioară efectuată de celelalte procesoare.
Mecanisme de coerență a cache-ului
- Mecanismele de coerență bazate pe directoare mențin un director central al blocurilor din memoria cache.
- Snooping este procesul prin care fiecare memorie cache monitorizează liniile de adrese pentru accesarea locațiilor de memorie care se află în memoria sa cache. Atunci când se observă o operațiune de scriere la o locație a cărei copie este deținută de o memorie cache, controlerul de memorie cache își invalidează propria copie a locației de memorie "snooped".
- Snarfing este situația în care un controler de memorie cache urmărește atât adresa, cât și datele în încercarea de a-și actualiza propria copie a unei locații de memorie atunci când un al doilea maestru modifică o locație din memoria principală.
Sistemele de memorie partajată distribuită imită aceste mecanisme, astfel încât să poată menține coerența între blocurile de memorie în sistemele slab cuplate.
Cele două tipuri cele mai comune de coerență care sunt studiate de obicei sunt Snooping și Directory-based. Fiecare dintre acestea are propriile beneficii și dezavantaje. Protocoalele Snooping tind să fie mai rapide, dacă este disponibilă o lățime de bandă suficientă, deoarece toate tranzacțiile sunt o cerere/răspuns văzută de toate procesoarele. Dezavantajul este că snooping-ul nu este scalabil. Fiecare cerere trebuie să fie transmisă tuturor nodurilor dintr-un sistem. Pe măsură ce sistemul devine mai mare, dimensiunea busului (logic sau fizic) și lățimea de bandă pe care o oferă trebuie să crească. Pe de altă parte, anuarele tind să aibă latențe mai mari (cu o cerere/trimitere/răspuns de 3 hopuri), dar utilizează mult mai puțină lățime de bandă, deoarece mesajele sunt transmise de la un punct la altul și nu sunt difuzate. Din acest motiv, multe dintre sistemele mai mari (>64 de procesoare) utilizează acest tip de coerență a cache-ului.
Întrebări și răspunsuri
Î: Ce este coerența cache-ului?
R: Coerența cache-ului se referă la asigurarea faptului că toate cache-urile unei resurse au aceleași date și că datele din cache-uri sunt consecvente (integritatea datelor).
Î: Care este scopul coerenței cache-ului?
R: Scopul coerenței memoriei cache este de a gestiona conflictele dintre mai multe memorii cache ale unei resurse de memorie comune și de a menține consecvența între memoria cache și memorie.
Î: Care pot fi consecințele lipsei de coerență a memoriei cache?
R: În lipsa coerenței cache-ului, datele din cache pot să nu mai aibă sens sau un cache poate să nu mai aibă aceleași date ca și celelalte, ceea ce poate duce la inconsecvențe și erori.
Î: Care este un caz obișnuit în care apar probleme cu coerența cache-ului?
R: Un caz obișnuit în care apar probleme de coerență a memoriei cache este memoria cache a unităților centrale de procesare dintr-un sistem multiprocesare.
Î: Cum funcționează coerența cache-ului?
R: Coerența memoriei cache funcționează prin asigurarea faptului că toate memoriile cache ale unei resurse au aceleași date și că datele din memoriile cache sunt consecvente prin diferite metode.
Î: Ce se înțelege prin coerența memoriei?
R: Coerența memoriei se referă la consecvența datelor într-o resursă de memorie partajată.
Î: Cum poate coerența memoriei cache să îmbunătățească performanța?
R: Coerența memoriei cache poate îmbunătăți performanța prin faptul că permite un acces mai rapid și mai eficient la o anumită resursă.