共用方式為


Hyper-V 存放裝置 I/O 效能

本文探討在虛擬機器 (VM) 中最佳化儲存輸入/輸出 (I/O) 效能的不同選項和注意事項。 儲存體 I/O 路徑會跨四個連續階段:

  1. 客體儲存體堆疊
  2. 主機虛擬化層
  3. 主機儲存體堆疊
  4. 實體磁碟

下面各節描述每個階段可能的最佳化。

虛擬控制器

Hyper-V 提供三種類型的虛擬控制器:

  • 整合式電子驅動介面 (IDE)

  • 小型電腦系統介面 (SCSI)

  • 虛擬光纖通道主機匯流排介面卡 (HBA)

IDE

建議您只針對 OS 磁碟使用 IDE 磁碟。 OS 磁碟具有根據其裝置的 I/O 大小上限的效能限制。

IDE 控制器是模擬控制器,會將 IDE 磁碟公開至 VM。 對於執行早期沒有 Hyper-V VM 整合服務的 Windows 版本的來賓 VM,此類型控制器是唯一選項。 整合服務所提供的 IDE 篩選器驅動程式執行磁碟 I/O 的效率以比模擬 IDE 控制器更強。

SCSI (SAS 控制器)

虛擬 SCSI 控制器會將 SCSI 磁碟公開至 VM。 每個 SCSI 控制器最多支援 64 個裝置。 未模擬 SCSI 路徑,以將其設為 OS 磁碟以外的任何磁碟的慣用控制器。 Windows Server 2012 R2 和更新版本支援 SCSI 控制器,但只有在您將控制器回報為序列連結 SCSI (SAS) 以支援共用虛擬硬碟 (VHDX) 的情況下。

為了獲得最佳效能,建議您將多個磁碟連接到單一虛擬 SCSI 控制器。 如果您沒有其他選項可調整連線到 VM 的磁碟數量,則應只需建立更多控制器。

虛擬光纖通道 HBA

設定虛擬光纖通道 HBA,以允許 VM 直接存取光纖通道和乙太網路光纖通道 (FCoE) 邏輯單元編號 (LUN)。 虛擬光纖通道磁碟繞過根分割區中的 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 版本時,系統不會自動將磁碟轉換為 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透過在 PowerShell 中執行 Get-VHD 命令,使用最佳的 4 KB 對齊方式。 請務必執行來源磁碟和已轉換磁碟的命令,然後比較值以確定已轉換的磁碟是 4 KB 對齊感知。

檢視磁碟的對齊方式:

  1. 開啟 PowerShell 視窗。

  2. 執行 Get-VHD 命令,以檢視來源磁碟的對齊方式設定。

    Get-VHD –Path <SourceVHDFilePath>
    
  3. 在輸出中,請注意 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                  :
    
  4. 再次執行 Get-VHD 命令,但這次使用的是已轉換磁碟的檔案路徑。

    Get-VHD –Path <ConvertedDiskFilePath>
    
  5. 在輸出中,請檢查 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 檔相比,讀取和寫入此 VHD 可能會消耗更多的 CPU,進而產生更多的 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 位元組磁區。 磁碟有一個內部程式,可讓寫入作業成為可能,其牽涉到下列順序的讀取-修改-寫入 (RMW) 作業:

  • 首先,磁碟將 4 KB 實體磁區讀取到其內部快取中。 快取包含寫入作業中引用的 512 位元組邏輯磁區。

  • 接著,磁碟會將 4 KB 緩衝區中的資料修改成包含更新的 512 位元組磁區。

  • 最後,磁碟會會將已更新的 4-KB 緩衝區寫回其磁碟上的實體磁區。

RMW 處理序對效能的總體影響取決於工作負載。 此 RMW 處理序可能造成虛擬硬碟 (VHD) 效能降低,原因如下:

  • 動態與差異 VHD 在其資料裝載前面有 512 位元組磁區點陣圖。 頁尾、頁首和上層定位器會對齊 512 位元組磁區。 虛擬硬碟驅動程式通常會執行 512 位元組的寫入作業來更新這些結構,這會導致磁碟執行 RMW 處理序。

  • 應用程式通常以 4 KB 大小的倍數執行讀取和寫入作業,因為 4 KB 是 NTFS 的預設叢集大小。 動態和差異虛擬硬碟在資料承載區塊前面有 512 位元組磁區點陣圖。 此點陣圖會讓 4 KB 區塊未對齊實體 4 KB 界限。 下圖展示醒目提示的 VHD 4-KB 區塊,該區塊與實體 4-KB 邊界不一致。

    Diagram of a VHD 4-KB block that's not aligned with the physical 4-KB boundary.

