VMware 提供高性能插件 (HPP) 来提高 ESXi 主机上的存储设备的性能。

HPP 替换高速设备(例如 NVMe)的 NMP。HPP 是声明 NVMe-oF 目标的默认插件。ESXi 支持没有端到端 NVMeSCSI 到 NVMe 模拟。HPP 仅支持主动/主动和隐式 ALUA 目标。

从 vSphere 7.0 Update 2 开始,HPP 将成为本地 NVMe 和 SCSI 设备的默认插件,但可以将其替换为 NMP。

HPP 支持 vSphere 7.0 Update 2 及更高版本
存储设备 本地 NVMe 和 SCSI

共享 NVMe(仅限主动/主动和隐式 ALUA 目标)

多路径
第二级插件
SCSI-3 永久预留
带软件模拟的 4Kn 设备

路径选择方案

为了支持多路径,HPP 在为 I/O 请求选择物理路径时使用路径选择方案 (PSS)。

可以使用 vSphere Clientesxcli 命令更改默认路径选择机制。

有关在 vSphere Client 中配置路径机制的信息,请参见更改路径选择策略。要使用 esxcli 命令进行配置,请参见 ESXi esxcli HPP 命令

ESXi 支持以下路径选择机制。

固定
在此方案中,为 I/O 请求使用指定的首选路径。如果没有分配首选路径,主机将选择在引导时发现的第一个工作路径。如果首选路径不可用,主机将选择替代的可用路径。首选路径再次可用时,主机将返回到之前定义的首选路径。

FIXED 配置为路径选择机制时,请选择首选路径。

LB-RR(负载均衡 - 循环)
这是 HPP 声明的设备的默认方案。在当前路径上传输指定数量的字节或 I/O 后,该方案将使用循环算法选择路径。
要配置 LB-RR 路径选择机制,请指定以下属性:
  • IOPS 指示路径上要用作设备路径切换条件的 I/O 计数。
  • 字节指示路径上要用作设备路径切换条件的字节计数。
LB-IOPS(负载均衡 - IOPS)
在当前路径上传输指定数量的 I/O(默认值为 1000)后,系统将选择具有最少未完成 I/O 数量的最佳路径。

配置此机制时,请指定 IOPS 参数,以指示路径上要用作设备路径切换条件的 I/O 计数。

LB-BYTES(负载均衡 - 字节)
在当前路径上传输指定数量的字节(默认值为 10 MB)后,系统将选择具有最少未完成字节数量的最佳路径。

要配置此机制,请使用字节参数指示路径上要用作设备路径切换条件的字节计数。

负载均衡 - 延迟 (LB-Latency)
为了实现更好的负载均衡结果,该机制将通过考虑以下路径特性动态选择最佳路径:
  • 延迟评估时间参数指示必须以怎样的时间间隔评估路径延迟(以毫秒为单位)。
  • 每个路径的采样 I/O 参数控制为了计算路径延迟必须在每个路径上发出多少采样 I/O。

HPP 最佳做法

要在高速存储设备上获得最快的吞吐量,请遵循这些建议。

  • 使用支持 HPP 的 vSphere 版本。
  • 将 HPP 用于本地 NVMe 和 SCSI 设备以及 NVMe-oF 设备。
  • 如果使用 NVMe over Fibre Channel 设备,请遵循对光纤通道存储的常规建议。请参见将 ESXi 与光纤通道 SAN 配合使用
  • 如果使用 NVMe-oF,请勿混合使用传输类型来访问同一个命名空间。
  • 使用 NVMe-oF 命名空间时,请确保将活动路径提供给主机。在发现活动路径之前,无法注册命名空间。
  • 配置虚拟机时,可以使用 VMware 准虚拟控制器或添加 NVMe 控制器。这两种类型各有优缺点。要了解哪种方式最适合您的环境,请参见《vSphere 虚拟机管理》文档中的 SCSI、SATA 和 NVMe 存储控制器条件、限制和兼容性
  • 设置延迟敏感阈值。
  • 如果设备的 I/O 工作负载很大一部分由单台虚拟机承担,请考虑将 I/O 分散到多个虚拟磁盘。将磁盘附加到虚拟机中单独的虚拟控制器。

    否则,I/O 吞吐量可能会由于负责在特定虚拟存储控制器上处理 I/O 的 CPU 内核饱和而受到限制。

