共计 1406 个字符,预计需要花费 4 分钟才能阅读完成。
OpenStack 中如何理解 KVM 和 QEMU,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
一、KVM 概述
KVM 是 Kernel-based Virtual Machine 的缩写,即基于 linux 内核的虚拟机,是一种的完全虚拟化的解决方案,也就是说普通的操作系统不需经过修改就可以在 KVM 上运行。它使用 linux 自身的调度器进行管理,所以相对于 xen,其核心源码很少。KVM 的虚拟化需要硬件的支持(如 intel VT 技术或者 AMD V 技术),是基于硬件的完全虚拟化。
准确来说,KVM 是 Linux 的一个模块。可以用 modprobe 去加载 KVM 模块。加载了模块后,就可以使用 KVM 模块创建虚拟机,实现虚拟内存的分配,虚拟 CPU 寄存器的读写以及管理虚拟 CPU 的运行。但仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块去作事情,所以还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件 QEMU,使用它来模拟 PC 硬件的用户空间组件,模拟 I / O 设备模型以及提供访问外设的途径。后边会详细的介绍 QEMU,这里先知道它用了 QEMU 就好了。
KVM 基本架构如下图所示。
其中 KVM 被加入到标准的 Linux 内核中,被组织成 Linux 中标准的字符设备 (/dev/kvm)。Qemu 利用 KVM 提供的 LibKvm 应用程序接口,通过 ioctl 系统调用创建和运行虚拟机。KVM Driver 使得整个 Linux 成为一个虚拟机监控器。并且在原有的 Linux 两种执行模式(内核模式和用户模式) 的基础上,新增加了客户模式,客户模式拥有自己的内核模式和用户模式。在虚拟机运行下,三种模式的分工如下:
客户模式:执行非 I / O 的客户代码,虚拟机运行在客户模式下。
内核模式:实现到客户模式的切换,处理因为 I / O 或者其它指令引起的从客户模式的退出,KVM Driver 工作在这种模式下。
用户模式:代表客户执行 I / O 指令 Qemu 运行在这种模式下。
KVM 的具体工作流程如下:
用户模式的 qemu 利用 libkvm 通过 ioctl 进入内核模式,kvm 模块未虚拟机创建虚拟内存,虚拟 CPU 后执行 VMLAUCH 指令进入客户模式。加载 Guest OS 并执行。如果 Guest OS 发生外部中断或者影子页表缺页之类的情况,会暂停 Guest OS 的执行,退出客户模式出行异常处理,之后重新进入客户模式,执行客户代码。如果发生 I / O 事件或者信号队列中有信号到达,就会进入用户模式处理。
二、QEMU 概述
QEMU(Quick Emulator)是一个独立的开源虚拟机软件,它是通过纯软件来仿真 X86 平台处理器的取指、解码和执行,虚拟客户机的指令并不在物理平台上直接执行,它利用其中的微型代码生成器模块进行动态翻译,将需要模拟的客户机的代码架构转换成主机代码架构并最终执行。QEMU 虚拟机是一个纯软件的实现(KVM 需要硬件虚拟化技术支持),所以性能低下。但是,其优点是虚拟机可以与宿主机并不是同一个架构。与 KVM 不同的是,QEMU 的代码中有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化,以及 KVM 使用到的虚拟设备模拟(比如网卡、显卡、存储控制器和硬盘等)
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。