仮想マシンは今や主要な技術の一つになっている。
しかも、いたるところで使われている。
一つはJavaの仮想マシンJVMである。これは特定言語の実行系をコンパイラを再開発せずに移植するために用いられる。この種の仮想マシンはUCSD Pascalのp-system、Smalltalk-80のVMなど枚挙に暇がない。
もう一つはVMware, Virtual PC, Xen, KVMなど汎用的な仮想マシンだ。この仮想マシンは特定言語に依存しない。
今回は後者の仮想マシンについて、なぜ今もてはやされるのか考えておく。
要は、CPUが必要以上?に速くなってしまったことによる。サーバ用CPUは複数の仕事を行うのが当然となった。その結果、複数のOSにまたがる仕事を実行したくなったということだ。
現在のCPUはマルチコアで、やがてMany Coreとなる。つまり、CPU内での並列処理だ。CPU自体が並列計算機になってしまった。
このようなCPUで1つのアプリケーションを動かしても無駄だ。1つ以外のコアが有効に使われない。そこで、多くの仕事をCPUに与えて、CPUの利用率を高めることが重要になる。
一方、クライアントではあまり多くのコアを必要としない。なぜなら一人の人間が同時に作業できる仕事の数には限界があるからだ。よって、クライアントは少数コアで省エネをねらう。
温暖化問題によりCO2を削減しなければならないことも拍車をかけている。
サーバCPUがMany Coreとなると、サーバに仕事を与えなければならない。クライアントで仕事をさせるよりサーバでしてもらったほうがよいということになる。厳密には仕事を適材適所でわけるということだ。クライアントはリッチなユーザインターフェースに特化し、サーバは大きな仕事に特化する。
そうなると、サーバのOSが制約となる。いろんな仕事をしたいのに、別のOSの仕事はできないし、別のマシンの仕事もできない。そこで、その境界を取り払う技術が必要になる。これが仮想マシン技術だ。
正確には、仮想マシンは境界を取り払うのではない。競技場を均す。壁を取り払い行き来できるようにするのは別の技術で、それはまだ十分に開発されていない。
仮想マシンを持ちいることで、マシンとOSの組み合わせを自由に変更できるようになる。しかも、(一部の仮想マシンでは)動的に行えるので信頼性を向上させることもできる。
ここまでOSが異なることを強調してきたが、実際には異なるOSを使うことはめったにない。同じOSでありながらマシンが違うことがある。それを改善するために仮想マシンが使われる。
例えば、最近ではブレード型のサーバが増えてきた。これはサーバの数を減らそうという試みだ。
1台のサーバ(あるいはブレード)であっても、マルチコアにより処理能力が上がったため、複数のサーバを兼ねることができる。例えば、複数のWebサーバを1台で実行できる。このようなとき、コンテンツを移動させるのが理想だが、サーバ自身の設定を変更していて、コンテンツだけの移動ではすまない場合がある。そのようなとき、かなりの無駄だが、仮想マシンを使えば、Webサーバを修正せずに移動できる。
0 件のコメント:
コメントを投稿