Cachekoherens
I datorarkitektur är cachekoherens enhetligheten hos delad resursdata som hamnar lagrad i flera lokala cachar . När klienter i ett system upprätthåller cacher för en gemensam minnesresurs kan problem uppstå med osammanhängande data, vilket särskilt är fallet med processorer i ett multibearbetningssystem .
I illustrationen till höger, tänk på att båda klienterna har en cachad kopia av ett visst minnesblock från en tidigare läsning. Antag att klienten längst ner uppdaterar/ändrar minnesblocket, klienten på toppen kan lämnas med en ogiltig minnescache utan att någon notifiering om ändringen. Cachekoherens är avsett att hantera sådana konflikter genom att upprätthålla en sammanhängande bild av datavärdena i flera cacher.
Översikt
I ett multiprocessorsystem med delat minne med ett separat cacheminne för varje processor är det möjligt att ha många kopior av delad data: en kopia i huvudminnet och en i den lokala cachen för varje processor som begärde det. När en av kopiorna av data ändras måste de andra kopiorna återspegla den förändringen. Cachekoherens är den disciplin som säkerställer att förändringarna i värdena för delade operander (data) sprids i hela systemet i tid.
Följande är kraven för cachekoherens:
- Write Propagation
- Ändringar av data i valfri cache måste överföras till andra kopior (av den cacheraden) i peer-cachen.
- Transaktionsserialisering
- Läser/skriver till en enda minnesplats måste ses av alla processorer i samma ordning.
Teoretiskt kan koherens utföras vid belastningen/butikens granularitet . Men i praktiken utförs det i allmänhet med granulariteten hos cacheblock.
Definition
Koherens definierar beteendet för läsning och skrivning till en enda adressplats.
En typ av data som förekommer samtidigt i olika cacheminne kallas cachekoherens, eller i vissa system, globalt minne.
I ett multiprocessorsystem, tänk på att mer än en processor har cachelagrat en kopia av minnesplatsen X. Följande villkor är nödvändiga för att uppnå cachekoherens:
- I en läsning gjord av en processor P till en plats X som följer en skrivning av samma processor P till X, utan att någon skrivning till X av en annan processor sker mellan skriv- och läsinstruktionerna gjorda av P, måste X alltid returnera värdet skriven av P.
- I en läsning gjord av en processor P1 till plats X som följer på en skrivning av en annan processor P2 till X, utan andra skrivningar till X gjorda av någon processor som sker mellan de två åtkomsterna och med läsning och skrivning tillräckligt åtskilda, måste X alltid returnera värdet skrivet av P2. Detta tillstånd definierar begreppet koherent syn på minnet. Att sprida skrivningarna till den delade minnesplatsen säkerställer att alla cachar har en sammanhängande bild av minnet. Om processor P1 läser det gamla värdet på X, även efter skrivningen av P2, kan vi säga att minnet är inkoherent.
Ovanstående villkor uppfyller de Write Propagation-kriterier som krävs för cachekoherens. De är dock inte tillräckliga eftersom de inte uppfyller villkoret för transaktionsserialisering. För att illustrera detta bättre, överväg följande exempel:
Ett multiprocessorsystem består av fyra processorer - P1, P2, P3 och P4, som alla innehåller cachade kopior av en delad variabel S vars initiala värde är 0. Processor P1 ändrar värdet på S (i sin cachade kopia) till 10, varefter processor P2 ändrar värdet på S i sin egen cachade kopia till 20. Om vi säkerställer enbart skrivförökning kommer P3 och P4 säkert att se ändringarna som gjorts av S av P1 och P2. Emellertid kan P3 se ändringen gjord av P1 efter att ha sett ändringen gjord av P2 och följaktligen returnera 10 vid en läsning till S. P4 å andra sidan kan se ändringar gjorda av P1 och P2 i den ordning som de görs och därmed returnera 20 vid en läsning till S . Processorerna P3 och P4 har nu en osammanhängande bild av minnet.
Därför, för att uppfylla transaktionsserialisering och därmed uppnå cachekoherens, måste följande villkor tillsammans med de två föregående som nämns i detta avsnitt uppfyllas:
- Skriver till samma plats måste sekvenseras. Med andra ord, om plats X fick två olika värden A och B, i denna ordning, från två valfria processorer, kan processorerna aldrig läsa plats X som B och sedan läsa den som A. Platsen X måste ses med värdena A och B i den ordningen.
Den alternativa definitionen av ett koherent system är via definitionen av sekventiell konsistensminnesmodell : "det koherenta cachesystemet måste verka för att exekvera alla trådars laddningar och lagrar till en enda minnesplats i en total ordning som respekterar programordningen för varje tråd" . Således är den enda skillnaden mellan det koherenta cachesystemet och det sekventiellt konsistenta systemet i antalet adressplatser som definitionen talar om (enkel minnesplats för ett koherent cachesystem och alla minnesplatser för ett sekventiellt konsistent system).
En annan definition är: "en multiprocessor är cachekonsistent om alla skrivningar till samma minnesplats utförs i någon sekventiell ordning".
Sällan, men speciellt i algoritmer, kan koherens istället hänvisa till referensplatsen . Flera kopior av samma data kan finnas i olika cache samtidigt och om processorer tillåts uppdatera sina egna kopior fritt kan en inkonsekvent bild av minnet resultera.
Koherensmekanismer
De två vanligaste mekanismerna för att säkerställa koherens är snooping och katalogbaserade , var och en har sina egna fördelar och nackdelar. Snoopningsbaserade protokoll tenderar att vara snabbare, om tillräckligt med bandbredd är tillgänglig, eftersom alla transaktioner är en begäran/svar som ses av alla processorer. Nackdelen är att snokning inte är skalbar. Varje begäran måste sändas till alla noder i ett system, vilket innebär att när systemet blir större måste storleken på den (logiska eller fysiska) bussen och den bandbredd som den tillhandahåller växa. Kataloger, å andra sidan, tenderar att ha längre fördröjningar (med en begäran om 3 hopp/framåt/svara) men använder mycket mindre bandbredd eftersom meddelanden är punkt till punkt och inte sänds. Av denna anledning använder många av de större systemen (>64 processorer) denna typ av cachekoherens.
Snokar
- Snokning introducerades först 1983 och är en process där de enskilda cacharna övervakar adresslinjer för åtkomst till minnesplatser som de har cachat. Skriv -ogiltigförklara-protokollen och skrivuppdateringsprotokollen använder sig av denna mekanism.
- För snoopmekanismen reducerar ett snoopfilter snoopningstrafiken genom att upprätthålla ett flertal poster, som var och en representerar en cache-linje som kan ägas av en eller flera noder. När ersättning av en av posterna krävs, väljer snoopfiltret för ersättning av posten som representerar cache-raden eller -linjerna som ägs av de minsta noderna, vilket bestäms från en närvarovektor i var och en av posterna. En temporär eller annan typ av algoritm används för att förfina urvalet om mer än en cache-linje ägs av de minsta noderna.
Katalogbaserad
- I ett katalogbaserat system placeras de data som delas i en gemensam katalog som upprätthåller koherensen mellan cacharna. Katalogen fungerar som ett filter genom vilket processorn måste be om tillåtelse att ladda en post från primärminnet till dess cache. När en post ändras, uppdaterar eller ogiltigförklarar katalogen de andra cacharna med den posten.
Distribuerade delade minnessystem efterliknar dessa mekanismer i ett försök att upprätthålla överensstämmelse mellan minnesblock i löst kopplade system.
Koherensprotokoll
Koherensprotokoll tillämpar cachekoherens i multiprocessorsystem. Avsikten är att två klienter aldrig får se olika värden för samma delade data.
Protokollet ska implementera de grundläggande kraven på samstämmighet. Det kan skräddarsys för målsystemet eller applikationen.
Protokoll kan också klassificeras som snoopy eller katalogbaserade. Vanligtvis använde tidiga system katalogbaserade protokoll där en katalog skulle hålla reda på de data som delas och delarna. I snoopy-protokoll skickas transaktionsbegäran (för att läsa, skriva eller uppgradera) till alla processorer. Alla processorer snokar förfrågan och svarar på lämpligt sätt.
Skrivspridning i snoopy-protokoll kan implementeras med någon av följande metoder:
- Write-invalidate
- När en skrivoperation observeras till en plats som en cache har en kopia av, ogiltigförklarar cachekontrollern sin egen kopia av den snoopade minnesplatsen, vilket tvingar fram en läsning från huvudminnet av det nya värdet vid nästa åtkomst.
- Skriv-uppdatering
- När en skrivoperation observeras till en plats som en cache har en kopia av, uppdaterar cache-styrenheten sin egen kopia av den snoopade minnesplatsen med den nya datan.
Om protokolldesignen anger att när en kopia av delade data ändras måste alla andra kopior "uppdateras" för att återspegla ändringen, då är det ett skrivuppdateringsprotokoll. Om designen anger att en skrivning till en cachad kopia av någon processor kräver att andra processorer kasserar eller ogiltigförklarar sina cachade kopior, så är det ett skriv-ogiltigförklarande protokoll.
Skalbarhet är dock en brist hos broadcast-protokoll.
Olika modeller och protokoll har tagits fram för att upprätthålla koherens, såsom MSI , MESI (alias Illinois), MOSI , MOESI , MERSI , MESIF , Write-once , Synapse, Berkeley, Firefly och Dragon-protokollet . 2011 ARM Ltd AMBA 4 ACE för hantering av koherens i SoCs . AMBA CHI-specifikationen (Coherent Hub Interface) från ARM Ltd , som tillhör AMBA5-gruppen av specifikationer, definierar gränssnitten för anslutning av helt koherenta processorer.
Se även
- Konsistensmodell
- Katalogbaserad koherens
- Minnesspärr
- Icke-enhetlig minnesåtkomst (NUMA)
- Falsk delning
Vidare läsning
- Patterson, David ; Hennessy, John (2009). Datororganisation och design (4:e upplagan). Morgan Kaufmann . ISBN 978-0-12-374493-7 .
- Handy, Jim (1998). Cacheminnesboken (2:a upplagan). Morgan Kaufmann . ISBN 9780123229809 .
- Sorin, Daniel; Hill, Mark; Wood, David (2011). En primer om minneskonsistens och cachekoherens (PDF) . Morgan och Claypool. ISBN 978-1608455645 . Hämtad 20 oktober 2017 .
- Steinke, Robert C.; Nutt, Gary J. (1 september 2004). "En enhetlig teori om konsistens i delat minne". Journal of the ACM . 51 (5): 800–849. arXiv : cs/0208027 . doi : 10.1145/1017460.1017464 . S2CID 3206071 .