大家好!我会尽量简短地讲解。我当前的设置是:
XS708T NETGEAR 10gbE 交换机
ESXi 计算机 #1:
- 2 个英特尔 10gbE
- pfSense(VM)在一个 vSwitch 上有 WAN,在另一个 vSwitch 上有 LAN,每个 vSwitch 上方分别有 NIC。
- pfSense、Ubuntu 服务器 (x2)、FreeNAS 服务器、Windows Server VM
ESXi 计算机 #2:
- 1 个英特尔 10gb (SFP+)
- Ubuntu 服务器 (x2)、FreeNAS 服务器、Windows Server VM
VLAN:在 pfSense 和交换机上设置
- 10 = VM
- 20 = LAN_其他
- 30 = 无线网络
- 99 = 管理员
问题就在这里:在不同的 ESXi 机器上,同一个 ESXi 机器上的 Ubuntu VM 之间使用 iperf 能够达到 10GB/s 的吞吐量。我也在两个方向上都运行过。观察 pfSense 上的 systat -ifstat,我可以验证没有流量通过 pfSense。如果我尝试在相同或不同的 ESXi 机器上的两个 Ubuntu VM 之间切换,但使用不同的 VLAN(即:10 和 99),吞吐量会下降到大约 2 - 3 GB/s。在此测试期间,我可以看到所有流量都通过 pfSense。
所以我的想法是这样的;我的交换机已经过验证,在同一个 VLAN 上能够处理 10GB/s 的吞吐量。我在整个测试过程中都监控了 pfSense,以验证我没有达到任何类型的硬件(CPU)限制。
那么这是我的设置问题,还是可能是我的 pfSense VM 的问题?非常感谢大家的帮助!谢谢!
答案1
pfSense VM 需要应对相当多的开销 - 入站数据包经过主机 NIC、主机 vSwitch、复制到 VM、通过客户堆栈、进行处理,然后出站数据包沿原路返回。所有这些都发生在软件中,需要相当多的上下文切换。这些会导致数据包延迟,并且 - 通过产生的带宽延迟乘积 - 可能会限制对延迟敏感的传输协议(如 TCP)的整体吞吐量。
有三种基本方法:减少延迟(为 VM 保留主机资源、使用半虚拟化 vNIC 或具有直通功能的专用 NIC、微调 NUMA 设置)、使用 TCP 窗口缩放增加 TCP 接收窗口或同时使用多个 TCP 流。