8.3. 类别元数据

在创建类别时,使用 --property 选项指定类别元数据。类别元数据也称为额外规格。类别元数据决定了实例硬件支持和配额,这会影响实例放置、实例限值和性能。

实例资源使用量

使用下表中的属性键配置实例的 CPU、内存和磁盘 I/O 使用量的限制。

表 8.3. 资源使用量的类别元数据

描述

quota:cpu_shares

指定域的 CPU 时间的比例权重共享。默认为操作系统提供的默认值。计算调度程序相对于同一域中的其他实例设置此属性的权重。例如,配置有 quota:cpu_shares=2048 的实例将 CPU 时间加倍为配置了 quota:cpu_shares=1024 的实例。

quota:cpu_period

指定以微秒为单位强制执行 cpu_quota 的时间期限。在 cpu_period 中,每个 vCPU 无法消耗超过 cpu_quota 的运行时。设置为范围 1000 - 1000000 中的值。设置为 0 以禁用。

quota:cpu_quota

指定每个 cpu_period 中 vCPU 允许的最大带宽(以微秒为单位):

  • 设置为范围 1000 - 18446744073709551 中的值。
  • 设置为 0 以禁用。
  • 设置为负值以允许无限带宽。

您可以使用 cpu_quotacpu_period 来确保所有 vCPU 都以相同的速度运行。例如,您可以使用以下类别来启动可消耗最多 50% 物理 CPU 能力的实例:

$ openstack flavor set cpu_limits_flavor \
  --property quota:cpu_quota=10000 \
  --property quota:cpu_period=20000

实例磁盘调整

使用下表中的属性键调整实例磁盘性能。

注意

Compute 服务对 Compute 服务调配的存储(如临时存储)应用下列服务质量设置。要调整 Block Storage (cinder)卷的性能,还必须为卷类型配置服务质量(QOS)值。如需更多信息,请参阅 存储指南中的使用服务质量规格

表 8.4. 磁盘调整的类别元数据

描述

quota:disk_read_bytes_sec

指定实例可用的最大磁盘读取,以字节/秒为单位。

quota:disk_read_iops_sec

指定实例可用的最大磁盘读取,以 IOPS 为单位。

quota:disk_write_bytes_sec

指定实例可用的最大磁盘写入,以字节/秒为单位。

quota:disk_write_iops_sec

指定实例可用的最大磁盘写入,以 IOPS 为单位。

quota:disk_total_bytes_sec

指定实例可用的最大 I/O 操作,以字节/秒为单位。

quota:disk_total_iops_sec

指定实例可用的最大 I/O 操作,以 IOPS 为单位。

实例网络流量带宽

通过配置 VIF I/O 选项,使用下表中的属性键配置实例网络流量的带宽限制。

注意

配额 :vif 114 属性已弃用。取而代之,您应该使用 Networking (neutron)服务质量(QoS)策略。如需有关 QoS 策略的更多信息,请参阅网络指南中的配置服务质量(QoS)策略。只有在使用 ML2/OVS 机制驱动 NeutronOVSFirewallDriver 设置为 iptables_hybrid 时,才会支持 quota:vif_* 属性。

表 8.5. 带宽限制的类别元数据

描述

quota:vif_inbound_average

(已弃用)指定进入实例的流量所需的平均位率(以 kbps 为单位)。

quota:vif_inbound_burst

(已弃用)以 KB 为单位指定可能以峰值速度突发的最大传入流量数量。

quota:vif_inbound_peak

(已弃用)指定实例可以接收传入流量的最大速率,以 kbps 为单位。

quota:vif_outbound_average

(已弃用)指定从实例传出的流量所需的平均位率(以 kbps 为单位)。

quota:vif_outbound_burst

(已弃用)以 KB 为单位指定可突发的最大传出流量数量。

quota:vif_outbound_peak

(已弃用)指定实例可以发送传出流量的最大速率,以 kbps 为单位。

硬件视频 RAM

使用下表中的属性键配置用于视频设备的实例 RAM 的限制。

