7.4. 计算调度程序权重

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

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

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

计算调度程序使用候选 Compute 节点的资源可用性的下限值计算每种资源类型的权重规范化:

  • 为资源(minval)提供最低可用性的节点被分配为 '0'。
  • 分配了资源最多可用性的节点(maxval)会被分配 '1'。
  • 在 minval 范围内具有资源可用性的节点使用以下公式分配一个规范化权重计算:

    (node_resource_availability - minval) / (maxval - minval)

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

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

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)) + ...

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

注意

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

表 7.2. 计算调度程序权重

配置选项类型描述

filter_scheduler/weight_classes

字符串

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

  • nova.scheduler.weights.ram.RAMWeigher - 探测上可用的 RAM。
  • nova.scheduler.weights.cpu.CPUWeigher - 探测上可用的 CPU。
  • nova.scheduler.weights.disk.DiskWeigher - Weighs 上可用的磁盘。
  • nova.scheduler.weights.metrics.MetricsWeigher - Weighs Compute 节点的指标。
  • nova.scheduler.weights.affinity.ServerGroup SoftAffinityWeigher - 将 Compute 节点的代理分配到给定实例组中的其他节点。
  • nova.scheduler.weights.affinity.ServerGroup SoftAntiAffinityWeigher - 将 Compute 节点的代理分配到给定实例组中的其他节点。
  • nova.scheduler.weights.compute.BuildFailureWeigher - Weighs Compute 节点通过最近失败的引导尝试次数进行。
  • nova.scheduler.weights.io_ops.IoOpsWeigher - 按工作负载分配 Compute 节点。
  • nova.scheduler.weights.pci.PCIWeigher - 按 PCI 可用性创建 Compute 节点。
  • nova.scheduler.weights.cross_cell.CrossCellWeigher - 根据它们所在的单元,优先选择源单元中的 Compute 节点。
  • nova.scheduler.weights.all_weighers - (默认)使用上述所有权重。

filter_scheduler/ram_weight_multiplier

浮点

使用此参数指定基于可用 RAM 的权重主机使用的倍数。

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

设置为负值,以首选使用较少可用 RAM 的主机,这会在调度到较少使用的主机前填充(堆栈)主机。

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

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

filter_scheduler/disk_weight_multiplier

 浮点

使用此参数指定基于可用磁盘空间的权重主机使用的倍数。

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

设置为负值,以首选使用较少可用磁盘空间的主机,这会在调度到较少使用的主机前填充(堆栈)主机。

绝对值(无论是正还是负)控制磁盘的速度相对于其他权重。

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

filter_scheduler/cpu_weight_multiplier

 浮点

使用此参数指定基于可用 vCPU 的权重主机使用的倍数。

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

设置为负值,以首选使用较少可用 vCPU 的主机,这会在调度到较少使用的主机前填充(堆栈)主机。

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

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

filter_scheduler/io_ops_weight_multiplier

 浮点

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

设置为负值,以首选使用轻量级工作负载的主机,这会在更多主机上分发工作负载。

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

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

Default: -1.0 - 调度程序在更多主机之间分发工作负载。

filter_scheduler/build_failure_weight_multiplier

浮点

使用此参数指定基于最新构建失败的主机使用的倍数。

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

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

默认:1000000.0

filter_scheduler/cross_cell_move_weight_multiplier

浮点

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

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

默认:1000000.0

filter_scheduler/pci_weight_multiplier

正浮动点

使用此参数根据主机上的 PCI 设备数量以及实例请求的 PCI 设备数量来指定用于权重主机的倍数。如果实例请求 PCI 设备,则计算节点的 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

正浮动点

使用此参数指定用于为组软关联性分配主机使用的倍数。

注意

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

$ openstack --os-compute-api-version 2.15 server group create --policy soft-affinity <group_name>

默认:1.0

filter_scheduler/soft_anti_affinity_weight_multiplier

正浮动点

使用此参数指定用于为组 soft-anti-affinity 分配到主机的倍数。

注意

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

$ openstack --os-compute-api-version 2.15 server group create --policy soft-affinity <group_name>

默认: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 空闲时间
  • 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 - 通用 CPU 使用

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

metrics/required

布尔值

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

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

metrics/weight_of_unavailable

浮点

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

Default: -10000.0