云主机带宽测试一例:Windows Server 网络性能被 Linux 秒杀?

原创
2018/02/02 16:52
阅读数 797

前情

用 iperf3 测试云主机不同系统之间能跑多少带宽。

怪现象

  1. 两台 Windows Server 2012 R2 测试,带宽只能到 2.4Gbps;
  2. 两台 CentOS 6.8 测试,可以达到 4Gbps,不限制带宽的环境下可以到 16Gbps;
  3. CentOS 做 Client,Windows 做 Server,也只能跑到 2.4Gbps。

排查过程

1. 怀疑虚拟机不在同一台物理机上

把测试用的虚拟机都迁移到一台物理机上,测试结果依然是 Linix 完胜 Windows Server。

2. 怀疑系统的 TCP wscale 值差异

抓包发现 iperf3 Windows 版用的 wscale 是 2,CentOS 版经过系统级的 TCP 参数调优后是 7,所以把目标放在调高 Windows 的 wscale。

netsh interface tcp set supplemental template=datacenter
netsh interface tcp set global autotuninglevel=experimental

结果发现,这样设置后,带宽确实提高到 3.5Gbps,但 wscale 并没有变化。

3. 怀疑 iperf3 Windows 版有毛病

因为上面的 2 条命令可以增加其它应用的 wscale 到 7,但 iperf3 不受影响,所以怀疑它有毛病。看了代码后,发现 Client 端用 -w 参数就可以让 Server 的 SO_RCVBUF 也使用 Client 设置的值,然后加上 -w 16000000 和 -w 32000000 分别测试,发现带宽还是无法提高,甚至有点下降。

但到这里,我们可以得出结论:Windows 机器之间带宽上不去,并非因为 wscale 小。

4. 怀疑是虚拟机服务器和客户机系统驱动之间有关联

云主机是虚拟机,它跑在 Linux 的物理机上,有可能一脉相承的 Linux 的驱动设计得比较好,所以 Linux 的虚拟机网络性能更高。

带着这个怀疑,稣在 Hype-V Server 上开了两个 Ubuntu 上测试,并优化了 TCP 参数:

echo "88584 118114 177168" | sudo tee /proc/sys/net/ipv4/tcp_mem

结果也才 2-3Gbps 左右……不玩了。总之,物理机什么系统,客户机最好也是一样的,毕竟有血缘关系。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部