2010-08-09 6 views
5

Mögliche Duplizieren löschen:
CPU cache flushWie CPU L1 und L2-Cache

Ich bin mit einer Benchmark auf xeon-Server, und ich wiederhole die Hinrichtung 2-3 mal. Ich möchte den Cache-Inhalt in L1 und L2 löschen, während ich die Läufe wiederhole. Können Sie irgendwelche Methoden dazu vorschlagen?

+4

Welche Architektur und Betriebssystem testen Sie? –

+0

Ich nehme an, einige zufällige andere Dinge auf dem Server für eine miunute oder so zu tun wäre ein bisschen zu grob? – Dentrasi

+0

Meine Frage ist, warum möchten Sie das tun? –

Antwort

8

Versuchen Sie wiederholt große Daten über die CPU zu lesen (d. H. Nicht per DMA). Like:

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; 
} 

jedoch auf dem Server abhängen ein größeres Problem kann eine Disk-Cache (im Speicher) sein dann L1/L2-Cache. Verwendung unter Linux (zum Beispiel) fallen:

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

Edit: Es ist trivial großes Programm zu erzeugen, die nichts zu tun:

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

einige Male unter verschiedenen Namen Laufen (Code erzeugt nicht die Skript) sollte die Arbeit tun

+6

Die meisten modernen CPUs haben separate Befehls- und Datencaches; während das Durchlaufen von 20M RAM den Datencache bereinigen könnte; Es berührt nicht den Anweisungscache. Außerdem gibt es keine Garantie dafür, dass die CPU den ganzen Cache verwendet, es könnte einfach denselben kleinen Abschnitt kontinuierlich wiederverwenden. –

+0

Lösung ist grundsätzlich gleich. Erzeugen Sie viel Code und führen Sie ihn aus. –

+0

Neuere Prozessoren werden das Muster erkennen und die vorhandene Cache-Zeile nicht ungültig machen; Es werden also nur 2 (oder so) Zeilen Cache für Ihr Programm verwendet. Wenn Cache ein großer Faktor ist; besser, es einfach auszuschalten und nicht zu benutzen. Andererseits; es macht wahrscheinlich nicht 2 Unterschiede in erster Linie. –