Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Protokol MESI Manuál pro začátečníky Štěpán Rezek, 2007 rev 1.1.

Podobné prezentace


Prezentace na téma: "Protokol MESI Manuál pro začátečníky Štěpán Rezek, 2007 rev 1.1."— Transkript prezentace:

1 Protokol MESI Manuál pro začátečníky Štěpán Rezek, 2007 rev 1.1

2 Co to je? Protokol MESI (někdy nazýván Illinois protocol) je protokol široce používaný pro zajištění paměťové koherence. Poprvé se objevil u procesorů Intel Pentium.

3 Stavy MESI Tzn. v jakém stavu mohou být kopie proměnných v lokálním bloku M – modified E – exclusive S – shared I – invalid

4 Stav M Blok cache je přítomen pouze v lokální cache Kopie byla změněna, tzn. hodnota je jiná než hodnota v hlavní paměti Cache musí tento blok zapsat do hlavní paměti dříve, než kterákoliv jiná cache přečte (v tuto chvíli již neplatnou) hodnotu z hlavní paměti

5 Stav E Blok je přítomen pouze v lokální cache, ale je clean (čistý) – jeho hodnota je stejná, jako hodnota v hlavní paměti

6 Stav S Blok je platný a může být sdílen jinou cache

7 Stav I Blok v cache je neplatný

8 Cache může vrátit hodnotu, když je blok ve stavu M, E nebo S. Pokud je ve stavu I, musí nejdříve získat platnou hodnotu proměnné, aby uspokojila čtení. Poté se může přepnout do stavu S nebo E.

9 Takže to shrňme: Stav hodnoty v cache: M ModifiedE ExclusiveS SharedI Invalid Je hodnota v cache platná? ANO NE Hodnota v hlavní paměti je… …zastaralá…platná — Existují nějaké kopie v cache ostatních procesorů? NE Možnámožná Zapsání (write) do takového bloku … …nejde na sběrnici …jde na sběrnici a aktualizuje cache …jde přímo na sběrnici, změna hodnoty jen v cache

10 Transakce (události) na sběrnici BusRd: Po lokálním Read miss, použit S/  S – signalizuje, jestli existují sdílené kopie BusRdX: po lokálním Write miss, žádost o nový blok + zneplatnění BusUpgr: po lokálním Write hit nad blokem se stavem S (zneplatnění) Odpověď na čtení (BusRd nebo BusRdX): MemSup: hlavní paměť dodává požadovaný blok do cache CacheFlush: zdrojem dat je cache, kde je blok ve stavu. Data jsou vypláchnuta na sběrnici a uložena do hl. paměti i předána žádající cache.

11 S/S signál Pokud by neexistoval, máme protokol MSI -> neodlišitelnost stavu E od S => Kontrolery všech cache provádí snooping (číhají) na BusRd Implementováno jako kus drátu, realizující log. funkci OR -> není to sběrnice

12 Jak spolu souvisí stavy bloků a operace na sběrnici? procesor zapisuje + na sběrnici půjde operace BusRdX procesor čte + na sběrnici půjde operace BusRd, na S/  S je hodnota 0 (  S) Přechod vyvolaný právě aktivním procesorem Přechod vyvolaný Okolním světem

13 Hlavní paměť P0P0 P1P1 PnPn Stav, v němž je blok cache Blok (kopie hodnoty z hlavní paměti) Procesor n S/S - sdílený signál, log. OR Nutný kvůli stavu E Datová sběrnice Cache (skrytá paměť) Systém používající MESI:

14 5 P0P0 P1P1 P2P2 I I I Na začátku jsou všechny bloky ve stavu Invalid ? ? ? Procesor 0 chce číst hodnotu BusRd Read Miss, ostatní procesory neoznamují po S/  S, že mají kopii (stav sběrnice =  S, tedy log. 0) -> Čtení z hlavní paměti (MemSup), stav Exclusive E 5

15 5 P0P0 P1P1 P2P2 I I ? ? Procesor 2 chce číst hodnotu E 5 BusRd Operaci BusRd zachytí kontroler cache 0… …a nastaví S=1 na S/  S Čímž se u obou nastaví stav Shared, a P 2 načte hodnotu z hlavní paměti (MemSup) 5 S S

