vSphere 5.1 及更高版本中的 Windows 虚拟机传输大型 UDP 数据包时,吞吐量低于预期或摇摆不定,即使当其他流量非常小时也是如此。

问题

当 Windows 虚拟机传输的 UDP 数据包大于 1024 字节时,您会遇到低于预期或摇摆不定的吞吐量,即使当其他流量非常小时也是如此。如果使用视频流服务器,视频播放将暂停。

原因

对于每个大于 1024 字节的 UDP 数据包,Windows 网络栈在发送下一个数据包之前将等待传输完成中断。与早期版本不同,vSphere 5.1 及更高版本不提供此种情况的透明解决办法。

解决方案

  • 增大以字节为单位的阈值,达到该阈值时,Windows 将通过修改 Windows 客户机操作系统的注册表来更改 UDP 数据包的行为。
    1. 找到 HKLM\System\CurrentControlSet\Services\Afd\Parameters 注册表项。
    2. 添加一个名称为 FastSendDatagramThreshold、类型为 DWORD 且等于 1500 的值。
    有关在 Windows 注册表中修复此问题的信息,请参见 http://support.microsoft.com/kb/235257
  • 修改虚拟机网卡的合并设置。
    如果 Windows 虚拟机具有 VMXNET3 vNIC 适配器,请在虚拟机的 .vmx 文件中配置以下参数之一。使用 vSphere Web Client 或直接修改 .vmx 文件。
    操作 参数
    将虚拟机的中断率增大到大于预期数据包速率的速率。例如,如果预期数据包速率为每秒钟 15000 次中断,则请将中断速率设置为每秒钟 16000 次中断。将 ethernetX.coalescingScheme 参数设置为 rbc,将 ethernetX.coalescingParams 参数设置为 16000。默认中断率为每秒钟 4000 次中断。

    ethernetX.coalescingScheme

    ethernetX.coalescingParams

    rbc

    16000

    禁用合并低吞吐量或滞后敏感的工作负载。有关配置短滞后工作负载的信息,请参见http://www.vmware.com/files/pdf/techpaper/VMW-Tuning-Latency-Sensitive-Workloads.pdf《vSphere 虚拟机中调校滞后敏感的工作负载性能的最佳实践》。 ethernetX.coalescingScheme 已禁用

    恢复为早期 ESXi 版本中的合并算法。

    注: 恢复为早期算法的功能在更高版本的 vSphere 中不可用。
    ethernetX.coalescingScheme 校准

    ethernet 旁边的 X 表示虚拟机中网卡的序列号。

    有关在 .vmx 文件中配置参数的详细信息,请参见《vSphere 虚拟机管理》文档。

  • 修改 ESXi 主机合并设置。
    此方法影响主机上的所有虚拟机和所有虚拟机网卡。

    可以在 vSphere Web Client 中或在 ESXi Shell. 中的主机上使用 vCLI 控制台命令来编辑主机的高级系统设置列表。

    操作 vSphere Web Client 中的参数 esxcli system settings sdvanced set 命令的参数
    设置一个高于预期数据包速率的默认中断率。例如,如果期望的中断率为每秒钟 15000 次,请将其设置为 16000。

    Net.CoalesceScheme

    Net.CoalesceParams

    /Net/CoalesceScheme

    /Net/CoalesceParams

    rbc

    16000

    禁用合并低吞吐量或滞后敏感的工作负载。有关配置短滞后工作负载的信息,请参见http://www.vmware.com/files/pdf/techpaper/VMW-Tuning-Latency-Sensitive-Workloads.pdf《vSphere 虚拟机中调校滞后敏感的工作负载性能的最佳实践》。 Net.CoalesceDefaultOn /Net/CoalesceDefaultOn 0

    恢复为早期 ESXi 版本中的合并方案。

    注: 恢复为早期算法的功能在更高版本的 vSphere 中不可用。
    Net.CoalesceScheme /Net/CoalesceScheme 校准

    有关配置 vSphere Web Client 中的主机的信息,请参见《vCenter Server 和主机管理》文档。有关使用 vCLI 命令设置主机属性的信息,请参见《vSphere Command-Line Interface 参考》文档。