- 浏览: 261388 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
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目前最新的版本是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交互。
发表评论
-
kvm虚拟机配置出错信息
2013-11-22 09:02 1519<network> <nam ... -
Xen 和 KVM 下如何关闭 virbr0
2013-11-21 15:25 555安装 Xen 或安装 KVM 后都会发现网络接口里多了一个叫做 ... -
CentOS中KVM桥连设置
2013-10-16 14:37 677CentOS中KVM桥连设置 在设置KVM桥连的时候碰到一 ... -
KVM下桥接的设置(Ubuntu 12.04)
2013-10-12 14:24 902KVM的Libvirt网络架构 ... -
kvm虚拟机桥连接
2013-09-25 14:12 7491.修改 /etc/network/interfaces文件 ... -
KVM/QEMU桥接网络设置及kvm资料[zz]
2013-09-24 10:11 1694KVM/QEMU桥接网络设置 配置kvm的网络有2种方法。其 ... -
Linux下为KVM 配置桥接设备
2013-09-22 16:49 1106在安装一个拥有虚拟化功能的Linux操作系统(此处以CentO ... -
从命令行启动KVM guest
2013-09-22 16:32 2683从命令行启动KVM guest ... -
Ubuntu安装KVM虚拟机
2013-09-10 15:09 770Ubuntu可以安装的虚拟机有KVM和apt自带的Vbox。 ... -
qemu-img命令详解2
2013-09-10 10:48 1118qemu-img是QEMU的磁盘管理 ... -
qemu-img命令详解
2013-09-10 10:46 1993qemu-img 命令行工 ... -
virtualbox和kvm的区别
2013-09-05 10:29 1900vbox 与 kvm 的区别: vbox 是由 qemu 改 ...
相关推荐
Qemu-kvm虚拟化技术是当前虚拟化技术的热点之一,该技术结合了Qemu和KVM两者的优势,提供了高性能和灵活的虚拟化解决方案。下面我们将对Qemu-kvm虚拟化技术的原理、架构和特点进行详细的介绍。 一、KVM原理简介 ...
QEMU-kvm是QEMU与KVM的结合,利用了Linux内核的虚拟化扩展,从而提供高性能的全虚拟化能力。 QEMU是一个通用的、基于CPU模拟的系统模拟器,它能够模拟多种处理器架构,如x86、ARM、MIPS等。通过QEMU,用户可以在一...
虚拟化技术QEMU-KVM入门是了解虚拟化技术的重要部分,特别是当涉及到在Linux环境下进行虚拟化实践时。QEMU-KVM由QEMU和KVM两个主要组件构成,它们各有特点,但结合后可以提供全面的虚拟化解决方案。 QEMU(Quick ...
"Qemu-kvm 虚拟化技术介绍" 本文将对 Qemu-kvm 虚拟化技术进行详细的介绍,涵盖 Qemu-kvm 的原理、架构、虚拟化技术、磁盘格式、虚拟机硬盘生产等方面。 一、KVM 原理简介 KVM(Kernel-based Virtual Machine)是...
KVM(Kernel-based Virtual Machine)是Linux内核中的一个模块,它将QEMU与Linux内核结合,提供高性能的虚拟化解决方案。`qemu-kvm-1.1`是QEMU与KVM集成的一个版本,发布于2012年,包含了针对KVM优化的QEMU组件。 ...
通过与KVM(Kernel-based Virtual Machine)结合,QEMU-KVM成为了一个高效的全虚拟化解决方案,能够充分利用主机硬件的加速能力,提供接近原生性能的虚拟化体验。 "qemu-kvm-code.tar" 是一个包含QEMU源代码的...
本文档是qemu以及linux kernel中kvm模块代码解析,供参考
【基于QEMU-KVM的办公桌面云系统设计与实现】主要关注的是如何利用虚拟化技术,特别是QEMU-KVM,来构建一个高效、安全且易于管理的办公桌面云环境。QEMU-KVM是一种流行的开源虚拟化平台,它结合了QEMU(快速模拟器)...
云虚拟化平台QEMU-KVM爆出的高危漏洞,不仅关系到单个企业的安全,更可能波及整个云服务行业,影响数以千计的用户信息财产安全。本文详细解析了QEMU-KVM漏洞的特性、潜在影响以及腾讯BladeTeam团队对漏洞的发现、...
##### 2.3 KVM与其他虚拟化技术对比 - **与Xen相比**:Xen支持半虚拟化技术,而KVM仅支持全虚拟化。半虚拟化可以提供更好的性能,但由于KVM的直接硬件访问能力,其性能差距已经很小。 - **与VMware相比**:VMware...
QEMU_KVM设备虚拟化研究与改进
QEMU(Quick Emulator)和KVM(Kernel-based Virtual Machine)是两个紧密相关的开源虚拟化技术,用于在Linux操作系统上创建和运行虚拟机。QEMU是一个通用的机器模拟器,可以模拟各种处理器架构,而KVM是Linux内核的...
【QEMU-KVM设备虚拟化】是虚拟化技术中的一个重要组成部分,主要应用于云计算和物联网等领域。KVM(Kernel-based Virtual Machine)是一种基于内核的虚拟机,它利用Linux内核的虚拟化功能来创建和管理虚拟机。QEMU则...
基于KVM_QEMU与Libvirt的虚拟化资源池构建,
本文档介绍了虚拟化的基础知识、不同类型的虚拟化技术以及 KVM、Qemu 和 Libvirt 之间的关系。通过了解这些核心概念和技术细节,您可以更好地理解如何在实际环境中部署和管理虚拟化环境。接下来的章节将深入探讨 ...
Linux 下 KVM 虚拟化环境部署和使用 KVM(Kernel-based Virtual Machine)是 Linux 内核虚拟化解决方案,提供了一个基于硬件的虚拟化环境。下面是 KVM 虚拟化环境的安装、搭建和使用方法: 一、环境要求 * 操作...
QEMU是一个通用的开源机器模拟器和虚拟化器,而KVM(Kernel-based Virtual Machine)是一个开源的Linux内核模块,它把QEMU和Linux内核的虚拟化技术结合在一起,利用硬件虚拟化扩展(如Intel VT技术或AMD技术)来提供...