「KVM」――Linux標準の仮想化機能の得意領域を知る
Linuxカーネルに統合された仮想マシン環境ここにきて、「VMware」や「Xen」に対抗する技術として、既存の仮想化資産を引き継ぎながら、新たなインフラストラクチャへと発展する可能性を秘めた新世代の仮想化技術がいくつか登場し始めている。本稿では、「インテルTXT」に続いて、Linuxカーネル標準の仮想化機能「KVM」を取り上げ、技術の仕組みや特徴、メリット、課題などを探る。
※(追記:2012年01月31日)本稿の内容を最新の情報に改訂する解説記事「「KVM」の今をとらえる速習講座」を公開しております。併せてご覧ください。
Linuxカーネル標準の仮想化機能「KVM」
KVMとは「Kernel-based Virtual Machine」の略であり、Linuxカーネルにハイパーバイザの機能を追加する仕組みである。完全仮想化(フル・バーチャライゼーション)による仮想マシン環境を提供し、仮想マシンを動作させたまま実マシン間を移動するライブ・マイグレーションにも対応する。
KVMはもともと、イスラエルの仮想化ベンダー、クムラネットが独自に開発したもので、2006年10月にアナウンスされ、同年12月にLinuxカーネルにマージされた(バージョン2.6.20)。現在は公開から間がないため、今すぐ企業で利用することは難しいと思われるが、次期Red Hat Enterprise LinuxのベースとなるFedoraにも導入され注目を浴びており、コミュニティ(http://kvm.qumranet.com/kvmwiki/)においても活発に開発が進められている。
KVMの基本的な実装はほぼ完成し、現在はゲストOS上で動作するパラドライバ(Para-virtualized Device Driver)の開発や、パフォーマンス・チューニング、IA以外のアーキテクチャへの対応が行われている。
CPUの仮想化機能を活用し「ネイティブ並み」の速度を実現
KVMでのI/Oエミュレーションは、従来から開発されているユーザー・モードでの完全仮想化環境を提供するエミュレータ「Qemu」をベースとしている。Qemuの基本的な動作は、これから実行する命令をチェックし、I/O処理などの特権が必要な場合には、ソフトウェアによるエミュレーション層に分岐して各種デバイスやCPU動作のエミュレーションを行い、エミュレーションが不要な場合には命令をそのまま実行する。
従来のQemuは、特権命令であるか否かの判定をソフトウェア・ベースで行っていたが、KVMではこれをCPUの仮想化支援機能を利用して行うことで、処理の大幅な高速化を実現している。
KVMは、Linuxカーネルのモジュールとして実装されており、CPUの仮想化支援機能(インテルVTまたはAMD-V)にアクセスするためのインタフェース (/dev/kvm)を提供する。これにより、カーネル・モード、ユーザー・モードに加えて、ゲスト・モードという新しい動作モードが追加されることになる(図1)。
ゲスト・モードではI/O以外の動作は自由に行えるが、I/O動作の命令はトラップされて、カーネル・モードに遷移する。そしてユーザー・モードで動作するハードウェア・エミュレーション層に制御が移る。ハードウェア・エミュレーション層は、必要に応じてエミュレーション処理、システムコールによる実デバイスへのリクエストを行う。
このようにKVMには、CPUの仮想化支援機能を活用する仕組みが実装されている。



























