〜 VMwareから要注目技術Xenまで 〜
みやもとくにお<wakatono@todo.gr.jp>
2005/2/8
仮想化技術の各種アプローチ
仮想化技術の実現方式は1つではない。オープンソース/プロプライエタリを問わず、現状で入手/使用可能なものを分類/列挙すると、以下のようになる。
- ユーザープロセスによる仮想ハードウェアの実装
汎用OS上でハードウェアそのものをエミュレートする。何をエミュレートするかは実装によってかなり差がある。
例えば、VMwareはx86環境上でPC/AT互換機をエミュレートするため、アーキテクチャはx86で一貫している。それ故に、純粋な演算についてはエミュレートする必要がなく、実行速度はネイティブ環境に匹敵する(実際には、演算データの読み込みに必要なディスクI/O、結果の表示に必要なグラフィック描画といったオーバーヘッドが発生する)。一方、BochsはIA-32のCPU命令自体をエミュレーションするため、SPARCやAlphaなど異なるアーキテクチャ上でx86環境を作り出すことができる。当然ながら、汎用性は高いが、より大きなオーバーヘッドが加わることになる。
なお、このタイプの仮想マシン上で動作するOSは、ネイティブなハードウェア上で動作するものと同一である。
実装例: VMware(Linux/Windows) http://www.vmware.com/
Linux/Windows上でPC/AT互換機をエミュレート
参考:プロダクトレビュー[VMware Workstation 4]Virtual PC(Windows/Mac OS X) http://www.microsoft.com/japan/windows/virtualpc/
Windows/Mac OS X上でPC/AT互換機をエミュレート
参考:製品レビュー Virtual PC 2004Virtual Server 2005(Windows) http://www.microsoft.com/japan/windowsserversystem/virtualserver/
Windows上でPC/AT互換機をエミュレート
参考:Virtual Server 2005の有用性と投資コストを見極めるBochs http://bochs.sourceforge.net/
各種アーキテクチャ上でIA-32環境をエミュレートPearPC http://pearpc.sourceforge.net/
Power Mac G4環境をエミュレート
- ユーザープロセスによる「独立したカーネル」の実装
ユーザープロセスにより、OS環境をエミュレートする。ハードウェア環境をエミュレートする1の方式よりも汎用性は劣る。だが、特定のOSに特化できる分だけエミュレートに必要な処理も絞り込め、比較的「軽く」動作する。
このタイプの仮想マシン上で動作するプログラムは、ネイティブなOSで動作するものとほぼ同一である。ただし、ハードウェアに依存するものは動かないことが多い。
実装例: User Mode Linux(Linux) http://user-mode-linux.sourceforge.net/
Linux上で動作するプロセスにてLinuxカーネル環境を実現
参考:仮想OS「User Mode Linux」活用法Cooperative Linux(coLinux)(Windows) http://www.colinux.org/
Windows上で動作するプログラムにてLinuxカーネル環境を実現Java VM どちらかといえば「ソフトウェア実行環境の仮想化」を実現するソフトウェアだが、あらゆるOSの機能やハードウェアを抽象化して、同じソフトウェア(バイナリ)を動作させるという点ではこのアプローチに近い
- 独立したソフトウェア実行環境の実現
OSの機能を用いて、独立したソフトウェア実行環境を用意する方法である。ユーザーには、独立したOS環境のように見える。各実行環境は大本のOSそのものであり、これを仮想マシンと呼ぶことはない。
動作するプロセスの環境が異なるだけで、OS自体は単一である。そのため、OSの挙動や障害がすべてのプロセスに影響する。OS環境が独立している場合は、あるOS環境の障害がほかのOSに影響することは少ない(注)。
注:メモリ障害など、ハードウェアに起因するトラブルの場合は別である。
実装例: Jail環境
- 専用モニタを用いる仮想マシン
汎用OS+仮想マシンを実現する部分を専用モニタに置き換え、OSもその機能に対応した形で実装したものがこのタイプに当たる。この方式は、専用の仮想マシンモニタを動作させ、その上で動作するOS環境について細かい制御を提供するというものだが、筆者が知る限りはメインフレームのやり方に近い。
資源の割り当ては、すべて仮想マシンモニタを経由して行われる。仮想マシンモニタ上のOSは仮想マシンモニタに依存するため、専用アーキテクチャとなる。ユーザープログラムのアーキテクチャ依存は、VMとカーネルの構造次第である。
実装例: 汎用機(メインフレーム) Xen http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
- そのほか
主に汎用OS上のアプローチになるが、Linux用のバイナリをFreeBSD上で動作させたり、Windows上で動作するバイナリをLinux上で実行するというアプローチもある。
Java VMのように、ハードウェアの仕様を吸収してある仕様のバイナリを動作させるというアプローチではなく、あるバイナリを動かすために(そのバイナリが)必要とする仕組みの再実装といえるので、「そのほか」に分類している。
上記の5つの中で、機能を実現するうえで何らかのハードウェアエミュレーションや実行モニタなどの作り込みが発生しているのは以下の3つである。
- ユーザープロセスによる仮想ハードウェアの実装
- ユーザープロセスによる「独立したカーネル」の実装
- 専用のモニタを用いる仮想マシン
性能的にはどうだろう。もちろん、最終的な性能は具体的な実装方法によるため、一概に「こうである」とはいい難いが、以下のような仮説が成り立つ。
- 汎用OS上で動作する環境は、汎用OSの影響/オーバーヘッドが発生
WindowsやLinuxなどの汎用OS上で動作する仮想マシン環境は、必ずそれらのOSによるプロセス制御の影響を受ける。
- 仮想化技術で実現する環境が「OS環境」なのか「ハードウェア環境」なのかによって、オーバーヘッドの大小が変わる
最終的に何らかのOSを動作させるのが目的である場合、仮想化技術が実現する環境によってソフトウェア構成に差異が生じる。
OS|ハードウェア環境を実現するソフトウェア
(VirtualPCやVMwareなど)OS環境を実現するソフトウェア
(User Mode LinuxやcoLinuxなど)||汎用OS汎用OS
また、メインフレーム的な専用モニタを使う場合は、専用モニタがOS的な役割を果たす。このモニタの目的はあくまで「適切に資源を割り振った仮想マシンを作成・提供する」ことであり、その上で動作するのはOSである。汎用OSとは設計思想が異なってくることもあり、汎用OSのように高機能にはならない傾向にある。結果として、汎用OSほど動作は重くならない。
Xenとは?
前述した仮想マシンの中で、おそらく耳慣れないものは「Xen」だろう。このXenについて、簡単に解説する。
■仮想マシンモニタ Xen
Xenは仮想マシンモニタであり、原稿執筆時点ではバージョン2がリリースされている。仮想マシンモニタは、簡単にいうと以下のような機能を実現するソフトウェアである。
- 仮想マシン実行環境の準備
- 仮想マシン実行時の各種管理機能の提供
Xenは、仮想マシンの実行単位を「ドメイン」として管理する。このドメインの中で動作するものが「OS」になる。
■Xenのアーキテクチャ
Xenは仮想マシンモニタであり、ドメインの中で動作するOSとハードウェアを仲介する性質を持つ。このため、ドメインの中で動作するOSも、Xenを経由して実行できるようになっていなければならない。このために、Xenアーキテクチャが必要となる。
Xenアーキテクチャ上で動作し、かつ比較的容易に入手可能なOSはLinuxとNetBSDの2つである。Xen版のWindowsも存在するが、容易に入手できるわけではないので、ここでは除外した。
|
2/2
|
|
|
||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム 仮想化技術関連記事 |
連載:実践! Xenで実現するサーバ統合 有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します |
|
特集:サーバの仮想化技術とビジネス展開の可能性 jailからUML/VMwareまで 1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった |
|
特集:仮想化技術のアプローチと実装 VMwareから要注目技術Xenまで 1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう |
|
特集:仮想OS「User Mode Linux」活用法 技術解説からカーネルカスタマイズまで Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
特集:仮想化技術の大本命「Xen」を使ってみよう インストール & Debian環境構築編 高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう |
|
特集:仮想化技術の大本命「Xen」を使ってみよう Xen対応カスタムカーネル構築編 Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる |
|
特集:IPv6、UML、セキュリティ機能の統合 全貌を現したLinuxカーネル2.6[第4章] 今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう |
|
Linux Squareプロダクトレビュー VMware Workstation 4 PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう |
|
古くて新しい「サーバ仮想化技術」の行方 サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する |
|
Linux Squareフォーラム全記事インデックス |
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|