Hyper-V 存储 I/O 性能

本部分介绍优化虚拟机中存储 I/O 性能的不同选项和注意事项。 存储 I/O 路径从来宾存储堆栈(通过主机虚拟化层)扩展到主机存储堆栈,然后扩展到物理磁盘。 下面介绍了在上述每个阶段如何实现优化。

虚拟控制器

Hyper-V 提供三种类型的虚拟控制器:IDE、SCSI 和虚拟主机总线适配器 (HBA) 。

IDE

IDE 控制器向虚拟机公开 IDE 磁盘。 模拟 IDE 控制器,它是唯一可用于在没有虚拟机 Integration Services 的情况下运行较旧版本的Windows的来宾 VM 的控制器。 使用虚拟机 Integration Services 提供的 IDE 筛选器驱动程序执行的磁盘 I/O 比模拟 IDE 控制器提供的磁盘 I/O 性能要好得多。 建议仅将 IDE 磁盘用于操作系统磁盘,因为它们具有性能限制,因为可以颁发给这些设备的最大 I/O 大小。

SCSI (SAS 控制器)

SCSI 控制器向虚拟机公开 SCSI 磁盘,每个虚拟 SCSI 控制器最多可以支持 64 台设备。 为了获得最佳性能,我们建议将多个磁盘附加到单个虚拟 SCSI 控制器,并创建其他控制器,因为它们只需要缩放连接到虚拟机的磁盘数。 不模拟 SCSI 路径,这使得它成为除操作系统磁盘以外的任何磁盘的首选控制器。 事实上,对于第 2 代 VM,它是唯一可能的控制器类型。 Windows Server 2012 R2 中引入,此控制器报告为 SAS 以支持共享 VHDX。

虚拟光纤通道 HBA

虚拟光纤通道 HBA 可配置为允许虚拟机通过以太网直接访问光纤通道和光纤通道, (FCoE) LUN。 虚拟光纤通道磁盘绕过根分区中的 NTFS 文件系统,从而减少存储 I/O 的 CPU 使用率。

多个虚拟机之间共享的大型数据驱动器和驱动器 (来宾群集方案) 是虚拟光纤通道磁盘的主要候选项。

虚拟光纤通道磁盘要求在主机上安装一个或多个光纤通道主机总线适配器 (HBA) 。 每个主机 HBA 都需要使用支持 Windows Server 2016 虚拟光纤通道/NPIV 功能的 HBA 驱动程序。 SAN 构造应支持 NPIV,应在支持 NPIV 的光纤通道拓扑中设置用于虚拟光纤通道的 HBA 端口 () 。

若要在安装了多个 HBA 的主机上最大化吞吐量,我们建议在 Hyper-V 虚拟机中配置多个虚拟 HBA, (为每个虚拟机配置最多四个 HBA) 。 Hyper-V 将自动尽最大努力平衡虚拟 HBA,以托管访问同一虚拟 SAN 的 HBA。

虚拟磁盘

可以通过虚拟控制器向虚拟机公开磁盘。 这些磁盘可以是虚拟硬盘,它们是磁盘的文件抽象或主机上的传递磁盘。

虚拟硬盘

有两种虚拟硬盘格式:VHD 和 VHDX。 每种格式都支持三种类型的虚拟硬盘文件。

VHD 格式

VHD 格式是过去版本中 Hyper-V 支持的唯一虚拟硬盘格式。 在 Windows Server 2012 中引入,已修改 VHD 格式,以允许更好的对齐方式,从而显著提高新大型扇区磁盘的性能。

在Windows Server 2012或更高版本上创建的任何新 VHD 都具有最佳的 4 KB 对齐方式。 此对齐格式与以前的 Windows 服务器操作系统完全兼容。 但是,对于非 4 KB 对齐感知 (分析器(例如以前版本的 Windows 服务器或非 Microsoft 分析程序) ),新分配的对齐属性将中断。

从以前的版本移动的任何 VHD 都不会自动转换为此新改进的 VHD 格式。

若要转换为新的 VHD 格式,请运行以下命令Windows PowerShell:

Convert-VHD –Path E:\vms\testvhd\test.vhd –DestinationPath E:\vms\testvhd\test-converted.vhd

可以检查系统上所有 VHD 的对齐属性,并且应将其转换为最佳 4 KB 对齐方式。 使用“ 从源创建 ”选项,使用原始 VHD 中的数据创建新的 VHD。

若要使用 Windows Powershell 检查对齐方式,请检查对齐行,如下所示:

Get-VHD –Path E:\vms\testvhd\test.vhd

Path                    : E:\vms\testvhd\test.vhd
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                  :

若要使用Windows PowerShell验证对齐方式,请检查对齐线,如下所示:

Get-VHD –Path E:\vms\testvhd\test-converted.vhd

Path                    : E:\vms\testvhd\test-converted.vhd
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 的可复原高性能虚拟磁盘。 此格式的优点包括:

  • 支持高达 64 TB 的虚拟硬盘存储容量。

  • 可通过记录对 VHDX 元数据结构的更新,保护数据在电源发生故障时不受损坏。

  • 能够存储有关文件(用户可能需要记录的文件)的自定义元数据,例如应用的操作系统版本或修补程序。

VHDX 格式还提供以下性能优势:

  • 改进了虚拟硬盘格式的对齐方式,以便能在大型扇区磁盘上更好地工作。

  • 动态磁盘和差异磁盘的较大块大小,使这些磁盘能够适应工作负荷的需求。

  • 4 KB 逻辑扇区虚拟磁盘,允许应用程序使用时提高性能,以及专为 4 KB 扇区设计的工作负荷。

  • 表示数据的效率,这会导致文件大小较小,并允许基础物理存储设备回收未使用的空间。 (剪裁需要直通或 SCSI 磁盘以及与剪裁兼容的硬件。)

升级到Windows Server 2016时,建议将所有 VHD 文件转换为 VHDX 格式,因为这些优势。 将文件保留为 VHD 格式的唯一方案是,虚拟机有可能移动到不支持 VHDX 格式的 Hyper-V 的早期版本。

虚拟硬盘文件的类型

有三种类型的 VHD 文件。 以下部分是类型之间的性能特征和权衡。

对于选择 VHD 文件类型,应考虑以下建议:

  • 使用 VHD 格式时,建议使用固定类型,因为它与其他 VHD 文件类型相比具有更好的复原能力和性能特征。

  • 使用 VHDX 格式时,建议使用动态类型,因为它除了节省与分配空间相关的空间外,还提供复原保证,前提是需要这样做。

  • 如果托管卷上的存储未主动监视,则建议使用固定类型,以确保在运行时扩展 VHD 文件时存在足够的磁盘空间。

  • 虚拟机的快照创建差异 VHD 以存储对磁盘的写入。 只有少数快照可以提升存储 I/O 的 CPU 使用率,但除了高 I/O 密集型服务器工作负荷外,性能可能不会显著影响。 但是,具有大型快照链可能会显著影响性能,因为从 VHD 读取可能需要检查许多差异 VHD 中请求的块。 保持快照链较短对于保持良好的磁盘 I/O 性能非常重要。

修复了虚拟硬盘类型

创建 VHD 文件时,首先分配 VHD 的空间。 这种类型的 VHD 文件不太可能分段,这可以减少在将单个 I/O 拆分为多个 I/O 时 I/O 吞吐量。 它具有三个 VHD 文件类型的最低 CPU 开销,因为读取和写入不需要查找块的映射。

动态虚拟硬盘类型

按需分配 VHD 的空间。 磁盘中的块以未分配块的形式启动,并且不受文件中任何实际空间的支持。 首次写入块时,虚拟化堆栈必须在 VHD 文件中为块分配空间,然后更新元数据。 这会增加写入所需的磁盘 I/O 数,并增加 CPU 使用率。 在元数据中查找块的映射时,读取和写入现有块会产生磁盘访问和 CPU 开销。

差异虚拟硬盘类型

VHD 指向父 VHD 文件。 对未写入块的任何写入都会导致在 VHD 文件中分配空间,就像动态扩展的 VHD 一样。 如果已写入块,则从 VHD 文件对读取进行服务。 否则,它们从父 VHD 文件提供服务。 在这两种情况下,将读取元数据以确定块的映射。 读取和写入此 VHD 可能会消耗更多的 CPU,并产生比固定 VHD 文件更多的 I/O。

块大小注意事项

块大小可能会显著影响性能。 最好将块大小与使用磁盘的工作负荷的分配模式匹配。 例如,如果应用程序分配的区块为 16 MB,则最好拥有 16 MB 的虚拟硬盘块大小。 块大小为 >2 MB 仅在采用 VHDX 格式的虚拟硬盘上可用。 如果块大小大于随机 I/O 工作负荷的分配模式,则会显著增加主机上的空间使用量。

扇区大小影响

大多数软件行业都依赖于磁盘扇区 512 字节,但标准移动到 4 KB 磁盘扇区。 为了减少扇区大小变化引起的兼容性问题,硬盘驱动器供应商引入了称为 512 个仿真驱动器的过渡大小, (512e) 。

