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_SIZEy _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?
cpuidinstrucció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.
lstopotambién está disponible para Windows . lstopouse la cpuidinstrucción (y tal vez la SRATtabla ACPI ). cpuides relativamente fácil de usar, pero Intel y AMD difieren mucho en este aspecto. hwloc(al que lstopopertenece) tiene una interfaz API que puede usar para obtener la topología de caché tanto en Windows como en Linux.

