介绍1
KVM虚拟机是基于linux内核虚拟化,自linux2.6.20之后就集成在linux的各个主要发行版本中。它使用linux自身的调度器进行管理,所以相对于xen,其核心源码很少。KVM的虚拟化需要硬件的支持(如intel VT技术或者AMD V技术),是基于硬件的完全虚拟化。而xen早期则是基于软件模拟的para-virtualization,新版本是基于硬件支持的完全虚拟化。
qemu是一种模拟处理器,现在运用最多的就是将KVM和QEMU结合起来。
准确来说,KVM是Linux kernel的一个模块,可以用命令modprobe去加载KVM模块。加载了该模块后,才能进一步通过工具创建虚拟机。但是仅有KVM模块是不够的。因为用户无法直接控制内核去做事情,还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个power的CPU,并可利用它编译出可运行在power上的CPU,并可利用它编译出可运行在power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。
如下图:
Linux Kernel-based Virtual Machine (KVM) 是一款 Linux 开放源码虚拟化软件,基于硬件虚拟化扩展(Intel VT- X 和 AMD-V)和 QEMU 的修改版。KVM 的实现模块又两个,分别是: kvm.ko是提供核心虚拟化的基础架构;特定于处理器的模块 kvm-intel.ko 和 kvm-amd.ko 。其设计目标是在需要引导多个未改动的 PC 操作系统时支持完整的硬件模拟。
一个普通的linux进程有两种运行模式:内核和用户。而KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。在kvm模型中,每一个虚拟机都是由linux调度程序管理的标准进程。
kvm由两个部分组成:一个是管理虚拟硬件的设备驱动,该驱动使用字符设备/dev/kvm作为管理接口;另一个是模拟PC硬件的用户空间组件,这是一个稍作修改的qemu进程。
介绍2
现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术。KVM也同hyper-V、Xen一样依赖此项技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。
准 确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情:还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出 可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两 大部分三个文件,分别是KVM模块、QEMU工具以及二者的合集。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系
介绍3
Qemu:
是一个完整的可以单独运行的软件,它可以用来模拟机器,非常灵活和可移植。它主要通过一个特殊的“重编译器”将为特定处理器编写二进制代码转换为另一种。
(也就是,在PPCmac上面运行MIPS代码,或者在X86 PC上运行ARM代码)
KQemu:
当源和目标代码有同样的架构的时候(就像最普通的情况 x86运行在x86上面),同样需要解析代码去除任何'特权指令'并且把它们替换为上下文转换。为了尽量使这个过程有效,有个内核模块KQemu处理这个事情。作为一个内核模块,KQemu仅仅需要替换最底层的ring0-only指令。在这个情况下,Qemu仍然为模拟的机器分配所有的RAM并且加载代码。不同的是,KQemu不需要重新编译代码,它仅仅调用KQemu去扫描/打补丁/执行。所有外围的硬件仿真是在Qemu中做的。虽然大部分代码都是没有变换的,但是KQemu还是需要转换ring0代码(VM内核的绝大部分代码),所以性能仍然不好。
KVM:
KVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器到一种新的用户 (guset)模式。用户模式有自己的ring状态集合,但是特权ring0的指令会陷入到管理器(hypervisor)的代码(遇到特权指令需要陷入hypervisor进行特殊处理)由于这是一个新的处理器执行模型,代码不需要任何的改动。除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用于管理VM)和一部分PCI模拟的硬件
kvm-qemu:
可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用callingKQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会KVM内核模块。该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。如果你需要一个有2或者4核的虚拟机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的Linux调度器,这个使得KVM代码量十分的小。当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。
在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专注于内核模块(如果某些部分确实有性能提升的话,KVM会将一小部分模拟代码移进来)和与剩下的用户空间代码的交互。
相关推荐
Qemu-kvm虚拟化技术介绍.pdf
基于KVM_QEMU与Libvirt的虚拟化资源池构建,
Qemu-kvm虚拟化技术介绍.pptx
KVM虚拟化技术实战与...第2章介绍了KVM的基本架构、QEMU的作用以及Intel的硬件虚拟化技术;第3章详细讲解了KVM依赖的硬件环境配置,编译和安装KVM和QEMU的步骤与方法,以及KVM客户机的启动;第4章深入讲解了KVM的基础
主要介绍了详解虚拟化技术QEMU-KVM入门,QEMU-KVM就是KVM与QEMU的结合,KVM负责CPU虚拟化+内存虚拟化,QEMU模拟其它IO设备,感兴趣的小伙伴们可以参考一下
QEMU_KVM设备虚拟化研究与改进
制作版本 centos update src.rpm seabios-0.6.1.2-8.el6 rhel 6.1/6.2 centos 6.1/6.2 ubuntu fedora 其他linux 应该都能用 稍后上传seabios-1.6.3 DELL windows 7 oem slic 2.1 bios 自动激活。...
Linux 0.11 内核实验室 —— 基于 Docker/Qemu/Bochs 的极速 Linux 0.11 内核学习和开发环境
本文档是qemu以及linux kernel中kvm模块代码解析,供参考
qemu-kvm 0.12.1.tar.gz 编译安装包 kvm虚拟化软件包
虚拟化环境qemu 与libvirt的解析
kvm是开源软件,全称是kernel-based ...是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的linux 全虚拟化 解决方案。它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-AMD.ko
KVM虚拟化需要的配置文件,包含/etc/libvirt/qemu/xml.example /etc/libvirt/qemu/networks/yzy_net.xml /usr/local/bin/clone /var/lib/libvirt/images/First_set.yzy
本报告探讨了使用快速仿真器(QEMU)虚拟化PLC的可能性。结果表明,使用QEMU实现PLC的虚拟化是可能的。然而,他们也指出,在QEMU中实现PLC可能非常昂贵,而且针对模拟PLC的开发可能与针对真实PLC的开发有不同的结果...
Linux 内核实验室 —— 基于 Docker/Qemu 的极速 Linux 内核学习、开发和测试环境。社区制作了多款免安装的随身Linux Lab系统盘,某宝检索”泰晓 Linux"快速体验
READHAT的KVM虚拟化技术白皮书,总结的很详细,包括虚拟化技术的发展,KVM的设计原理及机制等,很适合入门的人快速了解虚拟化技术及KVM
KVM Qemu Libvirt之间的关系
linux常用命令大全。Linux 内核实验室 —— 基于 Docker/Qemu 的极速 Linux 内核学习、开发和测试环境。...这些工作成果在我的硬盘里闲置了好多年,直到我遇到了 noVNC 和 Docker,并基于这些新技术开发了第一
主要介绍了KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法,需要的朋友可以参考下