Paměťová koherence
Ke zlepšení výkonu přístupu k danému prostředku lze použít mezipaměť. Pokud existuje několik takových mezipamětí pro stejný prostředek, jak je znázorněno na obrázku, může to vést k problémům. Koherence mezipaměti nebo koherence mezipaměti označuje řadu způsobů, jak zajistit, aby všechny mezipaměti daného prostředku měly stejná data a aby data v mezipaměti dávala smysl (tzv. integrita dat). Koherence mezipaměti je zvláštním případem koherence paměti.
Pokud existuje mnoho mezipamětí společného paměťového prostředku, mohou nastat problémy, protože data v mezipaměti již nemusí dávat smysl nebo jedna mezipaměť již nemusí obsahovat stejná data jako ostatní. Běžným případem, kdy problém nastává, je mezipaměť procesorů ve víceprocesorovém systému. Jak je vidět na obrázku, pokud má horní klient kopii paměťového bloku z předchozího čtení a dolní klient tento paměťový blok změní, horní klient by mohl zůstat s neplatnou cache paměti,aniž by o tom věděl. Koherence mezipaměti slouží ke zvládání takových konfliktů a udržování konzistence mezi mezipamětí a pamětí.
Více mezipamětí sdíleného prostředku
Definice
Koherence definuje chování čtení a zápisu do stejného místa paměti. Mezipaměti jsou koherentní, pokud jsou splněny všechny následující podmínky:
- Když procesor P čte umístění X, musí po zápisu do tohoto umístění získat hodnotu, kterou zapsal, pokud žádný jiný procesor nezapsal do tohoto umístění jinou hodnotu. To platí i pro jednoprocesorové systémy, znamená to, že paměť je schopna udržet zapsanou hodnotu.
- Předpokládejme, že existují dva procesory, P1 a P2, a P 1zapsal hodnotu X1 a poté P 2zapsal hodnotu X2, pokud P 1čte hodnotu, musí získat hodnotu zapsanou P2, X2, a ne hodnotu, kterou zapsal, X1, pokud mezi nimi nejsou žádné další zápisy. To znamená, že zobrazení paměti je koherentní. Pokud by procesory mohly číst stejně starou hodnotu po zápisu provedeném P2, paměť by nebyla koherentní.
- Do určitého místa v paměti lze v daném okamžiku zapsat pouze jednou. Pokud je zápisů více, musí následovat jeden po druhém. Jinými slovy, pokud umístění X obdrželo dvě různé hodnoty A a B v tomto pořadí od libovolných dvou procesorů, nemohou procesory nikdy přečíst umístění X jako B a pak ho přečíst jako A. Umístění X musí být viděno s hodnotami A a B v tomto pořadí.
Tyto podmínky jsou definovány za předpokladu, že operace čtení a zápisu probíhají okamžitě. To se však v počítačovém hardwaru neděje kvůli zpoždění paměti a dalším aspektům architektury. Zápis provedený procesorem X nemusí být viděn čtením z procesoru Y, pokud je čtení provedeno ve velmi krátkém čase po provedení zápisu. Model konzistence paměti definuje, kdy musí být zapsaná hodnota viděna následující instrukcí čtení provedenou jinými procesory.
Mechanismy koherence mezipaměti
- Mechanismy koherence založené na adresáři udržují centrální adresář bloků uložených v mezipaměti.
- Snooping je proces, při kterém každá mezipaměť sleduje adresní řádky pro přístupy k paměťovým místům, která jsou v její mezipaměti. Pokud je pozorována operace zápisu do umístění, jehož kopii má cache, řadič cache zneplatní svou vlastní kopii snoopovaného paměťového umístění.
- Snarfing je situace, kdy řadič mezipaměti sleduje adresu i data a snaží se aktualizovat svou vlastní kopii paměťového umístění, když druhý master změní umístění v hlavní paměti.
Distribuované systémy sdílené paměti tyto mechanismy napodobují, takže mohou udržovat konzistenci mezi bloky paměti ve volně vázaných systémech.
Dva nejběžnější typy koherence, které se obvykle studují, jsou Snooping a Directory-based. Každý z nich má své výhody a nevýhody. Protokoly Snooping bývají rychlejší, pokud je k dispozici dostatečná šířka pásma, protože všechny transakce jsou požadavek/odpověď, které vidí všechny procesory. Nevýhodou je, že snooping není škálovatelný. Každý požadavek musí být rozeslán všem uzlům v systému. Jak se systém zvětšuje, musí růst velikost (logické nebo fyzické) sběrnice a šířka pásma, kterou poskytuje. Na druhou stranu adresáře mají tendenci mít delší latence (při požadavku/zaslání/předání/odpovědi ve třech skocích), ale využívají mnohem menší šířku pásma, protože zprávy jsou zasílány z bodu do bodu, a ne broadcastem. Z tohoto důvodu mnoho větších systémů (>64 procesorů) používá tento typ koherence mezipaměti.
Otázky a odpovědi
Otázka: Co je to koherence keší?
A: Koherence mezipaměti znamená zajištění toho, aby všechny mezipaměti prostředku obsahovaly stejná data a aby data v mezipaměti byla konzistentní (integrita dat).
Otázka: Jaký je účel koherence mezipaměti?
Odpověď: Účelem koherence mezipaměti je řídit konflikty mezi více mezipaměťmi společného paměťového prostředku a udržovat konzistenci mezi mezipamětí a pamětí.
Otázka: Jaké mohou být důsledky toho, že není zajištěna koherence mezipaměti?
Odpověď: Bez koherence mezipaměti mohou data v mezipaměti ztrácet smysl nebo jedna mezipaměť nemusí mít stejná data jako ostatní, což může vést k nekonzistenci a chybám.
Otázka: Jaký je běžný případ, kdy dochází k problémům s koherencí mezipaměti?
Odpověď: Běžným případem, kdy dochází k problémům s koherencí mezipaměti, je mezipaměť procesorů ve víceprocesorovém systému.
Otázka: Jak funguje koherence mezipaměti?
Odpověď: Koherence mezipaměti funguje tak, že zajišťuje, aby všechny mezipaměti prostředku měly stejná data a aby data v mezipaměti byla konzistentní pomocí různých metod.
Otázka: Co znamená koherence paměti?
Odpověď: Koherence paměti znamená konzistenci dat ve sdíleném paměťovém prostředku.
Otázka: Jak může koherence mezipaměti zlepšit výkon?
Odpověď: Koherence mezipaměti může zlepšit výkon tím, že umožní rychlejší a efektivnější přístup k danému prostředku.