Linux 虛擬機器考量

相較於 Hyper-V 中的 Windows 虛擬機器,Linux 和 BSD 虛擬機器還有其他考量。

第一個考量是 Integration Services 是否存在,或 VM 是否只在模擬的硬體上執行,而沒有啟發性。 具有內建或可下載 Integration Services 的 Linux 和 BSD 版本表格,可在 Windows 上 Hyper-V 支援的 Linux 和 FreeBSD 虛擬機器 取得。 這些頁面可用於 Linux 發行版的 Hyper-V 功能格線,以及這些功能的註解 (如果適用)。

即使客體正在執行 Integration Services,仍可使用舊版硬體進行設定,而不會表現出最佳效能。 例如,設定和使用客體虛擬乙太網路卡,而不是使用舊版網路介面卡。 使用 Windows Server 2016 時,也會提供 SR-IOV 等進階網路功能。

Linux 網路效能

根據預設,Linux 會啟用硬體加速和卸載。 如果在主機上的 NIC 屬性中啟用 vRSS,且 Linux 客體具有使用 vRSS 的功能,將會啟用此功能。 在 Powershell 中,您可以使用 EnableNetAdapterRSS 命令來變更這個相同的參數。

同樣地,客體 [屬性]>[設定...]>[進階] 索引標籤 > 可在實體 NIC 上啟用 VMMQ (虛擬交換器 RSS) 功能,將 [虛擬交換器 RSS]設定至 [啟用] 或使用下列方式在 Powershell 中啟用 VMMQ:

 Set-VMNetworkAdapter -VMName **$VMName** -VmmqEnabled $True

在客體中,可以藉由增加限制來執行額外的 TCP 微調。 為了獲得最佳效能,將工作負載分散到多個 CPU,並讓深度工作負載產生最佳的輸送量,因為虛擬化工作負載的延遲會比「裸機」工作負載高。

一些在網路基準中很有用的微調參數範例包括:

net.core.netdev_max_backlog = 30000
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_wmem = 4096 12582912 33554432
net.ipv4.tcp_rmem = 4096 12582912 33554432
net.ipv4.tcp_max_syn_backlog = 80960
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
net.ipv4.tcp_abort_on_overflow = 1

網路微生物標記的實用工具是 ntttcp,可在 Linux 和 Windows 上使用。 Linux 版本是開放原始碼,可從 github.com 上的ntttcp-for-linux 取得。 您可以在 下載中心 中找到 Windows 版本。 調整工作負載時,最好盡可能使用盡可能多的資料流來取得最佳的輸送量。 使用 ntttcp 來建立流量模型, -P 參數會設定所使用的平行連線數目。

Linux 儲存體效能

在 Hyper-V 上執行 Linux 的最佳做法 上列出了一些最佳做法。 Linux 核心有不同的 I/O 排程器,可使用不同的演算法來重新排序要求。 NOOP 是一個先進先出佇列,會傳遞 Hypervisor 所做出的排程決策。 建議在 Hyper-V 上執行 Linux 虛擬機器時,使用 NOOP 作為排程器。 若要變更特定裝置的排程器,請在開機載入器的設定 (例如 etc/grub.conf) 中,將 elevator=noop 新增至核心參數,然後重新開機。

與網路功能類似,具有儲存體的 Linux 客體效能從具有足夠深度以保持主機繁忙的多個佇列中獲益最多。 微機標記儲存效能可能是與 libaio 引擎的 fio 基準測試工具最佳。

其他參考