16 5 P0P0 P1P1 P2P2 S I S5 ? 5 Procesor 2 chce zapsat hodnotu 9… PrWr(9) … bingo! Už mám platnou hodnotu v cache. Kontroler nejprve musí zneplatnit kopie v ostatních cache… M 9 BusUpgr(x) I …a potom teprve uvede blok do stavu M

17 5 P0P0 P1P1 P2P2 I I M ? 9 5 Procesor 0 chce číst hodnotu. Problém – blok je Invalid. -> Na sběrnici se vyšle operace BusRd BusRd Ten je zachycen kontrolerem cache 2 -> vyšle S=1 na S/  S … a zároveň CacheFlush, s hodnotou 9 CacheFlush(9) S S 9 9

18 9 P0P0 P1P1 P2P2 S I S ? 9 9 PrWr(11) Procesor 1 chce zapsat hodnotu, která není v cache Tato hodnota je vrácena zpátky – stav Exclusive M 9 BusRdX Kontroler cache vyšle operaci BusRdX, kterou zneplatní ostatní kopie bloku a vezme hodnotu z hlavní paměti I I 11 E a následně změněna procesorem na zapsanou –stav Modified

19 Poznámka Existuje ještě vylepšení protokolu MESI, nazvané MOESI –Ten je využíván např. u procesorů AMD64 Owned -> blok v tomto stavu drží nejčerstvější správnou kopii hodnoty z hlavní paměti. Narozdíl od stavu Shared, hodnota v hlavní paměti může být neplatná. Pouze jeden procesor může mít blok ve stavu O, všechny ostatní musí mít bloky ve stavu S.

20 Nastal čas na přestávku a přípravu čaje…

21 Transakce na sběrnici, ještě jednou BusRd: Po lokálním Read miss, použit S/  S – signalizuje, jestli existují sdílené kopie BusRdX: po lokálním Write miss, žádost o nový blok + zneplatnění BusUpgr: po lokálním Write hit nad blokem se stavem S (zneplatnění) Reakce na čtení (BusRd nebo BusRdX): MemSup: hlavní paměť dodává požadovaný blok do cache CacheFlush: zdrojem dat je cache, kde je blok ve stavu. Data jsou vypláchnuta na sběrnici a uložena do hl. paměti i předána žádající cache.

22 Kritické sekce & MESI Implementuje se pomocí sdílené proměnné Lock - zámek Postup: 1.Zamkni zámek 2.Něco vykonej 3.Odemkni zámek Toto musí být atomické

23 Několik atomických metod Test & Set Swap Fetch & Increment Compare & Swap

24 Test & Set Pseudo C++: int TestAndSet(boolean &zamek) { boolean predchoziStav = zamek; zamek = true; return predchoziStav; } Pseudo ASM: Load r, zamek Store zamek, #1 Ret int zamek = false; void KritickaSekce() { while(TestAndSet(zamek) == true); // kod kriticke sekce zamek = false; } Z:TestAndSet r, zamek Bnz r,Z ; kod kriticke sekce Ret Definice Použití Opuštění kritické sekce = nastavení zámku na false (0) Musí celá proběhnout atomicky, tzn. v průběhu Read,Modify,Write nesmí ostatní procesy/ory přistoupit do místa v paměti, které je modifikováno

25 0 P0P0 P1P1 P2P2 I I ? ? P3P3 I ? zámek= Test & Set + MESI: Load r, zámek Store zámek, #1 Bnz r, Z Procesor 2 chce vstoupit do kritické sekce Load r, zámek Store zámek, #1 Bnz r, Z BusRd 0 Load r, zámek Store zámek, #1 Bnz r, Z E Žádná jiná cache nesdílí zámek -> na sběrnici zůstává S=0 I? 0 1 Procesor nyní zamyká zámek... M1 … a nyní P 2 může nerušeně vykonávat kód v kritické sekci. Load r, zámek Store zámek, #1 Bnz r, Z ;projde C 2 neposílá BusUpgr, protože je v M…

26 0 P0P0 P1P1 P2P2 I I M ? 1 ? P3P3 I ? zámek= Store zámek, #0 Nakonec P 2 kritickou sekci opustí…. 0 0 a cache pošle BusUpgr. BusUpgr

