首页/云/云平台与虚拟化速查/嵌套虚拟化 Nested Virtualization
虚拟化基础63 条

嵌套虚拟化 Nested Virtualization

嵌套虚拟化指在虚机内部再运行 hypervisor:宿主需开放 CPU 虚拟化特性(KVM 用 nested 模块参数,ESXi 需在虚机设置中公开硬件虚拟化),并接受一层额外的调度开销。

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

嵌套虚拟化是什么

嵌套虚拟化指在虚机内部再运行一个 hypervisor。宿主需要把 CPU 虚拟化特性透传下去:KVM 侧要打开 kvm_intel(或 kvm_amd)的 nested 参数,VMware 侧要到虚机选项里勾选向客户机公开硬件辅助虚拟化。多一层调度,性能与稳定性风险都会上升,主要用于开发与测试。

基本信息

KVM 侧kvm_intel.nested=1 或 kvm_amd.nested=1
VMware 侧虚机选项中勾选向客户机公开硬件辅助虚拟化
云平台侧部分实例默认不透传 VT-x,需要选择支持的规格
依赖宿主 CPU 支持,且未被平台策略禁用
代价性能下降,时钟漂移与稳定性风险增加
验证方式guest 内看 /dev/kvm 与 cpuinfo 中的虚拟化标志

典型使用场景

  • 在虚机里搭建虚拟化实验环境,省掉物理机
  • 学习 KVM 或虚拟化平台时快速获得可重建的环境
  • 选型前先验证目标云环境是否支持嵌套
  • 在 CI 中运行需要虚拟化能力的测试
  • 为容器化或移动端开发准备虚拟化测试床

KVM 宿主开启并在 guest 内验证

KVM 宿主开启并在 guest 内验证
cat /sys/module/kvm_intel/parameters/nested        # 宿主侧看当前是否已开启
echo 1 | sudo tee /sys/module/kvm_intel/parameters/nested    # 临时开启
# 持久化需写入 /etc/modprobe.d/ 下的模块参数配置
sudo modprobe kvm_intel && ls -l /dev/kvm            # guest 内确认设备存在
grep -cE 'vmx|svm' /proc/cpuinfo                     # 计数大于 0 说明特性已透传

两层配置对照

层级配置点验证方式
宿主内核kvm_intel / kvm_amd 的 nested 参数读对应的参数文件
VMware 虚机公开硬件辅助虚拟化的选项虚机设置与实际运行状态
云端实例所用规格是否支持特性透传guest 内看 cpuinfo 标志
guest 内部安装 KVM 与相关工具链/dev/kvm 可用且能起虚机
nested 参数只在 /sys 里改一次,重启就失效;要持久化必须写进 modprobe.d 下的模块配置文件。这正是“改完好了、重启又不行”的常见原因。
嵌套层数越深,时间同步与性能越难保证:定时任务、超时与心跳机制都可能出现异常,排障时也很难判断是业务问题还是虚拟化层问题。生产环境不要依赖嵌套虚拟化承载关键业务。

易错点

  • 在云主机上做嵌套实验前未确认实例是否传递 VT-x,白费调试时间
  • 嵌套层数过深导致时钟漂移,定时任务与超时行为异常
  • 只在 /sys 里改了参数没做持久化,宿主重启后能力消失
  • 把嵌套环境当成生产方案,性能与故障排查复杂度都远超预期

数据来源与参考

  • Red Hat 文档:嵌套虚拟化
  • VMware Docs:嵌套虚拟化
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