openstack, kvm, qemu-kvm以及libvirt之间的关系

本文详细介绍了KVM和QEMU两种虚拟化技术的工作原理及其在虚拟机管理中的角色,包括全虚拟化与半虚拟化技术的区别,以及它们如何与libvirt和OpenStack集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚拟化类型

全虚拟化(Full Virtualization)

全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调guest操作系统和原始硬件,VMM在guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。

图1 全虚拟化模型

全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。

半虚拟化(Para Virtualization)

半虚拟化是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的guest操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。

图2 半虚拟化模型

半虚拟化需要guest操作系统做一些修改,使guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。

虚拟化技术

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

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

图3 KVM虚拟化平台架构

KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VTAMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OSCPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口。见如下伪代码:

1
2
3
4
5
6
7
8
9
10
open( "/dev/kvm" )
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for  (;;) {
     ioctl(KVM_RUN)
         switch  (exit_reason) {
         case  KVM_EXIT_IO: 
         case  KVM_EXIT_HLT:
     }
}

 KVM内核模块本身只能提供CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完成的虚拟化技术,这就是下面要说的qemu-kvm。


qemu-kvm

QemuKVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm

Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能。

 wKiom1WdDc2CEwy6AAGPf4VzQao172.jpg


Xen

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

图4 Xen虚拟化平台架构

QEMU

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

Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件,Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。

由于所有的指令都要从Qemu里面过一手,因而性能较差wKiom1WdDYyjiVZiAAECBtAEQ5E590.jpg

libvirt

libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和APILibvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。

wKioL1WdD72RRy8mAAIuDm6sVAY591.jpg




参考:http://blog.youkuaiyun.com/gaoxingnengjisuan/article/details/9674315

Libvirt体系结构

    没有使用libvirt的虚拟机管理方式如下图所示:

    为支持各种虚拟机监控程序的可扩展性,libvirt实施一种基于驱动程序的架构,该架构允许一种通用的API以通用方式为大量潜在的虚拟机监控程序提供服务。下图展示了libvirt API与相关驱动程序的层次结构。这里也需要注意,libvirtd提供从远程应用程序访问本地域的方式。

    libvirt的控制方式有两种:
    1)管理应用程序和域位于同一节点上。管理应用程序通过libvirt工作,以控制本地域。

    2)管理应用程序和域位于不同节点上。该模式使用一种运行于远程节点上、名为libvirtd的特殊守护进程。当在新节点上安装libvirt时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地libvirt连接到远程libvirtd。


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 的关系。

图5 KVM和QEMU关系

openstack, kvm, qemu-kvm以及libvirt之间的关系

KVM是最底层的hypervisor,它是用来模拟CPU的运行,它缺少了对network和周边I/O的支持,所以我们是没法直接用它的。

QEMU-KVM就是一个完整的模拟器,它是构建基于KVM上面的,它提供了完整的网络和I/O支持。

Openstack不会直接控制qemu-kvm,它会用一个叫libvirt的库去间接控制qemu-kvm。libvirt提供了跨VM平台的功能,它可以控制除了QEMU之外的模拟器,包括vmware, virtualbox, xen等等。

所以为了openstack的跨VM性,所以openstack只会用libvirt而不直接用qemu-kvm。libvirt还提供了一些高级的功能,例如pool/vol管理。

原文:https://huangwei.me/wiki/tech_cloud_kvm_qemu_libvirt_openstack.html

<think>我们被要求回答关于QEMU-KVMLibvirtvirt-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)管理工具,旨在提供一个统一的方式来管理多种不同的虚拟化技术(如KVM、Xen、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]则提到了Libvirtvirt-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`),支持多种虚拟化技术(KVM、Xen 等)[^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、付费专栏及课程。

余额充值