vSphere 中的 Windows 虚拟机传输大型 UDP 数据包时,吞吐量低于预期或摇摆不定,即使当其他流量非常小时也是如此。
问题
当 Windows 虚拟机传输的 UDP 数据包大于 1024 字节时,您会遇到低于预期或摇摆不定的吞吐量,即使当其他流量非常小时也是如此。如果使用视频流服务器,视频播放将暂停。
原因
对于每个大于 1024 字节的 UDP 数据包,Windows 网络栈在发送下一个数据包之前将等待传输完成中断。vSphere 不提供此种情况的透明解决办法。
解决方案
- 增大以字节为单位的阈值,达到该阈值时,Windows 将通过修改 Windows 客户机操作系统的注册表来更改 UDP 数据包的行为。
- 找到 HKLM\System\CurrentControlSet\Services\Afd\Parameters 注册表项。
- 添加一个名称为 FastSendDatagramThreshold、类型为 DWORD 且等于 1500 的值。
有关在 Windows 注册表中修复此问题的信息,请参见 http://support.microsoft.com/kb/235257。 - 修改虚拟机网卡的合并设置。
如果 Windows 虚拟机具有 VMXNET3 vNIC 适配器,请在虚拟机的 .vmx 文件中配置以下参数之一。使用 vSphere Client 或直接修改 .vmx 文件。
操作 参数 值 将虚拟机的中断率增大到大于预期数据包速率的速率。例如,如果预期数据包速率为每秒钟 15000 次中断,则请将中断速率设置为每秒钟 16000 次中断。将 ethernetX.coalescingScheme 参数设置为 rbc,将 ethernetX.coalescingParams 参数设置为 16000。默认中断率为每秒钟 4000 次中断。 ethernetX.coalescingScheme
ethernetX.coalescingParams
rbc
16000
停用合并低吞吐量或滞后敏感的工作负载。有关配置短滞后工作负载的信息,请参见《vSphere 虚拟机中调校滞后敏感的工作负载性能的最佳实践》。http://www.vmware.com/files/pdf/techpaper/VMW-Tuning-Latency-Sensitive-Workloads.pdf ethernetX.coalescingScheme 已禁用 恢复为早期 ESXi 版本中的合并算法。
注: 恢复为早期算法的功能在更高版本的 vSphere 中不可用。ethernetX.coalescingScheme 校准 ethernet 旁边的 X 表示虚拟机中网卡的序列号。
有关在 .vmx 文件中配置参数的详细信息,请参见《《vSphere 虚拟机管理》》文档。
- 修改 ESXi 主机合并设置。
此方法影响主机上的所有虚拟机和所有虚拟机网卡。
可以在 vSphere Client 中或在 ESXi Shell. 中的主机上使用 vCLI 控制台命令来编辑主机的高级系统设置列表。
操作 vSphere Client 中的参数 esxcli system settings sdvanced set 命令的参数 值 设置一个高于预期数据包速率的默认中断率。例如,如果期望的中断率为每秒钟 15000 次,请将其设置为 16000。 Net.CoalesceScheme
Net.CoalesceParams
/Net/CoalesceScheme
/Net/CoalesceParams
rbc
16000
停用合并低吞吐量或滞后敏感的工作负载。有关配置短滞后工作负载的信息,请参见《vSphere 虚拟机中调校滞后敏感的工作负载性能的最佳实践》。http://www.vmware.com/files/pdf/techpaper/VMW-Tuning-Latency-Sensitive-Workloads.pdf Net.CoalesceDefaultOn /Net/CoalesceDefaultOn 0 恢复为早期 ESXi 版本中的合并方案。
注: 恢复为早期算法的功能在更高版本的 vSphere 中不可用。Net.CoalesceScheme /Net/CoalesceScheme 校准 有关配置 vSphere Client 中的主机的信息,请参见《《vCenter Server 和主机管理》》文档。有关使用 vCLI 命令设置主机属性的信息,请参见《《ESXCLI 参考指南》》文档。