(2022/11/27 追記)
本記事と同じテーマを含みつつ、検証データをより充実させた記事を公開しました。ご参照ください。
Hyper-V で論理プロセッサの利用状況は環境やワークロードに左右される - ぱと隊長日誌
概要
Hyper-V の論理プロセッサと仮想プロセッサについての説明を引用します。
ハイパーバイザは、プロセッサコアやハイパースレッディングのスレッドなど、論理的にCPUと扱えるものを「論理プロセッサ(LP)」として管理します。例えば、6コアのプロセッサが4ソケットあるサーバは、"24LPのマシン"と呼んだりします。
そして、このLPがそのまま仮想マシンにガチャンとくっつくわけではありません。仮想マシンについているプロセッサは、「仮想プロセッサ(VP)」というものなのです。VPは、LP上で実行されるプロセスみたいなものです。OSのカーネルがCPU時間をプロセスに割り当てるのと同じように、ハイパーバイザはLPの時間を細切れにしてVPに割り当てます。
「Hyper-VのCPUリソース管理について」(1) Windows Server Insider − @IT
この説明では確証を得られなかったのが、LP と VP の対応関係は静的なのか動的なのか、という点でした。例えば、LP 0-3 と VP 0-3 があるとき、LP 0 と VP 0 の対応関係がどこかの時点で決定するのか?それとも LP 0-3 のいずれにも VP 0 は割り当てされるのか?ということです。
結論として LP と VP の対応関係は動的であり、LP 0-3 のいずれにも VP 0 は割り当てされる、となります。この検証結果をまとめます。
検証環境
Hyper-V
構成バージョン | 9.0, 9.2 ※いずれでも再現できることを確認済み |
---|---|
プロセッサ | 4 個の仮想プロセッサ |
OS | Red Hat Enterprise Linux release 8.6 |
検証内容
ゲスト OS 上で特定の CPU(VP に相当)へ負荷をかけます。VP が LP のいずれかへ固定して割り当てられていれば、その特定の LP の使用率が上がるはずです。
ゲスト OS が Linux なので、以下のコマンドで負荷をかけました。
# taskset -c 0 stress-ng -c 1 -l 100
ゲスト OS 上で特定の CPU にのみ負荷がかかっていることを以下のコマンドで確認しました。
# mpstat -P ALL 1
LP の使用率をパフォーマンスモニターで確認しました。
オブジェクト:Hyper-V Hypervisor Logical Processor
カウンター:% Total Run Time
インスタンス:Hv LP 0-3(計 4 個)
ゲストOS で 16:07:44 過ぎから負荷をかけました。グラフから全ての LP (LP 0-3) で使用率が上がったと読み取れます。このことから、LP と VP の対応関係は動的であると結論付けました。