Usando 'perf' repetidamente com entrada de arquivo

2

perf pode ser usado para analisar o desempenho de um programa.

Digamos que você queira testar o desempenho de um programa prgrm , com a entrada de um arquivo, você pode executar:

perf stat prgrm < inp.dat

Agora, quando você quiser repetir o experimento várias vezes, use a opção --repeat , mas:

perf stat --repeat 50 prgrm < inp.dat

não funciona. Eu entendo o motivo: o inp.dat é "canalizado" através de perf e na segunda execução, a primeira execução já "consumiu" o arquivo inteiro para que a entrada alimentada para stdin tenha chegado ao fim.

No entanto, é possível executar a experiência repetidamente a cada vez que leu inp.dat desde o início?

    
por Willem Van Onsem 09.01.2015 / 09:02

1 resposta

2

Se o seu programa não tem como pegar um nome de arquivo de entrada, você provavelmente desejará usar o shell dentro de cada iteração de estatísticas do perf. Eu deixaria cair tudo que você quer em um pequeno script de shell:

test-prgrm.sh:

#!/bin/sh
prgrm < inp.data

depois, execute com:

perf stat --repeat 50 ./test-prgrm.sh

Mas você pode fazê-lo mesmo sem o arquivo de script de shell intermediário usando sh -c:

perf stat --repeat 50 sh -c 'prgrm < inp.data'

perf por padrão mantém os contadores para qualquer filho do processo que ele invoca. Você pode obter algumas amostras dentro da execução do shell, mas presumivelmente é uma pequena sobrecarga em comparação com a execução do seu programa.

    
por 31.05.2015 / 04:06