Kernel-based Virtual Machine

Kernel-based Virtual Machine (KVM) は、Linuxカーネルをハイパーバイザとして機能させるための仮想化モジュールである。Linuxカーネルのメインラインにバージョン2.6.20でマージされ、このカーネルは、2007年2月5日にリリースされた。KVMは、VTやAMD-Vなどのハードウェアの仮想化拡張を必要とするKVM FAQ: What do I need to use KVM?。KVMは、他のオペレーティングシステム (OS) であるFreeBSDやillumosにも、ローダブル・カーネル・モジュールの形態で移植されている。

KVMはもともとx86プロセッサ向けに設計されたが、後にS/390、PowerPCGmane Loom 、IA-64、ARM向けにも移植されているKVM/ARM Open Source Project。IA-64のサポートは2014年に終了した。

KVMは、Linux、BSD、Solaris、Windows、Haiku、ReactOS、Plan 9、AROS Research Operating System、macOSなど、非常に幅広いゲストOSに対してを提供する。また、Android 2.2、GNU/Hurd（Debian K16）、、Solaris 10 U3、Darwin 8.0.1などのOSや上記OSの新しいバージョンでは、何らかの制限の元で動作することが知られている。

さらに、KVMでVirtIO APIを利用することで、Linux、OpenBSD、FreeBSD、NetBSD、Plan 9、WindowsのゲストOSに対して、準仮想化の機能も提供する。準仮想化対象には、準仮想イーサネットカード、ディスクI/Oコントローラー、ゲストOSの仮想記憶管理の動作を変更するバルーンデバイス (balloon device)、またはVMwareを使用したVGAグラフィックインタフェースも含まれる。

 歴史 
KVMの開発は、テクノロジーのスタートアップであるで、Avi Kivityにより始められたInterview: Avi Kivity  on KernelTrap。Qumranetは、2008年レッドハットに買収された。

KVMは、Linuxカーネルのメインラインにバージョン2.6.20でマージされた。このLinuxカーネルは、2007年2月5日にリリースされた。

KVMは、Paolo Bonziniによりメンテナンスされている。

 内部構造 
右|サムネイル|KVM/QEMUによる仮想化環境の全体の概要
KVM自体はエミュレーションは全く実行しない。そのかわりに、/dev/kvmインタフェースを公開することによって、ユーザースペースのホストが以下の機能を利用できるようにする。

 ゲストVMのアドレス空間のセットアップ。ホストは、ゲストがメインOS内にブートストラップするために利用するファームウェアイメージも提供する必要がある。通常、PCをエミュレートする時のカスタムBIOSである。
 ゲストのシミュレートされたI/Oをフィード。
 ゲストのビデオディスプレイをシステムホストにマッピング。

Linuxでは、QEMUのバージョン0.10.1以降がユーザー空間のホストの1例である。QEMUは、ゲストをネイティブに近い速度で仮想化できる場合にはKVMを使うが、そうでない場合には、ソフトウェアのみのエミュレーションにフォールバックする。

内部では、KVMは、16ビットx86BIOSのオープンソース実装としてを利用している。

 エミュレート対象ハードウェア 
種別デバイスビデオカードCirrus CLGD 5446 PCI VGAカード、Bochs VESA拡張を利用したダミーVGAカードwiki.qemu.org – QEMU Emulator User Documentation, read 2010-05-06、VirtIO、QXL VGAPCII440FX or Q35入力デバイスPS/2マウスおよびキーボードサウンドカード、ENSONIQ AudioPCI  AC97、、CS4231A compatible、HD Audioイーサネット ネットワークカードAMD Am79C970A（）、E1000（Intel 82540EM, 82573L, 82544GC）、、Realtek 、VirtIOウォッチドッグタイマーIntel 6300ESBまたはIB700RAM50 MB - 32 TBCPU1 – 160 CPU

 グラフィカルな管理ツール 
代替文=|サムネイル|300x300ピクセル|libvirtはKVMをサポートしている

  ウェブベースのKVM仮想化管理ツール。
 Virtual Machine Manager はKVMベースの仮想マシンの作成、編集、スタート、ストップに対応している。また、ホスト間でドラッグ・アンド・ドロップによるVMのライブまたはコールドマイグレーションもできる。
 Proxmox Virtual Environment KVMとLXCを含むオープンソースの仮想化管理パッケージ。ベアメタルのインストーラ、ウェブベースのリモート管理GUI、HAクラスタースタック、統合ストレージ (unified storage)、柔軟なネットワーク管理 (flexible network)、オプションの商用サポートがある。
  ヘテロジニアスなデータセンターのインフラストラクチャーを管理するための管理プラットフォーム。
 GNOME Boxes Linux上のlibvirtのゲストを管理するためのGNOMEインタフェース。
  libvirtを基盤に構築された、KVMのためのオープンソースの仮想化管理ツール。

 ライセンス 
KVMの各部品は、以下のように様々なGNUライセンスでライセンスされているUbuntu 7.04 /usr/share/doc/kvm/copyright からのライセンス情報。

 KVM カーネルモジュール: GPL v2
 KVM ユーザモジュール: LGPL v2
 QEMU 仮想CPUコアライブラリ (libqemu.a) とQEMU PCシステムエミュレータ: LGPL
 LinuxユーザモードQEMUエミュレータ: GPL
 BIOSファイル (bios.bin, vgabios.bin, vgabios-cirrus.bin) : LGPL v2以降

 関連項目 

 脚注・出典 

 外部リンク 
kvm ホームページ
KVM初のベンチマーク結果 2006年12月
News, Blogs and Resources on the Linux (KVM) Kernel-Based Virtual Machine
Getting to know the Linux Kernel Virtual Machine Presentation
KVM virshコマンドのまとめ

Category:オープンソースソフトウェア
カテゴリ:仮想マシン
Category:仮想化
Category:Linux
カテゴリ:Linuxカーネルの機能
Category:Cでプログラムされた自由ソフトウェア
カテゴリ:GNU General Public Licenseを利用するソフトウェア