Hyper-Threading-Datencache-Kontext-Aliasing

Oct 31 2020

In Intel's Handbuch verwirrt mich der folgende Abschnitt:

11.5.6.2 Freigegebener Modus Im freigegebenen Modus wird der L1-Datencache von logischen Prozessoren wettbewerbsfähig gemeinsam genutzt. Dies gilt auch dann, wenn die logischen Prozessoren identische CR3-Register und Paging-Modi verwenden. Im gemeinsam genutzten Modus können lineare Adressen im L1-Datencache mit einem Alias ​​versehen werden, was bedeutet, dass eine lineare Adresse im Cache auf verschiedene physische Speicherorte verweisen kann. Der Mechanismus zum Auflösen von Aliasing kann zu Thrashing führen. Aus diesem Grund ist IA32_MISC_ENABLE [Bit 24] = 0 die bevorzugte Konfiguration für Prozessoren, die auf der Intel NetBurst-Mikroarchitektur basieren und die Intel Hyper-Threading-Technologie unterstützen.

Verwenden Sie als Intel VIPT (entspricht PIPT), um auf den Cache zuzugreifen.

Wie würde Cache-Aliasing passieren?

Antworten

1 PaulA.Clayton Nov 01 2020 at 20:18

Basierend auf dem Referenzhandbuch zur Optimierung von Intel® 64- und IA-32-Architekturen , November 2009 (248966-020), Abschnitt 2.6.1.3:

Die meisten Ressourcen in einem physischen Prozessor werden vollständig gemeinsam genutzt, um die dynamische Auslastung der Ressource zu verbessern, einschließlich Caches und aller Ausführungseinheiten. Einige gemeinsam genutzte Ressourcen, die linear angesprochen werden, wie der DTLB, enthalten ein ID-Bit für den logischen Prozessor, um zu unterscheiden, ob der Eintrag zu einem oder dem anderen logischen Prozessor gehört.

Der Cache der ersten Ebene kann abhängig von einem Kontext-ID-Bit in zwei Modi betrieben werden:

  • Freigegebener Modus: Der L1-Datencache wird vollständig von zwei logischen Prozessoren gemeinsam genutzt.
  • Adaptiver Modus: Im adaptiven Modus werden Speicherzugriffe über das Seitenverzeichnis identisch auf logische Prozessoren abgebildet, die den L1-Datencache gemeinsam nutzen.

Aliasing ist möglich, weil das Prozessor-ID / Kontext-ID-Bit (das nur ein Bit ist, das angibt, von welchem ​​virtuellen Prozessor der Speicherzugriff stammt) für verschiedene Threads unterschiedlich ist und der gemeinsam genutzte Modus dieses Bit verwendet. Der adaptive Modus adressiert den Cache einfach wie normalerweise erwartet, nur unter Verwendung der Speicheradresse.

Insbesondere scheint nicht dokumentiert zu sein, wie die Prozessor-ID beim Indizieren des Caches im gemeinsam genutzten Modus verwendet wird. (XORing mit mehreren Adressbits würde eine Verteilung von Indizes bereitstellen, so dass benachbarte Indizes für einen Hardwarethread stärker getrennten Indizes für den anderen Thread zugeordnet würden. Die Auswahl einer anderen Bitreihenfolge für verschiedene Threads ist weniger wahrscheinlich, da dies dazu neigen würde, die Verzögerung zu erhöhen Reduziert die Konflikthäufigkeit bei räumlicher Lokalität über der Granularität der Cache-Linie, jedoch unter der Granularität der Weggröße.)