KVM--基于内核的虚拟化技术


介绍KVM,它的本质以及如何配置和安装。虚拟化最近几年取得了长足的进步,首先由于有大量的开源虚拟机管理程序在不断发展,这个改进几乎排除了操作系统与大功率服务器快速增长的利用之间的障碍,公司立即受益。

知道最近,软件仿真虚拟化一直是关注的焦点,两个常见的软件仿真虚拟化途径是完全虚拟化和半虚拟化。对于完全虚拟化,通常调用管理程序或虚拟机监视器,存在于虚拟操作系统和硬件层之间,这个层在操作系统实例之间多路复用竞争系统资源。半虚拟化不同,管理程序在一个协作的环境中运作,因为每个客户操作系统都知道它正运行在一个虚拟化环境中,因此每个使用管理程序的协作都在硬件下完成虚拟。

两个途径都有优势也有劣势,半虚拟化的主要优势在于它运行尽可能快地基于软件的虚拟化,以不支持有专利的操作系统为代价。完全虚拟化没有这个限制,但是,完全虚拟化管理程序非常复杂。VMware,一个商业虚拟化解决方案,它就是一个完全虚拟化的例子,Xen,用户模式Linux(UML)和其他提供的是半虚拟化解决方案。

简单介绍一下基于硬件的虚拟化,这个线路已经变得模糊起来,随着Intel的VT技术和AMD的SVM技术的出现,编写一个管理程序变得更加简单了,现在,保持管理程序复杂性到最小程度,对于完全虚拟化受益匪浅。

Xen作为最优秀的半虚拟化引擎,在基于硬件的虚拟化的帮助下,现在也支持完全虚拟化MS windows了。KVM是一个相对较新的简单的,但也非常强大的虚拟化引擎,它已经集成到Linux内核中去了,让内核天生有虚拟化的能力,因为KVM使用的是基于硬件的虚拟化技术,它不需要修改客户操作系统,因此,部署在一个受支持的处理器上,它可以从Linux支持任何平台。

KVM

kvm是一个独特的管理程序,kvm开发者们发明了一个方法让Linux内核自身变成一个管理程序,通过将KVM作为一个内核模块实现,在虚拟环境下Linux内核集成管理程序将其作为一个可加载的模块可以简化管理和提升性能。这可能是开发者将KVM添加到内核的主要原因。

这种方法有许多优势,通过添加虚拟化功能到一个标准的Linux内核,虚拟环境能从所有正在Linux内核上运行的工作中受益,在这种模式下,每个虚拟机都是一个常规的Linux进程,通过Linux调度程序进行调度,通常,一个标准的Linux进程都有两个执行模式:内核模式和用户模式。对于应用程序而言用户模式是默认模式,当它需要一些来自内核的服务时就进入内核模式,如往磁盘上写入时。KVM添加了第三个模式:客户模式。

客户模式进程是运行在虚拟机内的,它非常象正常模式(无虚拟实例),有它自己的内核和用户空间变量、在客户模式下可以使用正常的kill和ps命令,因为无虚拟实例,KVM虚拟机表现为一个正常的进程,能象其他进程一样被杀掉,KVM利用硬件虚拟技术虚拟处理器的形态,虚拟机的内存管理由内核直接处理,目前的版本I/O在用户空间处理,主要通过QEMU完成。

一个典型的KVM安装包括以下部件:
一个管理虚拟硬件的设备驱动,这个驱动通过一个字符设备/dev/kvm陈列它的功能

一个模拟pc硬件的用户空间部件,目前,这在用户空间处理,它是一个稍微改动过的QEMU进程。

I/O模型直接衍生于QEMU,支持写时复制磁盘映像和其他QEMU特征。

你如何查明你的系统是否能运行KVM?首先,你需要一个支持虚拟化的处理器,这里有一个兼容KVM的处理器列表(http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors),看看你的处理器是否在其中。另外,你还可以检查/proc/cpuinfo,如果在cpu flags字段看到了vmx或smx,那么你的处理器就支持KVM。

如何比较KVM和现存的管理程序

相对它的竞争者而言,KVM还是一个比较新的项目,与KVM的主要开发者Avi Kivity会面时,他是这样与其他解决方案做对比的:

在许多方面,VMware是一个基础破坏技术,它只用软件技术管理众所周知地的复杂的x86架构的完全虚拟化,达到了非常好的性能和稳定性。结果,VMware变得非常大而其非常复杂的软件了。换句话说,KVM依赖于最新的硬件的虚拟技术,就其本身而论,它非常小(大约1万行代码)且相当简单,另外一个巨大的不同之处是VMware是有专利的,而KVM是开源的。

Xen是一个相当大的项目,同时提供半虚拟化和完全虚拟化,它被设计为一个独立的内核,它只需要Linux执行I/O,这样使得它相当的大,它有自己的调度程序、内存管理器、计时器和机器初始化程序。

相反,KVM使用标准Linux调度程序、内存管理器和其他服务。这样KVM开发者们可以集中精力在虚拟化上,将虚拟技术建立在内核上而不是去替换内核。

QEMU是一个用户空间模拟器,它是一个相当惊人的项目,可以在不同宿主处理器上模拟非常多的客户处理器,而且性能非常好。但是,用户空间架构不允许它在无内核加速器的情况下解决天生的速度问题。KVM认可QEMU的实用价值,使用它进行I/O硬件模拟。尽管KVM不带有任何特殊的用户空间,但QEMU代码写得非常好--因此我们使用了这些代码。

但是,KVM也不是完美的,因为它还是一个新技术,它包括下面的这样一些限制:

在写本文的时候,KVM仅支持Intel和AMD虚拟化,而Xen还支持IBM PowerPC和Itanium【安腾】处理器。

目前的版本最宿主SMP处理器的支持还比较弱

性能调整

但是,这个项目在快速地发展,按照Avi Kivity所说的,KVM已经在某些方面超过了Xen,将来在其他方面也将赶上Xen。

虚拟化如何工作

台虚拟化是一个旧技术了,但是,最近几年,硬件和操作系统都很成熟了,有望实现真正的虚拟化,大多数虚拟化基础部分是管理程序,管理程序在虚拟客户操作系统和真实硬件之间充当一个中间层,有时候,管理程序就是操作系统,如Xen,其他时候,它是用户层软件,如VMware,虚拟客户操作系统或虚拟实例是一个隔离的操作系统,但是,实际上是管理程序提供了这种幻觉。

支持虚拟化的处理器

由于虚拟技术的复活,微处理器厂商已经更新了它们的处理器,天生就支持虚拟化了。允许处理器直接支持管理程序,使得开发管理程序的任务更简单了,处理器为宿主操作系统和客户操作系统管理处理器的状态,还以虚拟操作系统的名义管理I/O和中断。

安装KVM

KVM已经被添加到许多发行版中了,包括OpenSUSE/SUSE,Fedora 7(内置了KVM),Debian和Ubuntu(Feisty)。

对于其他发行版而言,你需要下载2.6.20及以上的内核版本,在自定义编译内核时,在进行内核配置时选择Device?Virtualization,启用support for hardware-based virtualization【支持基于硬件的虚拟化】,你还可以随KVM模块一起从http://sourceforge.net/project/showfiles.php?group_id=180599获取用户空间工具。

我已经安装了OpenSUSE软件包,因此,在本文中例子中的文件名可能与你的发行版不一样。

创建客户操作系统

使用编译好的支持虚拟化技术的内核,下一步工作是为客户操作系统创建一个磁盘映像,你可以用qemu-img命令来完成,下面有展示,注意映像的大小是6GB,但是使用QEMU的写时复制格式(qcow)时,文件将按需增大,而不是一次性占用6GB空间。

#qemu-img create -f qcow image.img 6G

在目前的KVM版本下I/O是由QEMU处理的,因此让我们查看一些重要的QEMU参数:

-m:按兆字节(MB)显示的内存
-cdrom:理论上是一个ISO镜像文件,充当虚拟机的一个cd-rom驱动器,如果不指定cdrom参数,ide1主驱动器将充当cd-rom。
-hda:指向一个QEMU写时复制镜像文件,要指定多个磁盘,我们可以这样:
#qemu-kvm -m 384 -hda vmdisk1.img -hdb vmdisk2.img -hdc vmdisk3.img
-boot:允许我们自定义启动选项;-d参数指定从cd-rom启动。

默认命令从一个子窗口启动客户操作系统,但是你可以通过下面的参数以全屏模式启动:
-fulle-screen

另外,KVM允许在虚拟环境中进行低级硬件控制,你可以通过特殊的参数重定向串口、并口和USB端口到指定的设备。声音在虚拟机中也是支持的,你可以通过-soundhw参数在虚拟机中启用你的声卡。

下面是一些快捷键:
Ctrl-Alt-F:固定为全屏幕
Ctrl-Alt-N:切换到虚拟控制台N
Ctrl-Alt:固定鼠标和键盘

结论

随着Linux内核引入KVM,将来的Linux发行版将内置支持虚拟化技术,将不再需要任何双启动安装,因为所有你需要的所有应用程序都能直接从Linux桌面运行,KVM只是众多开源管理程序的其中一员,再一次肯定了开源已经成为虚拟技术的前进方向

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3