首页/云/云平台与虚拟化速查/开启嵌套虚拟化(nested)
虚拟化操作94 条

开启嵌套虚拟化(nested)

默认关闭的嵌套虚拟化需在宿主加载 kvm 模块时启用:Intel 平台设 kvm_intel nested=1,AMD 平台设 kvm_amd nested=1,重启模块后 guest 内可用 /dev/kvm。

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

开启嵌套虚拟化

嵌套虚拟化允许在虚机里再运行虚机:宿主把 CPU 虚拟化能力暴露给 guest,guest 内因此能加载 KVM 模块并使用 /dev/kvm。它默认关闭,需要在加载 kvm 模块时通过参数启用,Intel 与 AMD 平台的参数名不同。适合演示、测试与 CI 场景,性能敏感的生产负载要谨慎评估。

基本信息

查看状态cat /sys/module/kvm_intel/parameters/nested(AMD 平台换成 kvm_amd)
配置方式在 /etc/modprobe.d/ 下写 options 配置,如 options kvm_intel nested=1
生效方式卸载后重载模块,或重启宿主
验证方式guest 内查看 /dev/kvm 是否存在、能否加载 KVM 模块
云主机场景需选择支持嵌套虚拟化的实例类型,并在镜像层面确认已启用

典型使用场景

  • 演示与培训:在一台虚机里演示完整虚拟化环境
  • CI 流水线:需要在内核或虚拟化相关项目中跑虚机测试
  • 开发验证:测试依赖虚拟化的软件,如容器运行时与编排组件
  • 实验环境:验证嵌套对性能的实际影响
  • 云上测试:在支持嵌套的实例上搭建临时虚拟化环境

Intel 平台示例

Intel 平台示例
cat /sys/module/kvm_intel/parameters/nested    # 先看当前状态
echo 'options kvm_intel nested=1' > /etc/modprobe.d/kvm-nested.conf
modprobe -r kvm_intel && modprobe kvm_intel      # 重载模块
cat /sys/module/kvm_intel/parameters/nested      # 期望 Y 或 1
# AMD 平台把 kvm_intel 换成 kvm_amd,参数名与用法一致

检查点

检查项位置或命令期望结果
模块参数/sys/module/kvm_intel/parameters/nestedY 或 1
宿主模块lsmod | grep kvmkvm 与 kvm_intel 已加载
guest 内设备ls /dev/kvm设备节点存在
guest 内能力kvm-ok 或尝试加载模块可正常使用虚拟化
嵌套带来额外虚拟化开销:性能敏感场景谨慎使用,演示与测试类负载更合适,生产虚机里再跑生产虚机要单独评估,并把性能底线写进验收标准。
在云主机上开启嵌套的前提是实例类型本身支持:有些实例类型在平台层面就不暴露虚拟化能力,改配置也不会生效。
嵌套环境与下层平台强绑定:宿主内核与虚拟化组件升级后嵌套行为可能变化,测试环境使用的版本组合要记录下来,升级前先在非关键虚机上验证功能是否仍然可用。

易错点

  • 宿主还有运行中虚机时卸载 kvm_intel:模块被占用,重载失败
  • 配置写进 /etc/modprobe.d/ 却只做 modprobe 不重载,参数没生效
  • 把 AMD 平台按 Intel 的参数名配置,模块加载时报参数无效
  • 宿主侧已启用但 guest 镜像未开启相应支持,guest 内依旧找不到 /dev/kvm

数据来源与参考

  • Linux 内核文档:KVM nested virtualization
  • libvirt 文档:嵌套虚拟化
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