本文探討在虛擬機中調整記憶體輸入/輸出 (I/O) 效能的不同選項和考慮。 記憶體 I/O 路徑會跨四個後續階段延伸:
- 客戶儲存堆疊
- 主機虛擬化層
- 主機記憶體堆疊
- 實體磁碟
下列各節說明每個階段可能的優化。
虛擬控制器
Hyper-V 提供三種類型的虛擬控制器:
整合式驅動電子 (IDE)
小型電腦系統介面 (SCSI)
虛擬光纖通道主機總線適配卡 (HBA)
IDE
我們建議您只針對 OS 磁碟使用 IDE 磁碟。 OS 磁碟根據其裝置的 I/O 大小上限,具有效能限制。
IDE 控制器是模擬控制器,會將IDE磁碟公開至 VM。 這種類型的控制器是執行舊版 Windows 的客體 VM 的唯一選項,而不需要 Hyper-V VM 整合服務。 整合服務所提供的 IDE 篩選驅動程式可以比仿真的 IDE 控制器更好的執行磁碟 I/O。
SCSI (SAS 控制器)
虛擬 SCSI 控制器會將 SCSI 磁碟公開給 VM。 每個 SCSI 控制器最多可支援 64 部裝置。 SCSI 路徑不會模擬,因此它成為 OS 磁碟以外的任何磁碟的慣用控制器。 Windows Server 2012 R2 和更新版本支援 SCSI 控制器,但只有在您將控制器回報為序列連結 SCSI (SAS) 以支援共用虛擬硬碟 (VHDX) 的情況下。
為了獲得最佳效能,建議您將多個磁碟連結至單一虛擬 SCSI 控制器。 如果您沒有其他選項可調整連線到 VM 的磁碟數量,則應該只建立更多控制器。
虛擬光纖通道 HBA
設定虛擬光纖通道 HBA,以允許 VM 直接存取光纖通道及光纖通道乙太網路(FCoE)上的邏輯單元號(LUNs)。 虛擬光纖通道磁碟會略過根磁碟分區中的NTFS檔案系統,以減少記憶體I/O中央處理單元 (CPU) 使用量。 虛擬光纖通道磁碟非常適合用於客體叢集案例中多個 VM 之間共用的大型數據磁碟驅動器和磁碟驅動器。
若要使用虛擬光纖通道磁碟,您必須在主計算機上安裝一或多個光纖通道 HBA。 每個主機 HBA 都必須使用支援 Windows Server 2016 虛擬光纖通道或N_Port ID 虛擬化 (NPIV) 功能的 HBA 驅動程式。 存放局域網路 (SAN) 網狀架構也應該支援 NPIV,而且您應該在支援 NPIV 的光纖通道拓撲中設定光纖通道的 HBA 埠。
若要在具有多個 HBA 的主機上最大化輸送量,建議您在 Hyper-V VM 內設定許多虛擬 HBA。 您可以為每個 VM 設定最多四個 HBA。 Hyper-V 會自動平衡虛擬 HBA 以裝載存取相同虛擬 SAN 的 HBA。
虛擬磁碟
虛擬磁碟會由虛擬控制器向 VM 公開,而且可以是主機上的虛擬硬碟或傳遞磁碟。
虛擬磁碟以 VHD 或 VHDX 格式提供。 每個格式都支援三種類型的虛擬硬碟檔案。
如果您將部署升級至 Windows Server 2016 或更新版本,建議您將所有 VHD 檔案轉換成 VHDX 格式。 如需詳細資訊,請參閱 VHDX 格式。
VHD 格式
後續版本的 Hyper-V 包含其 VHD 格式的改善,以提供更佳的校準。 Windows Server 2012 和更新版本中 Hyper-V 支援 VHDX 和 VHD 格式,而不是僅支援 VHD 格式的舊版。 因此,較新版本的 Hyper-V 在大型扇區磁碟上執行得更好。
您在 Windows Server 2012 或更新版本中建立的任何 VHD,都有最佳的 4 KB 對齊方式。 這個對齊的格式與舊版 Windows Server 完全相容。 不過,對齊屬性不支援來自非 4 KB 對齊感知的剖析器的新配置,例如來自舊版 Windows Server 的剖析器或非 Microsoft 的剖析器。
將磁碟轉換為 VHD 格式
當您將 VHD 從舊版的 Hyper-V 或 Windows Server 移轉至更新版本時,系統不會自動將磁碟轉換成 VHD 格式。
您可以開啟 PowerShell 視窗並執行下列命令,將現有的虛擬磁碟轉換成 VHD:
Convert-VHD –Path <SourceDiskFilePath> –DestinationPath <ConvertedDiskFilePath>
例如,如果您打算將磁碟驅動器 E 中名為 test.vhd
的來源磁碟轉換為相同資料夾中名為 test-converted.vhd
的已重新命名的已轉換磁碟,您就會執行此命令:
Convert-VHD –Path E:\vms\testvhd\test.vhd –DestinationPath E:\vms\testvhd\test-converted.vhd
備註
當您轉換 VHD 時,PowerShell 會根據 [ 從來源磁碟複製 ] 選項,使用來源 VHD 中的數據。 如需詳細資訊,請參閱 Convert-VHD。
檢查磁碟對齊方式
轉換磁碟後,您可以檢查其Alignment變數,以確保它使用最佳的 4 KB 對齊方式,方法是在 PowerShell 中執行Get-VHD
命令。 請務必為來源磁碟和已轉換磁碟執行指令,然後比較兩者的值,以確保已轉換的磁碟支援 4 KB 對齊。
若要檢視磁碟的對齊方式:
開啟 PowerShell 視窗。
Get-VHD
執行 命令以檢視來源磁碟的對齊設定。Get-VHD –Path <SourceVHDFilePath>
在輸出中,注意屬性
Alignment
的值。 在此範例中,值為0
,這表示磁碟不具 4 KB 對齊識別功能。Path : <SourceVHDFilePath> VhdFormat : VHD VhdType : Dynamic FileSize : 69245440 Size : 10737418240 MinimumSize : 10735321088 LogicalSectorSize : 512 PhysicalSectorSize : 512 BlockSize : 2097152 ParentPath : FragmentationPercentage : 10 Alignment : 0 Attached : False DiskNumber : IsDeleted : False Number :
再次執行
Get-VHD
命令,但這次會使用已轉換磁碟的檔案路徑。Get-VHD –Path <ConvertedDiskFilePath>
在輸出中,檢查
Alignment
屬性的值。 此值應該是1
,這表示磁碟已成功轉換成較新的 VHD 格式,且為 4 KB 對齊感知。Path : <ConvertedDiskFilePath> VhdFormat : VHD VhdType : Dynamic FileSize : 69369856 Size : 10737418240 MinimumSize : 10735321088 LogicalSectorSize : 512 PhysicalSectorSize : 512 BlockSize : 2097152 ParentPath : FragmentationPercentage : 0 Alignment : 1 Attached : False DiskNumber : IsDeleted : False Number :
VHDX 格式
VHDX 是 Windows Server 2012 中引進的更新硬碟格式。 此格式可建立具有最多 64 TB 容量的彈性高效能虛擬磁碟。
如果您要升級至 Windows Server 2016 或更新版本,建議您將所有 VHD 檔案轉換成 VHDX 格式。 只有在您需要將 VM 移至不支援 VHDX 格式的舊版 Hyper-V 版本時,才保留 VHD 格式的檔案。
以下是 VHDX 格式的一些優點:
支援最多 64 TB 的虛擬硬碟儲存容量
藉由記錄 VHDX 元數據結構的更新,防止電源失敗期間的數據損毀
根據使用者設定檔案想要記錄的內容,儲存檔案的自定義元數據,例如作系統版本或已套用的修補程式
VHDX 格式也提供數個效能功能:
改善虛擬硬碟格式的對齊方式,改善大型扇區磁碟的效能
動態和差異磁碟的較大區塊大小,讓磁碟因工作負載需求而調整
用於支援 4 KB 扇區專用設計的應用程式和工作負載的一個 4 KB 邏輯扇區虛擬磁碟,以提升效能。
提升代表數據的效率,以產生較小的檔案大小,並允許基礎實體儲存裝置回收未使用的空間。
備註
修剪需要傳遞或 SCSI 磁碟和修剪相容的硬體。
虛擬檔案
VHD 檔案有三種類型:
固定的檔案是為了提升復原能力和效能,而且當主機的存儲空間未被積極監控時,您應該使用這些檔案。 在運行時間擴充 VHD 檔案時,請確定有足夠的磁碟空間。 您可以在任何磁碟格式上使用它們。
動態檔案適用於復原保證,並在部署需要時配置磁碟空間。 您只能在 VHDX 上使用它們。
差異檔會使 VM 快照鏈保持短,以維持良好的磁碟 I/O 效能。 您可以在任何磁碟格式上使用它們。
固定檔案類型
當您建立固定 VHD 檔案時,系統會為其配置空間。 固定檔案不太可能分散,當單一 I/O 分割成多個檔案時,減少 I/O 輸送量。 它在三種文件選項中也具有最低的 CPU 負載,因為讀取和寫入操作不需要檢索區塊映射。
當您需要最佳的復原能力和效能時,建議您使用固定的文件類型。
動態檔案類型
當您建立動態 VHD 檔案時,系統會視需要為其配置空間。 檔案中的區塊起始是已配置區塊,而對於未配置區塊,檔案中沒有相應的空間來支持。 當區塊收到第一次寫入時,虛擬化堆疊接著必須為 VHD 檔案中的區塊配置空間,然後更新元數據。 此配置會增加寫入所需的磁碟 I/O 數目,增加 CPU 使用量。 查閱元數據中的區塊對應時,讀取和寫入現有區塊會產生磁碟存取和 CPU 額外負荷。
如果您使用 VHDX 檔案,當您未主動監視裝載磁碟區上的記憶體時,建議您使用動態檔類型。 在運行時間擴充 VHD 檔案時,請確定您有足夠的磁碟空間。
差異比較檔案類型
差異檔案是儲存寫入磁碟之 VM 的快照集。 如果您在沒有現有寫入的情況下寫入區塊,系統會在 VHD 檔案中配置空間,就像動態擴充的 VHD 一樣。 如果區塊已經包含寫入,系統服務會從 VHD 檔案讀取作業。 否則,它會服務父 VHD 檔案中的區塊。 在這兩種情況下,系統會讀取元數據以判斷區塊對應。 讀取和寫入此 VHD 可能會耗用更多的 CPU,併產生比固定 VHD 檔案更多的 I/O。
當只有少數快照集時,記憶體 I/O 可能會使用比平常更多的 CPU,但除了高 I/O 密集的伺服器工作負載之外,它不會明顯影響效能。 建立和使用大型 VM 快照集鏈結會導致效能問題。 在差異檔案中,系統必須在許多不同的差異 VHD 中檢查要求的區塊,以便從 VHD 讀取。 如果您使用差異檔案,我們建議您讓快照鏈保持簡短,以維持良好的磁碟 I/O 效能。
大小考量
當您規劃磁碟優化時,您應該考慮區塊大小和扇區大小。 本節說明調整區塊和扇區大小的建議。
區塊大小
因為區塊大小可能會大幅影響效能,建議您使用磁碟比對區塊大小與工作負載的配置模式。 如果應用程式以 16 MB 的區塊配置區塊,則您應該最好使用 16 MB 的 VHD 區塊大小。 只有使用 VHDX 檔案格式的 VHD,才能使用大於 2 MB 的區塊大小。 當區塊大小大於隨機 I/O 工作負載的配置模式時,它會增加主機上 VHD 所使用的空間量。
扇區大小
軟體組織經常依賴 512 位元組的磁碟扇區,但業界標準會移至 4 KB 磁碟扇區。 為了減少扇區大小變更所產生的相容性問題,硬碟廠商引進了稱為 512 個模擬磁碟驅動器(512e)的過渡大小。
模擬磁碟驅動器提供 4 KB 磁碟扇區原生磁碟驅動器所提供的一些優點,例如改善格式效率,以及改進的錯誤修正碼配置(ECC)。 模擬磁碟驅動器會在磁碟介面上公開 4 KB 扇區大小時,呈現較少的相容性問題。
若要充分利用 4 KB 扇區,建議您使用 VHDX 格式,而不是 512 個字節的磁碟扇區。 若要降低磁碟大小之間的相容性問題,請實作 512e 磁碟驅動器以進行過渡大小調整。
支援具有 512e 磁碟的過渡尺寸
512e 磁碟只能在實體扇區上執行寫入作業。 這種類型的磁碟無法直接寫入系統指派給它的 512 位元組的扇區。 磁碟有一個內部程式,可讓寫入作業成為可能,其牽涉到讀取Modify-Write (RMW) 作業,順序如下:
首先,磁碟會將 4 KB 實體扇區讀取至其內部快取。 快取包含寫入作業中所參考的512位元組邏輯扇區。
接下來,磁碟會修改 4 KB 緩衝區中的數據,以包含更新的 512 位元組扇區。
最後,磁碟會將更新的 4 KB 緩衝區寫回磁碟上的實體扇區。
RMW 程式對效能的整體影響取決於工作負載。 RMW 程式可能會導致虛擬硬碟效能降低,原因如下:
動態和差異 VHD 在其數據承載前面具有 512 位元組的扇區位圖。 頁尾、頁首和父定位器會對齊 512 位元組的扇區。 虛擬硬碟驅動程式通常會執行512位元組的寫入作業來更新這些結構,這會導致磁碟執行 RMW 進程。
應用程式通常會以 4 KB 大小的倍數執行讀取和寫入作業,因為 4 KB 是 NTFS 的預設叢集大小。 動態和差異虛擬硬碟在數據承載區塊前面有512位元組扇區位圖。 此位圖會使 4 KB 區塊與實體 4 KB 界限不一致。 下圖顯示一個突出的 VHD 4-KB 區塊,沒有與實體 4-KB 邊界對齊。
目前解析器每執行一次 4 KB 的寫入操作來更新資料承載,會對磁碟上的兩個區塊進行兩次讀取。 系統接著會更新區塊,並將其寫回兩個磁碟區塊。 Windows Server 2016 中的 Hyper-V 可降低 VHD 栈上 512e 磁碟的一些性能影響。 Hyper-V 準備結構,以便在 VHD 格式中對齊至 4-KB 邊界。 風險降低可避免對虛擬硬碟檔案內數據的存取產生 RMW 影響,並更新虛擬硬碟元數據結構。
如先前所述,從早期版本的 Windows Server 複製的 VHD 不會自動與 4 KB 對齊。 您可以使用 [ 從來源磁碟複製 ] 選項搭配 Convert-VHD
命令,手動將磁碟轉換為最佳對齊方式。
根據預設,VHD 會以 512 個字節的實體扇區大小公開。 此方法可確保當您從舊版 Windows Server 移轉應用程式和 VHD 時,實體扇區大小相依應用程式不會受到影響。
根據預設,系統會建立具有 4 KB 實體扇區大小的 VHDX 磁碟,以在一般磁碟和較大的扇區磁碟上優化其效能配置檔。
若要降低磁碟大小之間的相容性問題,建議您實作 512e 磁碟驅動器以進行過渡大小調整。 若要充分利用 4 KB 扇區,請使用 VHDX 格式。
原生的 4KB 磁碟
Windows Server 2012 R2 和更新版本中 Hyper-V 支援 4 KB 原生磁碟。 您也可以在虛擬記憶體堆疊層中實作軟體 RMW 演算法,將 VHD 磁碟資料儲存在 4 KB 原生磁碟上。 此演算法會將512位元組的存取和更新要求轉換為對應的4 KB存取和更新。
由於 VHD 檔案只能呈現為 512 位元組的邏輯扇區大小磁碟,因此可能會有應用程式發出 512 位元組的輸入/輸出請求。 在這種情況下,記憶體堆疊層中的 RMW 演算法會滿足要求,並導致效能降低。 VHDX 磁碟的邏輯扇區大小為 512 個字節,會產生相同的結果。
您可以將 VHDX 檔案設定為呈現為 4 KB 邏輯磁區大小的磁碟。 此實作是在 4 KB 原生實體裝置上運行磁碟效能的最佳配置。 不過,請確定 4 KB 邏輯扇區大小同時支援使用虛擬磁碟的客體和應用程式。 VHDX 格式可在 4 KB 邏輯扇區大小裝置上正確運作。
建議您避免搭配 VHD 和 VHDX 檔案使用 4 KB 原生磁碟,因為這可能會導致效能降低。 當您的案例需要 4 KB 原生磁碟時,您應該在 4 KB 邏輯扇區大小裝置上使用 VHDX 格式。
直通磁碟
我們建議您避免使用直通磁碟,因為它會在虛擬機器遷移場景中引入限制。
將 VM 中的 VHD 直接對應至實體磁碟或邏輯單元編號 (LUN),而不是 VHD 檔案,稱為 直通磁碟。直通磁碟可以讓您略過根磁碟分區中的 NTFS 檔案系統,以減少儲存 I/O 的 CPU 使用量。 不過,使用傳遞磁碟也牽涉到實體磁碟或 LUN 變得比 VHD 檔案更難在機器之間移轉的風險。
進階記憶體功能
本節討論您應該考慮進階記憶體功能的一些更多效能優化。
儲存服務品質 (QoS)
在 Windows Server 2012 R2 和更新版本中,Hyper-V 包含為 VM 上的記憶體設定特定服務品質 (QoS) 參數的能力。 建議您實作記憶體 QoS 來存取額外的記憶體參數、設定虛擬硬碟的最大和最小 IOPS 閾值,以及監視磁碟效能。 您可以實作這些參數以取得下列優點:
在多租用戶環境中設定記憶體效能隔離
指定虛擬硬碟的每秒輸入/輸出作業數上限和最小值
- 系統管理員可以節流儲存 I/O,以防止某個租戶耗用過多會影響其他租戶的儲存資源。 設定最小 IOPS 值,並在系統不符合最佳效能閾值時接收通知。 我們會在標準化 IOPS 方面指定最大或最小 IOPS 值,其中每 8 KB 的數據都被視為一次 I/O 操作。
當記憶體 I/O 效能低於定義的閾值時收到通知,以有效率地執行 VM 工作負載
存取 VM 計量基礎結構的記憶體參數,並讓系統管理員監視效能和退款相關參數
不過,也請記住,記憶體 QoS 有下列限制:
僅適用於虛擬磁碟
差異磁碟不能擁有位於不同磁碟區的父虛擬磁碟
複本月臺的 QoS 會與主要月臺分開設定
記憶體 QoS 不支援共用 VHDX
如需詳細資訊,請參閱 Hyper-V 的記憶體服務品質。
大型 VM 的 NUMA I/O 登錄設定
Windows Server 2012 和更新版本支援將虛擬、非一元記憶體存取 (NUMA) 拓撲投影到 Hyper-V VM。 NUMA 支援可改善在設定大量記憶體或 大型 VM 的 VM 上執行的工作負載效能。 若要啟用這項支援,大型 VM 組態需要 I/O 輸送量的延展性。 大型 VM 的範例是使用 64 個虛擬處理器執行Microsoft SQL Server。
下列 Windows Server 增強功能符合大型 VM 的 I/O 延展性需求:
在客體設備與主機存儲堆疊之間建立更多交流通道。
更有效率的 I/O 完成機制,涉及虛擬處理器之間的中斷分配,以避免昂貴的處理器間中斷。
登錄機碼
建議您使用 Windows Server NUMA 登錄機碼設定來改善在大型 VM 上執行的工作負載效能。
我們已新增並更新一些登錄專案,以支援上一節中的增強功能,並可讓您調整通道數目。 您可以在HKLM\System\CurrentControlSet\Enum\VMBUS\<device id>\<instance id>\StorChannel
找到條目。
路徑中的 <device id>\<instance id>\
部分對應組態裡的相關值。 這些登錄專案會將處理 I/O 完成的虛擬處理器對齊至應用程式指派為 I/O 處理器的虛擬 CPU。 系統會根據裝置的硬體金鑰,逐個適配器設定註冊表設定。
以下是要考慮的兩個主要設定:
ChannelCount (DWORD) 是您部署可使用的通道總數。 最大值為 16。 通道計數預設為等於虛擬處理器數目除以16的值。
ChannelMask (QWORD) 是通道的處理器親和性。 如果您未指定此關鍵設定或將值設定為 0,通道遮罩會預設使用現有的通道分配演算法來處理一般存儲或網路通道。 默認動作可確保您的記憶體通道不會與您的網路通道衝突。
卸載的數據傳輸整合
建議您使用卸除數據傳輸 (ODX) 作業,以確保 VM 工作負載可以使用已啟用 ODX 的記憶體,就像在實體環境中一樣。
VHD 的重要維護工作,例如合併、移動和壓縮,牽涉到複製大量數據。 目前複製數據的方法需要系統讀取和寫入數據到不同的位置,這很耗時,而且會使用可能用於維護 VM 的 CPU 和記憶體資源。
儲存局域網路 (SAN) 廠商可以提供稱為 ODX 的硬體功能。 這項功能提供大量數據的近乎即時複製作業。 ODX 可讓系統而非磁碟指定如何將特定數據集從一個位置移至另一個位置。
Windows Server 2012 和更新版本中的 Hyper-V 支援 ODX 作業,以將數據從客體 OS 傳遞至主機硬體。 工作負載可以使用已啟用 ODX 的記憶體,就像在非虛擬化環境中一樣。 Hyper-V 記憶體堆疊也可以在 VHD 的維護作業期間發出 ODX 作業,例如合併磁碟,以及在巨量數據遷移期間儲存移轉中繼作業。
解除對應通知整合
建議您使用解除映射通知,讓您的 VHDX 檔案更有效率,並讓基礎實體存儲設備釋放未使用的空間。
VHD 檔案存在於存放磁碟區上,這些檔案與其他檔案共用可用空間。 由於其檔案大小往往很大,因此 VHD 檔案可能會佔用大量空間。 儲存空間的需求更大會影響 IT 硬體預算,這表示您應該盡可能優化實體空間使用量。
在 Windows Server 2012 之前的 Windows Server 版本中,客體 OS 中的 Windows 儲存器堆疊和 Hyper-V 主機有限制,因此無法優化儲存空間。 當應用程式刪除 VHD 中的內容時,儲存空間會持續處於未使用狀態。 系統不會通知 VHD 或實體儲存裝置已刪除的資訊,這導致 Hyper-V 儲存堆疊無法優化 VHD 型虛擬硬碟檔案的空間。 因此,基礎儲存裝置無法回收目前未被使用的空間,該空間原本由已刪除的數據佔用。
自 Windows Server 2012 起,Hyper-V 支援 解除映射通知。 這項功能使 VHDX 檔案能向儲存堆疊報告已刪除的資料,從而最大化效率,保持檔案大小精簡,並讓儲存堆疊回收未使用的空間供其他用途。
只有 Hyper-V 特定的 SCSI、覺察型 IDE 和虛擬光纖通道控制器,才能 unmap
讓客體 OS 的命令到達主機虛擬記憶體堆疊。 在虛擬硬碟中,只有格式為 VHDX 的虛擬磁碟支援來自客體操作系統的 unmap
命令。