如何在两台主机之间传输大文件时找到瓶颈

Fre*_*red 9 bandwidth bottleneck

我们经常需要在两台主机之间传输大文件(超过 50 GB),并且传输速率似乎永远无法达到网络的预期吞吐量。有几个点,这可能是瓶颈,但他们的每一个中的理论上限是办法在实际的传输速率。这是一个典型的设置:

笔记本电脑 --> 802.11n --> AP --> CAT 6 电缆 --> 10/100 Mbits 路由器 --> 台式机

在这方面,瓶颈显然是路由器,它将传输速率限制在 100 Mbits/sec。即便如此,我也很少看到超过 9.5 MB/s 的传输速率(使用 scp),这代表 76 Mbits/sec,或仅理论最大限制的 76%。

接入点是否真的有 24% 的开销,或者是否有其他因素限制了速度?它可能是磁盘 I/O(尽管 SATA 的额定值为 1.5 Gbps),或者是磁盘和 NIC 之间主板上的任何东西(我如何测量?)。

有没有办法确定(*)知道瓶颈在哪里?如果我无法从 100 Mbps 路由器获得超过 76 Mbps 的速度,将网络升级到千兆位会增加吞吐量还是我仍会获得 76 Mbps,因为瓶颈在其他地方?

(*) 或至少以一种足以令人信服的方式让老板同意投资升级网络的一部分

Jus*_*tin 13

你的问题是你一次测试了太多东西:

  • 磁盘读取速度
  • SSH 加密
  • 无线的
  • SSH解密
  • 磁盘写入速度

既然你提到了 SSH,我就假设这是一个 unix 系统......

您可以通过简单的方式排除磁盘读取速度方面的任何问题

dd if=yourfile of=/dev/null #or
pv yourfile > /dev/null
Run Code Online (Sandbox Code Playgroud)

在接收端你可以做一个简单的磁盘写测试

dd if=/dev/zero of=testfile bs=1M count=2000 # or
dd if=/dev/zero bs=1M count=2000 | pv > testfile
Run Code Online (Sandbox Code Playgroud)

dd 并不是真正的“基准”,但由于 scp 使用顺序 IO,因此它足够接近

您还可以通过执行以下操作来测试 SSH

dd if=/dev/zero bs=1M count=100 | ssh server dd of=/dev/null # or
dd if=/dev/zero bs=1M count=100 | pv | ssh server dd of=/dev/null
Run Code Online (Sandbox Code Playgroud)

最后,排除SSH是瓶颈,可以使用nc测试网络性能

server$ nc -l 1234 > /dev/null
client$ dd if=/dev/zero bs=1M count=100 | pv | nc server 1234 # or
client$ dd if=/dev/zero bs=1M count=100 | nc server 1234
Run Code Online (Sandbox Code Playgroud)

如果您真的想正确测试网络,请安装并使用 iperf 之类的东西,但 nc 是一个好的开始。

我会从 nc 测试开始,因为这将排除大多数事情。您还应该在不使用无线的情况下运行测试。802.11n 可以轻松地将 100mbit 端口最大化,但前提是您正确设置了它。

(Ubuntu >= 12.04 默认为 netcat-openbsd。nc -l -p 1234 > /dev/null如果您使用的是 netcat-traditional,可能就是您想要的)。