当前位置: 首页 > news >正文

深度理解 KVM:Linux 内核系统学习的重要角度


📖 推荐阅读:《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.kokvm-amd.ko根据 CPU 硬件同步 VMEXIT/虚拟指令
/dev/kvm用户态与内核互操接口
QEMU虚拟 BIOS,虚拟硬件,用户态设备模型

三、学习 KVM 能帮助我们了解什么?

1. 加深对 Linux 进程/线程/调度 等组技术的理解

  • 每个 vCPU 是一个 Linux 线程,等同于把 Guest CPU 展示为主机线程
  • 用户态 VM 通过 /dev/kvm 与内核交互,通过 ioctl 启动 VM
  • 内核通过 VMX 组技术,进行虚拟快照

实例:看看 VM 线程是否正常运行

ps -ef | grep qemu
cat /proc/`pidof qemu-system-x86_64`/status

2. 实际理解 MMU/页表/内存映射

  • 不同 VM 有自己的 Guest page table,内核进行 shadow page 同步
  • 使用 Extended Page Table 扩展 CPU 虚拟内存

实例:查看主机页表分配结果

cat /proc/meminfo | grep HugePages

3. 系统资源分配和隔离机制

  • KVM 使用 Linux 组织,支持 cgroup 限制资源
  • 设置 CPU 线程亲和性:taskset, virsh vcpupin

实例:给 VM 给定线程线序组

taskset -c 1-3 qemu-system-x86_64 -smp 3 -enable-kvm [...]

4. 完整设备模型的构造

  • VirtIO 使用共享内存和 ring buffer 接口,构建高性能虚拟设备

实例:启用 virtio-blk 磁盘

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 启动虚拟机

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


http://www.dtcms.com/a/285739.html

相关文章:

  • 【Linux】环境基础与开发工具的使用
  • Linux中的LVS集群技术
  • MySQL的基本操作及相关python代码
  • 基于极空间NAS+GL-MT6000路由器+Tailscale的零配置安全穿透方案
  • 云原生 DevOps 实战之Jenkins+Gitee+Harbor+Kubernetes 构建自动化部署体系
  • 小白学Python,网络爬虫篇(2)——selenium库
  • 图机器学习(13)——图相似性检测
  • 信息学奥赛一本通 1575:【例 1】二叉苹果树 | 洛谷 P2015 二叉苹果树
  • 短视频矩阵系统哪家好?全面解析与推荐
  • 香港服务器SSH安全加固方案与密钥认证实践
  • Flutter权限管理终极指南:实现优雅的Android 48小时授权策略
  • GLU 变种:ReGLU 、 GEGLU 、 SwiGLU
  • android 信息验证动画效果
  • 精通 triton 使用 MLIR 的源码逻辑 - 第002节:再掌握一些 triton 语法 — 通过 02 softmax
  • 续签人员李权
  • 掌上医院微信小程序平台如何对接医保在线支付?
  • vue自定义指令bug
  • poi-excel-添加水印
  • Vue3 学习教程,从入门到精通,Vue3 项目打包语法知识点及案例代码(9)
  • Windows Server 版本之间有什么区别?
  • 私有服务器AI智能体搭建配置选择记录
  • NGFW服务器安全防护
  • 浏览器信息隔离全指南:从多账号管理到隐私防护
  • VirtualBox + CentOS:启用 DHCP 获取 IPv4 地址
  • 数据结构:顺序表和链表
  • 【PTA数据结构 | C语言版】斜堆的合并操作
  • Expression.Block详解
  • 微信小程序商品结算功能
  • gitlab-ce本地化部署
  • 一文讲清楚React的render优化,包括shouldComponentUpdate、PureComponent和memo