表 8.6. 视频设备的类别元数据

描述

hw_video:ram_max_mb

以 MB 为单位指定视频设备使用的最大 RAM。与 hw_video_ram 镜像属性一起使用。hw_video_ram 必须小于或等于 hw_video:ram_max_mb

watchdog 行为

使用下表中的属性键,在实例上启用虚拟硬件 watchdog 设备。

表 8.7. watchdog 行为的类别元数据

描述

hw:watchdog_action

指定以启用虚拟硬件 watchdog 设备并设置其行为。如果实例挂起或失败,watchdog 设备会执行配置的操作。watchdog 使用 i6300esb 设备,它模拟 PCI Intel 6300ESB。如果没有指定 hw:watchdog_action,则禁用 watchdog。

设置为以下有效值之一:

  • 禁用 :(默认)设备不会被附加。
  • 重置 :强制实例重置。
  • poweroff: 强制实例关闭。
  • 暂停: 暂停实例。
  • none :启用 watchdog,但当实例挂起或失败时不做任何操作。 

    注意

    使用特定镜像的属性设置的 watchdog 行为会覆盖您使用类别设置的行为。

随机数生成器(RNG)

使用下表中的属性键在实例上启用 RNG 设备。

表 8.8. RNG 的类别元数据

描述

hw_rng:allowed

设置为 False,以禁用通过其镜像属性添加到实例的 RNG 设备。

Default: True

hw_rng:rate_bytes

指定实例可在每个期间从主机的熵中读取的最大字节数。

hw_rng:rate_period

以毫秒为单位指定读取周期的持续时间。

虚拟性能监控单元(vPMU)

使用下表中的属性键为实例启用 vPMU。

表 8.9. vPMU 的类别元数据

描述

hw:pmu

设置为 True,为实例启用 vPMU。

perf 等工具使用实例上的 vPMU 工具,为配置集和监控实例性能提供更准确的信息。对于实时工作负载,vPMU 的模拟可能会引入额外的延迟。如果不需要提供的遥测,请设置 hw:pmu=False

实例 CPU 拓扑

使用下表中的属性键来定义实例中处理器的拓扑。

表 8.10. CPU 拓扑的类别元数据

描述

hw:cpu_sockets

指定实例的首选插槽数。

默认:请求的 vCPU 数量

hw:cpu_cores

指定实例每个插槽的首选内核数。

默认: 1

hw:cpu_threads

指定实例每个内核的首选线程数量。

默认: 1

hw:cpu_max_sockets

使用镜像属性指定用户可以为其实例选择的最大插槽数。

示例: hw:cpu_max_sockets=2

hw:cpu_max_cores

使用镜像属性指定用户可以为其实例选择的最大内核数。

hw:cpu_max_threads

使用镜像属性指定用户可以为其实例选择的最大线程数量。

串行端口

使用下表中的属性键配置每个实例的串行端口数。

表 8.11. 串行端口的类别元数据

描述

hw:serial_port_count

每个实例的最大串行端口。

CPU 固定策略

默认情况下,实例虚拟 CPU (vCPU)是带有一个内核的插槽,以及一个线程。您可以使用属性创建将实例 vCPU 固定到主机的物理 CPU 内核(pCPU)的类别。您还可以在并发多线程(SMT)架构中配置硬件 CPU 线程行为,其中一个或多个内核有线程同级。

使用下表中的属性键来定义实例的 CPU 固定策略。

表 8.12. CPU 固定的类别元数据

描述

hw:cpu_policy

指定要使用的 CPU 策略。设置为以下有效值之一:

  • 共享 :(默认)主机 pCPU 之间实例 vCPU 浮点数。
  • 专用 :在实例 vCPU 中到一组主机 pCPU。这会创建一个与实例固定 CPU 拓扑匹配的实例 CPU 拓扑。这个选项表示过量使用比率为 1.0。

hw:cpu_thread_policy

指定 hw:cpu_policy=dedicated 时要使用的 CPU 线程策略。设置为以下有效值之一:

  • 首选 :(默认)主机可能或没有 SMT 架构。如果存在 SMT 架构,计算调度程序会首选线程同级。
  • 隔离 :主机不能具有 SMT 架构,或者必须模拟非 SMT 架构。此策略通过请求没有报告 HW_CPU_HYPERTHREADING 特征的主机来确保计算调度程序将实例放置在没有 SMT 的主机上。也可以使用以下属性明确请求此特征:

    --property trait:HW_CPU_HYPERTHREADING=forbidden

    如果主机没有 SMT 架构,计算服务会将每个 vCPU 放置到不同的内核中。如果主机具有 SMT 架构,则行为由 [workarounds]/disable_fallback_pcpu_query 参数的配置决定:

    • true :不使用 SMT 架构的主机,调度失败。
    • false :计算服务将每个 vCPU 放置到不同的物理内核中。Compute 服务不会将来自其他实例的 vCPU 放置到同一内核中。因此,每个使用的内核中有一个线程的同级都保证不可用。
  • require :主机必须具有 SMT 架构。此策略通过请求报告 HW_CPU_HYPERTHREADING 特征的主机来确保计算调度程序将实例放置到具有 SMT 的主机上。也可以使用以下属性明确请求此特征:

    --property trait:HW_CPU_HYPERTHREADING=required

    Compute 服务在线程同级时分配每个 vCPU。如果主机没有 SMT 架构,则不会使用它。如果主机具有 SMT 架构,但没有足够内核,且没有足够的空闲线程的内核可用,则调度会失败。

实例 PCI NUMA 关联性策略

使用下表中的属性键创建类别,为 PCI 透传设备和 SR-IOV 接口指定 NUMA 关联性策略。

表 8.13. PCI NUMA 关联性策略的类别元数据

描述

hw:pci_numa_affinity_policy

指定 PCI 透传设备和 SR-IOV 接口的 NUMA 关联性策略。设置为以下有效值之一:

  • 必需 :计算服务会创建一个实例,它仅在实例的至少一个 NUMA 节点与 PCI 设备具有关联性时才请求 PCI 设备。这个选项提供最佳性能。
  • preferred :计算服务会尝试根据 NUMA 关联性选择 PCI 设备。如果无法做到这一点,则计算服务会将实例调度到没有 PCI 设备关联性的 NUMA 节点上。
  • :(默认)计算服务在以下情况下创建请求 PCI 设备的实例:

    • PCI 设备与至少一个 NUMA 节点具有关联性。
    • PCI 设备不提供有关其 NUMA 关联性的信息。

实例 NUMA 拓扑

您可以使用属性创建类别,为实例 vCPU 线程定义主机 NUMA 放置,以及从主机 NUMA 节点分配实例 vCPU 和内存。

为实例定义 NUMA 拓扑可提高实例操作系统的性能,用于内存和 vCPU 分配大于 Compute 主机中的 NUMA 节点大小。

计算调度程序使用这些属性来确定适合实例的主机。例如,一个云用户使用以下类别启动实例:

$ openstack flavor set numa_top_flavor \
  --property hw:numa_nodes=2 \
  --property hw:numa_cpus.0=0,1,2,3,4,5 \
  --property hw:numa_cpus.1=6,7 \
  --property hw:numa_mem.0=3072 \
  --property hw:numa_mem.1=1024

计算调度程序搜索有两个 NUMA 节点的主机,一个有 3GB RAM,另一个运行 6 个 CPU,另一个具有 1GB RAM 和两个 CPU。如果主机只有一个 NUMA 节点,其能够运行 8 个 CPU 和 4GB RAM,则计算调度程序不会认为它是一个有效的匹配项。

注意

由类别定义的 NUMA 拓扑无法被镜像定义的 NUMA 拓扑覆盖。如果镜像 NUMA 拓扑与类别 NUMA 拓扑冲突,计算服务会引发 ImageNUMATopologyForbidden 错误。

小心

您不能使用此功能将实例限制到特定的主机 CPU 或 NUMA 节点。只有在完成广泛的测试和性能测量后,才使用此功能。您可以使用 hw:pci_numa_affinity_policy 属性替代。

使用下表中的属性键来定义实例 NUMA 拓扑。

表 8.14. NUMA 拓扑的类别元数据

描述

hw:numa_nodes

指定限制实例 vCPU 线程执行的主机 NUMA 节点数量。如果没有指定,vCPU 线程可以在任意数量的可用主机 NUMA 节点上运行。

hw:numa_cpus.N

以逗号分隔的实例 vCPU 列表,用于映射到实例 NUMA 节点 N。如果没有指定此密钥,则 vCPU 会均匀地划分到可用的 NUMA 节点。

N 从 0 开始。请谨慎使用 sVirtN 值,只有在您至少有两个 NUMA 节点时才使用。

只有在设置了 hw:numa_nodes 时才有效,只有在实例的 NUMA 节点具有非对称分配 CPU 和 RAM 时,才需要它,这对某些 NFV 工作负载非常重要。

hw:numa_mem.N

映射到实例 NUMA 节点 N 的 MB 实例内存量。如果没有指定此密钥,内存将平均划分到可用的 NUMA 节点。

N 从 0 开始。请谨慎使用 sVirtN 值,只有在您至少有两个 NUMA 节点时才使用。

只有在设置了 hw:numa_nodes 时才有效,只有在实例的 NUMA 节点具有非对称分配 CPU 和 RAM 时,才需要它,这对某些 NFV 工作负载非常重要。

警告

如果 hw:numa_cpus.Nhw:numa_mem.N 的组合分别大于可用的 CPU 或内存量,则计算服务会引发异常。

实例内存加密

使用下表中的属性键启用实例内存的加密。

表 8.15. 内存加密的类别元数据

描述

hw:mem_encryption

设置为 True,为实例请求内存加密。如需更多信息,请参阅配置 AMD SEV Compute 节点,以便为实例提供内存加密

CPU 实时策略

使用下表中的属性键来定义实例中处理器的实时策略。

注意
  • 虽然大多数实例 vCPU 都可以使用实时策略运行,但必须至少将一个 vCPU 标记为非实时客户机进程,以用于非实时客户机处理和模拟器开销。
  • 要使用此额外规格,您必须启用固定 CPU。

表 8.16. CPU 实时策略的类别元数据

描述

hw:cpu_realtime

设置为 yes,以创建为实例 vCPU 分配实时策略的类别。

默认: no

hw:cpu_realtime_mask

指定要为其分配实时策略的 vCPU。您必须使用符号符号(^)添加掩码值。以下示例表示除 vCPU 0 和 1 以外的所有 vCPU 都有一个实时策略:

$ openstack flavor set <flavor> \
 --property hw:cpu_realtime="yes" \
 --property hw:cpu_realtime_mask=^0-1
注意

如果在镜像上设置 hw_cpu_realtime_mask 属性,则优先于类别上设置的 hw:cpu_realtime_mask 属性。

模拟器线程策略

您可以为实例分配 pCPU,以用于仿真程序线程。模拟器线程是与实例不直接相关的仿真程序进程。实时工作负载需要专用仿真程序线程 pCPU。要使用仿真程序线程策略,您必须通过设置以下属性来启用固定 CPU:

--property hw:cpu_policy=dedicated

使用下表中的属性键来定义实例的仿真程序线程策略。

表 8.17. 模拟器线程策略的类别元数据

描述

hw:emulator_threads_policy

指定用于实例的仿真程序线程策略。设置为以下有效值之一:

  • 共享NovaComputeCpuSharedSet heat 参数中定义的 pCPU 的仿真程序线程浮点数。如果没有配置 NovaComputeCpuSharedSet,则与实例关联的固定 CPU 中的仿真程序线程浮点数。
  • 隔离 :为仿真程序线程为每个实例保留额外的专用 pCPU。请谨慎使用此策略,因为它是禁止大量资源。
  • unset :(默认)仿真程序线程策略没有被启用,与实例关联的固定 CPU 中的仿真程序线程浮点数。

实例内存页面大小

使用下表中的属性键创建具有显式内存页面大小的实例。

表 8.18. 内存页面大小的类别元数据

描述

hw:mem_page_size

指定用于支持实例的巨页大小。使用此选项会创建一个 1 个 NUMA 节点的隐式 NUMA 拓扑,除非由 hw:numa_nodes 指定。设置为以下有效值之一:

  • large :选择大于主机上支持的最小页大小的页大小(在 x86_64 上可以是 2 MB 或 1 GB)。
  • Small :选择主机上支持的最小页面大小。在 x86_64 系统中,这是 4 kB (普通页)。
  • any :选择最大可用的巨页大小,具体由 libvirt 驱动程序决定。
  • <pagesize>:如果工作负载具有特定要求,明确设置页的大小。对页大小(以 KB 为单位)或任何标准后缀使用整数值。例如: 4KB2MB20481GB
  • unset: (默认)大页不用于备份实例,且不会生成隐式 NUMA 拓扑。

PCI 透传

使用下表中的属性键将物理 PCI 设备(如图形卡或网络设备)附加到实例。有关使用 PCI 透传的更多信息,请参阅配置 PCI 透传

表 8.19. PCI 透传的类别元数据

描述

pci_passthrough:alias

使用以下格式指定要分配给实例的 PCI 设备:

<alias>:<count>
  • < alias> 替换为与特定 PCI 设备类对应的别名。
  • <count > 替换为分配给实例的类型 &lt ;alias& gt; 的 PCI 设备数。

hypervisor 签名

使用下表中的属性键从实例隐藏 hypervisor 签名。

表 8.20. 用于隐藏 hypervisor 签名的类别元数据

描述

hide_hypervisor_id

设置为 True,从实例隐藏虚拟机监控程序签名,以允许所有驱动程序加载并在实例上工作。

实例资源特征

每个资源供应商都有一组特征。特征是资源提供程序的限定方面,如存储类型或 Intel CPU 指令集扩展名。一个实例可以指定其所需的特征。

您可以指定的特征在 os-traits 库中定义。特征示例包括:

  • COMPUTE_TRUSTED_CERTS
  • COMPUTE_NET_ATTACH_INTERFACE_WITH_TAG
  • COMPUTE_IMAGE_TYPE_RAW
  • HW_CPU_X86_AVX
  • HW_CPU_X86_AVX512VL
  • HW_CPU_X86_AVX512CD

有关如何使用 os-traits 库的详情,请参考 https://docs.openstack.org/os-traits/latest/user/index.html

使用下表中的属性键来定义实例的资源特征。

表 8.21. 资源特征的类别元数据

描述

trait:<trait_name>

指定 Compute 节点特征。将特征设置为以下有效值之一:

  • 必需 :选择托管实例的 Compute 节点必须具有特征。
  • Forbid id:选择 Compute 节点来托管实例不能具有特征。

例如:

$ openstack flavor set --property trait:HW_CPU_X86_AVX512BW=required avx512-flavor

实例裸机资源类

使用下表中的属性键为实例请求裸机资源类。

表 8.22. 裸机资源类的类别元数据

描述

resources:<resource_class_name>

使用此属性指定标准裸机资源类来覆盖值,或者指定实例所需的自定义裸机资源类。

您可以覆盖的标准资源类有MEMORY_MBDISK_GB为防止计算调度程序使用裸机类别属性来调度实例,请将标准资源类的值设为 0

自定义资源类的名称必须以 CUSTOM_ 开头。要确定与 Bare Metal 服务节点的资源类对应的自定义资源类的名称,请将资源类转换为大写,请将所有 punctuation 替换为下划线,并使用 CUSTOM_ 前缀。

例如,要将实例调度到具有 --resource-class baremetal.SMALL 的节点上,请创建以下类型:

$ openstack flavor set \
 --property resources:CUSTOM_BAREMETAL_SMALL=1 \
 --property resources:VCPU=0 --property resources:MEMORY_MB=0 \
 --property resources:DISK_GB=0 compute-small