bash script como analisar saídas

2

Estou escrevendo um script para testar o desempenho de leitura / gravação no armazenamento de rede, mas preciso de um pouco de ajuda para concluir o script.

O script é simples:

  1. reloads the nfs mount to clear the cache
  2. write a test file to nfs
  3. record time
  4. read a test file from nfs
  5. record time

Eu tenho um problema restante para resolver: analisar a saída do comando time e armazená-lo em um arquivo de texto.

O comando de tempo gera três valores: 0m0.000s reais usuário 0m0.000s sys 0m0.000s

Eu só quero o tempo real. e um arquivo para leitura e um arquivo para gravação.

Isso é o que eu tenho até agora:

#!/bin/bash
for i in ['seq 1 20']; 
echo "remounting autofs"
/etc/init.d/autofs reload;
wait 5;
echo "write test"
#for write perf
do time dd if=/dev/zero of=/home/nfs_perf_testing/samplefile$i bs=1M count=1024 oflag=direct;

echo "write test done";

wait 5;
echo "read test";
#for read perf;
do time dd if=/home/nfs_perf_testing/samplefile of=/dev/null bs=1M count=1024 iflag=direct;

echo "read test done";
done;

Obrigado a todos

    
por D.Zou 07.05.2015 / 23:45

3 respostas

1

tempo (1) é impresso em stderr , portanto, é necessário redirecionar a saída para stdout 2>&1 e, em seguida, enviar para > grep para encontrar a linha que você quer grep real . Então, por fim, use awk para imprimir a coluna que você quer awk '{ print $2 }' .

Isso deve ser parecido com:

(time command_to_time) 2>&1 | grep real | awk '{ print $2 }'
    
por 08.05.2015 / 18:22
1

Simples o suficiente.

wait não faz o que você espera. Use sleep aqui.

for i in 'seq 1 20' 

omitir os colchetes - eles confundem a casca aqui.

BTW: da próxima vez, considere usar o iozone ou o bonnie ++. Eu sei iozone tem uma opção para desmontar / remontar partições NFS entre testes. Também produz dados que podem ser importados para o EXCEL e fazer gráficos 3D. Ele também faz testes em vários tamanhos de blocos.

Além disso, o armazenamento em cache da RAM pode se tornar um problema. Você pode querer ter uma configuração de inicialização especial (no grub) para inicializar com apenas muita RAM (como 1 MB). Consulte o link

    
por 08.05.2015 / 02:26
0

Simples, usando o grep:

{ time command >/dev/null; } |& grep real

Isto irá mostrar o tempo real de execução do "comando"

    
por 08.05.2015 / 02:52

Tags