1,956 瀏覽數

Kernel-based Virtual Machine

這是 wiki 對於 KVM 的定義.
http://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine

Kernel-based Virtual Machine (KVM) 是 Linux 核心的架構下的一部份,目前 KVM 支援 native virtualization 的架構.native virtualization (也有人稱為 hardware-assisted virtualization) 是由 CPU 來支援的虛擬化技術Intel 叫做 VT(Virtualization Technology) 或者 AMD 的 V Pacifica.在 Linux 這兩種 CPU 透過兩個不同的 module 來支援 KVM (INTEL: kvm-intel.ko AMD: kvm-amd.ko).在 RHEL5 update4 會自動依據 /proc/cpuinfo 的 flag 來選擇出適合的 CPU 模組 ,這 script 檔儲存在  /etc/sysconfig/modules/kvm.modules
intel-vt-x
對於 paravirtualization 的支援,目前像是他同時支援 Linux 和 Windows 的 Paravirtual network 裝置驅動程式,以及 balloon (關於記憶體的技術 VMM – virtual memory manager) 還針對 Linux Guest 的 CPU 做最佳化.

目前 KVM 只能運作在 i386 / x86_64 的 CPU 系統上,像是 s390,[3] PowerPC,[4] and IA64 都還在開發階段.Linux 的核心小組在 Linux 2.6.20 (February 2007) 版本就將 KVM 包括進去.至於 Linux 的兄弟 FreeBSD 也支援 KVM 以 Kernel module 方式來支援.

最重要的 Guest OS 支援基本上是囊闊市面上的作業系統了,雖然有一些我連聽都沒聽過都有支援.像是 Linux, BSD, Solaris, Windows, Haiku, ReactOS 和 AROS Research Operating System連 Mac OS X 都在特定版本的 KVM 有支援.可以上 KVM 的關網查詢 Guest OS 的支援. http://www.linux-kvm.org/page/Guest_Support_Status

不過光靠 KVM 還無法將虛擬化的工作完成,還須配合 QEMU 做一些裝置模擬以及下列的 GNU 的軟體.

  • KVM kernel module: GPL v2
  • KVM user module: LGPL v2
  • QEMU virtual CPU core library (libqemu.a) 和 QEMU PC system emulator: LGPL
  • Linux user mode QEMU emulator: GPL
  • BIOS files (bios.bin, vgabios.bin and vgabios-cirrus.bin): LGPL v2 or later

KVM 目前是由一家叫做 Qumranet 公司的 Avi Kivity 來做維護,不過目前已轉移給 Red Hat 來使用所以在未來 RHEL 的版本都會以 KVM 為主.

不過讓我比較好奇的是 KVM 只是 Linux 核心的一部份,那就不會像是傳統使用 VMM(Virtual machine monitor) 來管理分配 Guest 的資源.那是由誰來管理分配,那 Linux 的 Kernel 也會被安置在 Root mode 嗎??看一下 KVM 的運作原理.

KVM 的運作原理 http://www.linuxinsight.com/finally-user-friendly-virtualization-for-linux.html
目前虛擬化的做法可以分為三種一是 Paravirtualization 但缺點是 Guest OS 需要經過修改才能使用,所以在 Paravirtualization 下是不可能運作 Windows 系統的.另外一種則是 Full Virtualization 但這作法是將硬體以模擬的方式呈現,所以又會讓 Guest OS 的效能變差.第三種則是讓 CPU 去支援虛擬化 Intel (VT) and AMD (AMD-V) ,因為有 CPU 的支援第一種 Paravirtualization 虛擬化的方式似乎變成多餘了.
kvm02_0
這就是 KVM 所支援的方式,直接透過有虛擬化的 CPU 去讓系統支援 Full Virtualization 的 Guest OS.另外一個重點是 KVM 不須獨立的 Linux 核心當 VMM(Virtual Machine Monitor) ,它透過一般 Linux 核心加入 KVM 再讓這 Linux 核心當作 VMM ,直接讓虛擬化帶入到一般核心的世界中.也因此在 KVM 下的 Guest OS 對於 Linux 核心而言都只是一個 Process(行程).
傳統的 Linux 在執行時有以區分為 Kernel mode(supervisor mode) 和 user mode 就如下圖所示:
traditional_system

Linux 的核心(或是其他作業系統的核心)會運作在 Kernel mode(supervisor mode) 而一般的應用程式(Applications) 就運作在 user mode.如果應用程式(Applications)需要硬體資源時就透過 system call 向 kernel 提出請求.讓 Kernel 完成作業.這樣的架構可以確保系統的安全性.請參考 CPU – Ring 的說明 http://benjr.tw/3407
但是透 Intel (VT) and AMD (AMD-V) 的支援,Linux 的核心(就是 VMM)再加上 KVM 的功能,就可以直接實現虛擬化的環境,其實 KVM 的運作方式和 Xen 的 Full virtualization 類似,除了原本的 Kernel 和 User 模式外還多了一個 Guest mode 模式(這模式可以讓 Guest OS 自己擁有Kernel 和 User 模式),每一個 Virtual Machine 對 Linux 而言就如同一個  Process(行程).
kvm01_0

KVM 是由兩個主要的元件(components)所組成:

  1. Kernel Device Driver(managing the virtualization hardware) – 用來管理和模擬 Virtual Machine 的硬體
  2. User space process – qemu 是一個 PC 硬體模擬器,經過 KVM 的修改過而成為 kqemu

這後面還會針對這兩個最主要的元件做介紹.

6 個網友的想法 “Kernel-based Virtual Machine

  1. 自動參照通知: KVM(Kernel-based Virtual Machine) + KQEMU – Benjr.tw

  2. 自動參照通知: QEMU machine emulator (Ubuntu) – Benjr.tw

  3. 自動參照通知: ARM KVM (Ubuntu) – Benjr.tw

  4. 自動參照通知: ARM KVM (CentOS) – Benjr.tw

  5. 自動參照通知: KVM – RHEL5 update4 | Benjr.tw

  6. 自動參照通知: Virtualization | Benjr.tw

發表迴響