7.4. Compute スケジューラーの重み

それぞれのコンピュートノードは重みを持ち、スケジューラーはこれを使用してインスタンスのスケジューリングの優先度を決定します。フィルターを適用した後、Compute スケジューラーは残った候補のコンピュートノードから最大の重みを持つコンピュートノードを選択します。

Compute スケジューラーは、以下のタスクを実行することにより、各コンピュートノードの重みを決定します。

  1. スケジューラーは、各重みを 0.0 から 1.0 までの値に正規化します。
  2. スケジューラーは、正規化された重みを重み付け関数の乗数で乗算します。

Compute スケジューラーは、候補のコンピュートノード全体でリソースの可用性の低い値および高い値を使用して、各リソース種別の重みの正規化を計算します。

  • 最も低いリソース可用性 (minval) を持つノードには、0 が割り当てられます。
  • 最も高いリソース可用性 (maxval) を持つノードには 1 が割り当てられます。
  • minval と maxval 内の範囲のリソース可用性を持つノードには、以下の式を使用して正規化された重みが割り当てられます。

    (node_resource_availability - minval) / (maxval - minval)

すべてのコンピュートノードが同じリソース可用性を持つ場合、それらはすべて 0 に正規化されます。

たとえば、スケジューラーは、利用可能な仮想 CPU の数がそれぞれ異なる 10 個のコンピュートノードに関して、利用可能な仮想 CPU の正規化された重みを以下のように計算します。

コンピュートノード

1

2

3

4

5

6

7

8

9

10

仮想 CPU の数

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 Compute スケジューラーの重み

設定オプション説明

filter_scheduler/weight_classes

String

このパラメーターを使用して、各コンピュートノードの重みを計算するのに以下の属性のどれを使用するかを設定します。

  • nova.scheduler.weights.ram.RAMWeigher: コンピュートノードで利用可能な RAM を重み付けします。
  • nova.scheduler.weights.cpu.CPUWeigher: コンピュートノードで利用可能な CPU の数を重み付けします。
  • nova.scheduler.weights.disk.DiskWeigher: コンピュートノードで利用可能なディスクを重み付けします。
  • nova.scheduler.weights.metrics.MetricsWeigher: コンピュートノードのメトリックを重み付けします。
  • nova.scheduler.weights.affinity.ServerGroupSoftAffinityWeigher: 指定したインスタンスグループの他のノードとコンピュートノードの近接性を重み付けします。
  • nova.scheduler.weights.affinity.ServerGroupSoftAntiAffinityWeigher: 指定したインスタンスグループの他のノードとコンピュートノードの近接性を重み付けします。
  • nova.scheduler.weights.compute.BuildFailureWeigher: 直近ブート試行の失敗回数でコンピュートノードを重み付けします。
  • nova.scheduler.weights.io_ops.IoOpsWeigher: ワークロードでコンピュートノードを重み付けします。
  • nova.scheduler.weights.pci.PCIWeigher: PCI の可用性でコンピュートノードを重み付けします。
  • nova.scheduler.weights.cross_cell.CrossCellWeigher: 置かれているセルに基づいてコンピュートノードを重み付けします。インスタンスを移動する際に、移行元セル内にあるコンピュートノードを優先します。
  • nova.scheduler.weights.all_weighers: (デフォルト) 上記の重み付け関数をすべて使用します。

filter_scheduler/ram_weight_multiplier

浮動小数点

このパラメーターを使用して、利用可能な RAM 容量に基づいてホストを重み付けするのに使用する重みの乗数を指定します。

利用可能な RAM 容量がより大きいホストを優先するには、正の値に設定します。この場合、インスタンスは多くのホストに分散されます。

利用可能な RAM 容量がより小さいホストを優先するには、負の値に設定します。この場合、可能な限り多くのインスタンスをホストに分担 (スタック) させた後に、使用率が低いホストをスケジューリングします。

正または負の絶対値で、他の重み付け関数と比べて{b> <b}RAM の重み付け関数をどれだけ優先するかを指定します。

デフォルトは 1.0 で、スケジューラーはインスタンスをすべてのホストに均等に分散します。

filter_scheduler/disk_weight_multiplier

 浮動小数点

このパラメーターを使用して、利用可能なディスク容量に基づいてホストを重み付けするのに使用する重みの乗数を指定します。

利用可能なディスク容量がより大きいホストを優先するには、正の値に設定します。この場合、インスタンスは多くのホストに分散されます。

利用可能なディスク容量がより小さいホストを優先するには、負の値に設定します。この場合、可能な限り多くのインスタンスをホストに分担 (スタック) させた後に、使用率が低いホストをスケジューリングします。

正または負の絶対値で、他の重み付け関数と比べてディスクの重み付け関数をどれだけ優先するかを指定します。

デフォルトは 1.0 で、スケジューラーはインスタンスをすべてのホストに均等に分散します。

filter_scheduler/cpu_weight_multiplier

 浮動小数点

このパラメーターを使用して、利用可能な仮想 CPU の数に基づいてホストを重み付けするのに使用する重みの乗数を指定します。

利用可能な仮想 CPU の数がより多いホストを優先するには、正の値に設定します。この場合、インスタンスは多くのホストに分散されます。

利用可能な仮想 CPU の数がより少ないホストを優先するには、負の値に設定します。この場合、可能な限り多くのインスタンスをホストに分担 (スタック) させた後に、使用率が低いホストをスケジューリングします。

正または負の絶対値で、他の重み付け関数と比べて仮想 CPU の重み付け関数をどれだけ優先するかを指定します。

デフォルトは 1.0 で、スケジューラーはインスタンスをすべてのホストに均等に分散します。

filter_scheduler/io_ops_weight_multiplier

 浮動小数点

このパラメーターを使用して、負荷に基づいてホストを重み付けするのに使用する重みの乗数を指定します。

負荷がより軽いホストを優先するには、負の値に設定します。この場合、負荷はより多くのホストに分散されます。

負荷がより重いホストを優先するには、正の値に設定します。この場合、インスタンスはすでにビジー状態にあるホストにスケジューリングされます。

正または負の絶対値で、他の重み付け関数と比べて I/O 操作の重み付け関数をどれだけ優先するかを指定します。

デフォルトは -1.0 で、スケジューラーは負荷をより多くのホストに分散します。

filter_scheduler/build_failure_weight_multiplier

浮動小数点

このパラメーターを使用して、直近のビルド失敗回数に基づいてホストを重み付けするのに使用する重みの乗数を指定します。

ホストから報告される直近のビルド失敗回数をより重要視するには、正の値に設定します。直近ビルドに失敗したホストは、選択されにくくなります。

直近の失敗回数でコンピュートホストを重み付けするのを無効にするには、0 に設定します。

デフォルト: 1000000.0

filter_scheduler/cross_cell_move_weight_multiplier

浮動小数点

このパラメーターを使用して、セルを越えて移動する際にホストを重み付けするのに使用する重みの乗数を指定します。このオプションは、インスタンスを移動する際に、同じ移動元セル内にあるホストに加える重みを決定します。インスタンスを移行する場合、デフォルトではスケジューラーは同じ移行元セル内にあるホストを優先します。

現在インスタンスを実行中のセル内にあるホストを優先するには、正の値に設定します。現在インスタンスを実行中のセルとは別のセルにあるホストを優先するには、負の値に設定します。

デフォルト: 1000000.0

filter_scheduler/pci_weight_multiplier

正の浮動小数点

このパラメーターを使用して、ホスト上の PCI デバイスの数とインスタンスが要求する PCI デバイスの数に基づいてホストを重み付けするのに使用する重みの乗数を指定します。インスタンスが PCI デバイスを要求する場合、より多くの PCI デバイスを持つコンピュートノードにより高い重みが割り当てられます。

たとえば、ホストが 3 台利用可能で、PCI デバイスが 1 つのホストが 1 台、複数の PCI デバイスがあるホストが 1 台、PCI デバイスがないホストが 1 台の場合には、Compute スケジューラーはインスタンスの需要に基づいてこれらのホストの優先順位付けを行います。スケジューラーは、インスタンスが PCI デバイスを 1 つ要求している場合には 1 番目のホストを、複数の PCI デバイスを要求している場合には 2 番目のホストを、PCI デバイスを要求していない場合には 3 番目のホストを、それぞれ優先するはずです。

このオプションを設定して、PCI を要求しないインスタンスが PCI デバイスを持つホストのリソースを占有するのを防ぎます。

デフォルト: 1.0

filter_scheduler/host_subset_size

Integer

このパラメーターを使用して、ホストを選択するサブセット (絞り込まれたホストのサブセット) のサイズを指定します。このオプションを 1 以上に設定する必要があります。値を 1 に指定した場合には、重み付け関数によって最初に返されるホストが選択されます。スケジューラーは 1 未満の値を無視し、代わりに 1 を使用します。

類似の要求を処理する複数のスケジューラープロセスが同じホストを選択して競合状態が生じるのを防ぐには、1 より大きい値に設定します。要求に最も適した N 台のホストからホストを無作為に選択することで、競合の可能性が低減されます。ただし、この値を高く設定すると、選択されるホストが特定の要求に対して最適ではない可能性が高くなります。

デフォルト: 1

filter_scheduler/soft_affinity_weight_multiplier

正の浮動小数点

このパラメーターを使用して、グループのソフトアフィニティーのホストを重み付けするのに使用する重みの乗数を指定します。

注記

このポリシーでグループを作成する場合は、マイクロバージョンを指定する必要があります。

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

デフォルト: 1.0

filter_scheduler/soft_anti_affinity_weight_multiplier

正の浮動小数点

このパラメーターを使用して、グループのソフト非アフィニティーのホストを重み付けするのに使用する重みの乗数を指定します。

注記

このポリシーでグループを作成する場合は、マイクロバージョンを指定する必要があります。

$ 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 の間の数値に設定します。

メトリックの値を無視して weight_of_unavailable オプションの値を返すには、0.0 に設定します。

低いメトリックのホストを優先してインスタンスをホストにスタックするには、負の数値に設定します。

デフォルト: 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

Boolean

このパラメーターを使用して、設定した metrics/weight_setting メトリックが使用できない場合の処理方法を指定します。

  • True: メトリックは必須です。メトリックが使用できない場合には、例外が発生します。この例外を回避するには、NovaSchedulerDefaultFiltersMetricsFilter フィルターを使用します。
  • False: 使用できないメトリックは、重み付け処理において負の係数として扱われます。weight_of_unavailable 設定オプションを使用して、戻り値を設定します。

metrics/weight_of_unavailable

浮動小数点

このパラメーターを使用して、metrics/weight_setting メトリックが使用できず、かつ metrics/required=False の場合に用いる重みを指定します。

デフォルト: -10000.0