LTH LUNDS TEKNISKA HÖGSKOLA MESI protokollet och dess derivater Peter Persson 2015-12-08
Sammanfattning Dagens multicore processorer använder sig av ett flertal cacheminnen. Därför behövs det metoder för att se till att den lagrade datan är sammanhängande mellan de olika cacheminnena. En sätt att göra detta är att använda sig av MESI protokollet. Syftet med denna rapport är att undersöka och förklara hur MESI protokollet fungerar samt ta en titt på andra protokoll som har deriverat från MESI protokollet. De protokoll som undersöks i denna rapport utöver MESI protokollet är MSI, MOSI, MOESI, MERSI och MESIF.
Inledning I moderna datorsystem med multicore processorer eller multiprocessor system används ofta fler än ett cacheminne. Detta kan leda till problem med minnes-samstämmighet eller Cache Coherence. Till exempel om en processorkärna A tar data från primärminnet och lagrar det i cacheminne C1 för att användas i en beräkning. Sedan tar processorkärna B samma data från primärminnet och utför en beräkning som leder till ett nytt resultat, som sparas i cache C2. Nu skiljer sig datan i C1 och C2 mot varandra vilket kommer leda till vidare problem när A sedan ska utföra sina beräkningar. Ett sätt att undvika problem som dessa är att använda sig av cache coherence protokoll som MESI protokollet. Diskussion MESI protokollet är ett vanligt förekommande protokoll som används bland annat av Intel 64 arkitekturen. Den fungerar genom att alla cachelinjer markeras med en av fyra möjliga tillstånd: Modified, Exclusive, Shared, och Invalid. Därifrån kommer även namnet. Från början är alla cachelinjer markerade som Invalid. Detta innebär att de är oanvända och kan användas för att spara ny data. När data först hämtas från primärminnet och sparas i cachen markeras linjen som Exclusive. Det betyder att datan finns i endast ett cacheminne och den är den samma som datan i primärminnet. Om kärna A har data sparad i sitt cacheminne som är markerad Exclusive och en annan kärna, B, behöver tillgång till samma data kan den kopiera datan direkt till sitt eget cacheminne. Därefter markeras bägge cachelinjer som Shared vilket innebär att datan kan vara sparad i olika cacheminnen men är fortfarande den samma som i primärminnet. Cachelinjer som är markerade som Shared kan kastas och bli markerade som Invalid när som helst. Det sista tillståndet, Modified, markerar att en cachelinje har blivit ändrad av någon beräkning. Övergång till Modified är endast tillåtet om linjen tidigare var markerad som Exclusive. Om det istället var Shared måste de övriga cacheminnen som har datan sparad först markeras som Invalid så att gammal data inte används. Dessutom får inga fler läsningar av den relavanta minnesplatsen i primärminnet utföras innan den ändrade datan från cacheminnet har sparats tillbaka [1]. Det finns också ett flertal andra cache coherence protokoll.
Ett sådant är MSI protokollet som är ett enklare system som MESI är en utökning av. Skillnaden i stora drag är att MSI saknar ett Exclusive tillstånd. De resterande tre, Modified, Shared och Invalid fungerar likadant som i MESI. Nackdelen med att tillstånd Exclusive inte finns är att det ökar trafiken när man vill skriva till ett block som endast finns i en cache. Med MESI kan man enkelt övergå från Exclusive till Modified, men i MSI finns det endast Shared som alltid måste se till att inga andra cacheminnen har kvar gammal data. En annan utökning av MSI protkollet är MOSI. Modified, Shared, och Invalid fungerar här igen som i de tidigare nämnda protokollen men istället för ett Exclusive tillstånd finns det Owned. Om en cachelinje är markerad som Owned innebär det att datan den innehåller är den senaste och korrekta versionen av datan. Andra cacheminnen kan fortfarande ha den nuvarande eller äldre versioner av datan och vara markerade som Shared men endast en cachelinje med en viss data kan vara markerad som Owned i ett system, precis som Exclusive. Inkluderingen av Owned markören gör det möjligt att ha cachelinjer som är både Modified och Shared samtidigt. MOESI protokollet är sedan ett protkoll som använder alla de tidigare använda tillstånden och används bland annat av AMD64 arkitekturen [2].Fördelen med MOESI över tidigare protkoll är att efter en cachelinje har blivit modifierad behöver det inte sparas tillbaka till primärminnet innan det delas med de andra cacheminnena. Eftersom Owned markerar vilket som är det senast uppdaterade versionen av datan kan man skicka det till de andra cacheminnena och använda det. Uppdatering av primärminnet är fortfarande nödvändigt men med MOESI protokollet går det att skjuta upp. Dett finns även MERSI protkollet som används av PowerPC G4. Det fungerar som MESI men med ett femte tillstånd Recent. Cachelinjer markerade som Recent får inte användas av en processor och övergå till Modified innan processorn har begärt ägarskap över linjen vilket förhindrar andra kärnor eller processorer från att använda den. Ett protokoll som fungerar lite annorlunda är MESIF som används av Nehalem arkitekturen. MESIF är en variation av MESI som tillägger ett Forwarding tillstånd [3]. Om ett flertal cacheminnen innehåller samma data skulle de alla vara markerade som Shared om man använder sig av MESI protokollet. Med MESIF kommer alltid en utav dem istället vara markerad som Forwarding. MESIF vs. MESI Det innebär att den linjen har som uppgift att skickas till andra minnen som behöver data vid en läsningsbegäran. Detta är användbart då inte alla linjer markerade som Shared behöver besvara läsningsbegäranden [4]. Dessutom behöver enheten som utförde begärandet alltid bara behandla ett svar.
Referenser 1.https://lagunita.stanford.edu/c4x/Engineering/CS316/asset/A_Primer_on_Memory_Consistency_and_C oherence.pdf, hämtad 2015-12-05 2. http://developer.amd.com/wordpress/media/2012/10/24593_apm_v21.pdf, hämtad 2015-12-05 3. http://sc.tamu.edu/systems/eos/nehalem.pdf, hämtad 2015-12-06 4. Goodman JR, Hum, HHJ (2009). MESIF: A Two-Hop Cache Coherency Protocol for Point-to-Point Interconnects. https://researchspace.auckland.ac.nz/handle/2292/11594 Bilder: 1. http://sc.tamu.edu/systems/eos/hardware.php 2. http://www.realworldtech.com/common-system-interface/5/