Protokol MOSI - MOSI protocol

The Protokol MOSI je nadstavbou základního MSI soudržnost mezipaměti protokol. Přidává Óstav wned, který označuje, že aktuální procesor vlastní tento blok, a bude pro blok obsluhovat požadavky od ostatních procesorů.

Přehled států

Následují povolené stavy daného řádku mezipaměti:

Upraveno (M) - Pouze jedna mezipaměť má platnou kopii bloku a hodnota se pravděpodobně bude lišit od hodnoty v hlavní paměti. Má téměř stejný význam jako špinavý stav v a odepsat mezipaměť až na rozdíl, že změněný stav také znamená výlučné vlastnictví daného bloku. Špinavý stav znamená pouze to, že hodnota bloku se liší od hodnoty v hlavní paměti, zatímco modifikovaný znamená, že hodnota je jiná než hodnota hlavní paměti a že je uložena do mezipaměti pouze na jednom místě.

Ve vlastnictví (O) - Více cache může obsahovat nejnovější a správnou hodnotu bloku a hodnota v hlavní paměti může nebo nemusí být správná. Současně může vlastnit stav bloku pouze jedna mezipaměť. Všechny ostatní mezipaměti se stejným blokem musí být ve sdíleném stavu.[1]

Sdílené (S) - Blok mezipaměti je platný, může být sdílen více mezipaměti a může nebo nemusí mít stejnou hodnotu jako hlavní paměť. Ostatní procesory z toho mohou číst, ale nemají oprávnění k zápisu.

Neplatné (I) - Blok mezipaměti je neplatný.

Pro jakoukoli danou dvojici mezipamětí jsou povolené stavy dané linky mezipaměti následující:

M Ó S
MRed XNRed XNRed XNZelená značkaY
ÓRed XNRed XNZelená značkaYZelená značkaY
SRed XNZelená značkaYZelená značkaYZelená značkaY
Zelená značkaYZelená značkaYZelená značkaYZelená značkaY

Operace

Konečný stavový stroj zobrazující transakce procesoru pro protokol MOSI.

V protokolu MOSI má každá mezipaměť následující požadavky:

  • PrRd - Požadavek procesoru na čtení bloku mezipaměti.
  • PrWr - Požadavek procesoru na zápis do bloku mezipaměti.
  • BusRd - Snooped požadavek označující, že existuje požadavek na čtení bloku mezipaměti provedený jiným procesorem.
  • BusRdX - Snooped požadavek označující, že existuje požadavek na zápis do bloku mezipaměti provedený jiným procesorem, který blok nemá.
  • BusUpgr - Snooped požadavek zobrazující, že existuje požadavek na zápis do bloku mezipaměti provedený jiným procesorem, který již má blok ve své mezipaměti.
  • Flush - Snooped požadavek, po kterém je blok mezipaměti umístěn na sběrnici pro přenos mezipaměti do mezipaměti.[2]

Transakce procesoru

Podíváme-li se na případ transakcí procesoru, když je blok v Neplatné (I) stavu, buď blok mezipaměti nebyl nikdy načten z paměti, nebo byl zneplatněn. Když je čten procesor (PrRd) se stav změní z neplatného (I) na sdílený (S), čímž se vygeneruje čtení sběrnice (BusRd). Současně, pokud se jedná o požadavek na zápis procesoru (PrWr), pak se stav bloku změní na změněný (M) spolu s požadavkem na snooped zápis (BusRdX).

Jakmile je blok v Ve vlastnictví (O) stavu, potom čtení procesoru (PrRd) negeneruje žádný snoopovaný signál a blok zůstane ve stejném stavu. Zatímco požadavek na zápis od procesoru (PrWr) má za následek změnu stavu bloku z vlastněného (O) na upravený (M) spolu s generováním požadavku na snoopovaný zápis (BusUpgr).[3]

Když je blok v Upraveno (M) stavu, požadavek na čtení procesoru (PrRd) ani požadavek na zápis procesoru (PrWr) negenerují snoopovaný signál, protože blok již naznačuje, že nejnovější a správná hodnota se nachází pouze v této mezipaměti. Nezmění tedy stav a zůstane v upraveném (M) stavu.

Konečný stavový automat zobrazující transakce snooped sběrnice pro protokol MOSI.

Zatímco je blok v Sdílené (S) stavu a existuje požadavek na čtení procesoru (PrRd), protože hodnota bloku mezipaměti je stejná v každém druhém procesoru a v hlavní paměti, po přečtení procesoru (PrRd) není generován žádný signál sběrnice. Žádost o zápis na sběrnici (BusUpgr) se vygeneruje, jakmile existuje požadavek na zápis procesoru (PrWr) do bloku ve stavu sdílené (S), protože blok mezipaměti již není platný ve všech ostatních mezipaměti a stav bloku se změní ze sdílené (S) do upravené (M).

Autobusové transakce

Pokud vezmeme v úvahu chování konečného stavového automatu k transakcím snooped sběrnice, pokud je blok mezipaměti Neplatné (I) stavu pak žádný požadavek na snooped sběrnici nijak neovlivní blok, takže i když se jedná o čtení ze sběrnice (BusRd) nebo požadavek na zápis sběrnice od procesoru, který blok má nebo nemá (BusRdX nebo BusUpgr), blok zůstává ve stejném neplatném (I) stavu a negeneruje žádné další akce.

