QEMU-KVM的一般工作原理

QEMU-KVM的一般工作原理

我目前的理解:

1)KVM

KVM(基于内核的虚拟机)是一个虚拟机管理程序(VMM – 虚拟机管理器),作为 Linux 操作系统上的模块运行。 需要虚拟机管理程序才能在不存在的(虚拟)环境中运行某些软件,同时向该软件隐藏该软件运行的真实物理硬件。 虚拟机管理程序充当物理硬件(主机)和虚拟操作系统(来宾)之间的“间隔物”。

由于 KVM 是 Linux 内核的标准模块,因此它从内核接收所有必需的功能(内存管理、调度程序等)。 因此,最终,所有这些好处都会惠及来宾(因为来宾在 Linux 操作系统内核上/中运行的虚拟机管理程序上工作)。

KVM 非常快,但它本身不足以运行虚拟操作系统,因为...... 这需要 I/O 仿真。 对于 I/O(CPU、磁盘、网络、视频、PCI、USB、串行端口等),KVM 使用 QEMU。

2)QEMU

QEMU(快速仿真器)是一种适用于各种设备的仿真器,允许您在另一种体系结构上运行为一种体系结构设计的操作系统(例如,ARM -> x86)。 除了处理器之外,QEMU 还模拟各种外围设备:网卡、HDD、显卡、PCI、USB 等。

它的工作原理如下:

使用TCG(Tiny Code Generator)转换器将指令/二进制代码(例如ARM)转换为中间平台无关的代码,然后将该平台无关的二进制代码转换为目标指令/代码(例如x86)。

ARM –> 中间代码 –> x86

本质上,您可以在任何主机上的 QEMU 上运行虚拟机,即使使用不支持 Intel VT-x(Intel 虚拟化技术)/AMD SVM(AMD 安全虚拟机)的旧处理器型号也是如此。 然而,在这种情况下,它的工作速度会非常慢,因为执行的二进制代码需要使用 TCG(TCG 是即时编译器)动态重新编译两次。

那些。 QEMU 本身非常酷,但运行速度非常慢。

3) 保护环

QEMU-KVM的一般工作原理

处理器上的二进制程序代码工作是有原因的,但位于不同级别(环/保护环),具有不同级别的数据访问权限,从最高特权(环 0)到最受限制、受监管和“拧紧螺母” ”(环 3)。

操作系统(OS内核)运行在Ring 0(内核模式)上,可以对任何数据和设备做任何它想做的事。 用户应用程序运行在Ring 3级别(用户模式),不允许为所欲为,而是每次都必须请求访问才能执行特定操作(因此,用户应用程序只能访问自己的数据,而无法“获取”数据)进入“别人的沙箱”)。 环 1 和环 2 供驾驶员使用。

在 Intel VT-x / AMD SVM 发明之前,虚拟机管理程序在 Ring 0 上运行,而 guest 虚拟机在 Ring 1 上运行。由于 Ring 1 没有足够的权限来正常运行操作系统,因此每次来自 guest 系统的特权调用时,虚拟机管理程序必须动态修改此调用并在 Ring 0 上执行它(就像 QEMU 所做的那样)。 那些。 来宾二进制文件 直接在处理器上执行,并且每次都会动态地进行几次中间修改。

开销很大,这是一个大问题,然后处理器制造商彼此独立地发布了一组扩展指令(Intel VT-x / AMD SVM),允许执行客户操作系统代码 在主机处理器上(绕过任何昂贵的中间步骤,就像之前的情况一样)。

随着 Intel VT-x / AMD SVM 的出现,创建了一个特殊的新环级别 -1(负 0)。 现在虚拟机管理程序在其上运行,而来宾在 Ring XNUMX 上运行并获得对 CPU 的特权访问。

那些。 最终:

  • 主机运行在Ring 0上
  • 客人在 Ring 0 工作
  • 虚拟机管理程序在环 -1 上运行

4)QEMU-KVM

KVM 为来宾提供对 Ring 0 的访问,并使用 QEMU 来模拟来宾“看到”并使用的 I/O(处理器、磁盘、网络、视频、PCI、USB、串行端口等)。

因此QEMU-KVM(或KVM-QEMU):)

鸣谢
吸引眼球的图片
保护环图片

PS本文原文最初发表于Telegram频道 @RU_Voip 作为对一位频道参与者的问题的回答。

如果我对主题理解不正确或者有什么需要补充的地方请在评论中写下来。

谢谢大家!

来源: habr.com

添加评论