2010-08-10 11 views
5

¿Cuáles serían los pasos programáticos escritos en "C" asociados con la limpieza de la caché L2 en una máquina con sistema operativo Linux?"C" caché L2 programáticamente transparente en máquinas Linux

/sys/devices/system/cpu/cpu0/cache/index2/size = 6144K x 8CPUs

+0

Relacionado: http://stackoverflow.com/questions/1756825/cpu-cache-flush – quantumSoup

+0

y otro relacionado: http://stackoverflow.com/questions/3446138/how-to-clear-cpu-l1-and -l2-cache – ennuikiller

+3

Esto depende de la CPU y no es portátil. Por favor, agregue la descripción de su plataforma/etiquetas correspondientes. Agregar "ensamblaje" de etiquetas puede ayudar a llamar la atención de las personas con experiencia en desarrollo de sistemas que puedan tener experiencia. Porque al final necesitarías codificar algún ensamblaje de todos modos. – Dummy00001

Respuesta

2

Lo más cerca que se puede obtener de cualquier manera remota limpia/portátil:

char dummy[L2_CACHE_SIZE]; 
memset(dummy, 0, sizeof dummy); 

Dependiendo su CPU, puede haber códigos de operación privilegiados que pueden borrar el caché, pero no sé nada sobre ellos o cómo puede acceder a ellos. Es probable que si existen, aún necesite código de núcleo para usarlos.

+0

Y eso significa que podríamos encontrar un syscall para realizar la tarea en cuestión. – Basilevs

+2

Memset() históricamente usa instrucciones que no se molestan en leer la línea de caché de destino y escribir la combinación de línea en la línea de caché que se escribirá. Sin embargo, hay instrucciones que transmiten datos directamente a la memoria (tienen su propia línea de caché dedicada, fuera de la caché). Un compilador inteligente puede usar tales instrucciones para proteger el caché L2 de ser borrado por un memset(). –

+0

Me pregunto cuánta asociatividad de caché obtendrá en el camino de borrar el caché? imagina que tienes un caché L2 totalmente asociativo; El reemplazo de LRU es lo único que está ocurriendo. Se están ejecutando otros procesos, manteniendo las líneas de caché en general utilizadas recientemente, pero el memset por supuesto no está escribiendo de nuevo en las líneas de caché que usa para escribir. Pronto se convertirán en las líneas LRU ... por lo que el memset() terminaría usando y reutilizando un pequeño conjunto de líneas de caché para sus escrituras. –

0

No puede acceder a la memoria de bajo nivel desde el espacio de usuario, debe implementar su propio controlador de dispositivo para tener acceso a la memoria física en Linux.

Cuestiones relacionadas