Como obter o tempo de execução do SCP em milissegundos?

1

Eu tenho um script no qual eu estou lendo o endereço IP de origem e destino de um arquivo csv e gravando o tempo em milissegundos que ele está tomando para copiar o arquivo da origem para o destino (usando scp). Abaixo está meu script.

#!/bin/bash
while IFS="," read f1 f2
do
        echo "Source IP        : $f1"       
        echo "Destination IP   : $f2"
export sourceIP=$f1
export destIP=$(echo "$f2" | tr -d '\n')
ssh -t -t sjain@$f1 'bash -s' <<ENDSSH
#Start copying 100MB File
startTime=$(($(date '+%s%N')/1000000))
echo \$startTime
scp MB_100.txt sjain@$destIP:/home/sjain
endTime=$(($(date '+%s%N')/1000000))
echo \$endTime
printf 'Elapsed time in copying 33KB file: %s\n' \$((endTime-startTime)) 
#Write the stats to the file
echo $sourceIP','$destIP',33KB,'\$((endTime-startTime)) >> report.txt
exit
ENDSSH

#Write the stats to the file
#echo '10.234.0.9,10.234.0.19,33KB,'\$((endTime-startTime)) >> report.txt

done < ipaddress.csv

Resultado

[sjain@XYZ ~]$ #Start copying 100MB File
[sjain@XYZ ~]$ startTime=1394659673854
[sjain@XYZ ~]$ echo $startTime
1394659673854
[sjain@XYZ ~]$ scp MB_100.txt [email protected]:/home/sjain
MB_100.txt                                    100%  100MB 100.0MB/s   00:00
[sjain@XYZ ~]$ endTime=1394659673855
[sjain@XYZ ~]$ echo $endTime
1394659673855
ndTime-startTime)) D01 ~]$ printf 'Elapsed time in copying 33KB file: %s\n' $((e
Elapsed time in copying 33KB file: 1
[sjain@XYZ ~]$ #Write the stats to the file
Time)) >> report.txt01 ~]$ echo 10.Y.Y.Y','10.X.X.X',33KB,'$((endTime-start
[sjain@XYZ ~]$ exit
exit
Connection to 10.Y.Y.Y closed.

O problema que estou enfrentando agora, não está me devolvendo o tempo em milissegundos (eu acho), está dando em segundos.

Por favor, ajude a corrigir este problema.

    
por saurav 12.03.2014 / 22:30

2 respostas

3

É melhor você usar time .

Por exemplo

TMP=$(mktemp)
time (scp yourfile user@otherhost:/path/ ) 2>$TMP
awk -F'[ ms]+' '/^real/ {print "copy time: "1000*$2"ms"}' $TMP
rm $TMP
    
por 12.03.2014 / 23:22
2

Você pode usar o scp no modo detalhado e pegar as estatísticas de tempo. Substitua sua linha scp da seguinte forma:

scp -v src dest 2>&1 | grep 'Transferred' | awk '{print $(NF - 1) * 1000}'

Editar: isso pode não ser preciso ao milissegundo.

Com python, pode-se obter precisão no nível de microssegundo, por exemplo.

#!/usr/bin/env python

import subprocess
import datetime

a=datetime.datetime.now()
subprocess.call(["scp", "-r", "a-dir/", "[email protected]:~/"])
b=datetime.datetime.now()
print (b-a).microseconds
    
por 12.03.2014 / 22:52