Linux中的虚拟化技术(如KVM)是如何工作的?

发布于 2024-04-15  267 次阅读


本文于 2024年4月15日 12:46 更新,注意查看最新内容

Linux 中的虚拟化技术,特别是 KVM(Kernel-based Virtual Machine),是一种使 Linux 成为一个类型 1(或本地)虚拟化管理程序的技术。它利用特定于硬件的虚拟化支持,如 Intel VT 或 AMD-V,来运行多个隔离的虚拟机,每个虚拟机都有自己的操作系统。以下是 KVM 虚拟化的工作原理的详细解释:

1. 硬件支持
KVM 虚拟化依赖于现代处理器提供的硬件虚拟化支持。Intel 和 AMD 的处理器通过 Intel VT-x 和 AMD-V 技术提供这种支持。这些技术通过处理器中的特殊指令和模式改善了虚拟机的性能和安全性。

2. KVM 内核模块
KVM 是作为 Linux 内核的一部分实现的。它主要包括两个模块:kvm.ko 和 kvm-intel.ko 或 kvm-amd.ko(根据处理器类型)。这些模块负责初始化硬件虚拟化功能,创建和管理虚拟机(VM)。

3. 用户空间组件
虽然 KVM 本身是内核模块,但它需要用户空间程序来进行虚拟机的创建、执行和管理。最常用的用户空间组件是 QEMU。QEMU 与 KVM 协同工作,负责以下功能:

虚拟机的设置和启动:配置虚拟机的硬件资源(如 CPU、内存、磁盘和网络接口)。
设备模拟:虽然 KVM 处理 CPU 和内存的虚拟化,但 QEMU 负责模拟其他所有硬件设备,如硬盘、网络卡和图形适配器。
4. 虚拟化的执行
当虚拟机启动时,KVM 加载其虚拟 CPU(vCPU)到宿主机的物理 CPU 上,并使用硬件虚拟化支持来执行客户操作系统的代码。每个 vCPU 都对应于宿主机上的一个线程,可以像物理 CPU 一样调度。

5. 内存管理
KVM 使用宿主机的物理内存来创建一块虚拟内存,供每个虚拟机使用。它通过硬件辅助的分页机制(如扩展页表或快速分页)来管理这些内存,这有助于提高内存访问的效率。

6. I/O 操作
对于 I/O 操作,虚拟机通常通过虚拟化的网络和存储控制器进行。这些设备由 QEMU 模拟,而 KVM 则确保数据包和 I/O 操作在虚拟环境和物理硬件之间正确、高效地传输。

7. 安全和隔离
KVM 提供了虚拟机之间以及虚拟机与宿主机之间的严格隔离。这是通过在内核级别管理资源访问和在硬件级别利用虚拟化支持实现的。

通过这些机制,KVM 允许在单一物理服务器上安全、高效地运行多个操作系统,每个操作系统都表现得如同在其自己的独立硬件上运行一样。这使得 KVM 成为构建和管理虚拟化环境的强大工具,广泛用于云计算、服务器共享和应用隔离等场景。


这短短的一生,我们最终都会失去。