dd over ssh 如何报告超过网络带宽的读取速度?

oar*_*ish 9 linux ssh pipe dd

我正在执行此命令以测试来自删除服务器的连接:

ssh -l user $IP "dd if=/dev/zero count=3500 bs=1M status=progress" > /dev/null
Run Code Online (Sandbox Code Playgroud)

这显示了表单的进度报告

3145728000 bytes (3,1 GB, 2,9 GiB) copied, 276,047 s, 11,4 MB/s
Run Code Online (Sandbox Code Playgroud)

很明显,dd每秒读取 11mb。然而,已知网络带宽上限低于约 20 兆位,因此这不可能是实际接收的数据量。

iftop 在接收机器上显示大约 300 kbits 的吞吐量,这比可能的要少得多,但更现实。

问:什么是dd的进展状况实际上意味着当在管道SSH连接?接收端跟不上数据是否掉线?究竟发生了什么?

Chr*_*own 15

SSH 可以作为压缩协议运行,根据您的结果判断,它在您的发行版或配置中默认启用(或者您正在使用ssh -C)。因此,您的零流可以很好地压缩成更紧凑的东西——从您的读数来看,压缩率约为 300:最终结果约为原始大小的 0.3%。出于这个原因,它并不是测试网络速度的真正选择,因为它可能只需要很少的网络带宽就可以在接收器上产生巨大的结果。

您可以-o Compression=no在命令行上按需关闭压缩,或者通过Compression no在 SSH 客户端配置中指定来永久关闭连接。

另一种选择是使用更基本的东西,例如netcat,它不实现压缩、身份验证或类似功能,尽管出于这个原因,我通常不建议将其用于实际文件传输。

  • @Kevin 我很确定你误读了我所说的——我在句子的最后部分明确表示这与熵无关,以避免出现该评论:-) 无论熵如何,urandom 通常都比网络慢得多,例如,我的链接是 10Gbps,但 urandom 远不及那个——在 i7-7600U 上,它大约是 35MiB/s。 (5认同)
  • 此外,如果你使用 `/dev/urandom` 代替 `/dev/zero`,那么压缩将非常困难或不可能,所以你不需要太担心特定工具发现大量数据流零并折叠它们。 (2认同)
  • @Kevin 也就是说, /dev/urandom 不一定是测试网络带宽的好来源,因为它本身可能成为瓶颈——即使熵没有耗尽。 (2认同)