LUNDS TEKNISKA HÖGSKOLA CAMPUS HELSINGBORG MESI-protokollets funktion i multiprocessorer Jacob Petersson EDT621 Datorarkitekturer med Operativsystem 2016-HT
Abstract Denna rapport syftar till att visa hur cache coherency-protokollet MESI är uppbyggt och hur det fungerar för att motverka att oenhetligheter uppstår i cacheminnen för multiprocessorer. Mot bakgrund av detta syfte har rapporten utgått från följande frågeställningar: Hur ser teorin ut bakom protokollet? Hur löser protokollet problemet kring cacheminnen i multiprocessorer? Vad förbättrade MESI genom sitt exklusiva tillstånd i jämförelse med MSI-protokollet? MESI-protokollet innebär att ett block i minnet kan befinna sig i fyra olika tillstånd. Rapporten inkluderar vilka tillstånd som protokollet använder och vilka busstransaktioner som sker på den gemensamma bussen, samt en kort jämförelse med MSI-protokollet. Med sina tillstånd och busstransaktioner kan processorer hålla reda på aktuella kopior av block i minnet. Resultatet visar också att MESI-protokollet har ett exklusivt tillstånd som MSIprotokollet saknar och som förbättrar minneshanteringen. Slutsatserna som presenteras är att MESI-protokollet är ett effektivt sätt att motverka att det blir fel i minneshanteringen för multiprocessorer, samt att det ökar prestandan i jämförelse med MSI-protokollet som saknar det exklusiva-tillståndet. 1
1 Inledning 1.1 Bakgrund För att öka prestandan i datorer utvecklades multiprocessorer. Multiprocessorerna bar även med sig ett problem. Då processorerna arbetar tillsammans för att lösa problem måste de kunna samarbeta och synkronisera sig med varandra. Prestandan för minnet har inte ökat lika mycket som prestandan för processorer. För att minska det här glappet är tekniker för att reducera minnesåtkomsten för processorer viktiga. En metod för att lösa det här är att låta processorerna ha tillgång till privata cacheminnen som därmed flyttar data som ofta används närmare processorerna. Eftersom det kan finnas flera kopior av samma data så måste det finnas en mekanism som upprätthåller enhetligheten mellan cachekopior. Ett sätt att lösa det här problemet är genom hårdvarubaserade cache coherency protocols. (Dahlgren 1995, s. 7) Ett sätt att implementera dessa är protokoll är genom snooping. Detta innebär att processorer kan hålla koll på vad andra processorer skriver och läser när det behövs. Dessa protokoll kallas snoop-based cached coherency protocols. Då flera processorer är anslutna till en delad buss kan dessa protokoll användas. En processor reagerar om en busstransaktion görs som berör ett cacheblock som den själv har. (Mullins, s. 20) Ett av dessa protokoll är MESI. Protokollet gör det möjligt att upprätthålla samstämmigheten mellan cacheminnens innehåll i hierarkiska minnessystem. (Goméz-Luna m.fl. 2009, s. 1) Protokollet är även känt under namnet Illinois-protokollet (Culler m.fl. 1999, s. 285) 1.2 Syfte och problemformulering Syftet med denna rapport är att visa hur cache coherency protokollet MESI fungerar, samt hur det motverkar att det uppstår minnesproblem i multiprocessorer. Frågeställningarna lyder: Hur ser teorin ut bakom protokollet? Hur löser protokollet problemet kring cacheminnen i multiprocessorer? Vad förbättrade MESI genom sitt exklusiva tillstånd i jämförelse med MSI-protokollet? 2
2 MESI-protokollet 2.1 MESI-protokollets tillstånd MESI-protokollet är baserat på fyra tillstånd: Modified, Exclusive, Shared och Invalid, där varje inledande bokstav på tillstånden tillsammans bildar förkortningen MESI. Varje block i cacheminnet som använts befinner sig i av något av tillstånden. Övergången mellan dessa tillstånd är vad som utgör MESI-protokollet. (Goméz-Luna m.fl. 2009, s. 1) Tillstånden beskrivs på följande sätt: Invalid: It is a non-valid state. The data you are looking for are not in the cache, or the local copy of these data is not correct because another processor has updated the corresponding memory position. Shared: Shared without having been modified. Another processor can have the data into the cache memory and both copies are in their current version. Exclusive: Exclusive without having been modified. That is, this cache is the only one that has the correct value of the block. Data blocks are according to the existing ones in the main memory. Modified: Actually, it is an exclusive-modified state. It means that the cache has the only copy that is correct in the whole system. The data which are in the main memory are wrong. (Goméz-Luna m.fl. 2009, s. 2) Tillståndet av varje minnesblock i cachen ändras beroende på hur det används av en processor. När ett cacheminne är tomt och ett minnesblock skrivs till cachen av en processor så tilldelas blocket det exklusiva tillståndet Exclusive, som innebär att innehållet inte har blivit modifierat och att några kopior av blocket inte finns i något annat cacheminne förutom i detta block. Att tillståndet inte är modifierat innebär att primärminnet är aktuellt i förhållande till blocket. Om något skrivs till blocket så ändras tillståndet till det modifierade tillståndet Modified. Detta för att blocket bara finns i en cache och för att blocket i primärminnets innehåll skiljer sig. (Goméz-Luna m.fl. 2009, s. 2-3) Om det är samma processor som skriver till blocket så kan tillståndet gå från Exclusive till Modified utan att några busstransaktioner behöver göras, då ingen annan processor har en kopia av blocket. (Culler m.fl. 1999, s. 285) Befinner sig ett block i det exklusiva tillståndet när en processor försöker läsa det och inte hittar blocket så måste den istället hitta det i primärminnet för att sedan spara den till sitt cacheminne. Eftersom blocket då befinner sig i två olika cacheminnen så befinner sig det i tillståndet Shared. (Goméz-Luna m.fl. 2009, s. 3) Detta tillstånd innebär att noll eller fler caches har en kopia av blocket i ett omodifierat tillstånd. (Culler m.fl. s.1999, s. 280) 3
Om en processor vill skriva till ett block som befinner sig i Modified och om blocket inte finns i dess cache, så måste blocket rensas från cachen och sparas in i primärminnet då det är den mest aktuella kopian av det blocket i systemet. Processorn har då en aktuell version av blocket och kommer att skriva det till sitt cacheminne i det exklusiva tillståndet. Om en processor vill läsa ett block som den inte hittar i sin cache så beror det på att det inte är den senaste kopian av innehållet. Händer detta så måste blocket rensas från cachen och lagras i primärminnet. Blocket läses sedan och befinner sig i tillståndet Shared eftersom det då finns två kopior av blocket i systemet. Om en processor skriver till ett block i Shared så ändras tillståndet till Exclusive. (Goméz-Luna m.fl. 2009, s. 2-3) Tillståndet av ett block i cacheminnet kan ändras av en annan processor. MESI-protokollet ser till så att processorn har tillgång till det aktuella värdet varje gång det ska användas. Det är alltså inget problem om en processor skulle ändra data i primärminnet för att sedan lagra det i sitt eget cacheminne. (Goméz-Luna m.fl. 2009, s. 3) 2.2 Bus transactions Busstransaktionerna mellan tillstånden visas nedan i figur 1. Figur 1. Tillståndsövergångarna i MESI-protokollet (Mullins, s.38) 4
Det finns två olika förfrågningar som en processor gör. Dessa är att läsa (PrRd, Processor Read) eller att skriva (PrWr, Processor Write). (Culler m.fl. 1999, s. 280) Som man kan tyda ur figur 1 så behöver ingen busstransaktion göras då ett block ändras from Exclusive till Modified. (Culler m.fl. 1999, s. 285) Busstransaktionen BusRd/Flush innebär att om ett block befinner sig i Exclusive eller Modified och en cache frågar efter det så ska innehållet delas med efterfrågaren och tillståndet bytas till Shared. Om ett tillstånd får BusRdX/Flush så ska innehållet rensas och tillståndet ändras till Invalid. Vidare innebär busstransaktionen BusRdX/Flush att om ett block efterfrågas och flera processorer har kopior av det i sina cacheminnen så behöver bara ett block rensas. Flush i detta fall påverkar bara just den processor som förser kopian och rensar sitt block medan de andra processorerna inte behöver göra något. (Culler m.fl. 1999, s. 286) (Mullins, s. 36-38) MESI-protokollet behöver en till signal (Shared) på den fysiska sammanlänkningen av bussen. Signalen är tillgänglig för processorer för att kunna veta om en annan cache har datan som efterfrågas av en PrRd. När adresseringsfasen sker i busstransaktionen kollar alla caches om de har det efterfrågade blocket och bekräftar i så fall om de har det. Processorerna som efterfrågar blocket kan därefter se om någon annan processor har blocket i sin cache och därefter bestämma om blocket ska hamna i Exclusive eller i Shared. (Culler m.fl. 1999, s. 286) BusRd(S) innebär att den delade signalen blir bekräftad och att en annan cache har en kopia av innehållet. Motparten BusRd(S ) betyder att ingen cache har datan som efterfrågas. (Mullins, s. 35) 5
3 MESI-protokollets i jämförelse med MSI-protokollet MESI-protokollet fungerar snarlikt som MSI-protokollet som består av tre tillstånd(modified, Shared och Invalid). Protokollet använder dessa tillstånd för att skilja på modifierade och omodifierade block. Protokollet är ett invalidation-protokoll som används till write-back caches. I Shared-tillståndet finns blocket i ett omodifierat tillstånd och primärminnet och eventuellt andra caches har en aktuell version av blocket. Det modifierade tillståndet indikerar att det bara är denna processor som har en giltig kopia i sin cache. (Culler m.fl. 1999, s. 280) Det uppstår dock problem med MSI-protokollet om det används av en multiprocessor som kör en sekventiell applikation. Om den läser och ändrar ett block så genereras två stycken busstransaktioner. Busstransaktionerna som generas är en BusRd som ändrar tillståndet till Shared och den andra är en BusRdX som ändrar det från Shared till Modified, detta händer även om ingen annan delar blocket. För MESI- protokollet som har det extra exklusiva tillståndet Exclusive kan en busstransaktion sparas in då det exklusiva-tillståndet anger att det är en aktuell kopia och att ingen annan processor har en cachekopia. (Culler m.fl. 1999, s. 280, s. 285) 6
4 Diskussion med slutsatser MESI-protokollet är ett effektivt sätt att lösa coherency problemet som uppstår i multiprocessorer. Protokollet implementeras genom att block befinner sig i fyra olika tillstånd (Modified, Exclusive, Shared och Invalid). Tillstånden gör det tydligt för processorerna vilka som har kopior av ett block, om det modifierats, eller om det bara finns en kopia. Processorer kan se om andra har kopior genom att observera transaktionsbussen och därefter agera om det behövs. Protokollet ser till så att processorerna alltid får tag på en aktuell kopia genom dess implementering i multiprocessorer. MESI-protokollet ökar prestandan jämfört med MSI-protokollet som saknar det exklusivatillståndet som talar om att bara en cache har en kopia av blocket som inte blivit modifierat. Med detta tillstånd kan busstransaktionerna minskas jämfört med MSI-protokollet. En slutsats som kan dras är att multiprocessorer behöver någon form av kontroll av deras cacheminnen så det blir korrekt vid minneshantering och att MESI-protokollet är ett effektivt sätt att lösa det på. En annan slutsats är att MESI-protokollet är en förbättring i jämförelse med MSI-protokollet. Detta protokoll saknar det exklusiva tillståndet och innebär därmed mer busstransaktioner vilket drar ner prestandan. Med sitt exklusiva tillstånd ökar därför MESI-protokollet prestandan. 7
Källförteckning Culler, David. Pal Singh, Jaswinder Gupta, Anoop. 1999. Parallel Computer Architecture: A Hardware/Software Approach. M. Kaufmann, cop. San Francisco Dahlgren, Fredrik. 1994. Design and Performance Evaluation of Hardware-Based Cache Protocol Extension for Multiprocessors. Lund. Gómez-Luna, Juan. Herruzo, Ezequiel. Ignacio Benavides, José. 2009. MESI Cache Coherence Simulator for Teaching Purposes CLEI ELECTRONIC JOURNAL. April http://www.clei.org/cleiej/papers/v12i1p5.pdf (Hämtad 2016-11-21) Mullins, Roberts. (Årtal saknas). Chip Multiprocessors (I). http://www.cl.cam.ac.uk/~rdm34/acs-slides/lec4.pdf (Hämtad 2016-12-04) 8