8.4. 计算调度程序权重


每个 Compute 节点都有一个权重,调度程序可以使用它来优先调度实例。在计算调度程序应用过滤器后,它会从剩余的候选 Compute 节点选择具有最大权重的 Compute 节点。

计算调度程序通过执行以下任务来确定每个 Compute 节点的权重:

  1. 调度程序将每个权重规范化为 0.0 到 1.0 之间的值。
  2. 调度程序将规范化权重乘以 weigher multiplier。

计算调度程序通过使用在 candidate Compute 节点上资源可用性的 lower 和 upper 值来计算每种资源类型的权重规范化:

  • 资源最低可用性(minval)的节点被分配为 '0'。
  • 资源可用性最高的节点(最大)将被分配 '1'。
  • 在 minval - maxval 范围内资源可用性的节点分配了一个规范化的权重,使用以下公式计算:

    (node_resource_availability - minval) / (maxval - minval)
    Copy to Clipboard Toggle word wrap

如果所有 Compute 节点都有相同的资源可用性,则它们都规范化为 0。

例如,调度程序计算 10 个 Compute 节点间可用 vCPU 的规范化权重,每个节点都有不同数量的可用 vCPU,如下所示:

Expand

Compute 节点

1

2

3

4

5

6

7

8

9

10

没有 vCPU

5

5

10

10

15

20

20

15

10

5

规范化权重

0

0

0.33

0.33

0.67

1

1

0.67

0.33

0

计算调度程序使用以下公式来计算 Compute 节点的权重:

(w1_multiplier * norm(w1)) + (w2_multiplier * norm(w2)) + ...
Copy to Clipboard Toggle word wrap

下表描述了权重的可用配置选项。

注意

可以使用聚合元数据键,在主机聚合上设置权重,其名称与下表中详述的选项相同。如果在主机聚合上设置,主机聚合值将具有优先权。

Expand
表 8.2. 计算调度程序权重
配置选项类型描述

filter_scheduler/weight_classes

字符串

使用此参数配置以下哪些属性来计算每个 Compute 节点的权重:

  • nova.scheduler.weights.ram.RAMWeigher - 邻居计算节点上可用的 RAM。
  • nova.scheduler.weights.cpu.CPUWeigher - 邻居计算节点上可用的 CPU。
  • nova.scheduler.weights.disk.DiskWeigher - 权衡 Compute 节点上的可用磁盘。
  • nova.scheduler.weights.metrics.MetricsWeigher - 邻居 Compute 节点的指标。
  • nova.scheduler.weights.affinity.ServerGroupSoftAffinityWeigher - 将 Compute 节点的几率增加到给定实例组中的其他节点。
  • nova.scheduler.weights.affinity.ServerGroupSoftAntiAffinityWeigher - 将 Compute 节点的几率增加到给定实例组中的其他节点。
  • nova.scheduler.weights.compute.BuildFailureWeigher - Weighs Compute 节点按最近失败的引导尝试次数。
  • nova.scheduler.weights.io_ops.IoOpsWeigher - 根据工作复制为 Compute 节点加权重。
  • nova.scheduler.weights.pci.PCIWeigher - Weighs Compute 节点通过其 PCI 可用性。
  • nova.scheduler.weights.cross_cell.CrossCellWeigher - Weighs Compute 节点基于它们所在的单元,在移动实例时优先选择源单元格中的计算节点。
  • nova.scheduler.weights.all_weighers -(Default)使用以上所有 weighers。

filter_scheduler/ram_weight_multiplier

浮点

使用此参数根据可用 RAM 指定用于 weigh 主机的倍数。

设置为正值,以首选具有更多可用 RAM 的主机,这会将实例分散到多个主机上。

设置为负值,以首选首选具有较少可用 RAM 的主机,这会尽可能地填满(堆栈)主机,然后再调度到较用的主机。

绝对值(无论是正还是负)控制 RAM weigher 相对于其他 Weighers 的强度量。

Default: 1.0 - 调度程序均匀地将实例分散到所有主机中。

filter_scheduler/disk_weight_multiplier

 浮点

使用此参数指定根据可用磁盘空间的 weigh 主机所使用的倍数。

设置为正值,以首选具有更多可用磁盘空间的主机,这会将实例分散到多个主机上。

设置为负值,以首选首选具有较少可用磁盘空间的主机,这会尽可能地填满(堆栈)主机,然后再调度到较用的主机。

绝对值(无论是正还是负)控制磁盘 weigher 相对于其他 Weighers 的强度量。

Default: 1.0 - 调度程序均匀地将实例分散到所有主机中。

filter_scheduler/cpu_weight_multiplier

 浮点

使用此参数根据可用的 vCPU 指定用于 weigh 主机的倍数。

设置为正值,以首选具有更多可用 vCPU 的主机,这会将实例分散到多个主机上。

设置为负值,以首选首选具有较少可用 vCPU 的主机,这会尽可能地填满(堆栈)主机,然后再调度到较用的主机。

绝对值(无论是正还是负数)控制与其它 Weighers 相对的 vCPU 强度。

Default: 1.0 - 调度程序均匀地将实例分散到所有主机中。

filter_scheduler/io_ops_weight_multiplier

 浮点

使用此参数指定用于基于主机工作负载的主机的倍数。

