Red de conocimiento informático - Conocimiento informático - ¿Cómo estimar el tamaño de la caché a través del programa?

¿Cómo estimar el tamaño de la caché a través del programa?

Verifique el tamaño de la caché de su sistema: $ cat /sys/devices/system/cpu/cpu0/cache/index2/size El comando anterior es para verificar el tamaño de la caché de nivel 2, que es 256k en el servidor Recuerde este número, utilizado al escribir programas. Mire el tamaño de la línea de caché: $ cat /sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size Escriba el programa de prueba cache.c: aunque el código anterior es simple, debe comprender la estructura simple y Principio del caché: el caché es una línea de 64 palabras o 128 bytes que se divide en varios grupos (o canales múltiples). Cada vez que se produce una falla en el caché al recuperar datos, el caché recupera datos de la memoria en unidades de línea de caché (). aquí, se obtienen 64 bytes de datos a la vez). El primer paso es saber que el tamaño total del caché de datos de nivel 2 es 256k. El segundo paso es saber que cada línea de caché tiene 64 bytes. Por lo tanto, el caché de datos de nivel 2***256k/64=2^12. =4096 líneas. Imagine una tabla con 64 bytes por fila, 4096 filas y un tamaño de 256k. Esta es la estructura simple de nuestro caché. Para garantizar que se produzca un error cada vez que se recuperan los datos, debemos recuperar los datos en pasos >= 64 bytes. Primero cree una matriz de 512 K, que es el doble del tamaño del caché. Si la matriz también es de 256k, cuando finaliza el primer ciclo y los datos se recuperan desde el principio nuevamente después de que se agote la matriz, el caché ya no se reemplazará, por lo que no volverán a ocurrir errores de caché. La pérdida de caché ocurre cada vez que se recuperan los datos, la matriz debe tener al menos el doble del tamaño de la caché o más. Lea los datos en la matriz en un bucle, lea un tamaño int cada vez, luego agregue 64, luego lea los datos de la siguiente línea de caché y realice un bucle hasta que se eliminen todos los datos de la matriz. Hay un límite mínimo para las estadísticas de errores de caché en oprofile (mi versión 0.9.8 es 2.000.000 de veces), por lo que si el número de errores que ocurren es demasiado pequeño, no se puede usar, por lo que el número de ciclos aumenta a 5.000.000. En este punto, se puede realizar la prueba de pérdida de caché del 100%, pero después de la prueba, se descubrió que la pérdida de caché no ocurrió en absoluto. Después de consultar al jefe, recordé que x86 tiene un captador previo de hardware de streambuffer. Si recupera datos con mucha regularidad, una vez entrenado el captador previo de hardware, colocará los datos que desea directamente en la memoria caché antes de recuperarlos. Por lo tanto, para realizar una prueba de caché en un servidor con procesador Xeon, debe desactivar la captación previa de hardware después de reiniciar el sistema. De lo contrario, debe modificar el programa y escribir código que obtenga datos de forma verdaderamente aleatoria. Sin embargo, esto no puede garantizar que la tasa de errores de caché sea del 100%. Solo puede garantizar que la tasa de aciertos de caché sea relativamente baja. La tasa de errores de caché de mcf en SPEC CPU2006 es muy alta y puede usarse para pruebas.