CPUのリソースコントロール に関して

Hyper-Vの設定にはCPUに関するものがあります。

そこでCPUのリソースコントロールに関して備忘録としてまとめておきます。

■仮想マシンの予約

仮想マシンが確保するプロセッサの割合を0から100%で予約できる。例えば、100%にセットした場合、100%(全システムリソースに対する割合としては50%)を消費することになる。ただし、予約されたリソースは、使用時のみ確保される。また、既定の0の場合は、CPUの負荷に合わせてシステムリソースは可変する。CPUが割り当てられないわけではない。

■仮想マシンの限度

仮想マシンが使用するプロセッサの割合を上限値で設定する。例えば、仮想マシンBの限度を40%にセットした場合、プロセッサにいくらアイドルタイムがあっても、仮想マシンBが、40%(全システムリソースに対する割合としては20%)以上を使用することはない。

■相対的な重み

プロセッサが飽和状態の場合、仮想マシン間でのプロセッサの使用率の割合を決定する。相対的な重みは、1から10000までの値が指定できる。既定の仮想マシンの相対的な重みは100である。例えば、仮想マシンAの重みを200、仮想マシンBの重みを300、仮想マシンCの重みを500にすると、仮想マシンA・B・Cは2:3:5の比率でプロセッサを占有する。

ただし、仮想マシンA・B・Cに100・100・800と設定した場合、1:1:8にはならない。これは1つの仮想マシンが使用できる全システムリソース対する割合は50%に制限されるためである。100・100・800と設定した場合は25%・25%・50%の割合でプロセッサを占有する。

ここでのポイントは上記記述および次の通り

  • 仮想マシンの予約で100%としても、全システムリソースの50%となる
  • 複数のマシンで仮想マシンの予約を100%と設定することは可能だが、起動時に全システムリソースが100%になると、ほかの仮想マシンは起動できない。たとえば3台の仮想マシンに100%として設定すると、1つのシステムあたり50%として割り当てられるため2台のみ起動し、3台目は起動しない。
  • 相対的な重みに関しては、単純な比率にはならない。これは上記に述べているように1つの仮想マシンが使用できる全システムリソース対する割合は50%に制限されるためである。
  • 仮想マシンの予約と相対的な重み両方に設定がされていた場合は、仮想マシンの予約が優先される

ここからは検証内容に関して

1.まず、「仮想マシンの予約」の制御について

【ケース1】

仮想マシンが全てオフの状態で「仮想マシンの予約」を下記の通り設定する。

VM1:100

VM2:100

VM3:100

VM1->VM2->VM3の順で起動させると、VM3の起動が失敗する。

【ケース2】

仮想マシンが全て稼働中の状態。「仮想マシンの予約」は下記の通り。

VM1:100

VM2:50

VM3:50

ここで、VM2やVM3に『51』以上の値を設定しようとするとエラーになり、設定できない。

結論:「仮想マシンの予約」の値は全てのVMの合計値が200(全システムリソースに対する割合としては100%)以内でないと機能しない。VMがオフなら合計値200を越えて設定はできる。しかし、200を越えるVMは起動できない。また、VMが稼働中のときは、今上がっている全VMの合計が200を越えてしまう変更はエラーで弾かれる。

2.次に、全VMのプロセッサが飽和状態のとき、「仮想マシンの予約」と「相対的な重み」は、どちらが優先されるかを、テスト

【ケース1】

予約 重み

VM1:100 200

VM2: 50 300

VM3: 50 500

とする。そして、全VMでCPU使用率を100%にさせる。

もし予約の設定が優先されるなら、CPU使用率は下記のようになるはずである。

VM1:50%

VM2:25%

VM3:25%

もし重みの設定が優先されるなら、CPU使用率は下記のようになるはずである。

VM1:20%

VM2:30%

VM3:50%

結果は下記の通り。

画面4

※画面ショットでは、DC1-R2がVM1、DC2がVM2、NODEA-R2がVM3にあたる。

ほぼ、下記に近い値が確認された。

VM1:50%

VM2:25%

VM3:25%

結論:全VMのプロセッサが飽和状態のとき、「仮想マシンの予約」と「相対的な重み」では、『仮想マシンの予約』が優先される。

【ケース2】

予約を全て0にすると

予約 重み

VM1: 0 200

VM2: 0 300

VM3: 0 500

結果は下記の通り。

画面5

※画面ショットでは、DC1-R2がVM1、DC2がVM2、NODEA-R2がVM3にあたる。

ほぼ、下記に近い値が確認された。

VM1:20%

VM2:30%

VM3:50%

結論:「仮想マシンの予約」が設定されなければ、「相対的な重み」が使用される。

【ケース3】

さらに重みを変更してみる。

予約 重み

VM1: 0 100

VM2: 0 100

VM3: 0 800

すると結果は下記の通り。

画面6

※画面ショットでは、DC1-R2がVM1、DC2がVM2、NODEA-R2がVM3にあたる。

ほぼ、下記に近い値が確認された。

VM1:25%

VM2:25%

VM3:50%

結論:VM1・2・3に100・100・800と設定した場合、1:1:8にはならない。これは1つの仮想マシンが使用できる全システムリソース対する割合は50%に制限されるためである。まず、800が指定されたVM3に上限の50%を割り当て、残りの50%を同じ値「100」が指定されたVM1とVM2に案分して割り当てるため、25%・25%・50%の割合となった。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告
  • このエントリーをはてなブックマークに追加

コメント

  1. みきろう より:

    参考になりました。ありがとうございます。

  2. くろ より:

    とても参考にありました。一点確認させて欲しいのですが「100%(全システムリソースに対する割合としては50%)を消費」とありますが、50%になってしまうのは何故なのでしょうか。(他の情報が見つからず…hyper-threadingを有効にした場合と言うことでしょうか)

    • Naoki Abe より:

      この当時は Windows Server 2008 R2 をベースに検証していたと記憶しています。その際の仕様と理解しております(実際に検証して試してみた)。現在は(Windows10)のHyper-Vで確認したところ、全システムリソースが表示されており、100%超える設定も可能みたいですw

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください