Bus snooping - Bus snooping

Bus snooping nebo bus sniffing je schéma, pomocí kterého řadič koherence (snooper) v mezipaměti ( snoopy cache ) sleduje nebo snoopsuje transakce sběrnice a jeho cílem je udržovat soudržnost mezipaměti v systémech distribuované sdílené paměti . Mezipaměť obsahující řadič koherence (snooper) se nazývá mezipaměť snoopy. Tento systém zavedli Ravishankar a Goodman v roce 1983.

Jak to funguje

Pokud konkrétní data sdílí několik mezipamětí a procesor upraví hodnotu sdílených dat, musí být změna přenesena do všech ostatních mezipamětí, které mají kopii dat. Toto šíření změn brání systému v narušení soudržnosti mezipaměti . Oznámení o změně dat lze provést snoopingem sběrnice. Všichni snoopery sledují každou transakci na sběrnici. Pokud se na sběrnici objeví transakce upravující blok sdílené mezipaměti, všichni snoopery zkontrolují, zda jejich mezipaměti mají stejnou kopii sdíleného bloku. Pokud má mezipaměť kopii sdíleného bloku, provede odpovídající snooper akci k zajištění soudržnosti mezipaměti. Akce může být flush nebo zneplatnění bloku mezipaměti. Zahrnuje také změnu stavu bloku mezipaměti v závislosti na protokolu koherence mezipaměti.

Typy snoopovacích protokolů

V závislosti na způsobu správy místní kopie operace zápisu existují dva druhy snoopovacích protokolů:

Zapsat-zneplatnit

Když procesor zapisuje na blok sdílené mezipaměti, všechny sdílené kopie v ostatních mezipaměti jsou znehodnoceny prostřednictvím snoopingu sběrnice. Tato metoda zajišťuje, že procesor může číst a zapisovat pouze jednu kopii data. Všechny ostatní kopie v jiných mezipaměti jsou neplatné. Toto je nejčastěji používaný snoopingový protokol. Do této kategorie patří protokoly MSI , MESI , MOSI , MOESI a MESIF .

Aktualizace zápisu

Když procesor zapisuje na blok sdílené mezipaměti, všechny sdílené kopie ostatních mezipamětí se aktualizují prostřednictvím snoopingu sběrnice. Tato metoda vysílá data zápisu do všech mezipamětí v celé sběrnici. Vyvolává větší provoz na sběrnici než protokol neplatný pro zápis. Proto je tato metoda neobvyklá. Do této kategorie patří protokoly draků a světlušek .

Implementace

Jedna z možných implementací je následující:

Mezipaměť by měla tři další bity :

  • V  - platné
  • D  - špinavý bit, znamená, že data v mezipaměti nejsou stejná jako v paměti
  • S  - sdílené

Každý řádek mezipaměti je v jednom z následujících stavů: „špinavý“ (byl aktualizován místním procesorem), „platný“, „neplatný“ nebo „sdílený“. Řádek mezipaměti obsahuje hodnotu a lze ji číst nebo zapisovat. Zápis na řádek mezipaměti změní hodnotu. Každá hodnota je buď v hlavní paměti (ke které je velmi pomalý přístup), nebo v jedné nebo více místních mezipaměti (což je rychlé). Když je blok poprvé načten do mezipaměti, je označen jako „platný“.

Při chybě čtení v místní mezipaměti je požadavek na čtení vyslán na sběrnici. Všechny řadiče mezipaměti monitorují sběrnici. Pokud je tato adresa uložena do mezipaměti a je ve stavu „špinavý“, změní stav na „platný“ a odešle kopii požadujícímu uzlu. Stav „platný“ znamená, že řádek mezipaměti je aktuální. Při chybě místního zápisu (pokus o zápis této hodnoty je proveden, ale není v mezipaměti) zajišťuje sběrnice sběrnice, aby všechny kopie v jiných mezipaměti byly nastaveny na „neplatné“. „Neplatné“ znamená, že kopie existovala v mezipaměti, ale již není aktuální.

Například počáteční stav může vypadat takto:

Tag  | ID | V | D | S
---------------------
1111 | 00 | 1 | 0 | 0
0000 | 01 | 0 | 0 | 0
0000 | 10 | 1 | 0 | 1
0000 | 11 | 0 | 0 | 0

Po zápisu adresy 1111 00 by se to změnilo na toto:

Tag  | ID | V | D | S
---------------------
1111 | 00 | 1 | 1 | 0
0000 | 01 | 0 | 0 | 0
0000 | 10 | 1 | 0 | 1
0000 | 11 | 0 | 0 | 0

