Volgens wat ik heb gelezen uit twee verschillende bronnen, is cachekleuring (was?) vereist om:
-
Los het probleem van aliasing op: Voorkom dat twee verschillende virtuele adressen met hetzelfde fysieke adres worden toegewezen aan verschillende cachesets . (Volgens een CS Stack Exchange Answer )
-
Maak gebruik van de ruimtelijke lokaliteitseigenschap van virtueel geheugen : door te garanderen dat twee aangrenzende blokken virtueel geheugen (niet noodzakelijkerwijs aangrenzend in fysiek geheugen) niet worden toegewezen aan dezelfde cache-index. (Volgens Wikipedia )
Dit lijken mij fundamenteel verschillende definities, en zonder de motivatie voor cachekleuring, ik begrijp het mechanisme voor het selecteren van het vereiste aantal kleuren niet. Zijn ze echt een en dezelfde?
Als de ruimtelijke ligging van het virtuele geheugen de primaire motivatie is, is dat cachekleuring echt vereist voor VIPT-caches, waarbij de index van de cache om te beginnen wordt afgeleid uit het virtuele geheugen Of wordt cachekleuring gewoon gebruikt in VIPT-caches om aliasing te omzeilen?
Antwoord
Zowel het vermijden van aliassen als het vermijden van buitensporige cacheconflicten zijn geldige redenen om paginakleuren te gebruiken. Het vereisen van paginakleuring om aliassen te vermijden is niet populair omdat het een verplichte beperking oplegt aan de paginatoewijzing. algemene, moderne niet-ingebedde processors hebben geen pagina-kleuring nodig om aliasing te voorkomen.
Problemen met aliasing in hardware vermijden i Verhoogt de hardwarecomplexiteit, dus kozen eerdere processors (en misschien enkele recentere embedded processors) ervoor om de software te belasten. Hardware kan aliasingproblemen voorkomen in een cache met meer index + offsetbits dan bits in de pagina die worden gecompenseerd door (bijvoorbeeld):
- het controleren van alternatieve sets op een cache-misser (zoals gedaan door AMDs Athlon; toen een alias werd gedetecteerd, werd het blok verplaatst naar de huidige virtuele index)
- inclusief de virtuele adresbits die worden gebruikt voor het indexeren van L1 in een (tag) inclusief L2 (bij een L1-misser en L2-hit, als de virtuele adresbits komen overeen met de corresponderende bits voor het verzoek, er is geen actie nodig; als de bits niet overeenkomen, is de juiste set om te onderzoeken bekend [of het blok zich ook in L1 bevindt kan ook worden opgeslagen in de L2-tags om de samenhang te verminderen overhead, dus sommige probes kunnen worden vermeden])
- gebruik van set-voorspelling om de extra fysieke adresbits te raden die voor indexering worden gebruikt (een verkeerde voorspelling zou worden ontdekt na TLB-toegang en gecorrigeerd)
- gebruiken omgekeerde vertaling (fysiek naar virtueel) op een cache-misser om mogelijke aliassen te vinden (ik denk dat een PA-RISC-implementatie reverse translati aan voor coherentie )
Het gebruik van paginakleuring om conflicten te verminderen (voor caches met eenvoudige modulo een kracht van twee indexering) is minder impopulair omdat de paginakleuring niet vereist is voor juistheid. Als een bepaalde kleur schaars wordt, kan een pagina verkeerd worden ingekleurd met alleen een mogelijke vermindering van de prestaties. Deze grondgedachte voor het kleuren van paginas betekent ook dat het aantal gekleurde bits minder beperkt is. Het (minder praktische) ideaal kan zijn om alle fysieke indexbits voor de cache van het laatste niveau te matchen met de corresponderende virtuele adresbits, maar zelfs het kleuren van slechts vier bits kan conflictproblemen aanzienlijk verminderen.
Het is misschien de moeite waard om op te merken. die kleuring voor het vermijden van alias hoeft niet overeen te komen met virtuele adresbits met fysieke adresbits. Zolang alle potentiële aliassen dezelfde virtuele adresbits delen die voor indexering worden gebruikt, worden aliasproblemen vermeden. Het matchen van fysieke en virtuele adresbits kan echter handig zijn (en voorspelbare conflicten opleveren in fysiek geadresseerde cacheniveaus).