VMでのCPU使用率と処理能力の関係は簡単じゃない
1.はじめに
こんにちは。株式会社SHIFT 技術統括部の力石です。主にお客さまのアプリケーション開発プロジェクトで、性能改善、品質向上などの非機能関連のコンサルティングをしています。
新規にシステムを構築する場合、Cloudを使用することがとても多くなっています。またオンプレで構築する場合もVMwareなどのVirtual Machine(以下VM)を使うことも多いでしょう。
別の記事でCPUがハイパースレッティングを使用しているときは、CCPU使用率は処理能力に比例しないというお話をしました。 今回はVM(Virtual Machine)やクラウドを使用しているときの、CPU使用率と処理能力の関係について別の考慮も必要というお話をします。
2.VMにCPUはどのように割り当てられるか
VM使用時にゲストOSのCPUがどのように使われるか説明します。
例えば、物理マシンにCPUが物理コアが8、論理コアが16あるとします。 ここにゲストOSを2つ作成し、各VMに割り当てるCPU数を8とします。
両ゲストOSのCPU使用率が100%のとき、物理マシン上のCPUは16個の論理コアのがすべて100%になっています。このときハイパースレッティングがすべて機能している状態になっています。
次の例の場合、CPUの使用状況はどのようになるでしょうか?
例1
1つめのゲストOSのCPU使用率が100%。2つめのゲストOSのCPU使用率が0%の場合、物理マシンのCPUの使用状況はどのようになっているでしょうか?
Windows 11上にVirtualBoxをインストールし、ゲストOSとしてそれぞれLinuxをインストールした環境で確認したところ、次のようになりました。
Windows 11のタスクマネージャーで論理CPUごとの使用率を見ると、高いのと低いのが交互に並んでいました。 これは各物理コアでは1つの論理コアしか動いておらずハイパースレッティング状態で動いていません。 ゲストOS上の各CPUはホストOSの各物理コア中の1つの論理コアで動いており、すべての物理コアが使用されているということがわかります。
例2
1つめのゲストOSのCPU使用率が100%。2つめのゲストOSのCPU使用率も100%の場合、物理マシンのCPUの使用状況はどのようになっているでしょうか?
例1と同様の環境で確認したところ、次のようになりました。
Windows 11のタスクマネージャーで論理CPUごとの利用率を見ると、すべての論理CPUが100%になっていました。 これは各物理コアはハイパースレッティング状態になっており、すべての論理コアのCPU使用率が100%になっていることを示しています。 ゲストOS上の各CPUはハイパースレッティング状態状態で動いているということがわかります。
3.処理量の違いは?
ここで例1と例2のゲストOSの処理量はどうなるでしょうか?
例1の場合、ハイパースレッティングが使われていない状態で、ゲストOS上のCPU使用率が100%です。
例2の場合、ハイパースレッティングが使われている状態で、ゲストOS上のCPU使用率が100%です。
別の記事でお話ししたように、ハイパースレッティングを使っていない例1の方が処理量は多くなります。
4.ゲストOSからCPUはどのように見える?
CPUの状況は Linuxの場合lscpu コマンドで知ることが出来ます。物理マシンが以下の構成で、
物理マシンの環境
ソケット:2
ソケットあたりの物理コア数:22
ソケットあたりの論理コア数:44
ゲストOSの論理コア数が10の場合、以下のように表示されます。
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 10
On-line CPU(s) list: 0-9
Thread(s) per core: 1 ←1物理コアあたり1論理コア
Core(s) per socket: 10 ←物理的なCPUの中に10コア
Socket(s): 1 ←物理的なCPUは1個
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 79
Model name: Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
Stepping: 1
CPU MHz: 2195.142
BogoMIPS: 4390.28
Hypervisor vendor: Xen
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 56320K
NUMA node0 CPU(s): 0-9
ゲストOS上で実行したlscpuコマンドでは、Socket数、HTが有効になっていることは読み取れず、物理コアが10個存在しているように表示されており、物理マシンの状況は読み取れません。
5.処理量を実測
CPU使用率と処理量を実測した結果は以下となります。
CPU使用率と処理量がほぼ比例の関係になっており、別の記事で説明したHT使用時の状況と違っています。
これはゲストOSに割り当てた10CPUが、各物理コアに割り当てられている。 すなわち10物理コアを使用しており、HTを使用していない状態と考えられます。
これらの結果よりVM上のCPU使用率と処理量の関係について以下のことがわかります。
同一ホストOS上で動いている他のゲストOSのCPU使用状況に影響される
他のゲストOSが動いておらず、OSに割り当てたCPUが物理コアより小さい場合は比例となる
6.設計の考慮点
例えば、APサーバーがVMで構築され複数台構成の場合、性能試験はどのようにおこなっていますか? 多くの場合、本番と同等の台数は用意できないため1台のAPサーバーのみで性能試験をおこない、 その結果を本番のサーバー台数分かけ算してシステム全体の性能を求めてはいないでしょうか?
この場合何が問題かというと、性能試験時に物理マシン上の他のゲストOSのCPU使用率は、試験対象としたAPサーバーとまったく違う状況になっていますか?商用運用時は各APサーバーのCPU使用状況はほぼ同じ状況になっていることが予想されます。
性能試験時に他のゲストOSのCPU使用率が0%だった場合 試験対象サーバーのCPUはHTを使ってない状態のため、本番時に比べて良い結果が出ます。
この状態で限界テストをおこなった結果を基に商用時の限界性能を求めた場合、正しい値と言えるでしょうか? 商用で限界性能近くの負荷がかかった場合、システムはテストで求めた限界性能まで処理できない状態になるでしょう。
これらを考慮して試験を実施するか、結果を補正する必要があります。
7.まとめ
VMの場合CPU使用率と処理量の関係が、他のゲストOSの状況にも影響されます。他のゲストOSが同じシステムであれば使用状況の把握も可能でしょうが、別のシステムの場合は把握が難しいことがあると思います。ましてやクラウドであれば他の契約者が使用するゲストOSの状況はわりません。
このあたりを考えてCPU使用率と処理量を考える必要があります。
|あわせて読みたい関連記事
|この公式ブロガーの他の記事
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/