Logika ukládání do mezipaměti monitoruje sběrnici a zjišťuje, zda je požadována paměť uložená v mezipaměti. Pokud je mezipaměť špinavá a sdílená a sběrnice požaduje tuto paměť, snoopingové prvky dodají hodnotu z mezipaměti a poté upozorní každou jednotku, která tuto paměť potřebuje, že paměť byla aktualizována. Když jsou ostatní jednotky informovány o aktualizované mezipaměti, vypnou platný bit pro svou mezipaměť dané proměnné. Původní mezipaměť bude tedy označena jako exkluzivní (bit S by byl nulový)

Při zneplatnění adresy označené jako špinavá (tj. Jedna mezipaměť by měla špinavou adresu a druhá mezipaměť zapisuje), bude mezipaměť tento požadavek ignorovat. Nová mezipaměť bude označena jako špinavá, platná a výlučná a tato mezipaměť nyní převezme odpovědnost za adresu.

Výhoda

Výhodou použití sběrnice snooping je, že je rychlejší než koherenční mechanismus založený na adresářích . Sdílená data jsou umístěna do společného adresáře, který udržuje soudržnost mezi mezipaměti v systému založeném na adresářích. Snooping sběrnice je obvykle rychlejší, pokud je k dispozici dostatečná šířka pásma , protože všechny transakce jsou požadavkem / odpovědí viděnou všemi procesory.

Nevýhoda

Nevýhodou snoopingu sběrnice je omezená škálovatelnost . Časté snooping na mezipaměti způsobí rasu s přístupem z procesoru, takže může zvýšit dobu přístupu do mezipaměti a spotřebu energie. Každý z požadavků musí být vysílán na všechny uzly v systému. To znamená, že velikost (fyzické nebo logické) sběrnice a šířka pásma, kterou poskytuje, musí růst, jak se systém zvětšuje. Vzhledem k tomu, že sběrnice nemá dobré měřítko, mají větší koherentní systémy NUMA (ccNUMA) v mezipaměti tendenci používat koherenční protokoly založené na adresářích .

Snoopův filtr

Když dojde k transakci sběrnice ke konkrétnímu bloku mezipaměti, musí všichni snoopery snoopovat transakci sběrnice. Potom snoopery vyhledají odpovídající značku mezipaměti a zkontrolují, zda má stejný blok mezipaměti. Ve většině případů mezipaměti nemají blok mezipaměti, protože dobře optimalizovaný paralelní program nesdílí mezi vlákny mnoho dat. Vyhledávání značek mezipaměti snooperem je tedy pro mezipaměť, která nemá blok mezipaměti, zbytečnou prací. Vyhledání značky ale naruší přístup do mezipaměti procesorem a způsobí další spotřebu energie.

Jedním ze způsobů, jak omezit zbytečné snooping, je použití snoop filtru. Filtr snoop určuje, zda snooper potřebuje zkontrolovat značku mezipaměti nebo ne. Filtr snoop je struktura založená na adresářích a sleduje veškerý koherentní provoz, aby bylo možné sledovat stavy koherence bloků mezipaměti. To znamená, že snoop filtr zná mezipaměti, které mají kopii bloku mezipaměti. Může tedy zabránit tomu, aby mezipaměti, které nemají kopii bloku mezipaměti, v zbytečné snoopování. Existují tři typy filtrů v závislosti na umístění snoopových filtrů. Jedním z nich je zdrojový filtr, který je umístěn na straně mezipaměti a provádí filtrování před tím, než koherenční provoz dosáhne sdílené sběrnice. Dalším je cílový filtr, který je umístěn v mezipaměti přijímače a zabraňuje zbytečnému vyhledávání značek mezipaměti v jádru přijímače, ale tento typ filtrování nezabrání počáteční koherenční zprávě ze zdroje. A konečně, filtry v síti dynamicky prořezávají koherenční provoz uvnitř sdílené sběrnice. Snoop filtr je také kategorizován jako inkluzivní a exkluzivní. Inkluzivní snoop filtr sleduje přítomnost bloků mezipaměti v mezipaměti. Exkluzivní snoop filtr však sleduje nepřítomnost bloků mezipaměti v mezipaměti. Jinými slovy, zásah v inkluzivním snoop filtru znamená, že odpovídající blok mezipaměti je držen mezipaměti. Na druhou stranu zásah v exkluzivním snoop filtru znamená, že žádná mezipaměť nemá požadovaný blok mezipaměti.

Reference

externí odkazy