Podle toho, co jsem četl ze dvou různých zdrojů, je (bylo?) vyžadováno zbarvení mezipaměti, aby:
-
Proti problému aliasingu: Zabraňte mapování dvou různých virtuálních adres se stejnou fyzickou adresou na různé sady mezipaměti . (Podle odpovědi CS Stack Exchange )
-
Využijte vlastnost prostorové lokality virtuální paměti : tím, že zaručíte, že dva sousední bloky virtuální paměti (nemusí nutně sousedit ve fyzické paměti), nemapujte na stejný index mezipaměti. (Podle Wikipedie )
Zdá se mi, že jde o zásadně odlišné definice, aniž by chápali motivace pro vybarvení mezipaměti, nemohu pochopit mechanismus pro výběr požadovaného počtu barev. Jsou opravdu stejné a stejné?
Pokud je primární motivací prostorová lokalita virtuální paměti, je Vybarvení mezipaměti je skutečně vyžadováno pro VIPT cache, kde je index mezipaměti odvozen z virtuální paměti, na začátek? Nebo je barevné cache jednoduše použito ve VIPT cache pro obcházení aliasingu?
Odpověď
Jak vyhnutí se aliasům, tak vyhnutí se nadměrným konfliktům mezipaměti jsou platnými důvody pro použití zbarvení stránky. Vyžadování vybarvení stránky, aby se zabránilo aliasům, je nepopulární, protože klade povinné omezení na přidělování stránek moderní moderní procesory obecně nevyžadují zbarvení stránky, aby se vyhnuly aliasingu.
Vyhněte se problémům s aliasingem v hardwaru i nzvyšuje složitost hardwaru, takže dřívější procesory (a možná i některé novější vestavěné procesory) se rozhodly pro zátěž softwaru. Hardware se může vyhnout problémům s aliasingem v mezipaměti s více bity index + offset než bity v offsetu stránky (například):
- kontrola alternativních sad na chybějící mezipaměti (jak to dělá AMD Athlon; když byl zjištěn alias, blok byl přesunut do aktuálního virtuálního indexu)
- včetně bitů virtuální adresy použitých pro indexování L1 v (tagu) včetně L2 (při chybě L1 a zásahu L2, pokud bity virtuální adresy se shodují s odpovídajícími bity pro požadavek, není nutná žádná akce; pokud se bity neshodují, je známa příslušná sada pro sondování [zda je blok také v L1 lze také uložit do značek L2, aby se snížila koherence režie, takže je možné se některým sondám vyhnout])
- použití predikce sady k uhodnutí dalších bitů fyzické adresy použitých pro indexování (chybná předpověď by byla objevena po přístupu TLB a opravena)
- pomocí reverzní překlad (fyzický na virtuální) na mezipaměti chybí najít možné aliasy (myslím, že implementace PA-RISC používala reverzní překlad zapnuto pro koherenci )
Použití zbarvení stránky ke snížení konfliktů (pro mezipaměti s jednoduchým modulo výkon dvou indexování) je méně nepopulární, protože vybarvení stránky není vyžadováno pro správnost. Pokud se konkrétní barva stane vzácnou, může být stránka nesprávně vybarvena pouze s možným snížením výkonu. Toto zdůvodnění zbarvení stránky také znamená, že počet zabarvených bitů je méně omezený. Ideálním (méně praktickým) řešením může být shoda všech bitů fyzického indexu pro mezipaměť poslední úrovně s odpovídajícími bity virtuální adresy, ale i vybarvení pouhých čtyř bitů může podstatně omezit problémy s konflikty.
Možná stojí za zmínku že zbarvení pro zamezení aliasu nemusí odpovídat bitům virtuální adresy s bity fyzické adresy. Pokud všechny potenciální aliasy sdílejí stejné bity virtuálních adres používané pro indexování, nedojde k problémům s aliasy. Shoda fyzických a virtuálních adresových bitů však může být pohodlná (a poskytuje předvídatelný konflikt ve fyzicky adresovaných úrovních mezipaměti).