ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

Hyper-V で論理プロセッサと仮想プロセッサの対応は動的に変化する

(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 は割り当てされる、となります。この検証結果をまとめます。

検証環境

ホスト

プロセッサ Intel Core i5-6600 CPU @ 3.30GHz ※ 4 コアのCPUです
OS Windows 10 Pro バージョン 21H2

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で特定のCPUに負荷をかけると全てのLPで使用率が上がる

ゲストOS で 16:07:44 過ぎから負荷をかけました。グラフから全ての LP (LP 0-3) で使用率が上がったと読み取れます。このことから、LP と VP の対応関係は動的であると結論付けました。