Estoy tratando de obtener una descripción precisa de la jerarquía de caché de datos de la CPU actual en Linux: no solo el tamaño de los cachés de datos individuales L1 / L2 / L3 (y posiblemente L4), sino también la forma en que se dividen o comparten núcleos
Por ejemplo, en mi CPU (AMD Ryzen Threadripper 3970X), cada núcleo tiene sus propios 32 KB de caché de datos L1 y 512 KB de caché L2, sin embargo, el caché L3 se comparte entre los núcleos dentro de un complejo central (CCX). En otras palabras, hay 8 cachés L3 distintos, cada uno de 16 MB.
La sección "Caché" de esta captura de pantalla de CPU-Z en Windows es básicamente lo que estoy tratando de descubrir:
No tengo ningún problema para obtener esta información en Windows con GetLogicalProcessorInformation()
.
Sin embargo, en Linux, parece que sysconf()
solo me da el tamaño de caché por núcleo para cachés de datos L1 y L2 ( _SC_LEVEL1_DCACHE_SIZE
y _SC_LEVEL2_DCACHE_SIZE
), o el tamaño total de caché L3 ( _SC_LEVEL3_CACHE_SIZE
).
EDITAR: salida de lstopo bajo VMWare . La máquina virtual tiene 8 núcleos. La información de caché L1 y L2 está bien, pero el tamaño de caché L3 no parece ser correcto:
sysconf()
. ¿Cómo darles sentido si no sabemos si las memorias caché se comparten o no?
cpuid
instrucción x86 usted mismo en ese ISA e incluso incrustar algunos detalles de diseño de caché por modelo. IDK cuántos detalles pueden representar las diversas hojas de CPUID como sandpile.org/x86/cpuid.htm#level_0000_0004h .
lstopo
Linux en bare metal? (por ejemplo, iniciar un USB en vivo). Su resultado falso podría ser culpa de la máquina virtual, por lo que deberíamos descartarlo. Como era de esperar, funciona como se esperaba en mi escritorio i7-6700k, mostrando los 4 núcleos en el mismo paquete que comparten un caché L3. Pero la familia Intel Sandybridge es la serie de CPU x86 más utilizada y no modificada recientemente.
lstopo
también está disponible para Windows . lstopo
use la cpuid
instrucción (y tal vez la SRAT
tabla ACPI ). cpuid
es relativamente fácil de usar, pero Intel y AMD difieren mucho en este aspecto. hwloc
(al que lstopo
pertenece) tiene una interfaz API que puede usar para obtener la topología de caché tanto en Windows como en Linux.