有没有一种方法可以测量/报告隧道SSH会话中的总延迟?
我特别的设置是:
我感兴趣的是看到本地机器上的控制台和打开会话的最终机器之间的延迟。
试图自己做这件事,并提出这一点。 也许有一个更简单的方法,但这是我想出的。
首先,准备将用于使基准程序通过SSH连接进行通信的pipe道。
$ mkfifo /tmp/up /tmp/down
然后在ControlMaster模式下build立连接,而不执行任何远程命令。 这使我们能够交互地与主机进行身份validation。 连接build立后,SSH将在这里前台挂起。
$ ssh $HOST -N -M -S /tmp/control
在并行terminal中,在后台执行远程cat 。 这将是我们的回声服务器,其延迟我们将测量。 input和输出连接到FIFO:
$ ssh $HOST -S /tmp/control cat </tmp/up >/tmp/down &
然后对一个小程序进行基准testing(发送一个字节到up FIFO,从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
该措施显然显示了往返延迟。 如果您需要重复实验,请再次运行最后两个命令( ssh和python )。
如果出现问题,请使用SSH -v标志获取更多debugging输出。
请参阅sshping实用程序: https : //github.com/spook/sshping
例:
# sshping 172.16.47.143 --- Login: 1725 msec --- Minimum Latency: 4046 nsec --- Median Latency: 11026 nsec +/- 0 std dev --- Average Latency: 178105 nsec --- Maximum Latency: 8584886 nsec --- Echo count: 1000 Bytes --- Transfer Speed: 11694919 Bytes/second # sshping --help Usage: sshping [options] [user@]addr[:port] SSH-based ping that measures interactive character echo latency and file transfer throughput. Pronounced "shipping". Options: -c --count NCHARS Number of characters to echo, default 1000 -e --echocmd CMD Use CMD for echo command; default: cat > /dev/null -h --help Print usage and exit -i --identity FILE Identity file, ie ssh private keyfile -p --password PWD Use password PWD (can be seen, use with care) -r --runtime SECS Run for SECS seconds, instead of count limit -t --tests e|s Run tests e=echo s=speed; default es=both -v --verbose Show more output, use twice for more: -vv