Como tempo grep comandos com precisão?

8

Eu quero comparar a velocidade desses dois comandos:

grep pattern1 files* 
grep pattern2 files* 

Infelizmente, o primeiro grep lê muito dos arquivos * na memória buffers, então o segundo grep é executado muito rapidamente, mas para o errado razão.

Como eu digo ao Linux (Fedora 11): "por favor, pare de fazer cache de leituras de disco porque estou testando alguma coisa. "

    
por barrycarter 01.03.2011 / 15:59

2 respostas

10

Eu não acho que você pode, facilmente, dizer "pare temporariamente o cache". Mas o que você pode fazer é dizer ao sistema para soltar o cache antes de cada execução:

Como root:

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

(Isto está documentado nos documentos do kernel em Documentation / sysctl / vm.txt , o que é útil se, como alguns de nós, você nem sempre consegue se lembrar do que os valores 1, 2 ou 3 fazem.)

Ou alternadamente, é claro, prepare o cache e compare o desempenho do cache. (Eu acho que ambos são números úteis.)

    
por 01.03.2011 / 16:15
1

Quando cronometrar coisas como essa, geralmente executo-a primeiro para preparar o cache. Em seguida, execute o comando usando o tempo. Ao testar algo assim, você deve estar mais preocupado com a CPU e os tempos decorridos, e menos preocupado com o tempo de E / S.

Em qualquer caso, é difícil obter tempos totalmente precisos. Se os arquivos de entrada excederem o tamanho da memória disponível para buffers, você provavelmente acabará alternando todos os arquivos por meio do cache de buffer. Caso contrário, você pode acessar todos os dados do cache de buffer. Na vida real, muitas vezes há uma mistura de dados em buffer e dados lidos do disco.

    
por 01.03.2011 / 16:24