當 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。 - 修改虛擬機器 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 參考說明文件。