设置为负值,以首选具有较轻工作负载的主机,这会将工作负载分发到更多主机上。

设置为正值,以首选具有繁重工作负载的主机,后者将实例调度到已经忙碌的主机上。

绝对值(无论是正还是负)控制 I/O 操作相对于其他 Weighers 的强度量。

default: -1.0 - 调度程序将工作负载分发到更多主机上。

filter_scheduler/build_failure_weight_multiplier

浮点

根据最近的构建失败,使用此参数指定用于 weigh 主机的数量。

设置为正值,以增加主机最近报告的构建故障的意义。然后,选择构建失败的主机不太可能被选择。

设置为 0,以通过最近失败次数禁用计算主机。

默认: 1000000.0

filter_scheduler/cross_cell_move_weight_multiplier

浮点

使用此参数指定在跨单元移动期间用于权衡主机的倍数。此选项决定了在主机上放置了多少权重,它在移动实例时在同一源单元内。默认情况下,调度程序在迁移实例时首选同一源单元中的主机。

设置为正值,以首选实例当前运行的同一单元中的主机。设置为负值,以首选位于实例当前运行的不同单元中的主机。

默认: 1000000.0

filter_scheduler/pci_weight_multiplier

正浮动点

使用此参数根据主机上的 PCI 设备数和实例请求的 PCI 设备数量指定用于 weigh 主机的数量。如果实例请求 PCI 设备,则 Compute 节点分配的 PCI 设备越高,分配给 Compute 节点的权重越高。

例如,如果有三个主机可用,一个具有单个 PCI 设备,一个具有多个 PCI 设备,另一个没有 PCI 设备,则计算调度程序会根据实例需求优先选择这些主机。如果实例请求一个 PCI 设备,调度程序应首选第一个主机,如果实例需要多个 PCI 设备,则调度程序应首选第一个主机,如果实例不请求 PCI 设备,则调度程序应首选第三个主机。

配置这个选项,以防止非 PCI 实例在带有 PCI 设备的主机上占用资源。

默认:1.0

filter_scheduler/host_subset_size

整数

使用此参数指定过滤的主机子集的大小,以选择主机。必须将这个选项设置为至少 1。1 代表选择由权重函数返回的第一个主机。调度程序忽略小于 1 的任何值,并使用 1。

设置为大于 1 的值,以防止多个调度程序进程处理类似的请求选择同一主机,从而造成潜在的竞争条件。通过从最适合请求的 N 主机中随机选择主机,会减少冲突的可能性。但是,您设置这个值越高,所选主机可能是给定请求的最佳选择。

默认: 1

filter_scheduler/soft_affinity_weight_multiplier

正浮动点

使用此参数指定用于 weigh 主机进行组 soft-affinity 的倍数。

注意

创建使用此策略的组时,需要指定 microversion:

$ openstack --os-compute-api-version 2.15 server group create --policy soft-affinity <group_name>
Copy to Clipboard Toggle word wrap

默认:1.0

filter_scheduler/soft_anti_affinity_weight_multiplier

正浮动点

使用此参数指定用于 weigh 主机用于组 soft-anti-affinity 的倍数。

注意

创建使用此策略的组时,需要指定 microversion:

$ openstack --os-compute-api-version 2.15 server group create --policy soft-affinity <group_name>
Copy to Clipboard Toggle word wrap

默认:1.0

metrics/weight_multiplier

浮点

使用此参数指定用于权重指标的倍数。默认情况下,weight_multiplier=1.0,这会将实例分散到可能的主机上。

设置为大于 1.0 的数字,以增加指标对总权重的影响。

设置为 0.0 到 1.0 之间的数字,以减少指标对总权重的影响。

设置为 0.0 以忽略指标值并返回 weight_of_unavailable 选项的值。

设置为负数,以排列主机具有较低指标和主机中的堆栈实例的优先级。

默认:1.0

metrics/weight_setting

以逗号分隔的 metric=ratio 对列表

使用此参数指定用于权重的指标,以及计算每个指标的权重的比率。有效的指标名称:

  • cpu.frequency - CPU 频率
  • cpu.user.time - CPU 用户模式时间
  • cpu.kernel.time - CPU 内核时间
  • cpu.idle.time - CPU idle time
  • cpu.iowait.time - CPU I/O 等待时间
  • cpu.user.percent - CPU 用户模式百分比
  • cpu.kernel.percent - CPU 内核百分比
  • cpu.idle.percent - CPU 空闲百分比
  • cpu.iowait.percent - CPU I/O 等待百分比
  • cpu.percent - Generic CPU 使用

示例: weight_setting=cpu.user.time=1.0

metrics/required

布尔值

使用此参数指定如何处理配置的 metrics/weight_setting 不可用的指标:

  • 需要 true- Metrics。如果指标不可用,则引发异常。为避免异常,请在 NovaSchedulerEnabledFilters 中使用 MetricsFilter 过滤器。
  • False - 不可用的指标在 weighing 进程中被视为一个负因素。使用 weight_of_unavailable 配置选项设置返回的值。

metrics/weight_of_unavailable

浮点

如果任何 metrics/weight_setting 指标不可用时,使用此参数指定要使用的权重,并且 metrics/required=False

默认: -10000.0

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat