Estava tentando fazer isso sozinho e veio com isso. Provavelmente há uma maneira mais simples, mas é isso que eu criei.
Primeiro, prepare os pipes que serão usados para fazer o programa de benchmarking se comunicar através da conexão SSH.
$ mkfifo /tmp/up /tmp/down
Em seguida, estabeleça uma conexão no modo ControlMaster sem executar nenhum comando remoto. Isso nos permite autenticar com o host de forma interativa. Depois que a conexão for estabelecida, o SSH irá apenas "travar" aqui em primeiro plano.
$ ssh $HOST -N -M -S /tmp/control
Em um terminal paralelo, execute o controle remoto cat
em segundo plano. Será o nosso servidor de eco cuja latência nós mediremos. Entradas e saídas são conectadas a FIFOs:
$ ssh $HOST -S /tmp/control cat </tmp/up >/tmp/down &
E, em seguida, compare um pequeno programa (envie um byte para up
FIFO, receba um byte de 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
A medida obviamente mostra a latência de ida e volta. Se você precisar repetir a experiência, execute os dois últimos comandos ( ssh
e python
) novamente.
Se algo parecer errado, use o sinalizador SSH -v
para obter mais resultados de depuração.