前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KVM 与 Qemu 的关系

KVM 与 Qemu 的关系

原创
作者头像
软件书桌
发布2024-06-21 14:23:19
3090
发布2024-06-21 14:23:19
  • KVM

基于内核的虚拟机,Kernel-Based Virtual Machine。以色列公司 Qumranet 开发,于 2007 年 2 月被正式合并到 Linux2.6.20 核心中。

KVM 基于虚拟化扩展(Intel VT-x 或 Amd-V)的 x86 硬件,是 Linux 完全原生的全虚拟化解决方案。

在 KVM 架构中,虚拟机实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度。实际上,每个虚拟 CPU 显示为一个常规的 Linux 进程。这使得 KVM 能够享受 Linux 内核的所有功能。

KVM 本身不执行任何模拟,需要用户空间成程序通过 dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟 IO,并将它的视频显示映射回宿主的显示屏。目前,这个程序就是 Qemu 。

KVM 模块是 “KVM 虚拟机” 的核心部分。其主要功能是初始化 CPU 硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。

为了软件的简洁性并保证其性能,KVM 仅支持硬件虚拟化。“CPU 虚拟化” 和 “Memory 虚拟化” 都是由 KVM 模块完成。

  • QEMU

QEMU 全称是 "Quick Emulator"。它是一个开源的机器模拟器和虚拟化环境,能够模拟多种处理器架构,广泛用于开发、测试、虚拟化和其他应用场景。

它是一个完整的可以运行的软件,非常灵活且可移植,能够模拟一台能够独立运行操作系统的虚拟机。

虚拟机认为自己在和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 再将这些指令转译给真正的硬件。

QEMU 对虚拟机的模拟是通过纯软实现的,所有指令都要经过 Qemu 处理,导致性能很低。

实际上,大多数的做法都是配合 KVM 来完成虚拟化工作,KVM 是硬件辅助的虚拟化技术,主要负责比较繁琐的 CPU 和 Memory 虚拟化,而 Qemu 负责 IO 虚拟化,两者合作各自发挥自身的优势,相得益彰。

在支持 Qemu 本身编译运行的平台上就可以实现虚拟机的功能,虚拟机甚至可以和宿主机并不是同一个架构。

作为一个存在已久的虚拟机,Qemu 代码中有整套的虚拟机实现,包括 CPU 虚拟化、Memory 虚拟化以及 KVM 使用到的虚拟设备模拟(如网卡、显卡、存储控制器和硬盘等)。

  • 关系

左侧部分是一个标准的 Linux 操作系统,KVM 内核模块在运行时按需加载进入内核空间运行。

KVM 本身不执行任何设备模拟,需要用户空间程序 Qemu 通过 /dev/kvm 接口设置一个虚拟客户机地址空间,向它提供模拟的 IO 设备,并将它的视频显示映射回宿主机的显示屏。

为了简化开发和进行代码重用,KVM 在 Qemu 基础上进行了修改。虚拟机运行期间,Qemu 会通过 KVM 模块提供的系统调用进入内核,由 KVM 模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入输出操作,KVM 模块会从上次的系统调用出口处返回 Qemu,由 Qemu 负责解析和模拟这些设备。

从 Qemu 角度来看,Qemu 使用了 KVM 模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化的加速,从而极大提高了虚拟机的性能。除此之外,虚拟机的配置和创建、虚拟机运行依赖的虚拟设备、虚拟机运行时的用户操作环境和交互,以及一些针对虚拟机的特殊技术(诸如动态迁移),都是由 Qemu 自己实现的。

Qemu 是一个独立的虚拟化解决方案,通过 Intel-VT 或 AMD SVM 实现全虚拟化,安装 Qemu 的系统,可以直接模拟出另一个完全不同的系统环境,虚拟化的创建通过 Qemu-image 即可完成。

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

  • 总结

简单来说:

CPU 和 Memory 的虚拟化是由 HostOS Linux 内核中的 KVM 模块完成。

虚拟机的 IO 和视频映射由用户空间中的 Qemu 模拟器完成。

Qemu 可以通纯软的方式来模拟虚拟机,但是这样性能太低了。为了提高性能,Qemu 将对 CPU 和 Memory 的虚拟化借助 KVM 实现,因此 KVM 位于 Linux 内核中,可以直接对 CPU 和 Memory 实现虚拟化功能。这样,虚拟化的性能就大大提升了。

虚拟机以及镜像文件的操作管理主要还是 Qemu 负责,所以平时在 console 使用的还是 qemu 命令。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档