27 0 P0P0 P1P1 P2P2 I I M ? 0 ? P3P3 I ? zámek= Load r, zámek Store zámek, #1 Bnz r, Z Procesor P 0 chce vstoupit do kritické sekce BusRd a Cache 0 pošle BusRd. To zachytí Cache 2 a nastaví S=1, načež pošle CacheFlush(0). SS CacheFlush(0) 1 Nyní chce P0 uzamknout zámek 0 1 => Změna stavu Cache 0 na M a poslání BusUpgr BusUpgr 0 MI

28 0 P0P0 P1P1 P2P2 M I I ? 01 P3P3 I ? zámek= Load r, zámek Store zámek, #1 Bnz r, Z Teď chce P 1 uzamknout zámek. BusRd Cache 0 zjistí, že někdo chce číst zámek, a tak pošle na S/  S jedničku a zároveň CacheFlush(1) na sběrnici. CacheFlush(1) SS1 1 1 Procesor 1 tedy načte hodnotu r=1. 1 P 1 poté uloží do cache jedničku a pošle BusUpgr. BusUpgr MI Test ovšem neprojde, jelikož r=1 => zpátky na Začátek

29 1 P0P0 P1P1 P2P2 I M I P3P3 I ? zámek= Load r, zámek Store zámek, #1 Bnz r, Z Procesor 3 chce taky vstoupit do kritické sekce. Na sběrnici se objeví BusRead od Cache 3, následně Cache 1 Nastaví S/  S na 1 a pošle CacheFlush. Výsledná hodnota r=1. S S 1 Nakonec P3 nastaví svůj blok na jedničku a dopadne stejně, jako P 1 v minulém slidu -> znovu na začátek. P 0 je zabarikádován v kritické sekci IM

30 Co dál? Protokol MESI se také dá použít, mimo jiné, i s jinými technikami přístupu do kritických sekcí, např. LLSC (Load Linked & Store Conditional), nicméně princip je v základu stejný.

31 To je vše, mnoho štěstí při zkoušce! I když, no, pro jistotu, ještě chvilku zůstaňte….

32 Příklad V systému je 5 procesorů v SMP na sběrnici s protokolem MESI. Určete, které transakce a kolikrát se objeví na sběrnici, když: 1.každý procesor se snaží 1x dostat do CS 2.každý zbývající procesor se jednou zkusí dostat do CS, která je zamčená. 3.na začátku mají všechny bloky stav I

33 Ugh… 0 P0P0 P1P1 P2P2 I I ? ? P3P3 I ? zámek= I? P4P4 I?

34 Simulace, jak by to mohlo vypadat: 0 P0P0 P1P1 P2P2 I I ? ? P3P3 I ? zámek= I? P4P4 I? BusRdBusRdXBusUpgr P0P0 P1P1 P2P2 P3P3 P4P4 Read Write Read Write Read Write Read Write Read Write P 0 se zamkne v CS, ostatní se budou neúspěšně pokoušet o totéž 01 M 1 S S 1 M I S S1M I Zbytek už je asi zřejmý… E

35 Tak to už je skutečně vše

36 Odkazy https://www.cs.tcd.ie/Jeremy.Jones/vivio/cach es/MESI.htmhttps://www.cs.tcd.ie/Jeremy.Jones/vivio/cach es/MESI.htm –Vynikající simulátor protokolu MESI (WIN only) ps_cv12.pdfhttp://cs.felk.cvut.cz/~brabect1/X36APS/pdf/a ps_cv12.pdf –WTWNA - Manuál pro začátečníky –Manuál pro pokročilé

37 Formality Dílo uvolňuji pod licencí Creative Commons Attribution 2.5 License Zříkám se jakékoli odpovědnosti za škody způsobené tímto textem (třeba 4 u zkoušky… ) A za správnost tohoto textu (chyby ale samozřejmě rád opravím) Drobné nepřesnosti upravil Ing. Miloš Bečvář


Stáhnout ppt "Protokol MESI Manuál pro začátečníky Štěpán Rezek, 2007 rev 1.1."

Podobné prezentace


Reklamy Google