Linux標準の仮想化技術「KVM」の仕組み:知って見るみるKVM(1)(2/2 ページ)
アナウンス後わずか2カ月でLinux Kernelにマージされたことで一躍注目を浴びることになった仮想化技術「KVM」。しかし、その具体的な仕組みや使用方法となると、意外と知られていないのではないでしょうか。この連載ではそんなKVMについて紹介します(編集部)
KVMにおける処理の仕組み
次に、KVMの仕組みについてもう少し踏み込んでみましょう。KVMでは、仮想マシンにリソースを割り振るためのスケジューラやメモリ管理については、Linux Kernelのものを利用します。ただし、KVMを使うことで変更される点が大きく2つあります。
- プロセスに新たなゲストモードが追加される
- ゲストOSからのI/O要求は/dev/kvmを経由して処理される
まず、1のゲストモードの追加についてです。
Linuxには通常、カーネルモードとユーザーモードの2つがあります。簡単にいえば、カーネルは前者で動作し、すべてのメモリ空間にアクセスすることができ、ほかのリソースを管理することができます。後者はいわゆる通常のプログラムが動作するモードで、アクセスできるリソースも限られています。
KVMを使うと新たにゲストモードが追加されますが、そのプロセス自体が、内部的にカーネルモードとユーザーモードというさらに2つのモードを持ちます。ゲストモードではゲストOSのI/O処理以外の命令を実行します。カーネルモードではゲストモードへの切り替えを行います。I/O処理や特別な命令を実行するときはゲストモードを終了し、ユーザーモードではゲストモードに代わって、I/O処理を実行します。
次に、2の/dev/kvm経由の処理についてです。KVMは2つのコンポーネントからなります。ハードウェアの仮想化を管理するためのデバイスドライバ/dev/kvmと、KVM用に修正されたQEMUからなる、とてもシンプルな構造です。QEMU/KVMのプロセスはゲストOSの物理メモリと、ゲストモードにおけるカーネルモードとして実行されるデバイスドライバの呼び出しとのマッピングを行います。I/O処理は、Copy On WriteディスクイメージやそのほかのQEMUの機能と一緒に、QEMUのI/O命令から直接生成されます。
このゲストOSのI/O命令は、次のような流れで実行されます。
1)ゲストがI/O命令を発行する
2)ホストカーネルが命令をトラップし、仮想マシンのユーザー空間に遷移する
3)仮想マシンのユーザー空間でゲストに代わってI/Oを初期化する
4)仮想マシンのユーザー空間からカーネルに制御が戻る
5)カーネルがゲストコードを再開する
この点で、KVMはほかのハイパーバイザに比べて性能的な優位性があります。ほかのハイパーバイザの一般的な処理では、ハイパーバイザの管理用特権もゲストOSが仲介します。ハイパーバイザは特権ゲストも管理しなければならず、これが落ちると、ハイパーバイザ自体の動作にも影響が発生するため、ほかのゲストOSよりも特権ゲスト自体が優先して実行されます。
ただし、この制御自体は複雑です。確かに、ほかのハイパーバイザに比べれば優位であるものの、実際のところKVMでもI/Oの性能改善が必要でしょう。とはいえ、KVMの開発速度は非常に速いので、今後徐々に改善されていくものと考えられます。
KVMって「はやってない」の?
ところで、KVMというと話題になったのは、Kernel 2.6.20にマージされたとき(2006年12月)と、KVMの主な開発を行っているQumranet社がRed Hatに買収されたとき(2008年9月)くらいです。それ以外にも細かな機能拡張はあるものの、一般の人にインパクトを与えるような大きく目立った話題はありません。そのせいもあってか、関心を持っている人は少ないように感じます。
なぜなんでしょうか? 理由を考えてみました。
1. 名称が悪い
これはいうまでもなく「KVMスイッチ」と競合していることです。Linuxのことは名前程度しか知らないという人であっても、業務である程度PCを使っているならば、KVMスイッチの方は知っている可能性が高いです。「知名度」という観点で考えると、やはりKVMスイッチとして定着したイメージを覆すだけのインパクトが必要でしょう。
2. リリースのタイミングが悪かった
KVMは2006年10月にリリース、12月にマージされました。そのため、いま使っている人、あるいは使ったことがある人でも、実際に使い始めたのは2007年になってからの人が多いかと思います。
ところが2007年当時、Intel VTやAMD-V対応のCPUは、自作PC用のパーツやメーカー製品のデスクトップ用PCの一部では採用されていましたが、ノートPCにはまだあまり採用されていませんでした。また、採用されていたとしても、BIOSレベルで仮想化支援機能を無効にされているものが多かった背景があります。
ノートPCのがらみの余談としては、当時Intel VTが使える一番安いノートPCはMacBookでした。MacBookを購入した技術者も多かったのですが、それは仮想化支援機能が使えるからというよりも、デュアルコアCPU搭載のノートPCとして一番安価だったのがMacBookだったという理由からで、実際のところ、仮想化を試すことを目的にして購入した方は少なかったのではないかと思います。またIntel Macの場合、BIOSではなくEFIを用いているため、Linuxの導入にはハードルがありました。結果として、仮想化環境を試すにしても、Mac OS Xで使えるParallels Desktopなどを利用する人が多かったと思います。
KVMは前述のとおり、CPUの仮想化支援機能が必須要件になるため、ハードウェアの買い替えや買い足しが必要になります。リリースされたタイミングが、Intel VTやAMD-V搭載のマシンが一般的に手に入るようになった時期よりも早かったのが大きいかもしれせん。一方で、Xenなどに比べると、リリースされたのが遅過ぎたともいえるでしょう。
3. 正式にサポートを表明しているベンダが少ない
XenやVMwareに比べると、KVMはサポートを表明しているベンダが非常に少ない、という現状があります。現時点でKVMのサポートを表明している有力な企業は、KVMの開発の中心となっているQumranetと、2008年9月にそのQumranetを買収したRed Hatくらいという状況です。また、まだ導入事例がないので、先行して導入する企業が現れるか、あるいはRed Hatがさらにインパクトのある発表を行うかが、今後KVMが話題になるための鍵かと思われます。
まとめ
今回はOSの仮想化技術のおさらいと、Linux Kernelに組み込まれているKVMの概要を紹介しました。次回は、KVMの導入・使用方法について紹介する予定です。
Copyright © ITmedia, Inc. All Rights Reserved.