通过 pfSense 运行的 VMWare 虚拟机上传速度很慢

通过 pfSense 运行的 VMWare 虚拟机上传速度很慢

我们拥有运行 VMWare ESXi 6.0 的 ProLiant DL360 Gen8 和 Gen9 服务器,这些服务器在各种版本的 Windows 下都有虚拟机,这些虚拟机通过 pfSense 2.3.4-RELEASE(64 位)和 Open-VM-Tools 包 10.1.0,1 进行路由。

通过 pfSense 工作的虚拟机的上传速度非常低,例如:ping 2ms、下载 134 Mbps、上传 0.25 Mbps(顺便说一下,0.25 Mbps 是远程桌面连接可接受的速度,但实际上 RDP 几乎不起作用,客户端经常停顿几秒钟,或者刷新以方块形式发生,需要 5-10 秒才能刷新屏幕,不稳定,有时甚至需要重新连接 - 使得通过 RDP 工作实际上不可能)。

对受影响的 Windows 机器进行调整(例如“netsh interface tcp set global autotuninglevel=highlyrestricted”)并没有改变任何东西。

具有直接连接、绕过 pfSense 的虚拟机没有这些问题 - 它们的上传和下载速度大致相同。

所有虚拟机(pfSense、Windows 等 - 全部)都在使用 VMXNET3 适配器。

pfSense 中以下选项全部未选中:

[ ] Disable hardware checksum offload
[ ] Disable hardware TCP segmentation offload
[ ] Disable hardware large receive offload

pfSense 上没有流量形状。可能是什么原因?

如果我选中“禁用硬件大型接收卸载”选项,它会再次变快,但我不想禁用它,我希望 pfSense 与 VMWare VMXNET3 一起使用硬件大型接收卸载。

更新:我已将 VMWare 升级到最新的 6.5(含所有补丁),并将 pfSense 升级到 3.4.5 BETA,并将固件更新到最新版本,但这并没有帮助。

答案1

我想绝对确认同样的情况。在 VMware 上运行 pfSense 时,上传带宽会非常慢,而下载则很好。对我们来说,只有当 pfSense VM 和客户 VM 位于相同的主机。当 pfSense VM 和主机 VM 位于不同的主机上时,问题就消失了。禁用 pfsense VM 上的卸载(选中“ON”框)后,问题立即得到解决。我不确定这是否只是 VMXNET 3 NIC,但 pfSense VM 也是这样配置的。我希望这对其他人有所帮助,因为没有任何地方记录这一点。我将尝试让 pfSense 更新其网站上的 VMware 配置页面。

答案2

我已通过在 pfSense 设置(系统/高级/网络|网络接口)中禁用“硬件大型接收卸载”解决了该问题

有一个复选框“禁用硬件大型接收卸载”,我已将其设置为“已选中”(开启)。

关于此选项的描述如下:

勾选此选项将禁用硬件大型接收卸载 (LRO)。此卸载在某些硬件驱动程序中已损坏,可能会影响某些特定 NIC 的性能。这将在机器重新启动或重新配置每个接口后生效。

其他选项都未勾选。所以现在“网络接口”中的选项如下:

[ ] Disable hardware checksum offload
[ ] Disable hardware TCP segmentation offload
[✓] Disable hardware large receive offload

根据 HP 文档,Gen8/Gen9 上的网络适配器(型号 331)基于Broadcom BCM5719 芯片组) 支持标准 TCP/IP 卸载技术,包括: - TCP/IP、UDP 校验和卸载(TCO)(将 TCP 和 IP 校验和卸载从 CPU 移到网络适配器)。 - 大型发送卸载(LSO)或 TCP 分段卸载(TSO)(允许适配器而不是 CPU 处理 TCP 分段)。

这就是pfSense 介绍了这些功能

系统 > 高级下的网络选项卡中的硬件 TCP 分段卸载 (TSO) 和硬件大型接收卸载 (LRO) 的设置默认为选中(禁用),这是有原因的。几乎所有硬件/驱动程序都存在这些设置问题,并且可能导致吞吐量问题。确保选中这些选项。有时也需要通过 sysctl 禁用。

事实上,硬件/驱动程序没有问题,但配置错误。路由器上永远不应启用 LRO 和 TSO。只有当 pfSense 配置为端点(例如 DNS 服务器)时,才可以启用这些选项。

让我引用一下FreeBSD 错误追踪条目

根据我的测试,这不是一个错误,一切都按设计运行。当 LRO 开启并使用 pfSense 作为网关时,我发现性能大幅下降。这是因为原始数据包设置了 IP DF(不分段)标志,然后通过 LRO 将其组合成更大的数据包。当这个(更大的)数据包需要分段以匹配另一个 NIC 时,FreeBSD 内核会看到 DF 标志,丢弃数据包,然后向发送方发送回 ICMP“无法访问 - 需要分段”消息。它之所以能正常工作,是因为其他流量不允许发生 LRO,并且一些数据包被转发。我做的一个测试是打开 LRO 并使用 scp 将文件放到 pfSense 设备上,结果获得了良好的性能(没有看到相同的性能下降)。如果您 1) 在打开 LRO 并将大文件 scp 到设备的情况下看到良好的性能,以及 2) 在打开 LRO 并将 scp 到远程端的机器的情况下看到 ICMP“需要分段”,我会很感兴趣。由于 pfSense 设备被用作网关,因此您应该关闭 LRO。

答案3

我有时也试验过这些问题,快速的解决方法是:重启机器。Windows 的内存管理不是最好的,有时需要重启。

如果重启不起作用,请确定问题所在。是服务器还是客户端?服务器处于 TS 模式,还是仅用于管理的 TS?您连接的是控制台还是标准远程会话?

另外,想想看,如果它们都是“新”机器(服务器、受支持的机器),它们可以获得相同的更新。也许,您需要在客户端上进行更新才能适应终端服务器服务的变化。

直接回答一下,我管理一组 15 台服务器已经 6 年多了。从 Windows 2000 到 Windows 2012 R2。我有时会遇到这些问题,但 90% 的情况下,重启后问题就解决了。另外 10% 的情况下,更新客户端即可解决。

我对此的建议是使用 WSUS 服务,并管理服务器上安装的所有更新的批准。

附言:如果您无法解决问题,您可以使用“系统还原”实用程序将计算机还原到一周前安装更新之前的状态。卸载不会重新配置,但系统还原会将所有系统恢复到过去的状态(卸载应用程序、撤消配置更改,还会删除计算机上的文档或其他内容)。

答案4

我解决了!是的!在互联网论坛、pfsense 社区和其他论坛上讨论了一个星期后,我尝试取消选中高级选项。之前,我尝试将 VM eth 类型从 WMNEXT 更改为 E1000,以及我在互联网上找到的所有其他方法,但对我不起作用。在 ESXi 7.x 上的 VM pfsense 社区版 v.2.6.0(2.5.2 也受到影响)上,我已禁用:

系统-高级-防火墙和 NAT 菜单上的数据包过滤。

我希望这对所有其他相同的情况都有效。

系统设置未选中

我已禁用所有数据包过滤,因为我已处于企业 MPLS 防火墙后面,我唯一需要的是通过 WiFi 实现强制门户。Wi-fi 网络目前处于企业防火墙后面。

相关内容