如果虚拟机的网络驱动程序耗尽接收 (RX) 缓冲区内存,esxtop 可能会显示在虚拟交换机上丢弃的接收数据包,这些数据包将采用 FIFO(先进先出原则)进行处理,这会导致网络降级。虽然 esxtop 显示数据包在虚拟交换机上丢弃,但实际上数据包是在虚拟交换机和客户机操作系统驱动程序之间丢弃的。
通过增加虚拟网络驱动程序的接收缓冲区,可以减少丢弃的数据包数量。
警告:执行本文中所述的更改时可能会影响客户机网络连接。您可能需要重新引导客户机以进行恢复。建议在执行相关步骤之前,调度要更改的客户机上所运行应用程序的停机时间。
E1000 虚拟网络驱动程序
Linux:
对于 Linux 客户机操作系统中的 E1000 虚拟网络驱动程序,可从客户机操作系统修改接收缓冲区,方法与物理机上的修改方法完全相同。默认值为 256,可手动配置的最大值为 4096。通过尝试不同的缓冲区大小来确定适当的设置。
要确定适当的设置,请运行命令 ethtool -G ethX rx value
Windows:
对于 Windows 中的 Intel pro 驱动程序,可从客户机操作系统修改接收缓冲区,方法与物理机上的修改方法完全相同。在 Windows 2008 R2 上,内置驱动程序的默认值为 256,该值可能会因所用的驱动程序而异。要通过尝试不同的缓冲区大小来确定适当的设置,请将 Intel pro 驱动程序加载到客户机操作系统,并在驱动程序属性中修改接收缓冲区。
ESX/ESXi 3.x.x 上的 VMXNET2/增强型 VMXNET2 虚拟网络驱动程序
支持的最大接收缓冲区为 128,默认值为 120。要增加默认值,请在虚拟机的 .vmx 配置文件中添加以下行:
Ethernet x.numRecvBuffers=128
其中,x 指虚拟网卡。
ESX/ESXi 4.x.x 上的 VMXNET2/增强型 VMXNET2 虚拟网络驱动程序
最大接收缓冲区增加至 512,默认值为 150。要增加默认值,请在虚拟机的 .vmx 配置文件中添加以下行。
Ethernet x.numRecvBuffers=value
其中,x 指虚拟网卡,value 指为接收缓冲区大小设置的新值。
VMXNET3
Linux 客户机操作系统
接收环大小的默认值为 256,最大值为 4096。默认设置可从客户机操作系统内部修改。
以下是 Linux 客户机操作系统的一个示例:
ethtool -G ethX rx value
其中,X 指客户机操作系统中的以太网接口 ID,value 指为接收环大小设置的新值。
此外,当接收环 #2 耗尽内存时,VMXNET3 设备上启用了大型接收卸载 (LRO) 功能的 Linux 虚拟机可能会在接收器端丢弃数据包。当虚拟机处理 LRO 生成的数据包时会出现此问题。
自 ESXi 5.1 Update 3 起,接收环 #2 可通过 ethtool 中的 rx-jumbo 参数进行配置。此参数的最大环大小为 2048。
ethtool -G ethX rx-jumbo value
其中,X 指客户机操作系统中的以太网接口 ID,value 指为接收环 #2 设置的新值。
请注意,虽然 ESXi 支持的接收环 #2 的最大大小为 2048,但能够使用的最大值取决于 Linux 客户机操作系统的内核版本和其他变量。
Windows 客户机操作系统
在 ESXi/ESX 3.x.x 中,您无法在 Windows 客户机操作系统中配置 VMXNET3 网络接口卡的环大小。在 ESXi/ESX 4.0 Update 2 及更高版本中,您可以从 Windows 客户机操作系统的设备管理器(一个“控制面板”对话框)中配置以下参数:Rx Ring #1 Size、Rx Ring #2 Size、Tx Ring Size、Small Rx Buffers 和 Large Rx Buffers。
第一个接收环大小(即 Rx Ring #1 Size)的默认值为 512。您可以使用 Small Rx Buffers 参数分别修改接收缓冲区数量。默认值为 1024。
对于某些进程(例如,突发到达的流量),您可能需要增加环大小;但是对于其他进程(例如,在处理接收流量时速度缓慢的应用程序),您可能需要增加接收缓冲区的数量。
启用巨型帧时,您可能会使用第二个环,即 Rx Ring #2 Size。RX Ring #2 Size 的默认值为 32。启用巨型帧后,同时在 RX Ring #1 Size 和 RX Ring #2 Size 中使用的大型缓冲区数量受 Large Rx Buffers 控制。Large Rx Buffers 的默认值为 768。
注意:上述值适用于 Windows 2008。在 Windows Server 2012 和 Windows 10 中,#1 和 #2 的值已分别增加至 1024 和 64。
Solaris 客户机操作系统
- 如果已加载驱动程序,请通过输入以下命令将其卸载:
# rem_drv vmxnet3s
- 要更改接收环大小,请编辑 /kernel/drv/amd64 和 /kernel/drv/ 目录下的 vmxnet3.conf 文件。
- 通过输入以下命令重新加载驱动程序:
# add_drv -i "pciex15ad,7b0" vmxnet3s
# ifconfig vmxnet3sx plumb