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

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

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

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

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

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

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

(*)或者至少以足够有说服力的方式让老板同意投资升级网络的一部分

答案1

你的问题是你同时测试了太多东西:

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

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

您可以使用简单的方法排除磁盘读取速度的任何问题

dd if=yourfile of=/dev/null #or
pv yourfile > /dev/null

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

dd if=/dev/zero of=testfile bs=1M count=2000 # or
dd if=/dev/zero bs=1M count=2000 | pv > testfile

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

最后,为了排除 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

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

我会先进行 nc 测试,因为这样可以排除大多数问题。您也一定要在不使用无线的情况下运行测试。802.11n 可以轻松达到 100mbit 端口的最大速度,但前提是您已正确设置它。

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

答案2

这样想想;

您有一个运行着一个或另一个文件系统的慢速 SATA 磁盘(笔记本电脑磁盘很慢),然后该磁盘会变成基于 IP 的文件共享协议,例如 SMB。然后,它会变成 wifi 格式,然后到达 AP,然后通过有线以太网(这确实需要重新格式化)到达一个速度相当慢的交换机。路由器,然后到达一个可能速度相当慢的桌面,分解成您选择的文件系统格式,最后到达磁盘。所有这些都发生在每个数据包上,大多数(如果不是全部)数据包都需要在发送下一个数据包之前发回确认数据包。

我很惊讶你能看到如此快的速度!

这里有一条提示,当您需要传输文件时,将笔记本电脑连接到 100Mbps 交换机/路由器 - 真的,这样会快得多。另外还要考虑两端更快的磁盘,并确保您也使用高效的文件传输机制。

希望这可以帮助。

答案3

正如 Chopper3 所暗示的,也请尝试使用 rsync-over-ssh 来传输这种大小的文件,因为很有可能出错;没有什么比通过 50GB 的传输获得 45GB 并失败更糟糕的了。它也可能减少您的开销,但我个人还没有对这么大的文件进行过测试。

当传输数千个小文件时,rsync 也可以显著减少开销——我曾经运行过一个 75K 文件/1500 目录/5.6K 平均文件大小的测试,使用 FTP 和 SFTP 需要 12 分钟,使用 SCP 需要 10 分钟,但使用 rsync-over-ssh 只需 1 分 50 秒,因为减少了设置/拆卸开销。不使用 SSH 的 Rsync 只快了 20 秒,为 1 分 33 秒。

答案4

您可以使用此命令来测量磁盘的读取速度:

hdparm -tT /dev/sdX

(将 X 替换为驱动器号)

1.5/3/6gbps 在技术上是 SATA 传输速度,但大多数磁盘只能实现 50-60mbps 的连续读取速度。

相关内容