Hyper-Vを使った場合の仮想プロセッサー(コア)の割り当て数

Hyper-Vの仮想マシンにどれだけ仮想プロセッサーを割り当てられるかがわかったので、メモしておこうと思います。


仮想プロセッサーの割り当て

これまでもHyper-Vを使ってはいたものの、悩みの種だったのが仮想マシンへの仮想プロセッサーの割り当てです。

今どきのCPUだと物理コア10個、ハイパースレッディングを使えば20個なんてものが普通にあります。仮想技術ではそれぞれ物理プロセッサー、論理プロセッサーとも呼びます。

仮想マシンにはそれらを仮想プロセッサーとして割り当てていきます。

この仮想プロセッサーを割り当てる数について調べてみると、色々なことがネットには書かれています。厳しいものだと仮想プロセッサーの割り当て総数は物理コアの数までというものまであります。それ以上割り当てるとトラブルが起こると。

いやでも、それじゃ、仮想化してリソース(ハードウェア資源)を有効利用できないんでないのと思っていました。

そこで先日、あらためて検索したところ、富士通がとても良い資料を作ってくれていました。

Windows Server 2008 R2 Hyper-V2.0におけるHyper Threading性能検証


物理コア数までは性能低下はなく浮動小数点演算なら論理コアもイケる

それによれば、仮想プロセッサーの割り当て数の性能低下は、整数演算と浮動小数点演算で異なるし、浮動小数点演算でもハイパースレッディングをオンにした時とオフにした時でまた異なるという事でした。

整数演算の場合は、割り当て数のトータルが物理コアの数までは性能低下はなく、それを超えると性能が急に低下を始め、ハイパースレッディングの効果はそれほどありませんでした。

浮動小数点演算の場合には、物理コアの数までは性能低下がないのは同じで、ハイパースレッディングをオンにすれば、論理コアの数までは割とよく粘り、それを超えるとやはり急に低下しています。

つまり、割り当て数が物理コアもしくは論理コアを超えると急に性能が低下するということになります。


フル稼働でなければ、もっと割り当てても良いのでは

ただし、これは各仮想マシンがフル稼働している場合の話だと思います。そういう使い方なら確かに割り当てるのは物理コアもしくは用途によっては論理コア数までというのが妥当かもしれません。

しかし、そうではなく、同時にフル稼働する事なんてほとんどない場合。例えばオフィスのPCを仮想化してリモートデスクトップ接続して使うVDI利用の場合などだと、すべてのPCがフル稼働するという事は基本的にないのではないかと思います。(ウィルススキャン等で重なる場合もありえますが運用である程度は回避できると思います)

この場合には、論理コアの数を越えて仮想プロセッサーを割り当てても問題ないと思いました。

ようは仮想マシンの稼働量に応じて仮想プロセッサーを割り当てればよいのだろうと思います。瞬間稼働量のトータルがサーバーの性能を超えるようだとまずいということになると思います。


次のサイトでは単純な演算ではなく実際のデータベース検索での効果を検証しています。

計算性能は「もう十分すぎるほど」 改めて問う、仮想化の性能問題

やはり物理コアを越えて論理コアの数まで仮想プロセッサーを割り当てても性能は伸び、それを越えてようやく性能が低下するという状況です。性能低下もそれほどではありません。こちらもかなりの負荷を各仮想マシンにかけているものと思います。


あまりにもコアがビジーになってしまうと性能低下が生じますが、そうならないのであれば、ある程度仮想プロセッサーを仮想マシンに割り当てたほうが、性能(もしくは快適さ)は向上するものと思います。


あんまり仮想マシンを割り当てると今度はCPU以外のストレージ等が競合を起こすので限度はあります。その場合も、ストレージをSSDにしたり大量のキャッシュを搭載したりすれば軽減できそうな気がします。


コメント

アクセス数の多い投稿

セキュリティ対策ソフトのノートンが詐欺ソフトまがいになってしまってショック

ZIPファイルを開こうとすると、展開を完了できません、と言われる

Excel 2019 クエリが原因で日本語入力の一文字目が勝手に確定する

突然滅茶苦茶遅くなったPCがWindows Updateのキャッシュクリアで復活

オカムラ家具のOAチェアー、コンテッサを分解清掃

Windows セキュリティーのビックリマークが消えない

ChatGPTが日本語からVBAのコードを生成できてたまげる

Excelのテーブルに行や列を挿入する際のエラー

Power Automate Desktopでブラウザでダウンロードしたファイルを処理する

Excel VBAからODBCを使ってデータを簡単に取得する