qemu,kvm,qemu-kvm,xen,libvir 区别

KVM:(Kernel-based Virtual Machine)基于内核的虚拟机

KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。

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

Xen

Xen是第一类运行再裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,Xen支持hypervisor和虚拟机互相通讯,而且提供在所有Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。 QEMU is used by Xen.

QEMU

QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性,qemu可以虚拟出不同架构的虚拟机,如在x86平台上可以虚拟出power机器kqemu为qemu的加速器经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

QEMU本身可以不依赖于KVM,但是如果有 KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。


KVM和QEMU的关系

准确来说,KVM是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。

QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。 而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU. 

KVM用户空间虚拟机管理工具有kvm, kvm-img, kvm-nbd ,kvm-ok 和kvm_stat,实际上kvm就是一个指向qemu-system-x86_64的符号链接,kvm-img则是指向qemu-img的符号链接。从适用的范围来讲, QEMU虚拟化方案除了支持x86架构外,还支持其他很多架构,比如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'的方案中用户空间虚拟机管理工具不太好使,或者通用性不强
,所以redhat想了一个libvirt出来,一个用来管理虚拟机的API库,不只针对KVM,也可以管理Xen等方案下的虚拟机。


 

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和硬件。

from http://yansu.org/2013/03/20/different-bewteen-kvm-xen-qemu.html

from http://blog.chinaunix.net/uid-23769728-id-3256677.html

from http://zhidao.baidu.com/question/536621740.html


转自:http://blog.sina.com.cn/s/blog_605f5b4f0102uyjv.html

<think>我们被要求回答关于QEMU-KVMLibvirt和virt-install是什么软件及其用途的问题。根据提供的引用,我们可以整理如下: 1. **QEMU-KVM**: - QEMU是一个独立的虚拟化解决方案,可以模拟完整的计算机系统(包括处理器和周边设备)。它支持多种架构,并能在没有硬件虚拟化支持的情况下通过二进制转换实现虚拟化,但性能较低。 - KVM(Kernel-based Virtual Machine)是Linux内核的一个模块,它利用处理器的硬件虚拟化扩展(如Intel VT或AMD-V)来提供处理器虚拟化功能。KVM本身只提供处理器和内存虚拟化,不处理设备虚拟化- QEMU-KVMQEMU的一个修改版本,它集成了KVM模块,从而利用硬件虚拟化扩展来提高虚拟机的性能。当QEMU使用KVM时,它通过`/dev/kvm`接口与KVM模块交互,将处理器和内存的虚拟化任务交给KVM,而QEMU则负责设备模拟和其他管理任务。这样,QEMU-KVM就成为了一个完整的、高性能的虚拟化解决方案。 2. **Libvirt**: - Libvirt是一个开源的API、守护进程(libvirtd)和管理工具,旨在提供一个统一的方式来管理多种不同的虚拟化技术(如KVMXen、VMware等)。 - 它提供了一套抽象的API,使得上层管理工具(如virsh、virt-manager等)可以通过Libvirt来管理虚拟机,而无需关心底层虚拟化技术的具体细节。 - Libvirt还提供了虚拟机生命周期管理(启动、停止、暂停等)、网络管理、存储管理等功能,并支持远程管理。 3. **virt-install**: - virt-install是一个命令行工具,用于创建新的虚拟机。它是libvirt项目的一部分,通常与libvirt一起安装。 - 它简化了虚拟机的创建过程,用户可以通过命令行参数指定虚拟机的各种属性(如CPU、内存、磁盘、网络、安装介质等),而无需手动编写复杂的XML配置文件(libvirt使用XML定义虚拟机)。 - virt-install会生成相应的虚拟机XML定义,并通过libvirt API与底层的虚拟化技术(如KVM)交互来启动虚拟机。 **用途总结**: - **QEMU-KVM**:提供高性能的虚拟化环境,利用硬件辅助虚拟化技术运行虚拟机。 - **Libvirt**:提供统一的虚拟机管理接口,简化不同虚拟化技术的管理。 - **virt-install**:用于快速创建虚拟机,是使用libvirt管理虚拟机的便捷工具。 它们之间的关系可以这样理解:QEMU-KVM提供底层的虚拟化能力,Libvirt提供管理这些虚拟机的统一接口,而virt-install则是利用Libvirt接口创建虚拟机的工具。 根据引用[1]:QEMU是一个独立的虚拟化解决方案,而KVM是内核中处理虚拟化扩展的模块,两者结合(即QEMU-KVM)构成了一个完整的虚拟化解决方案。引用[3]进一步说明KVM负责CPU和内存虚拟化QEMU负责设备虚拟化。引用[2][4][5]则提到了Libvirt和virt-install在管理虚拟机中的应用。 因此,我们可以这样组织回答: 1. 分别介绍三个组件是什么。 2. 说明它们各自的主要用途。 3. 简要说明它们之间的关系。 最后,按照要求生成相关问题。</think>### QEMU-KVMLibvirt、virt-install 软件解析 #### 1. **QEMU-KVM** QEMU-KVM 是 **硬件虚拟化解决方案** 的核心组件: - **QEMU**:开源的设备模拟器,负责虚拟化硬件设备(磁盘、网卡等),支持跨平台虚拟化- **KVM**:Linux 内核模块,利用 CPU 硬件虚拟化扩展(Intel VT/AMD-V)实现处理器和内存的高效虚拟化[^3]。 - **整合作用**:QEMU-KVM 将两者结合,QEMU 处理设备模拟,KVM 处理 CPU/内存虚拟化,形成完整的虚拟化方案(例如执行 `qemu-kvm -enable-kvm` 启用加速)[^1][^3]。 **用途**:直接运行虚拟机,提供接近物理机的性能。 #### 2. **Libvirt** Libvirt 是 **虚拟化管理抽象层**: - 提供统一的 API 和工具(如 `virsh`、`virt-manager`),支持多种虚拟化技术(KVMXen 等)[^2][^4]。 - 核心组件包括守护进程 `libvirtd` 和 XML 配置文件(定义虚拟机资源)[^2]。 **用途**: - 管理虚拟机生命周期(启动/停止/迁移)。 - 配置虚拟网络/存储(如通过 XML 定义网桥或磁盘)。 - 支持远程管理(通过 TLS/SSH)[^4]。 #### 3. **virt-install** virt-install 是 **虚拟机创建工具**: - 基于 Libvirt 开发的命令行工具,用于快速创建虚拟机。 - 通过简单命令生成虚拟机配置(自动生成 XML),无需手动编写复杂配置[^5]。 **用途**: - 一键创建虚拟机(指定 CPU/内存/磁盘/安装源): ```bash virt-install --name vm1 --memory 2048 --disk size=20 --cdrom /iso/ubuntu.iso ``` - 简化批量部署流程,常用于自动化脚本。 ### 三者协作关系 1. **QEMU-KVM** 提供底层虚拟化能力(运行虚拟机)。 2. **Libvirt** 通过 API 管理 QEMU-KVM 虚拟机(如启动命令 `virsh start vm1`)[^4][^5]。 3. **virt-install** 调用 Libvirt 创建虚拟机配置并启动(依赖 Libvirt 的 XML 架构)[^5]。 > 简言之:virt-install → 生成配置 → Libvirt 管理 → QEMU-KVM 执行。 ### 典型应用场景 - **云计算平台**(如 OpenStack):Libvirt 管理 QEMU-KVM 虚拟机集群[^5]。 - **开发/测试环境**:用 virt-install 快速创建隔离的虚拟机。 - **服务器虚拟化**:QEMU-KVM 提供高性能的虚拟化基础设施。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值