我遇到了一个奇怪的问题,让我完全困惑。我的 Windows 计算机上的 10G 以太网性能在一台计算机的传入方向上很差,而在另一台计算机的传入方向上则特别差。为什么不同计算机之间以及不同方向上的速度差异如此之大?那么防火墙为什么会严重影响 TCP 性能呢?
我将在这里讨论三台计算机:
旧服务器:Intel i7-7220X,配备华硕 10G x4 以太网适配器(通过 PCIe 芯片组端口),运行 Unraid
新服务器:配备双 10G SFP+ 的 DL380p,运行 CentOS (9) Stream
台式机:AMD Ryzen 9 5950X 运行 Windows 10 ...
- ... 最初的测试有一个华硕 10G 以太网适配器
- ... 刚刚用 PCIe x8 双 10G SFP+ 适配器替换了它
我有一个 10G SFP+ 网络交换机。
旧服务器 <-- RF45 (20 英尺;cat 6) --> SFP+/RJ45 10G 适配器 <--> 交换机
新服务器<-- SFP+ 10G 电缆 --> 交换机
桌面(之前)<-- RJ45(100 英尺;cat6)--> SFP+/RJ45 10G 适配器<--> 交换机
台式机(现在)<--> SFP+/光纤 10G 适配器 <-- 光纤(100 英尺)--> SFP+/光纤 10G 适配器 <--> 交换机
1Gb RJ45 PoE 至网络交换机,连接至网络的其余部分
以下是一系列iperf3
运行的总结(使用台式机中的 SFP+ 卡)
两台服务器之间:
服务器(接收) | 客户端(德克萨斯州) | 平均带宽(Gbit/s) |
---|---|---|
旧服务器 | 新服务器 | 7.1 |
新服务器 | 旧服务器 | 8.4 |
桌面(已启用 Windows 防火墙):
服务器(接收) | 客户端(德克萨斯州) | 平均带宽(Gbit/s) |
---|---|---|
桌面 | 新服务器 | 1.2 |
桌面 | 旧服务器 | 5.3 |
新服务器 | 桌面 | 6.2 |
旧服务器 | 桌面 | 7.4 |
桌面(已启用 BitDefender 防火墙):
服务器(接收) | 客户端(德克萨斯州) | 平均带宽(Gbit/s) |
---|---|---|
桌面 | 新服务器 | 0.24 |
桌面 | 旧服务器 | 1.8 |
新服务器 | 桌面 | 4.9 |
旧服务器 | 桌面 | 7.8 |
桌面(无防火墙):
服务器(接收) | 客户端(德克萨斯州) | 平均带宽(Gbit/s) |
---|---|---|
桌面 | 新服务器 | 1.3 |
桌面 | 旧服务器 | 5.4 |
新服务器 | 桌面 | 7.8 |
旧服务器 | 桌面 | 7.5 |
这些是我在每台计算机上使用的命令:
新服务器:
podman run -it --rm -p 5201:5201 docker.io/clearlinux/iperf -s
旧服务器:
docker run -it --rm -p 5201:5201 docker.io/clearlinux/iperf -s
桌面:
winpty ./iperf3.exe -s
一些说明:
台式机的网络设置显示它具有 10G 双向链路
这些速度与我使用 RJ45 10Ge 连接到桌面的速度大致相同
这些测试是可重复的
答案1
在进行了大量更彻底/更长时间/参数测试之后,我发现:
当关闭防火墙进行接收时,这台计算机的速度达到 5.45 Gb/s,但iperf3
在单流模式下可以以大约 8 Gb/s 的速度传输。
当我使用四流时,我可靠地达到了 9.5 Gb/s 的 TX 和 RX。
当我使用四流并打开 Windows Defender 防火墙时,我几乎没有注意到差异。
当我使用四流并打开 BitDefender 防火墙时,我达到了 9.50 Gb/s TX 但 RX 达到了 2.3-4 Gb/s。
这让我确认两个都以下是主要罪魁祸首:
单流(意味着 Windows 中单个套接字将数据传输到进程的方式存在效率低下的问题)
BitDefender 防火墙(哇哦)
不能 100% 确定为什么不同的主机之间会有所不同,但这就是生活。