有关仅支持 NGUID ID 格式的 NVMe 设备的设备标识符信息,请参见具有 NGUID 设备标识符的 NVMe 设备

启用高性能插件和路径选择方案

高性能插件 (HPP) 是声明本地 NVMe 和 SCSI 设备以及 NVMe-oF 目标的默认插件。如有必要,可以将其替换为 NMP。在 vSphere 版本 7.0 Update 1 及更低版本中,NMP 仍为本地 NVMe 和 SCSI 设备的默认插件,但您可以将其替换为 HPP。

使用 esxcli storage core claimrule add 命令在 ESXi 主机上启用 HPP 或 NMP。

要运行 esxcli storage core claimrule add,您可以使用 ESXi Shell 或 vSphere CLI。有关更多信息,请参见《《ESXCLI 入门》》和《《ESXCLI 参考指南》》。

本主题中的示例说明了如何启用 HPP 以及设置路径选择方案 (PSS)。
注: PXE 引导的 ESXi 主机上不支持启用 HPP。

前提条件

设置 VMware NVMe 存储环境。有关详细信息,请参见关于 VMware NVMe 存储

过程

  1. 通过运行 esxcli storage core claimrule add 命令创建 HPP 声明规则。
    使用以下方法之一添加声明规则。
    方法 描述
    基于 NVMe 控制器型号 esxcli storage core claimrule add –-type vendor --nvme-controller-model

    例如,esxcli storage core claimrule add --rule 429 --type vendor --nvme-controller-model "ABCD*" --plugin HPP

    基于 PCI 供应商 ID 和子供应商 ID esxcli storage core claimrule add –-type vendor –-pci-vendor-id –-pci-sub-vendor-id

    例如,esxcli storage core claimrule add --rule 429 --type vendor --pci-vendor-id 8086 --pci-sub-vendor-id 8086 --plugin HPP.

  2. 配置 PSS。
    使用下列方法之一。
    方法 描述
    根据设备 ID 设置 PSS esxcli storage hpp device set

    例如,esxcli storage hpp device set --device=device --pss=FIXED --path=preferred path

    根据供应商/型号设置 PSS --config-string 选项与 esxcli storage core claimrule add 命令一起使用。

    例如,esxcli storage core claimrule add -r 914 -t vendor -V vendor -M model -P HPP --config-string "pss=LB-Latency,latency-eval-time=40000"

  3. 重新引导主机以使更改生效。

设置延迟敏感阈值

在为存储设备使用 HPP 时,设置该设备的延迟敏感阈值,使 I/O 可以绕过 I/O 调度程序。

默认情况下,ESXi 通过 I/O 调度程序传递每个 I/O。但是,使用调度程序可能会创建内部队列,这不是利用高速存储设备的有效方法。

您可以配置延迟敏感阈值并启用直接提交机制,帮助 I/O 绕过调度程序。若启用此机制,则 I/O 会通过 HPP 直接从 PSA 传递到设备驱动程序。

要顺利执行直接提交,观察到的平均 I/O 延迟必须低于您指定的延迟阈值。如果 I/O 延迟超过延迟阈值,系统会停止直接提交,并暂时恢复到使用 I/O 调度程序。当平均 I/O 延迟再次下降至低于延迟阈值时会恢复直接提交。

可以为一系列 HPP 声明的设备设置延迟阈值。使用供应商和型号对、控制器型号或者 PCIe 供应商 ID 和子供应商 ID 对,设置延迟阈值。

