Nach dem, was ich aus zwei verschiedenen Quellen gelesen habe, ist (war?) eine Cache-Färbung erforderlich, um:
-
Gegen das Aliasing-Problem: Verhindern Sie, dass zwei verschiedene virtuelle Adressen mit derselben physischen Adresse unterschiedlichen Cache-Sets zugeordnet werden . (Gemäß einer CS-Stapelaustauschantwort )
-
Nutzen Sie die räumliche Lokalitätseigenschaft des virtuellen Speichers : Indem Sie sicherstellen, dass zwei benachbarte Blöcke des virtuellen Speichers (die nicht unbedingt im physischen Speicher benachbart sind) nicht demselben Cache-Index zugeordnet werden. (Laut Wikipedia )
Dies scheinen mir grundlegend unterschiedliche Definitionen zu sein, ohne die zu verstehen Motivation für die Cache-Färbung, ich kann den Mechanismus für die Auswahl der Anzahl der erforderlichen Farben nicht verstehen. Sind sie wirklich ein und dieselbe?
Wenn die räumliche Lokalität des virtuellen Speichers die Hauptmotivation ist, ist Die Cache-Färbung ist wirklich für VIPT-Caches erforderlich, bei denen der Index des Caches zunächst aus dem virtuellen Speicher abgeleitet wird. Oder wird die Cache-Färbung einfach in VIPT-Caches verwendet, um Aliasing zu umgehen?
Antwort
Sowohl das Vermeiden von Aliasen als auch das Vermeiden übermäßiger Cache-Konflikte sind gültige Gründe für die Verwendung der Seitenfärbung. Das Erfordernis der Seitenfärbung zur Vermeidung von Aliasen ist unpopulär, da dies eine obligatorische Einschränkung für die Seitenzuweisung darstellt Im Allgemeinen erfordern moderne nicht eingebettete Prozessoren keine Seitenfärbung, um Aliasing zu vermeiden.
Vermeiden von Aliasing-Problemen in der Hardware i n erhöht die Hardwarekomplexität, weshalb frühere Prozessoren (und möglicherweise einige neuere eingebettete Prozessoren) beschlossen, die Software zu belasten. Hardware kann Aliasing-Probleme in einem Cache mit mehr Index- und Versatzbits als Bits im Seitenversatz vermeiden, indem (zum Beispiel):
- alternative Sätze bei einem Cache-Fehler überprüft wird (wie von AMDs durchgeführt) Athlon: Wenn ein Alias erkannt wurde, wurde der Block in den aktuellen virtuellen Index verschoben.
- einschließlich der virtuellen Adressbits, die zum Indizieren von L1 in einem (Tag) einschließlich L2 verwendet wurden (bei einem L1-Fehler und einem L2-Treffer, wenn Die virtuellen Adressbits stimmen mit den entsprechenden Bits für die Anforderung überein. Es ist keine Aktion erforderlich. Wenn die Bits nicht übereinstimmen, ist der entsprechende zu prüfende Satz bekannt [ob sich der Block auch in L1 befindet, könnte auch in den L2-Tags gespeichert werden, um die Kohärenz zu verringern Overhead, so dass einige Sonden vermieden werden könnten])
- unter Verwendung einer festgelegten Vorhersage, um die zusätzlichen physikalischen Adressbits zu erraten, die für die Indizierung verwendet werden (eine falsche Vorhersage würde nach dem TLB-Zugriff entdeckt und korrigiert)
- unter Verwendung Reverse Translation (physisch zu virtuell) bei einem Cache-Miss, um mögliche Aliase zu finden (ich denke, eine PA-RISC-Implementierung verwendete Reverse Translati) Ein für Kohärenz )
Die Verwendung der Seitenfärbung zur Reduzierung von Konflikten (für Caches mit einfachem Modulo eine Indizierungskraft von zwei) ist weniger unbeliebt, da die Seitenfärbung nicht erforderlich ist für die Richtigkeit. Wenn eine bestimmte Farbe knapp wird, kann eine Seite mit nur einer möglichen Leistungsminderung falsch eingefärbt werden. Diese Begründung für das Färben von Seiten bedeutet auch, dass die Anzahl der gefärbten Bits weniger eingeschränkt ist. Das (weniger praktische) Ideal kann darin bestehen, alle physischen Indexbits für den Cache der letzten Ebene mit den entsprechenden virtuellen Adressbits abzugleichen, aber selbst das Färben von nur vier Bits kann Konfliktprobleme erheblich reduzieren.
Es könnte erwähnenswert sein Diese Färbung zur Vermeidung von Alias muss virtuelle Adressbits nicht mit physischen Adressbits abgleichen. Solange alle potenziellen Aliase dieselben virtuellen Adressbits verwenden, die für die Indizierung verwendet werden, werden Aliasprobleme vermieden. Das Abgleichen von physischen und virtuellen Adressbits kann jedoch zweckmäßig sein (und einen vorhersagbaren Konflikt in physisch adressierten Cache-Ebenen liefern).