Ich versuche, eine genaue Beschreibung der Datencache-Hierarchie der aktuellen CPU unter Linux zu erhalten: nicht nur die Größe der einzelnen L1 / L2 / L3- (und möglicherweise L4-) Datencaches, sondern auch die Art und Weise, wie sie aufgeteilt oder gemeinsam genutzt werden Kerne.
Auf meiner CPU (AMD Ryzen Threadripper 3970X) verfügt beispielsweise jeder Kern über einen eigenen 32-KB-L1-Datencache und einen 512-KB-L2-Cache. Der L3-Cache wird jedoch von mehreren Kernen innerhalb eines Kernkomplexes (CCX) gemeinsam genutzt. Mit anderen Worten, es gibt 8 verschiedene L3-Caches mit jeweils 16 MB.
Der Abschnitt "Cache" dieses Screenshots von CPU-Z unter Windows ist im Grunde das, was ich herausfinden möchte:
Ich habe kein Problem damit, diese Informationen unter Windows zu erhalten GetLogicalProcessorInformation()
.
Unter Linux scheint es jedoch sysconf()
nur die Cache-Größe pro Kern für L1- und L2-Datencaches ( _SC_LEVEL1_DCACHE_SIZE
und _SC_LEVEL2_DCACHE_SIZE
) oder die gesamte L3-Cache-Größe ( _SC_LEVEL3_CACHE_SIZE
) zu geben.
BEARBEITEN: Die Ausgabe von lstopo unter VMWare . Die virtuelle Maschine verfügt über 8 Kerne. Die L1- und L2-Cache-Informationen sind in Ordnung, aber die L3-Cache-Größe scheint nicht korrekt zu sein:
sysconf()
. Wie kann man sie verstehen, wenn wir nicht wissen, ob Caches geteilt werden oder nicht?
cpuid
Anweisung selbst auf dieser ISA verwenden und möglicherweise sogar einige Details zum Cache-Layout pro Modell einbetten. IDK, wie detailliert die verschiedenen CPUID-Blätter wie sandpile.org/x86/cpuid.htm#level_0000_0004h darstellen können.
lstopo
Linux auf Bare Metal ausprobieren ? (zB einen Live-USB booten). Ihr falsches Ergebnis könnte die Schuld der VM sein, daher sollten wir dies ausschließen. Es überrascht nicht, dass es auf meinem i7-6700k-Desktop wie erwartet funktioniert und alle 4 Kerne im selben Paket zeigt, die sich einen L3-Cache teilen. Die Intel Sandybridge-Familie ist jedoch die am weitesten verbreitete und nicht kürzlich geänderte Serie von x86-CPUs.
lstopo
auch für Windows verfügbar ist . lstopo
Verwenden Sie die cpuid
Anweisung (und möglicherweise die ACPI- SRAT
Tabelle). cpuid
ist relativ einfach zu bedienen, aber Intel und AMD unterscheiden sich in diesem Aspekt stark. hwloc
(zu dem lstopo
gehört) verfügt über eine API-Schnittstelle, über die Sie die Cache-Topologie sowohl unter Windows als auch unter Linux abrufen können.