本記事では Hyper-V サーバが保有する「仮想プロセッサ数」の確認方法を紹介する。
下図のように、Hyper-V で仮想マシンを作成すると、「プロセッサ」の設定項目に「仮想プロセッサの数」というものが存在する。
仮想マシンのメモリに関しては、物理メモリと1:1の関係になるため、仮想マシンに割り当てる仮想メモリの合計が物理メモリの容量を超えないように設計すればいい。しかし、仮想プロセッサはどうだろうか。
Contents
物理 CPU と仮想プロセッサの関係
「仮想プロセッサ数」の求め方について、メモリと同様に物理リソース と仮想プロセッサ が1:1の関係になると仮定した場合、以下のどちらが正しいだろうか。
- 物理ソケット = 仮想プロセッサ
- 物理コア = 仮想プロセッサ
例えば、2ソケット8コアという CPU を持つ Hyper-V サーバがある。
「物理ソケット = 仮想プロセッサ」の場合、Hyper-V サーバは2個の仮想プロセッサを保有すると考えることができる。最大2台の仮想マシンの同時稼働が可能だ。※1
「物理コア = 仮想プロセッサ」の場合、Hyper-V サーバは16個の仮想プロセッサを保有すると考えることができる。最大16台の仮想マシンの同時稼働が可能だ。※1
※1…CPU のオーバーコミットを行わないという前提
多くの場合は「物理コア = 仮想プロセッサ」という結論が出ることだろう。そして、その結論をもってHyper-V の構築に入るかもしれないが、この2つは両方とも不正解だ。
実際は「物理コア ≠ 仮想プロセッサ」であり、「物理ソケット ≠ 仮想プロセッサ」だ。
仮想プロセッサ数の求め方
仮想プロセッサ数の求め方についてだが、以下のようになっている。
Windows Server 2012 より前は、 Windows VDI 環境を除くすべてのワークロードで1論理プロセッサ(8:1)ごとに8仮想プロセッサがサポートされていました。
たとえば、8:1の比率では、システムに合計8個の論理プロセッサがある場合、ホスト上で実行しているすべての仮想マシンに対して合計で最大64の vCPU を割り当てることができます。
単一の仮想マシンには、サーバーに存在する論理プロセッサ数より多くの仮想プロセッサを割り当てられません。つまり、ホストが8個の論理プロセッサを搭載している場合、1台の仮想マシンに8個以上の仮想プロセッサは割り当てられません。
しかし、8台の仮想マシンで、8個の仮想プロセッサ(または、合計64個の仮想プロセッサを超えない組み合わせ)を持つことができます。
Windows Server 2012 では、仮想プロセッサと論理プロセッサのサポート率が削除されました。
マスタリングWindows Server 2016 Hyper-V P56 より引用
つまり、Windows Server 2008 R2 以前は「1論理プロセッサ=8仮想プロセッサ」という構成がサポートされていた。
しかし、Windows Server 2012 以降は「1論理プロセッサ = ?仮想プロセッサ」である。
Windows Server 2012 Hyper-V 以降は、論理プロセッサと仮想プロセッサのサポート率が何対何なのかは、Hyper-V 構築者が調査し、決定しなければならない。
どちらにせよ、仮想プロセッサ数は論理プロセッサ数から算出する。論理プロセッサってなんぞや?の状態では仮想プロセッサの数を求めることができない。
なので、論理プロセッサとは何なのか、そして論理プロセッサ数の確認方法を下記に記す。
論理プロセッサ
一般的に、物理プロセッサをソケットと呼び、各プロセッサコアを論理プロセッサと呼びます。また、一部のプロセッサは、ハイパースレッディングをサポートしています。ハイパースレッディングは一般的に10~15%のパフォーマンスが向上します。通常、ハイパースレッディングでは、システム内の論理プロセッサの数を2倍にします。
上記からわかるように、「論理プロセッサ」とは「物理コア」のことを指す。
そしてハイパースレッディングは1つのプロセッサコアを疑似的に2つに見せかける技術だ。よって、ハイパースレッディングが有効であれば論理プロセッサの数は2倍になる。
結論として、論理プロセッサ数の求め方は以下のようになる。
ハイパースレッディング「あり」の場合
ソケット数 × コア数 × 2 = 論理プロセッサ数
ハイパースレッディング「なし」の場合
ソケット数 × コア数 = 論理プロセッサ数
例えば、ソケット数が2、コア数が8(オクタコア)だった場合、論理プロセッサ数は16となる。ハイパースレッディングが有効であれば論理プロセッサ数は32だ。
論理プロセッサの確認方法
最も簡単でわかりやすいのは「タスク マネージャー」から確認する方法だろう。
下図ではソケット数が1つ、コア数が4つにも関わらず論理プロセッサ数が8つになっている。ハイパースレッディングが有効になっているからだ。
ハイパースレッディングが有効になっていないコンピュータの場合、下図のように「ソケット数×コア数=論理プロセッサ数」になっている。
余談:確認方法②「システム情報」で確認
論理プロセッサの確認方法は他にも存在する。必要ないかもしれないが、一応記載する。
まず、ファイル名を指定して実行で「msinfo32」を実行する。
「システム情報」の「プロセッサ」に「4個のコア、8個のロジカルプロセッサ」と表示されているので、論理プロセッサの数が8だということがわかる。
ただ、システム情報だと論理プロセッサ数がコア数の2倍になっている理由が、「ソケットが2つあるから」なのか「ハイパースレッディングが有効になっているから」なのかわからない。
論理プロセッサ数を確認するだけの目的であればいいが、最終的に論理プロセッサ数から仮想プロセッサ数を導き出すうえで「ハイパースレッディングの有効/無効」は非常に重要だ。
ハイパースレッディングは論理プロセッサ数を2倍にするものの、パフォーマンスが2倍になるわけではないので、ハイパースレッディングが有効になっている状態の論理プロセッサ数を真に受けるわけにはいかないからだ。
余談:確認方法③「set NUMBER_OF_PROCESSORS」で確認
論理プロセッサの数は以下のコマンドでも確認することができる。
> set NUMBER_OF_PROCESSORS
余談:確認方法④「wmic」で確認
以下のコマンドでは、コア数と論理プロセッサ数を確認することが出来る。
> wmic
> CPU Get NumberOfCores,NumberOfLogicalProcessors /Format:List
まとめ
仮想プロセッサ数の求め方を整理する。
仮想プロセッサ数を導き出すには、まずは Hyper-V サーバが保有する論理プロセッサ数を確認する必要がある。
また、ハイパースレッディングが有効になっている場合、論理プロセッサは物理コアの2倍の値になっているが、パフォーマンスは2倍ではなく10%~15%の向上に留まることに留意する必要がある。
「1論理プロセッサ ≠ 1仮想プロセッサ」であり、Windows Server 2008R2 以前は「1論理プロセッサ = 8仮想プロセッサ」がサポート率として存在したが、Windows Server 2012 以降は「1論理プロセッサ = ?仮想プロセッサ」である。(少なくとも1:1以上)
> ハイパースレッディング「あり」の場合
> ソケット数 × コア数 = 論理プロセッサ数
>
> ハイパースレッディング「なし」の場合
> ソケット数 × コア数 × 2 = 論理プロセッサ数
逆じゃない?
コメントありがとうございます。
ご指摘どおり記述が逆になっておりましたので、修正いたしました。
このような、「文章おかしくない?」や「言ってること間違っているよ」といったご指摘は非常に助かります。
今後ともよろしくお願いいたします。