首页/云/云平台与虚拟化速查/KVM 内核虚拟化模块
虚拟化基础63 条

KVM 内核虚拟化模块

KVM 是 Linux 内核自带的全虚拟化模块,向用户态暴露 /dev/kvm 接口,由 QEMU 等程序调用实现 CPU 与内存虚拟化;加载后 Linux 本身即成为 hypervisor。

云平台与虚拟化速查云更新于 2026-10-13

KVM 是什么

KVM(Kernel-based Virtual Machine)是 Linux 内核自带的全虚拟化模块:加载后,配合 Intel VT-x 或 AMD-V 硬件辅助能力,Linux 本身就成为 hypervisor。它向用户态暴露 /dev/kvm 接口,由 QEMU 等程序调用完成 CPU 与内存虚拟化,因此常被合称为 QEMU/KVM。

基本信息

形态内核模块 kvm 加 kvm_intel 或 kvm_amd
接口/dev/kvm 字符设备,供用户态程序创建虚拟机
依赖需要 CPU 虚拟化扩展,通常还要在 BIOS 中开启
分工KVM 负责 CPU 与内存,QEMU 提供设备模型,libvirt 提供管理接口
权限普通用户需加入 kvm 组或由 root 运行才能访问设备节点
嵌套虚拟化可通过模块参数开启,供上层再次运行虚拟化环境

典型使用场景

  • 自建虚拟化平台:在物理机上直接运行云平台或虚拟化管理软件
  • 开发测试环境:本地起多台虚拟机验证集群与分布式部署
  • 容器内跑虚拟机:CI 中需要完整内核或不同发行版时用虚机隔离
  • 模拟异构环境:结合 QEMU 实现跨架构验证

检查与加载

检查与加载
grep -Eoc 'vmx|svm' /proc/cpuinfo        # 大于 0 说明 CPU 支持虚拟化
grep -E '^flags' /proc/cpuinfo | grep -Eo 'vmx|svm' | head -1   # 确认虚拟化标志
sudo modprobe kvm_intel                  # AMD 平台换成 kvm_amd
lsmod | grep -E '^kvm'                   # 确认模块已加载
ls -l /dev/kvm                           # 确认设备节点存在及权限
groups | tr ' ' '\n' | grep -x kvm        # 确认当前用户在 kvm 组内

内核侧关键项读法

检查项正常表现异常表现
CPU 标志flags 中出现 vmx 或 svm无标志说明 BIOS 未开启或 CPU 不支持
模块加载kvm、kvm_intel 或 kvm_amd 出现在模块列表模块缺失可能是内核裁剪或与容器冲突
设备节点/dev/kvm 存在且属主为 root、属组为 kvm不存在说明模块未加载或未创建节点
嵌套参数可读取嵌套虚拟化开关状态默认关闭时上层虚拟机无法再开虚机
日志内核日志中有 KVM 初始化信息出现硬件不支持或已被其他 hypervisor 占用提示
KVM 只做 CPU 与内存虚拟化,网卡与磁盘由 QEMU 模拟或直通。排障时先分清问题在哪一侧:CPU 与内存类报错看内核与 KVM,设备识别与 IO 性能问题多半在 QEMU 设备配置上。
嵌套虚拟化需要显式开启:把模块参数写入配置文件并重新加载模块后才能生效。开启后性能会低于原生,适合测试与验证场景,不适合高负载生产。

易错点

  • 认为装了 KVM 就有管理平台:没有 libvirt 与配套工具时只能靠 QEMU 命令行裸起虚机,管理成本高
  • 在容器里跑虚拟机忘了映射 /dev/kvm:QEMU 回落到纯软件模拟,性能下降明显却不易察觉
  • BIOS 中未开启虚拟化扩展:模块加载失败或功能受限,误判为内核版本问题
  • 普通用户直接运行虚拟化命令:无权限访问设备节点而报错,需要加入 kvm 组或提权
  • 宿主与客体混用同一份磁盘镜像文件:并发写入会损坏镜像,多台虚机共享应使用只读基础镜像加增量层

数据来源与参考

  • Linux 内核文档 Documentation/virt/kvm
  • KVM 官方网站(linux-kvm.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