Cache coherentie

Een cache kan worden gebruikt om de prestaties van de toegang tot een bepaalde bron te verbeteren. Wanneer er meerdere van dergelijke caches voor dezelfde bron zijn, zoals in de afbeelding, kan dit tot problemen leiden. Cachecoherentie of Cache coherency verwijst naar een aantal manieren om ervoor te zorgen dat alle caches van de bron dezelfde gegevens hebben, en dat de gegevens in de caches zinvol zijn (dit wordt gegevensintegriteit genoemd). Cachecoherentie is een speciaal geval van geheugencoherentie.

Er kunnen problemen ontstaan als er veel caches van een gemeenschappelijke geheugenbron zijn, omdat gegevens in de cache dan geen zin meer hebben, of omdat één cache niet meer dezelfde gegevens heeft als de andere. Een veel voorkomend geval waarin dit probleem zich voordoet is de cache van CPU's in een multiprocessing systeem. Zoals te zien is in de figuur, als de bovenste client een kopie heeft van een geheugenblok van een vorige leesbeurt en de onderste client verandert dat geheugenblok, dan kan de bovenste client achterblijven met een ongeldige cache van het geheugen, zonder dat hij het weet. Cache coherentie is er om zulke conflicten op te lossen en consistentie tussen cache en geheugen te behouden.

Meervoudige Caches van Gedeelde Bronnen
Meervoudige Caches van Gedeelde Bronnen

Definitie

Coherentie definieert het gedrag van lezen en schrijven naar dezelfde geheugenlokatie. De caches zijn coherent, als aan alle volgende voorwaarden is voldaan:

  1. Wanneer een processor P een plaats X leest, moet P, na naar die plaats te hebben geschreven, de waarde krijgen die hij heeft geschreven, indien geen andere processor een andere waarde naar die plaats heeft geschreven. Dit geldt ook voor monoprocessor-systemen, het betekent dat het geheugen in staat is een geschreven waarde te behouden.
  2. Stel dat er twee processoren zijn, P1 en P2, en P1 schreef een waarde X1, en daarna, P2 schreef een waarde X2, als P1 de waarde leest, moet het de door P2 geschreven waarde krijgen, X2, en niet de waarde die het zelf schreef, X1, als er geen andere schrijfacties tussen de twee zijn. Dit betekent dat het beeld van het geheugen coherent is. Als processoren dezelfde oude waarde kunnen lezen na de schrijfactie van P2, zou het geheugen niet coherent zijn.
  3. Er kan maar één keer tegelijk naar een bepaalde plaats in het geheugen worden geschreven. Als er meerdere schrijfacties zijn, moeten deze na elkaar plaatsvinden. Met andere woorden, als locatie X twee verschillende waarden A en B heeft gekregen, in deze volgorde, door twee willekeurige processoren, kunnen de processoren locatie X nooit lezen als B en daarna lezen als A. De locatie X moet worden gezien met de waarden A en B in deze volgorde.

Deze voorwaarden zijn gedefinieerd in de veronderstelling dat de lees- en schrijfoperaties ogenblikkelijk worden uitgevoerd. In computerhardware gebeurt dit echter niet vanwege geheugenlatentie en andere aspecten van de architectuur. Het is mogelijk dat een schrijfoperatie van processor X niet wordt gezien door een leesoperatie van processor Y als de leesoperatie plaatsvindt binnen een zeer korte tijd nadat de schrijfoperatie is uitgevoerd. Het geheugenconsistentiemodel definieert wanneer een geschreven waarde moet worden gezien door een volgende leesinstructie van de andere processoren.

Cache coherentie mechanismen

  • Coherentiemechanismen op basis van een directory houden een centrale directory van blokken in de cache bij.
  • Snooping is het proces waarbij elke cache adresregels controleert op toegangen tot geheugenlocaties die zich in zijn cache bevinden. Wanneer een schrijfoperatie wordt waargenomen op een plaats waar een cache een kopie van heeft, maakt de cache-controller zijn eigen kopie van de gesnoopte geheugenplaats ongeldig.
  • Bij snarfing kijkt een cache-controller zowel naar adres als naar gegevens in een poging zijn eigen kopie van een geheugenlokatie bij te werken wanneer een tweede master een lokatie in het hoofdgeheugen wijzigt.

Gedistribueerde gedeelde geheugensystemen bootsen deze mechanismen na, zodat zij consistentie kunnen handhaven tussen geheugenblokken in losjes gekoppelde systemen.

De twee meest voorkomende soorten coherentie die gewoonlijk worden bestudeerd zijn Snooping en Directory-based. Elk heeft zijn eigen voor- en nadelen. Snooping-protocollen hebben de neiging sneller te zijn, als er voldoende bandbreedte beschikbaar is, omdat alle transacties een verzoek/antwoord zijn dat door alle processoren wordt gezien. Het nadeel is dat snooping niet schaalbaar is. Elk verzoek moet naar alle nodes in een systeem worden uitgezonden. Naarmate het systeem groter wordt, moet de grootte van de (logische of fysieke) bus en de bandbreedte die deze levert toenemen. Directories daarentegen hebben de neiging om langere latenties te hebben (met een 3 hop verzoek/forward/respond) maar gebruiken veel minder bandbreedte omdat berichten van punt tot punt gaan en niet worden uitgezonden. Om deze reden gebruiken veel van de grotere systemen (>64 processoren) dit type cache coherentie.


AlegsaOnline.com - 2020 / 2021 - License CC3