仮想化Java環境のスループットを2倍に--BEA LiquidVMの適応型メモリ管理

山下竜大
2008-05-16 17:00:00
  • このエントリーをはてなブックマークに追加

 コンピュータの性能を向上させるためには、どのような方法が考えられるだろうか。さまざまな方法があるが、まず思い浮かぶのはメモリを増設することだろう。メモリはコンピュータがプログラムやデータを処理するための作業領域であり、その容量はもちろん、管理の仕方でもコンピュータの性能は大きく左右される。

 メモリやハードディスクなど、1台のコンピュータのリソースを複数の仮想マシンで共有する仮想化環境では、限られたリソースをいかに有効に活用できるかがシステムのパフォーマンスを向上させる重要な鍵になる。

 特に増設できる容量に制約の少ないハードディスクに比べ、サーバごとに搭載できる容量が限られるメモリは、その限られた空間を効率的に使用することで、より効果的な仮想化環境を実現できる。

 また、一般的にメモリはハードディスクよりも高価であり、少ないメモリを有効に活用することで、システム導入にかかるコストを低減することも可能になる。

 BEA Systemsが提供する「BEA Virtualization 2.0」が高いパフォーマンスを実現できるのは、ハイパーバイザ上で直接Javaアプリケーションを動作させることで、これまでオーバーヘッドになっていたゲストOS無しにバーチャルアプライアンスを構築できるためだということは、「サーバだけからシステム全体の仮想化へ至る道」で紹介した。

 さらに、仮想化環境においてJavaアプリケーションを効率的に処理するための適応型メモリ管理機能が搭載されていることも、BEA Virtualization 2.0が高いパフォーマンスを実現できる大きな理由のひとつとなっている。

適応型メモリ管理とは

 メモリ管理は、コンピュータがプログラムやデータを処理するために必要な作業領域をメモリ上に確保して処理を実行し、その処理が終了したら確保した作業領域を開放する仕組みだ。一般的には、OSがメモリ管理を実行している。

 BEAの仮想化2.0では、ゲストOS無しにJavaアプリケーションを動作させることができるので、Javaアプリケーションを処理するために必要なメモリ管理もソフトウェアアプライアンスの中で行わなければならない。

 この機能を実現したのが「BEA WebLogic Server Virtual Edition」の主要コンポーネントのひとつである「BEA LiquidVM」だ。

 BEA LiquidVMでは、OSのメモリ管理機能に影響されることなく、アプリケーションの処理に必要なメモリを完全に制御できるので、最適なメモリ管理を実現することができる。BEA LiquidVMはまた、仮想マシンが使用可能なメモリ容量とアプリケーションに必要なメモリ容量のバランスを常に最適に保つ機能も搭載している。

 仮想化環境においてメモリ管理機能が重要になるのは、Javaアプリケーションの性能を常に最高にするメモリ管理のためのチューニングを手作業で行うことがかなりの熟練を要する作業のためだ。

 まだPCのOSがDOSだったころ、640KBしかないメモリ領域から少しでも大きなメモリ領域を確保するために設定環境である「CONFIG.SYS」や「AUTOEXEC.BAT」と格闘したことのある技術者であれば、仮想化環境のメモリ管理を手作業で行う大変さは容易に理解できるだろう。

 BEA LiquidVMはさらに、システム全体における負荷の増減に合わせてメモリ管理を動的かつ自動的に変化させ、Javaアプリケーション動作環境を常に最適化できる機能も搭載している。BEA LiquidVMでは、この2つの仕組みにより適応型メモリ管理を実現している。

重要なJava動作環境のスワップ管理

 メモリ管理において、メモリ領域の確保と共に重要な機能となるのがスワップの管理だ。スワップとは、アプリケーションの処理を行うためのメモリ領域が足りなくなった場合に移動可能な領域をメモリからハードディスクに移動して、利用可能なメモリ領域を確保する仕組みだ。

 たとえば、机の上に資料を広げて作業していたとき、新しい資料を開かなければならないのだが机上にこれ以上資料を広げる場所がなかった場合どうするだろう。その時点で使っていない資料を閉じてキャビネットなどにしまい、そこに新しい資料を広げる。それが終わると、キャビネットにしまった資料をもう一度取り出すような仕組みといえば、イメージしやすいだろうか。

 メモリ内の内容を読み書きの速度が遅いハードディスクに書き出し、確保した領域で処理を行い、移動したハードディスクの内容をメモリに戻してくる。この作業の繰り返しがどれほどパフォーマンスに影響するかは容易に想像できる。

 しかし、メモリ容量に制限がある限り、スワップは避けられない。そこで、いかにスワップが起こらないようにメモリ管理を行うかもパフォーマンス向上の重要なポイントのひとつになる。

 この問題をVMwareでは、「バルーンドライバ」と呼ばれる仕組みで解決している。バルーンドライバは、ゲストOSに搭載されるデバイスドライバで、ハイパーバイザがOSにメモリ使用量を削減する必要があることを通知するために使用される。

 しかしVMwareでは、その上で稼働しているJavaアプリケーションのメモリ管理までは把握できないために必要なスワップが行われない、または無駄なスワップが行われる可能性がある。そのため、Javaアプリケーションのパフォーマンスに影響を及ぼしてしまう。

 そこで、ハイパーバイザから仮想マシンのメモリ領域を削減する必要があることが通知された場合、どのようにメモリ管理を行うかを判断する機能がBEA LiquidVMに搭載されている。

 BEA LiquidVMでは、Javaアプリケーションの動作に関する情報に基づき、アプリケーションが使用するアクティブページ数を低減することで必要なメモリ領域を縮小することが可能。ハイパーバイザが必要とするメモリを解放し、スワップの発生を低減することが可能になる。

適応型メモリ管理で2倍のスループットを実現

 BEAが行った検証では、適応型メモリ管理機能を搭載するBEA LiquidVMを使用した仮想化環境は、ゲストOSを使用する従来型の仮想化環境に比べ、2倍のスループットを実現することが可能という。

 同じスペックのサーバで行われた検証では、従来型の仮想環境では4つの仮想マシンで最大スループットに達したのに対し、適応型メモリ管理を使用した仮想化環境では8つの仮想マシンを稼働させることが可能になっている。

 BEAでは、ほかにもいくつかの検証を行っている。詳しくは同社のホワイトペーパーを参照してほしい。

  • 新着記事
  • 特集
  • ブログ