好吧,这个故事比标题暗示的要多一些。
背景和环境:我正在通过 SMB 从较旧的 Ubuntu 服务器复制几个 TB 到较新的 Windows 2012 服务器。(从技术上讲,它是商品硬件,但它们是这里的服务器。)每个人都在千兆局域网上,而较旧的 Ubuntu 机器有一个绑定接口。我相信 Ubuntu 服务器有两个 Rosewill PCI-e 1x 以太网卡,Windows 服务器有一个相当不错的 PCI Intel 以太网卡。
目标计算机(Windows 服务器)正在运行具有超过 4 个 2TB 驱动器的奇偶校验的存储池。它正在运行微软的新 ReFS。源计算机(Ubuntu 服务器)正在运行软件 RAID 镜像。它运行良好 ol' EXT4。
两台服务器通过一个千兆交换机运行。我已经尝试在没有任何改进的情况下打破源 (Ubuntu) 计算机上的绑定。
问题:我可以以合理的速度从其他计算机传输到 Windows 服务器。其他计算机可以毫不费力地保持 50-80MB/s,但从该 Ubuntu 服务器传输最高不超过 20MB/s。20MB/s 的 4+TB 需要很长时间(大约 2.3 天),我想知道我能做些什么来找出瓶颈所在。
症状:两台计算机上的 CPU 都很小,当然也不会太忙。两台计算机上的硬盘驱动器都处于活动状态但没有被淹没,至少在 Ubuntu 服务器上,CPU IOwait 几乎为 0%。
我做了 35 秒的 Wireshark 跟踪(大概足够长以确保所有 ACK 都是针对新数据包的),并注意到有很多我没想到的事情。(1) 从 Windows 到 Ubuntu 的 ACK(和一些 SMB 数据包)没有任何校验和。但是,Wireshark 声称这可能是由于“IP 校验和卸载”所致。好的,我有一张非常漂亮的卡片。我想网卡有可能进行校验和计算。美好的。继续......(2)“TCP ACKed unseen …