Verwendet die x86_64-CPU dieselben Cache-Zeilen für die Kommunikation zwischen zwei Prozessen über den gemeinsamen Speicher?

Wie bekannt sind alle Ebenen des Cache L1 / L2 / L3 auf modernen x86_64 virtuell indiziert, physisch markiert. Und alle Kerne kommunizieren über den Last Level Cache - Cache-L3 unter Verwendung des Cache-kohärenten Protokolls MOESI / MESIF über QPI / HyperTransport.

Die CPU der Sandybridge-Familie verfügt beispielsweise über einen 4 - 16-Wege-Cache L3 und eine Seitengröße von 4 KB. Auf diese Weise können Daten zwischen gleichzeitigen Prozessen ausgetauscht werden, die auf verschiedenen Kernen über einen gemeinsamen Speicher ausgeführt werden. Dies ist möglich, da der Cache L3 nicht gleichzeitig denselben physischen Speicherbereich wie eine Seite von Prozess 1 und eine Seite von Prozess 2 enthalten kann.

Bedeutet dies, dass jedes Mal, wenn der Prozess-1 denselben gemeinsam genutzten Speicherbereich anfordert, der Prozess-2 seine Seiten-Cache-Zeilen in den RAM-Speicher spült und dann der Prozess-1 denselben Speicherbereich wie die Cache-Zeilen von lädt Seite im virtuellen Raum von Prozess-1? Es ist sehr langsam oder der Prozessor verwendet einige Optimierungen?

Benutzt eine moderne x86_64-CPU die gleichen Cache-Zeilen ohne Leeren, um über einen gemeinsam genutzten Speicher zwischen zwei Prozessen mit unterschiedlichen virtuellen Räumen zu kommunizieren?

Sandy Bridge Intel CPU - Cache L3:

8 MB - Cache-Größe 64 B - Cache-Zeilengröße 128 K - Zeilen (128 K = 8 MB / 64 B) 16-Wege 8 K - Zahlensätze von Wegen (8 K = 128 K Linien / 16 Wege) 13 Bit [18: 6] - der virtuellen Adresse (Index) definiert die aktuelle Satznummer (dies ist tag) 512 K - jeweils die gleiche (virtuelle Adresse / 512 K) konkurrieren um den gleichen Satz (8 MB / 16-Wege)

low 19 bits - signifikant für die Bestimmung der aktuellen Satznummer

4 KB - Standardseitengröße

nur niedrige 12-Bit-Werte - bei virtuellen und physischen Adressen gleich für jede Adresse

Wir haben 7 fehlende Bits [18:12] - d. H. Wir müssen prüfen (7 ^ 2 * 16-Wege) = 1024 Cache-Zeilen. Dies entspricht dem 1024-Wege-Cache - das ist also sehr langsam. Bedeutet das, dass der Cache L3 (physisch indiziert, physisch markiert) ist?

Zusammenfassung der fehlenden Bits in der virtuellen Adresse für das Tag (Seitengröße 8 KB - 12 Bits):

L3 (8 MB = 64 B x 128 K Zeilen), 16-Wege, 8 K Sätze, 13-Bit-Tag [18: 6] - fehlende 7 Bits L2 (256 KB = 64 B x 4 K Zeilen), 8-Wege, 512 Sätze, 9-Bit-Tag [14: 6] - 3 Bits fehlen L1 (32 KB = 64 B x 512 Zeilen), 8-Wege, 64 Sätze, 6-Bit-Tag [11: 6] - keine fehlenden Bits

Es sollte sein

L3 / L2 (physisch indiziert, physisch markiert) nach TLB-Suche verwendet L1 (virtuell indiziert, physisch markiert)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage