KVM、QEMU与Libvirt的区别是什么?

2024年6月16日21:05:52KVM、QEMU与Libvirt的区别是什么?已关闭评论

KVM的全称为Kernel-based Virtual Machine,意为基于内核的虚拟机。狭义的KVM指的是一个嵌入Linux Kernel中的虚拟化功能模块,该功能模块在利用Linux Kernel 所提供的部分操作系统能力,如任务调度、内存管理及硬件设备交互的基础上,为其加入了虚拟化能力,使得 Linux Kernel 具有成为 Hypervisor(虚拟化管理软件)的条件。简而言之,KVM为Linux提供了硬件辅助虚拟化的能力,这依赖CPU的硬件虚拟机支撑。KVM内核模块本身只能提供CPU 和内存的虚拟化。KVM需要在具备Intel VT或AMD-V功能的x86平台上运行,所以 KVM 也被称为硬件辅助的虚拟化实现。KVM 包含一个提供给 CPU 的底层虚拟化可加载核心模块。但是,一般所说的KVM是广义的KVM,即一套Linux虚拟化解决方案。由于 KVM 内核模块本身只能提供 CPU 和内存的虚拟化,所以 KVM 需要一些额外的虚拟化技术组件来为虚拟机提供网卡、I/O 总线、显卡等硬件的虚拟化实现,最终变成我们所使用的Linux虚拟化解决方案。

QEMU 是一个广泛使用的开源计算机仿真器和虚拟机,它本质上也是一项虚拟化技术。QEMU 作为一个独立的 Hypervisor(不同于 KVM 需要嵌入 Linux Kernel 中),能在应用程序的层面上运行虚拟机,同时支持兼容 Xen/KVM 模式下的虚拟化。当QEMU运行的虚拟机架构与物理机架构相同时,建议使用KVM模式下的 QEMU,即 KVM+QEMU,此时 QEMU 可以利用 Qemu-kvm 加速模块,为物理机和虚拟机提供更好的性能。当 QEMU 作为仿真器时,QEMU 通过动态转化技术(模拟)为GuestOS模拟出CPU和其他硬件资源,让GuestOS认为自身直接在与硬件交互。QEMU 将这些交互指令转译给真正的物理硬件之后,再由物理硬件执行相应的操作。由于 GuestOS 的指令都需要经过QEMU的模拟,因而相对于虚拟机来说其性能较差。

Libvirt 是目前使用最为广泛的异构虚拟化管理工具及 API,Libvirt 由应用程序编程接口库、Libvirtd 守护进程、Virsh CLI 组成。其中,Libvirtd 守护进程负责调度管理虚拟机,其可以分为 root 权限的 Libvirtd 和普通用户权限的Libvirtd 两种。前者权限更大,可以虚拟出物理机的各种设备。Libvirt 本质上是一些所提供的库函数(C 语言),用于管理物理机的虚拟机。它引用了面向驱动的架构设计,对所有的虚拟化技术都提供了相应的驱动和统一的接口,所以Libvirt支持异构的虚拟化技术。另外,Libvirt提供了多种语言的编程接口,可以通过程序调用这些编程接口来实现对虚拟机的操作。由此可见,Libvirt具有非常强的可扩展性,OpenStack与Libvirt的联系就相当密切。在KVM 中,可以使用Virsh CLI调用Libvirtd守护进程,Libvirtd守护进程再通过调用Qemu-kvm加速模块来操作虚拟机。

KVM和QEMU是两种虚拟化解决方案。KVM负责CPU虚拟化+内存虚拟化,但不能模拟其他设备;QEMU 可以模拟 I/O 设备(网卡、磁盘)。KVM 加上 QEMU 之后就能实现真正意义上的服务器虚拟化,因为实际上一般会同时应用KVM和QEMU技术,所以一般都称为Qemu-kvm。

Libvirt 则调用 KVM 虚拟化技术的接口用于管理,用 Libvirt 管理更方便,直接用Qemu-kvm加速模块的接口较为烦琐。

  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。