當 vSphere 的 Windows 虛擬機器傳輸大型 UDP 封包時,輸送量會低於預期或搖擺不定,即使其他流量非常小時也是如此。

問題

當 Windows 虛擬機器傳輸的 UDP 封包大於 1024 位元組時,輸送量會低於預期或搖擺不定,即使其他流量非常小時也是如此。如果使用視訊串流伺服器,視訊播放會暫停。

原因

對於每個大於 1024 位元組的 UDP 封包,Windows 網路堆疊會等待傳輸完成插斷之後再傳送下一個封包。vSphere 不提供此情況下的透明因應措施。

解決方案

  • 增大以位元組為單位的臨界值,達到該臨界值時,Windows 將透過修改 Windows 客體作業系統的登錄來變更 UDP 封包的行為。
    1. 找到 HKLM\System\CurrentControlSet\Services\Afd\Parameters 登錄機碼。
    2. 新增一個值,名稱為 FastSendDatagramThreshold,類型為 DWORD,等於 1500。
    如需在 Windows 登錄中修正此問題的相關資訊,請參閱 http://support.microsoft.com/kb/235257
  • 修改虛擬機器 NIC 的聯合設定。
    如果 Windows 虛擬機器具有 VMXNET3 vNIC 介面卡,請在虛擬機器的 .vmx 檔案中設定下列參數之一。使用 vSphere Client,或者直接修改 .vmx 檔案。
    動作 參數
    將虛擬機器的插斷率增大到大於預期封包速率的速率。例如,如果預期封包速率為每秒 15000 次插斷,則將插斷率設定為每秒 16000 次插斷。將 ethernetX.coalescingScheme 參數設定為 rbc,將 ethernetX.coalescingParams 參數設定為 16000。預設插斷率為每秒 4000 次插斷。

    ethernetX.coalescingScheme

    ethernetX.coalescingParams

    rbc

    16000

    停用聯合低輸送量或延遲敏感的工作負載。如需設定低延遲工作負載的相關資訊,請參閱對 vSphere 虛擬機器中延遲敏感的工作負載進行效能調整的最佳做法 ethernetX.coalescingScheme 已停用

    還原為舊版 ESXi 中的聯合演算法。

    備註: 還原為舊版演算法的功能在 vSphere 更新版本中將無法使用。
    ethernetX.coalescingScheme 校準

    ethernet 旁邊的 X 代表虛擬機器中 vNIC 的序號。

    如需有關在 .vmx 檔案中設定參數的詳細資訊,請參閱vSphere 虛擬機器管理說明文件。

  • 修改 ESXi 主機聯合設定。
    此方法會影響主機上的所有虛擬機器和所有虛擬機器 NIC。

    您可以在 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 虛擬機器中延遲敏感的工作負載進行效能調整的最佳做法 Net.CoalesceDefaultOn /Net/CoalesceDefaultOn 0

    還原為舊版 ESXi 中的聯合配置。

    備註: 還原為舊版演算法的功能在 vSphere 更新版本中將無法使用。
    Net.CoalesceScheme /Net/CoalesceScheme 校準

    如需從 vSphere Client 設定主機的相關資訊,請參閱vCenter Server 和主機管理說明文件。如需使用 vCLI 命令設定主機內容的相關資訊,請參閱ESXCLI 參考說明文件。