当我们谈论qemu & kvm & libvert的时候,我们在谈论什么?

来源:互联网 发布:php在线教育系统源码 编辑:程序博客网 时间:2024/05/13 23:58


当我们在谈论 qemukvmlibvert的时候,我们在谈论什么?

这里的讨论对象,其实我们还可以加上xen 和 qemu-kvm


qemu,其实是quick emulator的缩写。实际上来说,它不仅仅是一个emulator,更是一个virtualizer。下面摘录一段官网的介绍:

QEMU is a generic and open source machine emulator and virtualizer.

When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance.

When used as a virtualizer, QEMU achieves near native performance by executing the guest code directly on the host CPU. QEMU supports virtualization when executing under the Xen hypervisor or using the KVM kernel module in Linux. When using KVM, QEMU can virtualize x86, server and embedded PowerPC, 64-bit POWER, S390, 32-bit and 64-bit ARM, and MIPS guests.

简单来说,就是有xen和kvm帮忙,qemu可以玩的更好,性能更高;没有,也可以自己一个人玩。

一方面它可以是emulator,一方面也可以是vmm,也可以同时兼顾两方面的功能。


kvm,kernel-based virtual machine的简写,它是集成到Linux kernel之中的hypervisor,kvm专注于cpu和memory的虚拟化,

其余的操作和调度,实际上是交给Linux来完成的。从在OS里面的存在形式来讲,kvm是由kvm.ko和kvm_intel.ko(或者kvm_amd.ko)两个模块组成的。因为kvm是基于硬件的全虚拟化,需要硬件支持,比如说 intel-VT 和 AMD-V技术。

kvm作为一个纯内核态的存在,在虚拟化的实施过程中需要用户空间工具的支持,于是kvm的开发者们想到了qemu,于是就有了qemu-kvm,主要来做一些设备比如说usb、网卡之类的模拟还有一些I/O虚拟之类的操作,本质来说就是qemu+kvm。

我们现在用的时候只需要在用qemu启动虚拟机的时候加一个 --enable-kvm就行了。碰到特权指令,作为线程存在于host OS里的虚拟机就会调用到kvm模块,kvm就开始处理这些了。

从技术架构上来说,kvm的maintainer和developer喜欢把它归类到hypervisor模型里面,我表示很诧异。什么叫hypervisor模型?

就是vmm有host的所有物理资源,不光要管实的还要管虚的,不光管物理资源、还要管虚拟环境的创建和管理。

我表示kvm明明就是个专注于虚拟化的kernel模块,很符合那个宿主模型啊。。。。

当然,也有人说,自从kvm加入之后,Linux自己就成了hypervisor,所以kvm就是hypervisor模型。。。尼玛,这解释,我服!


xen,xen是Ctrix家的产品,以前人家是关门自己玩的,有开源版本有收费版本,当时牛逼哄哄的,后来全虚拟化的kvm横空出世,各大linux厂商迅速抛弃了xen,毕竟谁没事干喜欢去为了你专门修改OS来支持你这个半虚拟化的奇葩,虽然你的半虚拟化确实做得牛逼啊。

后来xen在cpu厂商(主要是intel)的支持下也搞全虚拟化,现在的xen,是一个即支持全虚拟化又支持半虚拟化的产品,但是我不看好,毕竟社区都在玩kvm,你xen当年抱残守缺,现在沦落到这个地步,也算是咎由自取吧。现在intel和xen在合伙搞xen-gt,是个专注于显卡的虚拟化的项目,结局如何不好说。

从技术架构上来说,xen是被归结到本系列我们上一篇文章虚拟化相关概念与技术整理(1)——关于VMM类型  里面提到的混合模型,即vmm拥有host的所有物理资源,但是它主动让渡出来一些设备的控制权限(主要是I/O设备),交由一个运行在特权虚拟机中的特权OS来管理,自己专注于CPU和memory的虚拟化,I/O的虚拟化由vmm和特权OS共同完成。

我们这里说的特权虚拟机,就是xen的架构里面提到的 domain 0,其他的虚拟机都被称之为domain U,与domain 0是平行的。

表示对于这个奇葩架构很不能接受,算了,不管了,我也不怎么玩xen。



libvert,libvert到底是什么?先从名字看,lib+virt,显然这是一个专注于虚拟化的库,好,现在我们知道它的性质→_→库,  主要作用→_→虚拟化。既然是库,那么肯定提供通用化的接口,那么它的组成里面肯定有一块是 API 的library,君不见,现在openstack等云计算的平台下面就用的libvirt。在开源界有个说法是不能重复发明轮子,前面有xen、kvm、qemu等主流的hypervisor珠玉在前,redhat显然不会傻到自己再去搞一套虚拟化的东西出来,所以libvirt这家伙也就只能是一个整合和对接一系列现有的成熟的虚拟化工具的工具,给这些工具打下手、做辅助的工具,实际的底层调用还是这些成熟的hypervisor,这么说算是明白了吧。

其实libvirt这家伙主要三部分组成,1,api library;2,一个叫libvirtd的deamon;3,一个命令行工具virsh。



好了,啰哩吧嗦的写了这么多,希望大家可以对于虚拟化的一些基本概念有个清晰认识,不能搞这行很久了许多概念还不清楚,那就贻笑大方了。

以上,是我自己的一些总结,如果有什么谬误,还请大家不吝赐教。O(∩_∩)O谢谢



quote:

1,https://wiki.archlinux.org/index.php/KVM

2,http://wiki.qemu.org/Main_Page

3,https://en.wikipedia.org/wiki/QEMU

4,http://libvirt.org/

5,https://www.ibm.com/developerworks/cn/linux/l-libvirt/#icomments



阅读全文
0 0
原创粉丝点击