2010-08-09 27 views
5

Duplicar posibles:
CPU cache flushcómo borrar L1 CPU y caché L2

estoy corriendo un punto de referencia en el servidor Xeon, y repito las ejecuciones 2-3 veces. Me gustaría borrar los contenidos de la memoria caché en L1 y L2 mientras repito las ejecuciones. ¿Puedes sugerir algún método para hacerlo?

+4

¿Qué arquitectura y sistema operativo está probando? –

+0

Supongo que hacer algunas otras cosas al azar en el servidor durante un miunute o eso sería un poco crudo. – Dentrasi

+0

Mi pregunta es ¿por qué querrías hacer eso? –

Respuesta

8

Intente leer datos repetidamente grandes a través de la CPU (es decir, no por DMA). Al igual que :

int main() { 
    const int size = 20*1024*1024; // Allocate 20M. Set much larger then L2 
    char *c = (char *)malloc(size); 
    for (int i = 0; i < 0xffff; i++) 
     for (int j = 0; j < size; j++) 
     c[j] = i*j; 
} 

Sin embargo dependen de servidor de un problema más grande puede ser una caché de disco (en la memoria) y luego caché L1/L2. En Linux (por ejemplo) gota usando:

sync 
echo 3 > /proc/sys/vm/drop_caches 

Editar: Es trivial para generar gran programa que no hacer nada:

#!/usr/bin/ruby 
puts "main:" 
200000.times { puts " nop" } 
puts " xor rax, rax" 
puts " ret" 

Ejecución de un par de veces con diferentes nombres (código no la produce secuencia de comandos) debería hacer el trabajo

+6

La mayoría de las CPU modernas tienen cachés de instrucciones y datos por separado; mientras que el ciclado a través de 20M de RAM podría limpiar la caché de datos; no tocará el caché de instrucciones. Además, no hay garantía de que la CPU use todo su caché, sino que simplemente reutilice la misma pequeña sección continuamente. –

+0

La solución es básicamente la misma. Genera una gran cantidad de código y ejecútalo. –

+0

Los procesadores más nuevos reconocerán el patrón y no invalidarán la línea de caché existente; por lo que solo usará 2 (o más) líneas de caché para su programa. Si el caché es un factor importante; mejor simplemente apagarlo y no usarlo. Por otra parte; probablemente no está haciendo 2 gritos de diferencia en primer lugar. –

Cuestiones relacionadas