📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry
深度理解 KVM:Linux 内核系统学习的重要角度
作者:嵌入式 Jerry
一、为什么开发者需要学习 KVM?
KVM (全称 Kernel-based Virtual Machine),是 Linux 内核内置的虚拟化子系统。对于 BSP 工程师、系统工程师而言,KVM 不仅是一套虚拟化技术,更是一个进入 Linux 内核架构、高效资源管理、硬件抽象经验的重要入口。

二、KVM 是什么?在内核里怎么实现?
基本概念
- KVM 是一个属于 Linux 内核的虚拟化模块
- 利用硬件虚拟化支持(Intel VT-x,AMD-V)
- 每个 VM 是一个普通的 Linux 进程
- KVM + QEMU = 完整虚拟机基础架构
核心组件
组件 | 作用 |
---|---|
kvm.ko |
基础 KVM 内核模块 |
kvm-intel.ko 、kvm-amd.ko |
根据 CPU 硬件同步 VMEXIT/虚拟指令 |
/dev/kvm |
用户态与内核互操接口 |
QEMU | 虚拟 BIOS,虚拟硬件,用户态设备模型 |
三、学习 KVM 能帮助我们了解什么?
1. 加深对 Linux 进程/线程/调度 等组技术的理解
- 每个 vCPU 是一个 Linux 线程,等同于把 Guest CPU 展示为主机线程
- 用户态 VM 通过
/dev/kvm
与内核交互,通过 ioctl 启动 VM - 内核通过 VMX 组技术,进行虚拟快照
实例:看看 VM 线程是否正常运行
bash
ps -ef | grep qemu
cat /proc/`pidof qemu-system-x86_64`/status
2. 实际理解 MMU/页表/内存映射
- 不同 VM 有自己的 Guest page table,内核进行 shadow page 同步
- 使用 Extended Page Table 扩展 CPU 虚拟内存
实例:查看主机页表分配结果
bash
cat /proc/meminfo | grep HugePages
3. 系统资源分配和隔离机制
- KVM 使用 Linux 组织,支持 cgroup 限制资源
- 设置 CPU 线程亲和性:
taskset
,virsh vcpupin
实例:给 VM 给定线程线序组
bash
taskset -c 1-3 qemu-system-x86_64 -smp 3 -enable-kvm [...]
4. 完整设备模型的构造
- VirtIO 使用共享内存和 ring buffer 接口,构建高性能虚拟设备
实例:启用 virtio-blk 磁盘
bash
qemu-system-x86_64 [...other opts...] \
-drive file=rootfs.img,if=virtio,format=raw
四、KVM 应用场景分析
场景 | 说明 |
---|---|
边缘计算 | SoC 上运行多个客户系统,实现快速应用切换 |
安全隔离 | 把每个任务放入不同 VM,防止信息溃露 |
多系统调试 | 同一个开发板进行多个 Linux/实时系统游玩 |
AI 模型分布 | 两个 VM 分别运行不同的模型,互不干扰 |
FPGA/专用硬件分布 | 通过 VFIO + IOMMU 实现设备直通 |
五、如何学好 KVM?
1. 理解基础理论
- 虚拟化分类:Type 1 vs Type 2
- VT-x / AMD-V 是什么?
- 运行时 VMEXIT / VMENTRY 条件
2. 编译和启用 KVM
- 内核打开 CONFIG_KVM
- modprobe kvm-intel
- ls /dev/kvm 确认设备
3. 实践 QEMU + KVM 启动虚拟机
bash
qemu-system-x86_64 \
-enable-kvm \
-m 1024 -smp 2 \
-kernel bzImage \
-append "root=/dev/vda console=ttyS0" \
-drive file=rootfs.ext4,format=raw \
-nographic
4. 研究代码/日志/分析模块
- 分析
arch/x86/kvm/
:虚拟指令和 VMX 操作 - 分析
virt/kvm/
:KVM 核心 VM 管理逻辑 - 分析
drivers/virtio/
:VirtIO 设备驱动 - debugfs:
/sys/kernel/debug/kvm/
:看虚拟中断、vCPU 状态
六、总结
学习 KVM,不是为了做 VM,而是以此为窗口,打通 Linux 内核调度、内存、中断、设备管理等核心矩阵。
📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry