Stavo provando a farlo da solo e ho pensato a questo. Probabilmente esiste un modo più semplice, ma questo è quello che mi è venuto in mente.
Innanzitutto, preparare le pipe che verranno utilizzate per comunicare il programma di benchmarking attraverso la connessione SSH.
$ mkfifo /tmp/up /tmp/down
Quindi stabilire una connessione in modalità ControlMaster senza eseguire alcun comando remoto. Questo ci consente di autenticarci in modo interattivo con l'host. Dopo aver stabilito la connessione, SSH si "bloccherà" qui in primo piano.
$ ssh $HOST -N -M -S /tmp/control
In un terminale parallelo, eseguire il telecomando cat
in background. Sarà il nostro server di eco di cui misureremo la latenza. Ingressi e uscite sono collegati a FIFO:
$ ssh $HOST -S /tmp/control cat </tmp/up >/tmp/down &
Quindi confronta un piccolo programma (invia un byte a up
FIFO, ricevi un byte da down
FIFO):
$ python -m timeit -s 'import os' \
'os.write(3, "z"); z=os.read(4, 1); assert z=="z", "got %s" % z' \
3>/tmp/up 4</tmp/down
10 loops, best of 3: 24.6 msec per loop
La misura mostra ovviamente la latenza di andata e ritorno. Se devi ripetere l'esperimento, esegui di nuovo gli ultimi due comandi ( ssh
e python
).
Se qualcosa sembra andare storto, utilizzare il -v
flag SSH per ottenere più output di debug.