Cache koherencia
A gyorsítótár segítségével javítható az adott erőforrás elérésének teljesítménye. Ha több ilyen gyorsítótár van ugyanahhoz az erőforráshoz, mint a képen látható, az problémákhoz vezethet. A gyorsítótár-koherencia vagy Cache coherency (gyorsítótár-koherencia) többféle módon is biztosítható, hogy az erőforrás összes gyorsítótárában ugyanazok az adatok legyenek, és a gyorsítótárakban lévő adatoknak legyen értelme (ezt nevezzük adatintegritásnak). A gyorsítótár-koherencia a memóriakoherencia speciális esete.
Problémák merülhetnek fel, ha egy közös memóriaforrásnak több gyorsítótár van, mivel a gyorsítótárban lévő adatoknak már nem lesz értelme, vagy az egyik gyorsítótárban már nem ugyanazok az adatok vannak, mint a többiben. Egy gyakori eset, amikor ez a probléma előfordul, a CPU-k gyorsítótárai egy többprocesszoros rendszerben. Amint az ábrán látható, ha a felső kliensnek van egy memóriablokk másolata egy korábbi olvasásból, és az alsó kliens megváltoztatja ezt a memóriablokkot, a felső kliens egy érvénytelen memória gyorsítótárral maradhat,anélkül, hogy tudna róla. A gyorsítótár-koherencia az ilyen konfliktusok kezelésére és a gyorsítótár és a memória közötti konzisztencia fenntartására szolgál.


Több közös erőforrás gyorsítótárak
Meghatározás
A koherencia határozza meg az azonos memóriahelyre történő olvasás és írás viselkedését. A gyorsítótárak akkor koherensek, ha az alábbi feltételek mindegyike teljesül:
- Amikor egy P processzor egy X helyet olvas, miután írt az adott helyre, P-nek meg kell kapnia az általa írt értéket, ha más processzor nem írt más értéket arra a helyre. Ez monoprocesszoros rendszerekre is igaz, ez azt jelenti, hogy a memória képes megtartani egy beírt értéket.
- Tegyük fel, hogy van két processzor, P 1és P2, és P1 írt egy X1 értéket, és utána P 2írt egy X2 értéket, ha P1 olvassa az értéket, akkor a P2 által írt X2 értéket kell kapnia, és nem az általa írt X1 értéket, ha nincs más írás a kettő között. Ez azt jelenti, hogy a memória nézete koherens. Ha a P2 által végzett írás után a processzorok ugyanazt a régi értéket olvashatják, akkor a memória nem lenne koherens.
- Egyszerre csak egy írást lehet végezni a memória egy adott helyére. Ha több írás van, akkor azoknak egymás után kell történniük. Más szóval, ha az X hely két különböző értéket, A-t és B-t kapott, ebben a sorrendben, bármelyik két processzor által, a processzorok soha nem olvashatják az X helyet B-ként, majd A-ként olvashatják.
Ezeket a feltételeket úgy határozzuk meg, hogy feltételezzük, hogy az olvasási és írási műveletek azonnal történnek. Ez azonban a számítógépes hardverben a memória késleltetése és az architektúra egyéb szempontjai miatt nem történik meg. Az X processzor által végzett írást nem biztos, hogy az Y processzor által végzett olvasás látja, ha az olvasás az írást követő nagyon kis időn belül történik. A memória konzisztencia modellje meghatározza, hogy egy beírt értéket a többi processzor által végrehajtott következő olvasási utasításnak mikor kell látnia.
Cache koherencia mechanizmusok
- A könyvtáralapú koherencia-mechanizmusok egy központi könyvtárat tartanak fenn a gyorsítótárazott blokkokból.
- A szaglászás az a folyamat, amelynek során minden gyorsítótár figyeli a címsorokat a gyorsítótárában lévő memóriahelyekre történő hozzáférések tekintetében. Ha olyan helyre írási műveletet észlelünk, amelyről a gyorsítótárnak van egy másolata, a gyorsítótár-vezérlő érvényteleníti a szimatolt memóriahely saját másolatát.
- A snarfing az, amikor a gyorsítótár-vezérlő a címet és az adatokat is figyeli, és megpróbálja frissíteni egy memóriahely saját másolatát, amikor egy második master módosítja a főmemóriában lévő helyet.
Az elosztott megosztott memóriarendszerek ezeket a mechanizmusokat utánozzák, hogy a lazán összekapcsolt rendszerekben a memóriablokkok közötti konzisztenciát fenntarthassák.
A két leggyakrabban vizsgált koherencia típus a szaglászás és a címtár alapú. Mindegyiknek megvannak a maga előnyei és hátrányai. A szimatoló protokollok általában gyorsabbak, ha elegendő sávszélesség áll rendelkezésre, mivel minden tranzakció egy kérés/válasz, amelyet minden processzor lát. Hátránya, hogy a snooping nem skálázható. Minden kérést el kell küldeni a rendszer összes csomópontjának. Ahogy a rendszer egyre nagyobb lesz, a (logikai vagy fizikai) busz méretének és az általa biztosított sávszélességnek is növekednie kell. A könyvtárak viszont általában hosszabb késleltetési idővel rendelkeznek (3 ugrásos kérés/továbbítás/válaszolás esetén), de sokkal kisebb sávszélességet használnak, mivel az üzenetek pontról pontra, nem pedig broadcast módon kerülnek továbbításra. Emiatt a nagyobb rendszerek (>64 processzor) közül sokan használják ezt a fajta gyorsítótár-koherenciát.
Kérdések és válaszok
K: Mi az a cache-koherencia?
V: A gyorsítótár-koherencia annak biztosítására utal, hogy egy erőforrás összes gyorsítótárában ugyanazok az adatok legyenek, és a gyorsítótárakban lévő adatok konzisztensek legyenek (adatintegritás).
K: Mi a célja a gyorsítótár-koherenciának?
V: A gyorsítótár-koherencia célja a közös memóriaerőforrás több gyorsítótára közötti konfliktusok kezelése, valamint a gyorsítótár és a memória közötti konzisztencia fenntartása.
K: Milyen következményei lehetnek a gyorsítótár-koherencia hiányának?
V: A gyorsítótár-koherencia nélkül előfordulhat, hogy a gyorsítótárban lévő adatoknak már nincs értelme, vagy az egyik gyorsítótárban már nem ugyanazok az adatok vannak, mint a többiben, ami következetlenségeket és hibákat eredményezhet.
K: Mi az a gyakori eset, amikor a gyorsítótár-koherencia problémái jelentkeznek?
V: Egy gyakori eset, amikor a gyorsítótár-koherenciával kapcsolatos problémák előfordulnak, a többprocesszoros rendszerben a CPU-k gyorsítótárát érinti.
K: Hogyan működik a gyorsítótár-koherencia?
V: A gyorsítótár-koherencia úgy működik, hogy különböző módszerekkel biztosítja, hogy egy erőforrás összes gyorsítótárában ugyanazok az adatok legyenek, és hogy a gyorsítótárakban lévő adatok konzisztensek legyenek.
K: Mit értünk memóriakoherencia alatt?
V: A memóriakoherencia az adatok konzisztenciáját jelenti egy megosztott memóriaerőforráson belül.
K: Hogyan javíthatja a gyorsítótár-koherencia a teljesítményt?
V: A gyorsítótár-koherencia javíthatja a teljesítményt azáltal, hogy gyorsabb és hatékonyabb hozzáférést tesz lehetővé egy adott erőforráshoz.