サーバー仮想化の分野では成熟化が進んでいる。もはやサーバー仮想化は当たり前のものであって、導入に伴う“未知の問題”をいろいろと評価、検討をする必要性は少なくなってきた。最後に残ったのは性能問題である。仮想化の導入、運用管理、仮想化ソフトウエアやハードウエアに関しては様々な情報が出ているが、仮想化に伴う性能劣化についてはまだ具体的な話が少ないからだ。

宮原 徹
日本仮想化技術

 仮想化の導入を検討している企業からは、必ずといっていいほど「仮想化すると遅くなるのですよね?」と聞かれる。もちろん遅くなる場合もあるわけだが、性能への影響はシステム構成やアプリケーションの処理特性によって大きく異なる。ハードウエアの進化をうまく設計に取り込めたかどうかでも差が出る。また、そもそもの問題として、ユーザー企業の多くが自社のシステムについて、実は稼働状況を正確に把握していないこともある。それが漠然とした不安を生み出しているのかもしれない。

 ここでは最近の動向を踏まえ、ベンチマーク結果を織り交ぜながらサーバー仮想化に伴う性能問題を検証していきたい。今回は、着実に進むCPUのマルチコア化と仮想化環境の設計について解説する。

計算性能とI/O性能に大別して検討する

 性能問題を解きほぐすためには、「計算性能」と「I/O性能」に大別して考えると分かりやすい。計算性能は、主にCPUとメインメモリーの性能に依存している。例えばWebアプリケーションサーバー上で結構重い処理をして、JavaやPHPを動かしていると、意外とCPUを消費する。扱うデータ量が多いと、当然ながらメモリーも消費する。

 一方のI/O性能は、ネットワークやストレージといった、外部と接続する部分の性能になる。例えばファイルサーバーやメールサーバー、データベースサーバーなどはI/Oが多い。特に昨年ぐらいから、OracleやSQL Server、MySQL、PostgreSQLといったデータベースを仮想環境上で動かすケースが非常に増えているが、ストレージのI/Oがボトルネックになる傾向がある。このI/O性能については、別の回で詳しく検証する。

仮想CPUの割り当て次第でパフォーマンスが出ないことも

 さて、計算性能とI/O性能に関連する技術動向を見ると、前者の進化が目立つ。最近のCPU製品では、2010年3月に米Intelと米AMDが相次いで新しいCPUを発表した。何が変わったかというと「マルチコア化」が進んだ。AMDのOpteron 6100シリーズは、1CPUで最大12コアを搭載する。またIntelも、6コア、8コアを搭載したXeon 5600番台、7500番台を投入した。

 CPUの性能がさらに高まったのはもちろん、メインメモリーもたくさん積めるようになった。メモリーに関しては、CPUのコアが多くなるに従って、CPUとメモリーをつなぐチャンネル数が、3チャンネル、4チャンネルへと増えている。メモリーチャンネルを高速道路にたとえれば、今までは2車線ぐらいだったのが3車線や4車線に拡張されたようなものだ。メモリーモジュールも容量4Gバイトくらいのものが非常に安くなり、速くなった。

 ハードウエアの進化は仮想化環境の設計にも影響を及ぼす。その点を説明するために、仮想化環境で仮想マシンがCPUをどう利用するのか、少しおさらいしておこう。例えばCPUを2個搭載したサーバー上で、仮想マシンが2個動いているとする。仮想化ソフト(ハイパーバイザー)は「仮想CPU」という形で仮想マシンにCPUリソースを割り当てるが、このとき2仮想CPUを割り当てた仮想マシンが2個あると、物理CPU数(2個)より仮想CPU数(4個)のほうが多くなる。このような場合は、タイムスライスで物理CPUの割り当てを切り替える(図1)。

図1●仮想CPUにリソースを割り当てる基本的な仕組み
図1●仮想CPUにリソースを割り当てる基本的な仕組み
「仮想CPU数>物理CPU数」の場合はタイムスライスでCPUリソースを切り替える

 注目してほしい点は、仮想マシンがCPUをどのくらい使っているのかをあまり気にせずに、スケジューラーが物理CPUの割り当てを強制的に切り替え、CPUリソースを均等に割り当てていくことだ。もし片方の仮想マシンが何もしてなくても、CPUリソースが必ず均等に割り当てられる。このため、意外とパフォーマンスが出ないことがある。