論より証拠。サーバー仮想化の性能問題を的確に理解するには、ベンチマークによる検証が一番分かりやすい。今回は「計算性能」の観点からサーバー仮想化の性能問題を考えてみたい。

宮原 徹
日本仮想化技術

 テスト環境は、クアッドコアのIntel Xeon L5520(2.26GHz動作)を2個搭載したサーバー・マシン上で、Windows Server 2008 R2、Hyper-V 2.0、SQL Server 2008 SP1を稼働させた。そして、SQL Serverに対して検索処理を実行したときに、トランザクション処理性能がどう変わるかを検証した。

Hyper-Threadingでより多くの仮想マシンを効率稼働

 1つの仮想マシン(VM)には、4つの仮想CPUを割り当てた。物理CPUコア数は、クアッドコアXeon×2個で合計8になる。2VM、8仮想CPUの構成にしたとき、ちょうど物理CPUコアと仮想CPUが同じ数になり、前回説明したようにCPUの競合が起こらない状態となる。ここがまず基準となる。上記の仮想マシン構成でTPC-Bベンチマーク(検索処理のみ)を実行したところ、8万3240tps(トランザクション/秒)という数字が出た(図1)。このベンチマークでは、CPUとメモリーの性能が結果に影響する。

図1●仮想化環境における仮想CPU数と処理性能
図1●仮想化環境における仮想CPU数と処理性能
CPUはXeon L5520(4コア、2.26GHz)×2個

 続いて、図1の右半分の計測値を見てもらいたい。4VM(16仮想CPU)、6VM(24仮想CPU)構成での性能を示している。

 従来なら、物理CPUコアと仮想CPUが同じ数になるところで性能がピークとなり、それ以上に仮想CPU数を増やすとCPUの競合が発生して、緩やかに性能が下がっていった。ところが仮想CPUを16個に増やしても、性能が伸びている。これはCPUのマルチスレッド化による効果だ。

 Xeon 5500番台から、1コアで2つの命令を同時に受け付けられる「Hyper-Threading」が復活した。性能が単純に倍増するわけではないが、Hyper-Threadingにより1.2~1.3倍ぐらいの性能向上が見込める。

 サーバー仮想化の観点でHyper-Threadingを見ると、スレッドの合計数まで仮想CPUを増やしてもCPUの競合が起こらない。物理8コアのマシンに16仮想CPUを割り当てても性能が伸びるのは、1コア当たり2つのスレッドがあるためだ。

 CPUのマルチコア化やマルチスレッド化が進むと、仮想マシン(仮想CPU)の稼働数が増えてもCPUの性能を十分に引き出せる。ハードウエアが進歩すると、仮想化環境もその恩恵にあずかって、設計や運用の自由度が高くなるわけだ。

 ちなみに、4VM(16仮想CPU)構成時の「11万1375tps」という性能は、実用面で考えたら十分すぎるほどである。また、仮想CPU数を16個から24個に増やしても、サーバー全体としての性能はあまり落ちていない。CPUとメモリーに大きな負荷がかかっていても、仮想化したからといって、過大なオーバーヘッドが発生したり、ものすごい性能劣化が起こったりしているわけではない。

 結論を言うと、CPUやメモリーに関しては「仮想化してもオーバーヘッドを気にする必要はない」「性能劣化はほとんど誤差の範囲」と言っても過言ではない。

サーバー仮想化における12コアOpteronの凄み

 もう1つ、1CPUで12コアを搭載した新型Opteronを使って、サーバー仮想化環境の処理性能を計測してみた。性能を比較するために、従来の6コアOpteronもテストした。

 ソフトウエア環境とテスト内容は前述のテストと同じ。Windows Server 2008 R2、Hyper-V 2.0、SQL Server 2008 SP1を仮想マシンにインストール。各仮想マシンには4個の仮想CPUを割り当て、SQL Serverに対してTPC-Bベンチマーク(検索処理のみ)を実行した。

 ハードウエアは、1台の物理マシンに6コアのOpteron 2435(2.6GHz動作)を2個搭載した構成と、12コアのOpteron 6174(2.2GHz動作)を2個搭載した構成を用意した。