2010-08-09 5 views
5

Возможные Дублировать:
CPU cache flushКак очистить L1 процессора и кэш L2

Я бегу тест на XEON сервере, и я повторяю расстрелах в 2-3 раза. Я хотел бы стереть содержимое кеша в L1 и L2, повторяя прогоны. Можете ли вы предложить какие-либо методы для этого?

+4

Какую архитектуру и ОС вы испытываете? –

+0

Я полагаю, что делать некоторые случайные другие вещи на сервере для miunute или так было бы немного сырым? – Dentrasi

+0

Мой вопрос, почему вы хотите это сделать? –

ответ

8

Постарайтесь считывать многократные большие данные через процессор (т. Е. Не DMA). Как:

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

Однако в зависимости от сервера большей проблемой может быть кэш-диск (в памяти), то кэш L1/L2. В Linux (например) падение с помощью:

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

Edit: Это тривиально, чтобы генерировать большую программу, которая ничего не делать:

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

Запуск несколько раз под разными названиями (код не производится скрипт) должен делать работу

+6

Большинство современных процессоров имеют отдельные кэши команд и данных; в то время как циклическое перемещение через 20 м ОЗУ может очистить кеш данных; он не коснется кэша команд. Кроме того, нет гарантии, что процессор будет использовать весь свой кеш, он может просто повторно использовать один и тот же небольшой раздел. –

+0

Решение в основном то же самое. Создайте много кода и выполните его. –

+0

Новые процессоры собираются распознавать шаблон и не будут лишать законной силы существующую строку кэша; поэтому он будет использовать только 2 (или около того) строки кеша для вашей программы. Если кеш является большим фактором; лучше просто отключить его и не использовать. С другой стороны; это, вероятно, не делает двух разворотов разницы в первую очередь. –

Смежные вопросы