Você pode tentar usar o módulo timeit, disponível em qualquer sistema com Python:
$ python -m timeit "__import__('os').system('my command here')"
10 loops, best of 3: 591 msec per loop
Estou time
ing alguns dos meus comandos. Agora, para calcular a média das medidas, gostaria de executar e cronometrar meus comandos em um determinado número de vezes e obter os resultados com uma média calculada e um desvio padrão. O resultado seria como:
avgtime -n 100 my_command
real 0m5.388s stdev 0m0.068s
user 0m5.380s stdev 0m0.067s
sys 0m0.004s stdev 0m0.000s
Existe uma ferramenta UNIX para isso? O GNU / Linux tem um?
Você pode tentar usar o módulo timeit, disponível em qualquer sistema com Python:
$ python -m timeit "__import__('os').system('my command here')"
10 loops, best of 3: 591 msec per loop
Não é exatamente uma ferramenta UNIX ou GNU / Linux, mas você pode usar confortavelmente o R para isso. (Eu não posso encontrar algo mais específico para sua tarefa, embora .)
Editar Como eu poderia duvidar, é claro que existe um pacote de referência para R
: rbenchmark
. Ele aparentemente envolve system.time()
, que você também pode usar diretamente. Ou dê uma olhada nisso, um simples par de funções de cronômetro. Veja também " Executar um comando do sistema "@Rosetta Code (ou não, é system("command")
.)
Edit2 Acabei de ver esta pergunta, "Medindo o tempo em um script" na coluna "Relacionada" correta, isso também pode ser usado, ou seja, reserve tempo, faça loop ( N
times), reserve tempo novamente, calcule o intervalo de tempo, divida por N
. (Ainda mais fácil, tente time ( for-loop )
, analise sua saída, divida por N
).
Você pode usar R
para calcular rapidamente a média, o desvio padrão e outros valores interessantes.
Por exemplo, você pode usar o tempo GNU para gravar várias medições de tempo de execução em um arquivo CSV:
function measure
{
f=$1; shift
n=$2; shift
echo wall,user,sys,rss > "$f"
for i in $(seq $n); do
/usr/bin/time --output "$f" --append --format '%e,%U,%S,%M' "$@" >/dev/null
done
}
Então você pode gerar os valores com R assim:
Rscript --vanilla -e "b=read.csv(file='$f');summary(b);sapply(b, sd);"
Eu criei um pequeno script de benchmark que também faz uma impressão bonita do R saída, por exemplo:
$ benchmark.sh 100 ./some_prog arg1 arg2
n=100 | min | Q1 | med | mean | Q3 | max | std
wall | 0.0400 | 0.0400 | 0.0500 | 0.0471 | 0.0500 | 0.0800 | 0.00624
user | 0.0400 | 0.0400 | 0.0400 | 0.0426 | 0.0400 | 0.0700 | 0.00562
sys | 0 | 0 | 0 | 0 | 0 | 0 | 0.00000
rss | 2608 | 2657 | 2704 | 2728 | 2764 | 2920 | 95.06524
Opção 1 - sqlite :
crie uma tabela simples com colunas de comando e hora e visualize com os cálculos agregação adequados. Após o tempo, adicione uma linha à tabela.
Vantagens: mais simples de definir uma tabela em comparação com a solução 2.
Desvantagens: você precisa (você?) se preocupar com a retenção de dados.
Opção 2 - rrdtool :
Defina o arquivo de base de dados rrd, a definição de dados e as funções de agregação.
Após o tempo, alimente o banco de dados com rrdtool update ...
.
Vantagens: você pode gerar facilmente gráficos com rrdtool graph ...
. Nenhum problema de retenção de dados (banco de dados round robin).
Desvantagens: pouco mais difícil definir o banco de dados rrd em comparação com a tabela / visualização SQL simples