Hyper-Vのリソースコントロールを1から学ぶ

ITインフラ系

一つのホストに稼働中のVMがたくさんあるとします。そうするとかなりの負荷がホストにかかり、ホストにもVMにも好ましい状態ではありません。
もちろんVMをライブマイグレーション等で他のホストに分けることも有用ですが、どうしてもホストに詰め込みたい・安定稼働もさせたいというときは、プロセッサのリソースコントロールでリソースの使用を制限したり、リソースの使い方に優先順位をつけたりすることができます。

Windows Serverでこの機能は使えますが、Windows10などのクライアント用OSのHyper-Vでは使えないと思われます
https://atmarkit.itmedia.co.jp/ait/articles/2201/13/news019.html

リソースコントロールの説明

Hyper-VのVMの設定からプロセッサのカテゴリを選択すると、リソースコントロールという部分があります。

このリソースコントロールではこのVMが使うリソースの優先順位や上限値等を決めることができます。

仮想プロセッサの数

仮想プロセッサの数(コア数)を指定できます。最大240個指定できるようです。

論理コアと仮想コアはイコールではないのが注意です。例えば16コア/32スレッドのCPUは論理コアは32です(ハイパースレッディングにより論理コアは物理コアの2倍になっている)
が、仮想コアは32コアではありません。どうやら2008までは論理コアの8倍まで保証していたらしいですが、2012からは保証する倍率は不明になっています。ワークロードやCPUの性能・その他ハードウェアとの組み合わせで違ってくるのだと思います。
ただ一般的なサーバーを使っているのであれば5倍~8倍の仮想コアを使っても普通に使えるものと思われます。
(論理コアが32コアで8倍まで仮想プロセッサを使いたい場合は256コアまで仮想マシンに設定することができます。)

仮想マシンの予約

仮想マシンが最低限使うことのできるリソース量を決めます。例えば70%にしておき、70%以上使用する処理を行っていれば、他の仮想マシンがリソースを必要としてもその70%のリソースは取られることはありません。

簡単に言うと10人のメンバーがいてAさんとBさんというプロジェクトマネージャーがいたとき、Aさんには最低7人はアサインできる権利があるとします。
8人必要なプロジェクトが2人のPMに振られたとき、Aさんは7人アサインできる権利があるので7人持っていきます。Bさんは3人しかアサインできません。
しかし、Aさんが3人しか必要のないプロジェクトを持っているときは、Bさんは7人アサインできます。こんな感じだと思います

全システムリソースに対する割合


仮想マシンの予約や仮想マシンの限度の数値を変えると、全システムリソースに対する割合の数字が変化します。これは仮想プロセッサのコア数と関連しており、論理プロセッサの数=割り当てられた仮想プロセッサのコア数かつ、予約や限度の数値が100%だと、全システムリソースに対する割合は100%になります。(上記画像は論理プロセッサが16コアでVMに仮想プロセッサを16コア割り当てた画像)
もちろん論理プロセッサより仮想プロセッサが半分の場合は50%になります。(以下画像参照)

ここで発見したのですが、minrootを設定しているとHyper-Vマネージャーがminrootのほうを間違って見てしまうみたいです。
論理プロセッサが48コアで、minrootが8コア、仮想マシンに8コア割り当てると100%と表示されます。
論理は48コアなので8コアの場合は16%と表示されるのが正しいはずです。Hyper-Vマネージャーはminrootが設定されているホスト上で動いてるのでこういう動きになってしまってるんでしょうか。。。
(これが正しい仕様ならこの話はなかったことにしてください。。。)

仮想マシンの限度

これは予約と逆で、最大限で使えるリソースを制限することができるものです。
100%のリソースを必要としていて、限度が100%かつリソースが空いていれば100%使えます。
50%だとリソースが空いていても50%しか使えません。

同じように簡単に説明すると、10人のメンバーがいてAさんとBさんというプロジェクトマネージャーがいたとき、Aさんには最大でも5人のみアサインできるとします。もしAさんに8人必要なプロジェクトが振られても5人しかアサインできません。Bさんは5人必要なプロジェクトを振られたときにAさんに8人取られることなく、5人しっかりアサインすることができます。
このような感じで大きなリソースを使う仮想マシンを制限することが主な使い方です。

相対的な重み

相対的な重みは1から1万までの数値を設定できるようです。これはリソースを使う際の優先順位を決めることができるようです。
例えば4台の仮想マシンがあったとして、同じスペックで相対的な重みを100 : 300 : 100 : 500と設定します。全てに同じ量のリソースを必要とする処理が割り当てられ、使用中のリソースが100%になった場合それ以上のリソースはないので、10%:30%:10%:50%の割合でリソースが振られるものと思われます。

Powershellで操作

上記はPowershellでも設定できます。

Set-VMProcessor 仮想マシンの名前 -Count 4 -Reserve 20 -Maximum 80 -RelativeWeight 100

これだと、仮想プロセッサが4コア、予約は20%、限度は80%、相対的な重みは100と設定できます。

Set-VMProcessor 仮想マシンの名前 -Maximum 80

もちろん単体でも設定できます。限度の調整はホストが仮想マシンの負荷によって重くなった時に使うとよいと思います。

タイトルとURLをコピーしました