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%
結果は下記の通り。
※画面ショットでは、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
結果は下記の通り。
※画面ショットでは、DC1-R2がVM1、DC2がVM2、NODEA-R2がVM3にあたる。
ほぼ、下記に近い値が確認された。
VM1:20%
VM2:30%
VM3:50%
結論:「仮想マシンの予約」が設定されなければ、「相対的な重み」が使用される。
【ケース3】
さらに重みを変更してみる。
予約 重み
VM1: 0 100
VM2: 0 100
VM3: 0 800
すると結果は下記の通り。
※画面ショットでは、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%の割合となった。
コメント
参考になりました。ありがとうございます。
とても参考にありました。一点確認させて欲しいのですが「100%(全システムリソースに対する割合としては50%)を消費」とありますが、50%になってしまうのは何故なのでしょうか。(他の情報が見つからず…hyper-threadingを有効にした場合と言うことでしょうか)
この当時は Windows Server 2008 R2 をベースに検証していたと記憶しています。その際の仕様と理解しております(実際に検証して試してみた)。現在は(Windows10)のHyper-Vで確認したところ、全システムリソースが表示されており、100%超える設定も可能みたいですw