仮想化でプリセールスしてるSEの一日

VMware から Azure まで、インフラや仮想化の最新情報をベンダー色をできるだけ抑えて綴っていきます

仮想 SMP + vCPU オーバーコミットと性能劣化のリスク

f:id:ogawad:20190203195713p:plain:right

前回 の記事が予想以上に好評だったこともあり、
vCPU オーバーコミット*1 について、注意点をもう一つ書き残したいと思います。


仮想 SMP を使う時は vCPU オーバーコミットはできる限り避ける

仮想 SMP (vSMP) とは、仮想マシンに複数の vCPU を割り当てることです。
仮想化技術の浸透により、基幹サーバーも仮想化する機会が増えています。
vSMP 機能を使って vCPU を複数アサインすることも増えていますが、プロセッサ・コアがあまり搭載されていないサーバーで、仮想 SMP を使うと性能が大幅に低下することがあるので要注意です。

今回もイメージを使って解説してみたいと思います。


vCPU がオーバーコミット状態の場合、処理待ちの vCPU はフリーズ状態になるのは 前回 説明しました。


注意が必要なのは、「複数の vCPU を割り当てたゲストは、すべての vCPU が利用できるまでフリーズは解除されない」 ところです。


結果として、プロセッサ・コアに空きがあるのに利用されないといった、無駄かつ大幅な性能劣化が起きてしまいます。


「コアが2個空いてるならフリーズを解いて vCPU を2個だけ動かせば良いじゃん」と思うかもしれませんが、これもご法度になります。
なぜなら、ゲストOSは自分が仮想化上で動いていることを知らないですし、フリーズされていたことも知りません。つまり、フリーズ解除して中途半端に vCPU が利用できてしまうと、ゲストは「一部の CPU から応答がない!」ということで CPU 障害と誤解してしまうのです。
一般的な OS の場合、CPU 障害は BSOD, kernel panic を引き起こします。


このような理由から、
「vSMP はできるだけ使わない、使う場合は vCPU をオーバーコミットさせない」 ことが仮想化設計の鉄則になります。

ちなみに、、、

先日、とあるユーザー会に参加させていただいた際、
「仮想化 "の" プリセールスの人ですよね?」と声を掛けていただきました。
大変嬉しく、恐縮だったのですが、一点だけ言うと私は仮想化 "の" プリセールスではないです... ちょっと前までハードウェア・アーキテクチャとパフォーマンス検証を担当していたくらい「ハードウェア」が専門の SE です。

追記

VMware vSphere の最近のバージョンには、性能劣化を少し緩和する機構も実装されています(→ 続報書きました

*1:実際のコア搭載数より vCPU アサイン総数が多い状態