Kernel-based Virtual Machine

出典: フリー百科事典『ウィキペディア(Wikipedia)』

出典: フリー百科事典『ウィキペディア(Wikipedia)』
KVM
Kvmbanner-logo2 1.png
Kvm running various guests.png
ゲストOSのNetBSDOpenSolarisKubuntuをホストOSのArch Linux上で動作させているQEMU/KVMのスクリーンショット
作者 Qumranet英語版
リポジトリ git.kernel.org/pub/scm/virt/kvm/kvm.git
プログラミング言語 C
対応OS Unix-like
プラットフォーム ARMIA-64PowerPCS/390x86x86-64
種別 仮想化
ライセンス GPL または LGPL
公式サイト www.linux-kvm.org
テンプレートを表示

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

KVMはもともとx86プロセッサ向けに設計されたが、後にS/390[5]PowerPC[6]IA-64ARM向けにも移植されている[7]

KVMは、Linux、BSD、SolarisWindowsHaikuReactOSPlan 9AROS Research Operating System[8]macOS[9]など、非常に幅広いゲストOSに対してハードウェア支援仮想化英語版を提供する。また、Android 2.2、GNU/Hurd[10](Debian K16)、Minix 3.1.2a、Solaris 10 U3、Darwin 8.0.1などのOSや上記OSの新しいバージョンでは、何らかの制限の元で動作することが知られている[11]

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

歴史[編集]

KVMの開発は、テクノロジーのスタートアップであるQumranet英語版で、Avi Kivityにより始められた[18]。Qumranetは、2008年レッドハットに買収された[19]

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

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

内部構造[編集]

KVM/QEMUによる仮想化環境の全体の概要[22]:3

KVM自体はエミュレーションは全く実行しない。そのかわりに、/dev/kvmインタフェースを公開することによって、ユーザースペースのホストが以下の機能を利用できるようにする。

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

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

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

エミュレート対象ハードウェア[編集]

種別 デバイス
ビデオカード Cirrus CLGD 5446 PCI VGAカード、Bochs VESA拡張を利用したダミーVGAカード[24]Virgil英語版(仮想3D GPUとして)[25]
PCI Intel 440FX英語版ホストのPeripheral Component Interconnect英語版PCIブリッジおよびPIIX3 PCI to ISA bridge[24]
入力デバイス PS/2マウスおよびキーボード[24]
サウンドカード Sound Blaster 16英語版、ENSONIQ AudioPCI ES1370英語版Gravis Ultrasound GF1英語版、CS4231A compatible[24]
イーサネット ネットワークカード AMD Am79C970A(Am7990英語版)、E1000(Intel 82540EM, 82573L, 82544GC)、NE2000英語版、Realtek RTL8139英語版
ウォッチドッグタイマー Intel 6300ESBまたはIB700
RAM 50 MB - 32 TB
CPU 1 – 160 CPU

グラフィカルな管理ツール[編集]

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

ライセンス[編集]

KVMの各部品は、以下のように様々なGNUライセンスでライセンスされている[26]

  • 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以降

関連項目[編集]

  • CloudStack
  • Comparison of platform virtualization software
  • Kernel same-page merging (KSM)
  • Lguest
  • libguestfs
  • libvirt
  • Open Virtualization Alliance
  • OpenNebula
  • OpenStack
  • oVirt
  • Vx32
  • Xen

脚注・出典[編集]

  1. ^ Linux kernel 2.6.20, Section 2.2. Virtualization support through KVM”. kernelnewbies.org (2007年2月5日). 2014年6月16日閲覧。
  2. ^ KVM FAQ: What do I need to use KVM?
  3. ^ FreeBSD Quarterly Status Report: Porting Linux KVM to FreeBSD”. 2008年10月3日閲覧。
  4. ^ KVM on illumos”. 2011年11月15日閲覧。
  5. ^ Gmane - Mail To News And Back Again”. 2007年5月7日閲覧。
  6. ^ Gmane Loom Archived 2007-09-29 at the Wayback Machine.
  7. ^ KVM/ARM Open Source Project
  8. ^ KVM wiki: Guest support status”. 2007年5月27日閲覧。
  9. ^ Running Mac OS X as a QEMU/KVM Guest”. 2014年8月20日閲覧。
  10. ^ status”. Gnu.org. 2014年2月12日閲覧。
  11. ^ Guest Support Status - KVM”. Linux-kvm.org. 2014年2月12日閲覧。
  12. ^ An API for virtual I/O: virtio”. LWN.net (2007年7月11日). 2014年4月16日閲覧。
  13. ^ OpenBSD man page virtio(4)”. 2018年2月4日閲覧。
  14. ^ virtio binary packages for FreeBSD”. 2012年10月29日閲覧。
  15. ^ NetBSD man page virtio(4)”. 2013年7月15日閲覧。
  16. ^ plan9front”. 2013年2月11日閲覧。
  17. ^ SCSI target for KVM wiki”. linux-iscsi.org (2012年8月7日). 2012年8月12日閲覧。
  18. ^ Interview: Avi Kivity Archived 2007-04-26 at the Wayback Machine. on KernelTrap
  19. ^ Red Hat Advances Virtualization Leadership with Qumranet, Inc. Acquisition”. レッドハット (2008年9月4日). 2015年6月16日閲覧。
  20. ^ Linux kernel 2.6.20, Section 2.2. Virtualization support through KVM”. kernelnewbies.org (2007年2月5日). 2014年6月16日閲覧。
  21. ^ Libby Clark (2015年4月7日). “Git Success Stories and Tips from KVM Maintainer Paolo Bonzini”. Linux.com. 2015年6月17日閲覧。
  22. ^ KVM/QEMU Storage Stack Performance Discussion (PDF)”. ibm.com. Linux Plumbers Conference (2010年). 2015年1月3日閲覧。[リンク切れ]
  23. ^ SeaBIOS”. seabios.org (2013年12月21日). 2014年6月16日閲覧。
  24. ^ a b c d wiki.qemu.org – QEMU Emulator User Documentation, read 2010-05-06
  25. ^ Introducing Virgil - 3D virtual GPU for qemu” (2013年7月18日). 2013年7月25日時点のオリジナルよりアーカイブ。2019年9月17日閲覧。
  26. ^ Ubuntu 7.04 /usr/share/doc/kvm/copyright からのライセンス情報