这是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

对于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 的运作原理.

目前虚拟化的做法可以分为三种一是Paravirtualization 但缺点是Guest OS 需要经过修改才能使用,所以在Paravirtualization 下是不可能运作Windows 系统的.另外一种则是Full Virtualization 但这作法是将硬体以模拟的方式呈现,所以又会让Guest OS 的效能变差.第三种则是让CPU 去支援虚拟化Intel (VT) and AMD (AMD-V) ,因为有CPU 的支援第一种Paravirtualization 虚拟化的方式似乎变成多余了.
这就是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 就如下图所示:
 
Linux的核心(或是其他作业系统的核心)会运作在Kernel mode(supervisor mode)而一般的应用程式(Applications)就运作在user mode.如果应用程式(Applications)需要硬体资源时就透过system call向kernel提出请求.让Kernel完成作业.这样的架构可以确保系统的安全性.请参考CPU - Ring的说明  http://benjr.tw/?q=node/216
 

但是透 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(行程).

 
KVM 是由两个主要的元件(components)所组成:
 
1.Kernel Device Driver(managing the virtualization hardware) - 用来管理和模拟Virtual Machine 的硬体
2.User space process - qemu 是一个PC 硬体模拟器,经过KVM 的修改过而成为kqemu

Logo

更多推荐