过程

  1. 通过运行以下命令,设置设备的延迟敏感阈值:
    esxcli storage core device latencythreshold set -t value in milliseconds

    使用下列选项之一。

    选项 示例
    供应商/型号 为具有指定供应商和型号的所有设备设置延迟敏感阈值参数:esxcli storage core device latencythreshold set -v 'vendor1' -m 'model1' -t 10
    NVMe 控制器型号 为具有指定控制器型号的所有 NVMe 设备设置延迟敏感阈值:esxcli storage core device latencythreshold set -c 'controller_model1' -t 10
    PCIe 供应商/子供应商 ID 为 PCIe 供应商 ID 为 0x8086 和 PCIe 子供应商 ID 为 0x8086 的设备设置延迟敏感阈值。esxcli storage core device latencythreshold set -p '8086' -s '8086' -t 10
  2. 确认延迟阈值已设置:
    esxcli storage core device latencythreshold list
    Device                Latency Sensitive Threshold
    --------------------  ---------------------------
    naa.55cd2e404c1728aa               0 milliseconds
    naa.500056b34036cdfd               0 milliseconds
    naa.55cd2e404c172bd6              50 milliseconds
    
  3. 监控延迟敏感阈值的状态。检查以下条目的 VMkernel 日志:
    • Latency Sensitive Gatekeeper turned on for device 设备. Threshold of XX msec is larger than max completion time of YYY msec
    • Latency Sensitive Gatekeeper turned off for device 设备. Threshold of XX msec is exceeded by command completed in YYY msec

ESXi esxcli HPP 命令

您可以使用 ESXi Shell 或 vSphere CLI 命令配置和监控高性能插件。

有关 esxcli 命令概况信息,请参见《ESXCLI 入门》;有关该命令的使用详细信息,请参见《ESXCLI 参考指南》

命令 描述 选项
esxcli storage hpp path list 列出当前由高性能插件声明的路径。 -d|--device=device 显示特定设备的信息。

-p|--path=path 将输出限制到特定路径。

esxcli storage hpp device list 列出当前受高性能插件控制的设备。 -d|--device=device 显示特定设备。
esxcli storage hpp device set 为 HPP 设备配置设置。 -B|--bytes=long 路径上的最大字节数,超过此值后,将切换该路径。

--cfg-file 使用新设置更新配置文件和运行时。如果设备已由另一个 PSS 声明,则在应用到运行时配置时,请忽略任何错误。

-d|--device=device 要在上面运行的 HPP 设备。使用设备报告的任何 UID。必需。

-I|--iops=long 路径上的最大 IOPS 数,超过此值后,将切换该路径。

-T|--latency-eval-time=long 控制必须以怎样的时间间隔(以毫秒为单位)评估路径的延迟。

-L|--mark-device-local=Bool 将 HPP 设置为是否将设备视为本地设备。

-M|--mark-device-ssd=bool 指定 HPP 是否将设备视为 SSD。

-p|--path=str 要设置为设备首选路径的路径。

-P|--pss=pss_name 要分配给设备的路径选择方案。如果未指定值,系统将选择使用默认值。有关路径选择方案的说明,请参见 VMware 高性能插件和路径选择方案。选项包括:
  • FIXED

    使用 -p|--path=str 子选项设置首选路径。

  • LB-Bytes

    使用 -B|--bytes=long 子选项指定输入。

  • LB-IOPS

    使用 -I|--iops=long 子选项指定输入。

  • LB-Latency

    子选项包括:

    -T|--latency-eval-time=long

    -S|--sampling-ios-per-path=long

  • LB-RR 默认值

    子选项包括:

    -B|--bytes=long

    -I|--iops=long

-S|--sampling-ios-per-path=long 控制为了计算路径延迟必须在每个路径上发出多少采样 I/O。

-U|--use-ano=bool 要在用于在此设备上发出 I/O 的一组活动路径中包含未优化路径,请将该选项设置为 true。否则,请将该选项设置为 false

esxcli storage hpp device usermarkedssd list 列出已由用户标记或取消标记为 SSD 的设备。 -d|--device=device 将输出限制到特定设备。