目前解析器為更新有效負載資料而執行的每個 4-KB 寫入作業,會造成對磁碟上的兩個區塊進行兩次讀取。 然後,系統會更新這些區塊並將它們寫回至兩個磁碟區塊。 Windows Server 2016 中的 Hyper-V 可降低 VHD 堆疊上 512e 磁碟的一些效能影響。 Hyper-V 會準備結構,以對齊 VHD 格式中的 4 KB 界限。 風險降低可避免對虛擬硬碟檔案內資料存取的 RMW 效果,並更新虛擬硬碟中繼資料結構。

如先前所述,從舊版 Windows Server 所複製的 VHD 不會自動對齊 4 KB。 您可以使用附帶 Convert-VHD 命令的 [從來源複製] 磁碟選項,以手動方式將磁碟轉換為最佳對齊方式。

根據預設,會以 512 位元組的實體磁區大小公開 VHD。 此方法可確保從早期 Windows Server 版本遷移應用程式和 VHD 時,實體磁區大小相關的應用程式不受影響。

預設情況下,系統會建立實體磁區大小為 4-KB 的 VHDX 磁碟,以最佳化其在常規磁碟和較大磁區磁碟上的效能設定檔。

為了減少磁碟大小之間的相容性問題,建議您實作 512e 磁碟機進行轉換大小調整。 若要充分利用 4 KB 磁區,請使用 VHDX 格式。

原生 4 KB 磁碟

Windows Server 2012 R2 和更新版本中的 Hyper-V 支援 4 KB 原生磁碟。 您也可以在虛擬儲存體堆疊層中實作軟體 RMW 演算法,以將 VHD 磁碟資料儲存至 4 KB 原生磁碟。 此演算法會將 512 位元組存取和更新要求轉換為對應的 4 KB 存取和更新。

因為 VHD 檔案只能公開為 512 位元組邏輯磁區大小磁碟,所以可能會有發出 512 位元組 I/O 要求的應用程式。 在這類情況下,儲存體堆疊層中的 RMW 演算法可滿足要求,並導致效能降低。 邏輯磁區大小為 512 位元組的 VHDX 磁碟會產生相同的結果。

您可以將 VHDX 檔案設定為公開為 4-KB 邏輯磁區大小的磁碟。 此實作是 4 KB 原生實體裝置上所裝載磁碟效能的最佳設定。 但是,請確保 4-KB 邏輯磁區大小同時支援使用虛擬磁碟的客體和應用程式。 VHDX 格式可在 4 KB 邏輯磁區大小裝置上正確運作。

建議避免將 4-KB 本機磁碟與 VHD 和 VHDX 檔案一起使用,因為這可能會導致效能下降。 當您的案例需要 4-KB 原生磁碟時,您應該在 4-KB 邏輯磁區大小裝置上使用 VHDX 格式。

傳遞磁碟

建議避免使用傳遞磁碟,因為它們在 VM 移轉案例中導入限制。

將 VM 中的 VHD 直接對應至實體磁碟或邏輯單元編號 (LUN) ,而不是稱為傳遞磁碟的 VHD 檔案。傳遞磁碟可讓您略過根磁碟分割區中的 NTFS 檔案系統,以減少儲存體 I/O 的 CPU 用量。 不過,使用傳遞磁碟也存在實體磁碟或 LUN 比 VHD 檔案更難在電腦之間遷移的風險。

進階儲存體功能

本節討論您應該考慮進階儲存體功能的一些更多效能最佳化。

儲存體服務品質 (QoS)

在 Windows Server 2012 R2 和更新版本中,Hyper-V 包括針對 VM 上的儲存體設定特定服務品質 (QoS) 參數的能力。 建議您實現儲存 QoS,以存取額外的儲存參數,為虛擬硬碟設定最大和最小 IOPS 閾值,並監控磁碟效能。 您可以實作這些參數以獲得以下好處:

  • 在多租用戶環境中設定儲存效能隔離

  • 指定虛擬硬碟的每秒最大和最小輸入/輸出作業 (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 和 Hyper-V 主機中的 Windows 儲存器堆疊有一些限制,致使無法最佳化儲存空間。 當應用程式刪除 VHD 中的內容時,儲存空間仍然棄用。 系統不會通知 VHD 或實體儲存裝置已刪除的資訊,這可防止 Hyper-V 儲存堆疊最佳化 VHD 型虛擬磁碟檔案的空間。 因此,底層儲存裝置無法回收已刪除資料曾經佔用的現在未使用的空間。

從 Windows Server 2012 開始,Hyper-V 支援 取消對應通知。 這項功能可讓 VHDX 檔案向儲存體堆疊報告已刪除的資料,藉由維持修剪檔案大小,讓堆疊回收未使用的儲存空間,以達到最大效率。

只有 Hyper-V 特定 SCSI、已啟用 IDE 和虛擬光纖通道控制器才允許來自客體 OS 的 unmap 命令到達主機虛擬儲存體堆疊。 在 VHD 上,只有格式化為 VHDX 的虛擬磁碟支援客體 OS 的 unmap 命令。