这些仿真驱动器提供了 4 KB 磁盘扇区本机驱动器提供的一些优势,例如,改进了格式效率,以及 ECC) (错误代码的改进方案。 它们附带的兼容性问题较少,即在磁盘接口上公开 4 KB 扇区大小。

支持 512e 磁盘

512e 磁盘只能在物理扇区上执行写入,也就是说,它不能直接写入向其颁发的 512 字节扇区。 磁盘中的内部进程使这些写入成为可能,请执行以下步骤:

  • 磁盘将 4 KB 物理扇区读取到其内部缓存,其中包含写入中引用的 512 字节逻辑扇区。

  • 将 4 KB 缓冲区中的数据修改为包含更新的 512 个字节扇区。

  • 磁盘将已更新的 4 KB 缓冲区写回到其磁盘上的物理扇区。

此过程称为 read-modify-write (RMW) 。 RMW 进程的总体性能影响取决于工作负荷。 RMW 进程会导致虚拟硬盘的性能下降,原因如下:

  • 动态和差异虚拟硬盘在其数据有效负载前面具有 512 字节扇区位图。 此外,页脚、页眉和父定位符与 512 字节扇区对齐。 虚拟硬盘驱动程序通常会发出 512 字节写入命令来更新这些结构,从而导致前面所述的 RMW 过程。

  • 应用程序通常以 4 KB 大小的倍数发出读取和写入问题, (NTFS) 的默认群集大小。 由于动态和差异虚拟硬盘的数据有效负载块前面有 512 字节扇区位图,因此 4 KB 块不与物理 4 KB 边界对齐。 下图显示了一个 VHD 4 KB 块, (突出显示了与物理 4 KB 边界不一致的) 。

vhd 4 kb block

由当前分析程序发出的每个 4 KB 写入命令更新有效负载数据会导致磁盘上的两个块的两次读取,然后更新并随后写回两个磁盘块。 Windows Server 2016中的 Hyper-V 通过准备上述结构以 VHD 格式对齐到 4 KB 边界,缓解对 VHD 堆栈上 512e 磁盘的一些性能影响。 这可以避免在访问虚拟硬盘文件中的数据以及更新虚拟硬盘元数据结构时产生 RMW 效果。

如前所述,从以前版本的 Windows Server 复制的 VHD 不会自动与 4 KB 对齐。 可以使用 VHD 接口中提供的“ 从源磁盘复制 ”选项手动将其转换为最佳对齐方式。

默认情况下,VHD 公开的物理扇区大小为 512 字节。 这样做是为了确保在应用程序与 VHD 从以前版本的 Windows 服务器移动时,物理扇区大小依赖应用程序不会受到影响。

默认情况下,使用 4 KB 物理扇区大小创建具有 VHDX 格式的磁盘,以优化其性能配置文件常规磁盘和大型扇区磁盘。 若要充分利用 4 KB 扇区,建议使用 VHDX 格式。

支持本机 4 KB 磁盘

Windows Server 2012 R2 及更高版本中的 Hyper-V 支持 4 KB 本机磁盘。 但是,仍可将 VHD 磁盘存储在 4 KB 本机磁盘上。 这是通过在虚拟存储堆栈层中实现软件 RMW 算法来实现的,该算法将 512 字节访问和更新请求转换为相应的 4 KB 访问和更新。

由于 VHD 文件只能将自己公开为 512 字节逻辑扇区大小磁盘,因此很可能有应用程序发出 512 字节 I/O 请求。 在这些情况下,RMW 层将满足这些请求并导致性能下降。 对于具有逻辑扇区大小为 512 字节的 VHDX 格式化的磁盘也是如此。

可以将 VHDX 文件配置为以 4 KB 逻辑扇区大小磁盘的形式公开,当磁盘托管在 4 KB 本机物理设备上时,这将是性能的最佳配置。 应注意确保使用虚拟磁盘的来宾和应用程序受 4 KB 逻辑扇区大小的支持。 VHDX 格式设置将在 4 KB 逻辑扇区大小设备上正常工作。

传递磁盘

可以将虚拟机中的 VHD 直接映射到物理磁盘或逻辑单元号 (LUN) ,而不是映射到 VHD 文件。 优点是,此配置会绕过根分区中的 NTFS 文件系统,从而减少存储 I/O 的 CPU 使用率。 风险在于,物理磁盘或 LUN 可能比 VHD 文件更难在计算机之间移动。

由于虚拟机迁移方案引入的限制,应避免传递磁盘。

高级存储功能

服务存储质量 (QoS)

从 Windows Server 2012 R2 开始,Hyper-V 包括设置虚拟机上存储的某些服务质量 (QoS) 参数的功能。 存储 QoS 在多租户环境中提供了存储性能隔离,以及在存储 I/O 性能不满足定义的阈值时通知你的机制,以便高效运行你的虚拟机工作负载。

存储 QoS 能够为你的虚拟硬盘指定每秒输入/输出操作次数 (IOPS) 的最大值。 管理员可以限制存储 I/O,以防止某个租户占用过多的存储资源,这可能影响其他租户。

还可以设置最小 IOPS 值。 当指定虚拟硬盘的 IOPS 小于其最佳性能所需的阈值时,他们将收到通知。

还使用与存储相关的参数更新虚拟机指标基础结构,以允许管理员监视性能和与退款相关的参数。

在规范化 IOPS 方面指定最大值和最小值,其中每 8 KB 的数据计数为 I/O。

一些限制如下所示:

  • 仅适用于虚拟磁盘

  • 差异磁盘不能在不同的卷上具有父虚拟磁盘

  • 副本 - 独立于主站点配置的副本站点的 QoS

  • 不支持共享 VHDX

有关存储服务质量的详细信息,请参阅适用于 Hyper-V 的存储服务质量

NUMA I/O

Windows Server 2012及更高版本支持大型虚拟机,任何大型虚拟机配置 (例如,使用 64 个虚拟处理器运行Microsoft SQL Server的配置) 也需要 I/O 吞吐量的可伸缩性。

Windows Server 2012存储堆栈和 Hyper-V 中首先引入的以下关键改进提供了大型虚拟机的 I/O 可伸缩性需求:

  • 来宾设备和主机存储堆栈之间创建的通信通道数量增加。

  • 一种更高效的 I/O 完成机制,涉及虚拟处理器之间的中断分布,以避免昂贵的进程间中断。

在 Windows Server 2012 中引入的一些注册表项位于 HKLM\System\CurrentControlSet\Enum\VMBUS\{device id}\{instance id}\StorChannel,允许调整通道数。 它们还将处理 I/O 完成的虚拟处理器与应用程序分配的虚拟 CPU 对齐为 I/O 处理器。 注册表设置根据设备的硬件密钥按适配器进行配置。

  • ChannelCount (DWORD) 要使用的通道总数,最多为 16 个。 它默认为上限,即虚拟处理器数/16。

  • ChannelMask (QWORD) 通道的处理器相关性。 如果未设置或设置为 0,则默认为用于正常存储或网络通道的现有通道分布算法。 这可确保存储通道不会与网络通道冲突。

卸载的数据传输集成

VHD 的关键维护任务(例如合并、移动和压缩)取决于复制大量数据。 当前复制数据的方法需要在其他位置进行读写操作,这是一个非常耗时的过程。 它还使用主机上的 CPU 和内存资源,该资源可用于为虚拟机提供服务。

存储区域网络 (SAN) 供应商正致力于提供几乎能瞬间复制大量数据的功能。 此存储旨在允许磁盘上方的系统指定将特定数据集从一个位置移到另一个位置。 此硬件功能称为卸载数据传输。

Windows Server 2012 及更高版本中的 Hyper-V 支持卸载数据传输 (ODX) 操作,以便这些操作可以从来宾操作系统传递到主机硬件。 这可确保工作负荷可以使用已启用 ODX 的存储,就像在非虚拟化环境中运行时一样。 Hyper-V 存储堆栈还会在 VHD 维护操作期间发出 ODX 操作,例如合并磁盘和存储迁移元操作,其中移动大量数据。

取消映射集成

虚拟硬盘文件作为存储卷上的文件存在,它们与其他文件共享可用空间。 由于这些文件的大小往往很大,因此它们消耗的空间可能会迅速增长。 对更多物理存储的需求会影响 IT 硬件预算。 必须尽可能多地优化物理存储的使用。

在Windows Server 2012之前,当应用程序删除虚拟硬盘中的内容时,实际上放弃了内容存储空间时,来宾操作系统和 Hyper-V 主机中的Windows存储堆栈存在限制,以防止此信息与虚拟硬盘和物理存储设备通信。 这阻止了 Hyper-V 存储堆栈优化基于 VHD 的虚拟磁盘文件的空间使用情况。 它还阻止基础存储设备回收以前被删除的数据占用的空间。

从Windows Server 2012开始,Hyper-V 支持取消映射通知,这允许 VHDX 文件更高效地表示其中的数据。 这会导致文件大小较小,它允许基础物理存储设备回收未使用的空间。

只有特定于 Hyper-V 的 SCSI、启发式 IDE 和虚拟光纤通道控制器允许来宾中的 unmap 命令到达主机虚拟存储堆栈。 在虚拟硬盘上,只有格式化为 VHDX 的虚拟磁盘支持从来宾取消映射命令。

出于这些原因,我们建议在不使用虚拟光纤通道磁盘时使用附加到 SCSI 控制器的 VHDX 文件。

其他参考