2014-10-09 更新
免责声明
这个问题类似于千兆网络速度莫名缓慢但因为后者在 5 年后仍未得到解答,而且我认为我能够添加更多细节,所以我就此主题发布了另一个问题。
背景
我们有 2 台 DELL PowerVault NX200 存储服务器。两台服务器均配备 Broadcom BCM5716 板载双千兆网卡(我仅使用其中一个端口)。这些存储服务器附带 Windows Server 2008 Storage Basic SP2,我最近重新安装并更新为最新版本。
我们最近发现服务器的网络速度很慢。我之前没有测试过连接速度,所以无法判断“正常”吞吐量是多少。不过,现在的速度肯定很慢。
问题
两台服务器的吞吐量约为 5-6 Mbits/秒。这是通过一天内多次运行 Iperf 测得的。服务器的吞吐量约为 90 Mbits/sec。
其他工具和方法也给出了相同类型的结果(例如 ttcp 或使用 Windows 资源管理器、Teracopy 等复制文件)。我将坚持使用 Iperf 结果以排除尽可能多的不相关组件(例如 SMB)。
什么不起作用
我尝试了几种方法,但都没有用。
使用不同的全新网络电缆。我没有工具来正确测试电缆的质量,但使用相同的电缆在其他计算机上确实可以获得更快的速度。
使用不同的 NIC(BCM5709),该 NIC 在另一台 Windows 2008 R2 服务器上运行良好。
拔掉所有其他计算机的电源插头,并将服务器隔离在交换机上。
将服务器连接到不同的交换机并没有改善情况。
移除任何交换机并将 NIC 直接连接到 NIC。
将 NIC 驱动程序和软件更新至 QLogic 的最新版本。
将 NIC 参数更改为每个“速度和双工”模式。“自动协商”总是能带来最快的速度。
其他 NIC 参数(例如巨型数据包大小,以匹配交换机支持)也是如此。大多数情况下,它不会改变任何东西,即使改变了,也只会让情况变得更糟。
我也尝试了所有
netsh interface tcp set global
参数,包括autotuninglevel
许多人建议禁用的参数。TCPWindowSize
注册表中的设置。Windows 2008 上会忽略此设置。
什么有效
启动到 CentOS 6。CentOS LiveCD 上一切正常。问题可能出在 Windows、驱动程序或设置上,而不是 NIC、交换机或电缆上。
(可能)相关问题
我能够重现大部分结果Windows TCP 窗口缩放过早达到稳定状态。强制 TCP 窗口也会在 Iperf 测试期间导致速度大幅提高。看来 Windows 的 TCP 窗口缩放在传输时无法正常工作。
Iperf 结果
两台服务器之间,12.1网卡手动设置为100Mbps全双工:
[ 4] local 192.168.1.14 port 51535 connected with 192.168.1.12 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-15.1 sec 640 KBytes 348 Kbits/sec
[ 4] local 192.168.1.14 port 5001 connected with 192.168.1.12 port 50498
[ 4] 0.0-10.3 sec 6.00 MBytes 4.90 Mbits/sec
在两台服务器之间,.12 NIC 手动设置为 100Mbps 半双工(“自动”结果相同):
[ 4] local 192.168.1.14 port 51541 connected with 192.168.1.12 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.2 sec 6.38 MBytes 5.23 Mbits/sec
[ 4] local 192.168.1.14 port 5001 connected with 192.168.1.12 port 50509
[ 4] 0.0-10.3 sec 6.12 MBytes 4.99 Mbits/sec
答案1
这可能是网卡和交换机上的流量控制问题,请参阅以下文章并确保禁用网卡和交换机上的流量控制。
答案2
有时,网络过滤器(尤其是第三方防火墙和/或防病毒软件)可能会导致奇怪的网络故障。
您可以检查安装了哪些过滤器(在 powershell 中):
ls 'HKLM:\SYSTEM\CurrentControlSet\Control\Network\{4d36e974-e325-11ce-bfc1-08002be10318}' |
% { $_.GetValue('Description') } |
sort
或使用 regedit 手动操作。
另外,在 iperf 测试期间检查网络适配器驱动程序的 DPC(延迟过程调用)时序。 http://www.thesycon.de/deu/latency_check.shtml
另外,尝试在环回连接上运行 iperf(或者最好是 ntttcp)。