Když je blok mezipaměti v Sdílené (S) stavu a existuje transakce snooped bus read (BusRd), pak blok zůstane ve stejném stavu a nevygeneruje žádné další transakce, protože všechny bloky mezipaměti mají stejnou hodnotu včetně hlavní paměti a pouze se čte, ne zapisuje. Pokud existuje požadavek na zápis snooped (BusRdX nebo BusUpgr), pak se stav bloku změní ze sdíleného (S) na neplatný (I), protože hodnota bloku byla změněna v jednom z ostatních bloků mezipaměti a ve všech ostatních kopiích nyní musí být zneplatněno.

Jakmile je blok mezipaměti v souboru Upraveno (M) stavu a je zde požadavek na čtení sběrnice (BusRd), blok propláchne (Flush) upravená data a změní stav na vlastněný (O), čímž se stane jediným vlastníkem pro daný konkrétní blok mezipaměti. Současně, když je ve změněném (M) stavu, nikdy nebude požadavek na zápis na sběrnici (BusUpgr) z jiného procesoru, protože nemá blok mezipaměti. S požadavkem na zápis od jiného procesoru, který nemá blok (BusRdX), blok změní svůj stav na neplatný (I), protože jiný procesor zapisuje do bloku, a proto bude mít vlastnictví tohoto bloku.

Zatímco je blok mezipaměti v upraveném stavu, neexistuje možnost požadavku BusUpgr od žádného jiného procesoru, protože žádný z nich nebude mít blok. Podle definice upraveného (M) stavu má blok pouze ten procesor, ostatní jsou zneplatněny, a proto nemohou iniciovat požadavek BusUpgr.

Zatímco v Majitel (O) stavu a existuje požadavek na čtení snooped (BusRd), blok zůstane ve stejném stavu, zatímco proplachuje (Flush) data, aby z něj mohl číst druhý procesor. S požadavkem na snooped zápis (BusRdX) blok změní stav na neplatný (I) spolu s vyprázdněním (Flush) dat, když do něj zapisuje jiný procesor, čímž ztratí své vlastnictví v tomto bloku. Kdykoli se jiný procesor pokusí o přístup k tomuto bloku, místo toho, aby šel do paměti, aby k němu získal přístup, procesor jej vezme z jiné mezipaměti, která již má tento blok ve stavu vlastnictví (O). S BusUpgr pouze změní stav z vlastníka (O) na neplatný (I).[3]

Srovnání s protokolem MSI

Zjevný rozdíl mezi Protokol MSI a protokol MOSI, známý také jako protokol Berkeley[4] je přítomnost zvláštního stavu (ve vlastnictví) v MOSI kromě toho, že má pouze upravený (M) stav.

V protokolu MSI, kdykoli existuje požadavek na přečtení blokování, který je ve změněném (M) stavu, zapíše zpět do hlavní paměti a změní stav bloku na sdílený (S). Ale v případě protokolu MOSI, kde máme další stav (vlastníka), kdykoli jiný procesor požaduje operaci čtení, blok se změní z upraveného na vlastněný (O) stav, a tak si zachová špinavý blok mezipaměti, čímž odstraní nutnost okamžitého zápisu zpět do hlavní paměti.

Toto odložení může ušetřit provoz sběrnice a zápisy do hlavní paměti v určitých sekvencích transakcí. Zvažte například, pokud je mezipaměť M pro procesor 1, pak z ní čte procesor 2 a procesor 1 do ní znovu zapíše. V MSI přechod MS procesoru 1 ze čtení vede k jednomu zápisu do paměti a pak přechod SM vede k BusUpgr. Na MOSI přechod MO negeneruje žádný provoz a přechod OM také generuje jeden BusUpgr jako dříve. MOSI proto upustil od původního zpětného zápisu paměti a přidruženého provozu sběrnice, který by MSI dělal.

Srovnání s protokolem MESI

Oba MESI (také známý jako Illinois)[4] a protokoly MOSI, jsou rozšíření protokolu MSI ke zlepšení různých funkcí. MOSI se zaměřuje na snižování zpětného zápisu a MESI pokusů o snížení počtu sběrnicových transakcí požadovaných po požadavku na čtení a zápis od jiného procesoru. Výhradní stav (E) v protokolu MESI znamená, že blok mezipaměti je platný, čistý (stejná hodnota jako v hlavní paměti) a do mezipaměti pouze v jedné mezipaměti, zatímco vlastněný (O) stav v protokolu MOSI znamená, že blok mezipaměti je platný , potenciálně špinavé, zapisovatelné a mohou být přítomny ve více než jedné mezipaměti (všechny mezipaměti mají stejnou hodnotu).

Reference

  1. ^ Sorin, Daniel; Hill, Mark; Wood, David (2011). Základ pro konzistenci paměti a soudržnost mezipaměti. Morgan & Claypool. str. 119–122. ISBN  9781608455645.
  2. ^ Solihin, Yan (2016). Základy paralelní vícejádrové architektury. RC Press, Taylor & Francis Group. ISBN  9781482211184.
  3. ^ A b „Vyhodnocení protokolů koherence mezipaměti založených na Snoop“ (PDF).
  4. ^ A b "Analýza a srovnání protokolů koherence mezipaměti pro multiprocesor s přepínáním paketů". Transakce IEEE na počítačích. 38. doi:10.1109/12.30868.

Viz také