`

虚拟化之QEMU与KVM

    博客分类:
  • kvm
 
阅读更多
QEMU是个完全独立的虚拟环境,因为KVM的出现,使得某些同学(包括我自己)对QEMU和KVM之间的关系不是很清楚。QEMU本身可以不依赖于KVM,但是如果有 KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。这篇博文侧重点在QEMU这块,前期主要是考察一下其使用,以及和KVM之关系,后续的博文会涉及到两者间的一些实现机制。

QEMU目前最新的版本是1.1.0 ( http://www.qemu.org), download到本地后,比如放到/home/dennis/workspace/Linux下是qemu-1.1.0-1.tar.bz2, 解压之后得到一个qemu-1.1.0的目录,为了实验的目的,我不想让它替换掉我系统中已经安装的qemu工具集合(bin tools set),所以我在/home/dennis /workspace/Linux下面重新建立了一个目录,比如qemu-bin-dbg. 先进入到/home/dennis/workspace/Linux/qemu-1.10目录下,然后依次执行:
1)./configure --prefix=/home/dennis/workspace/Linux/qemu-bin-dbg --enable-debug
这一步需要说明的是,我实验用的环境是ubuntu 12.04, 内核版本是我自己更新的3.4.3, intel i3处理器,在我实际操作过程中出现了以下的错误:
Error: zlib check failed
Make sure to have the zlib libs and headers installed.
----------------------------------------------------------
google了一下,这个错误很容易解决:
apt-get install zlib1g-dev
apt-get install libglib2.0-dev
2) make
3) make install

然后我们到/home/dennis/workspace/Linux/qemu-bin-dbg目录下,会发现QEMU的工具集都放在了其中的bin目录下,其中会有qemu-i386和qemu-system-i386,前者只是对处理器的模拟(指令),后者则模拟一个基于i386的PC. 如果没有KVM的支持,比如rmmod kvm_intel,然后再运行qemu-system-i386,那么就会出现这样的提示信息:

Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.

因为前面我大体浏览过KVM的某些代码,KVM内核模块会生成一个“/dev/kvm”设备文件供用户空间程序使用,上面的提示信息就是因为QEMU在初始化阶段因为无法找到该“/dev/kvm"文件,因此认为当前系统没有提供对KVM的支持,因而QEMU回退到所谓的tcg accelerator模式,这从另一个角度说明,独立的QEMU虚拟化方案并不一定需要KVM提供支持。

我的理解是KVM模块的存在可以视为QEMU对i386处理器模拟的一种accelerator,如同GPU对3D的hardware acceleration一样(在没有GPU存在的情况下,软件也可以实现某些3D的功能,不过性能显然要慢多了,比如mesa).所以即便在kvm_intel.ko不存在的情况下,QEMU也可以完成对一个pc的虚拟化。

KVM是Kernel-based Virtual Machine,从存在形式看,是两个内核模块kvm.ko和kvm_intel.ko(对AMD处理器来说,就是kvm_amd.ko),这两个模块用来实现CPU的虚拟化,如果要让用户在KVM上完成一个虚拟机相关的操作,显然需要用户空间的东西,同时还包括IO虚拟化,所以KVM的解决方案借鉴了QEMU的东西并做了一定的修改,形成了自己的KVM虚拟机工具集和IO虚拟化的支持,也就是所谓的qumu-kvm.

所以总结下来是:QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。 而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU. 在我看来,KVM在用户空间的工具实际上是QEMU虚拟机管理工具的一个子集(KVM使用的QEMU代码可以在http://www.linux-kvm.org/page/Code上下载):KVM用户空间虚拟机管理工具有kvm, kvm-img, kvm-nbd ,kvm-ok 和kvm_stat,实际上kvm就是一个指向qemu-system-x86_64的符号链接,kvm-img则是指向qemu-img的符号链接,至少我的系统中就是如此。从适用的范围来讲, QEMU虚拟化方案除了支持x86架构外,还支持其他很多架构,这从上文中/home/dennis/workspace/Linux/qemu-bin-dbg/bin目录下的文件名就可以看出来,比如qemu-system-m68k,qemu-system-mips64, qemu-system-ppc64, qemu-system-arm等等。但是目前提到KVM,一般指x86上基于Intel VT和AMD SVM的解决方案,虽然目前将KVM移植到ARM, PPC的工作正在进行中。

当然由于redhat已经开始支持KVM,它认为KVM+QEMU'的方案中用户空间虚拟机管理工具不太好使,或者通用性不强(可以参考2011年10月份在南京大学举办的中国内核开发者大会上,来自redhat从事libvirt工作的资深专家 Daniel Veillard当天演讲的ppt文档:http://v.csdn.hudong.com/linuxkernal2011/page2.html),所以redhat想下一盘很大很大的棋,于是它搞了一个libvirt出来,一个用来管理虚拟机的API库,不只针对KVM,也可以管理Xen等方案下的虚拟机。关于libvirt,这是后话了,我会在后续的博文中予以讨论。

综上:QEMU虚拟化(模拟器)解决方案并不依赖KVM,而KVM虚拟化方案则一定要依赖QEMU(至少目前是),即便redhat开发了libvirt,但后者可以简单认为是一个虚拟机管理工具,libvirt依然需要用户空间的QEMU来和KVM交互。
分享到:
评论

相关推荐

    Qemu-kvm虚拟化技术介绍.pdf

    Qemu-kvm虚拟化技术是当前虚拟化技术的热点之一,该技术结合了Qemu和KVM两者的优势,提供了高性能和灵活的虚拟化解决方案。下面我们将对Qemu-kvm虚拟化技术的原理、架构和特点进行详细的介绍。 一、KVM原理简介 ...

    qemu-kvm0.12.1.tar.gz kvm虚拟化软件包

    QEMU-kvm是QEMU与KVM的结合,利用了Linux内核的虚拟化扩展,从而提供高性能的全虚拟化能力。 QEMU是一个通用的、基于CPU模拟的系统模拟器,它能够模拟多种处理器架构,如x86、ARM、MIPS等。通过QEMU,用户可以在一...

    详解虚拟化技术QEMU-KVM入门

    虚拟化技术QEMU-KVM入门是了解虚拟化技术的重要部分,特别是当涉及到在Linux环境下进行虚拟化实践时。QEMU-KVM由QEMU和KVM两个主要组件构成,它们各有特点,但结合后可以提供全面的虚拟化解决方案。 QEMU(Quick ...

    Qemu-kvm虚拟化技术介绍.pptx

    "Qemu-kvm 虚拟化技术介绍" 本文将对 Qemu-kvm 虚拟化技术进行详细的介绍,涵盖 Qemu-kvm 的原理、架构、虚拟化技术、磁盘格式、虚拟机硬盘生产等方面。 一、KVM 原理简介 KVM(Kernel-based Virtual Machine)是...

    qemu-kvm-1.1 源码下载

    KVM(Kernel-based Virtual Machine)是Linux内核中的一个模块,它将QEMU与Linux内核结合,提供高性能的虚拟化解决方案。`qemu-kvm-1.1`是QEMU与KVM集成的一个版本,发布于2012年,包含了针对KVM优化的QEMU组件。 ...

    qemu-kvm-code.tar

    通过与KVM(Kernel-based Virtual Machine)结合,QEMU-KVM成为了一个高效的全虚拟化解决方案,能够充分利用主机硬件的加速能力,提供接近原生性能的虚拟化体验。 "qemu-kvm-code.tar" 是一个包含QEMU源代码的...

    qemu-kvm源码分析

    本文档是qemu以及linux kernel中kvm模块代码解析,供参考

    基于QEMU-KVM的办公桌面云系统的设计与实现1

    【基于QEMU-KVM的办公桌面云系统设计与实现】主要关注的是如何利用虚拟化技术,特别是QEMU-KVM,来构建一个高效、安全且易于管理的办公桌面云环境。QEMU-KVM是一种流行的开源虚拟化平台,它结合了QEMU(快速模拟器)...

    云上的“越狱”——主流云虚拟化平台QEMU-KVM爆出高危漏洞​.pdf

    云虚拟化平台QEMU-KVM爆出的高危漏洞,不仅关系到单个企业的安全,更可能波及整个云服务行业,影响数以千计的用户信息财产安全。本文详细解析了QEMU-KVM漏洞的特性、潜在影响以及腾讯BladeTeam团队对漏洞的发现、...

    虚拟化技术KVM.pdf

    ##### 2.3 KVM与其他虚拟化技术对比 - **与Xen相比**:Xen支持半虚拟化技术,而KVM仅支持全虚拟化。半虚拟化可以提供更好的性能,但由于KVM的直接硬件访问能力,其性能差距已经很小。 - **与VMware相比**:VMware...

    QEMU_KVM设备虚拟化研究与改进

    QEMU_KVM设备虚拟化研究与改进

    qemu-kvm1.6 for centos

    QEMU(Quick Emulator)和KVM(Kernel-based Virtual Machine)是两个紧密相关的开源虚拟化技术,用于在Linux操作系统上创建和运行虚拟机。QEMU是一个通用的机器模拟器,可以模拟各种处理器架构,而KVM是Linux内核的...

    QEMU-KVM设备虚拟化研究与改进1

    【QEMU-KVM设备虚拟化】是虚拟化技术中的一个重要组成部分,主要应用于云计算和物联网等领域。KVM(Kernel-based Virtual Machine)是一种基于内核的虚拟机,它利用Linux内核的虚拟化功能来创建和管理虚拟机。QEMU则...

    基于KVM_QEMU与Libvirt的虚拟化资源池构建

    基于KVM_QEMU与Libvirt的虚拟化资源池构建,

    Libvirt Qemu KVM 教程大全

    本文档介绍了虚拟化的基础知识、不同类型的虚拟化技术以及 KVM、Qemu 和 Libvirt 之间的关系。通过了解这些核心概念和技术细节,您可以更好地理解如何在实际环境中部署和管理虚拟化环境。接下来的章节将深入探讨 ...

    linux下KVM虚拟化总结

    Linux 下 KVM 虚拟化环境部署和使用 KVM(Kernel-based Virtual Machine)是 Linux 内核虚拟化解决方案,提供了一个基于硬件的虚拟化环境。下面是 KVM 虚拟化环境的安装、搭建和使用方法: 一、环境要求 * 操作...

    QEMU-KVM虚拟PCI设备优化方法

    QEMU是一个通用的开源机器模拟器和虚拟化器,而KVM(Kernel-based Virtual Machine)是一个开源的Linux内核模块,它把QEMU和Linux内核的虚拟化技术结合在一起,利用硬件虚拟化扩展(如Intel VT技术或AMD技术)来提供...

Global site tag (gtag.js) - Google Analytics