KVM与QEMU:代码结构解析与虚拟化实践

2025-01-22 22:29:56
圭叔嫚
冶金VPS

KVM虚拟机——QEMU代码结构分析

本文概述了QEMU代码的结构,特别是QEMU客户代码如何转换为TCG代码和主机代码执行,并展示了QEMU和KVM之间的关系。
作为模拟器,QEMU 通过微码生成器(TCG)将目标代码转换为主机代码,分为两个步骤:目标代码转换为 TCG 中间代码,然后主机代码。
QEMU的主要执行源是vl.c,它初始化虚拟硬件环境,并安装/cpus.c、/exec-all.c、/exec.c、/cpu-exec.c等模块以供后续操作。

在硬件模拟部分,/hw/目录下的设备模块负责模拟不同的硬件。
QEMU支持x86、PPC、ARM等多种CPU架构,并通过./configure进行配置并编译对应架构的代码。
DynGen在0.9.1版本之前使用TCG的核心进行动态翻译,并隐藏生成的代码以提高效率。
QEMU 使用 TB 链通过合并代码缓存、静态代码和 TB 链交互来优化代码执行。
在代码执行过程中,main_loop、qemu_main_loop_start、cpu_exec等QEMU核心函数在通过TB链和TCG执行主机代码中发挥着关键作用。
QEMU 与 KVM 之间的通信体现为用户空间的 QEMU 通过 IOCTL 与内核空间的 KVM 模块进行通信,如 KVM 创建、KVM_RUN 终止过程、KVM_IRQ_LINE 中断注入等。
KVM 与 QEMU 频繁交互,例如硬件设备初始化、CPU 周期、进程终止等。

kvm和QEMU有何区别?

KVM 由许多部分组成:首先,有一个 Linux 内核模块(现已包含在主线中),它将处理器转换为新的用户模式(guset)。
用户模式有自己的一组环状态,但特权ring0的指令将落入管理程序代码中。
由于这是新的处理器执行模型,因此不需要更改代码。
除了处理器状态转换之外,该核心模块还处理少量的低级仿真,例如MMU注册(用于管理VM)和部分PCI仿真硬件。
在可预见的未来,Qemu团队专注于硬件仿真和可移植性,而KVM团队专注于核心模块(如果某些部分确实有性能提升,KVM将移入一小部分仿真代码)并致力于其余与用户空间代码交互。
kvm-qemu可执行文件就像通常的Qemu一样:它分配RAM并加载代码与重新编译或调用KQemu不同,它创建一个线程(这对于调用KVM核心模块切换到用户模式并转到执行非常重要)。
WC 代码。
当遇到特权指令时,它会切换到 KVM 内核模块,该模块会向 Qemu 线程发出信号,在需要时处理大部分硬件模拟。
该架构的优点之一是客户端代码是在 posix 线程中模拟的,这允许您使用标准 Linux 工具对其进行管理。
如果需要2或4核的虚拟机,kvm-qemu会创建2或4个线程,每个线程调用KVM核心模块并开始执行。
并发(如果你有足够的真实核心)或调度(如果你不关心)由通用Linux调度程序控制。
硬盘、声卡、USB等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。
Qemu 使用的模拟器是一个完整的独立软件,可以用来模拟机器,非常灵活和便携。
它基本上通过特殊的“重新编译器”将为一个特定处理器编写的二进制代码转换为另一个处理器。
(即在PPCmac上运行MIPS代码,或者在X86PC上运行ARM代码)

KVM 虚拟化环境搭建 - ProxmoxVE

KVM 是一个免费且开源的 VM 替代品,允许您无需支付任何商业虚拟机软件的费用即可使用它。
KVM由三个层次组成: 1、Linux内核自带,为KVM提供基础支持。
2. 发行版中包含的标准组件(例如 Libvirtd)用于管理物理机的资源。
3. 包括专门为 KVM 设计的 qemu 定制版本。
Libvirtd 简化了物理机资源管理并提供了统一的接口。
KVM和Libvirtd的玩法分为三层:第一层太基础,OpenStack需要更大的技术团队来实现。
第二层可能不适合个人用户。
三年级是个人或小团体的最佳选择。
它构建了一个类似于云服务的系统,以方便虚拟机的创建和配置以及管理硬件资源。
安装ProxmoxVE Community Edition ISO,直接安装在物理机上,立即实现Hypervisor功能。
ProxmoxVE基于Debian9,提供Web管理界面,方便管理硬件和虚拟机资源。
配置虚拟机简单易行,支持克隆、快照、迁移等操作。
ProxmoxVE可以使用ZFS进行软件RAID以确保数据安全。
ProxmoxVE 支持个人或企业级虚拟化管理,提供开箱即用的体验,并且基于开源解决方案。
ProxmoxVE 有免费版本和付费版本。
免费版登录后台会有注册提示。
您可以通过修改代码来去除该提示。
个人使用ProxmoxVE可以在20分钟内创建三个虚拟机,满足日常需求。
处理Windows虚拟机时,VNC性能较低,因此可以考虑SPICE或远程桌面服务。
使用KVM不需要依赖VmWare、HyperV、vSphere等复杂的软件。
性能损失仅为1%-2%,对于大多数应用来说,性能差异可以忽略不计。
KVM更适合追求高性能、低成本的用户。