嵌套虚拟化是什么
嵌套虚拟化指在虚机内部再运行一个 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 下的模块配置文件。这正是“改完好了、重启又不行”的常见原因。
嵌套层数越深,时间同步与性能越难保证:定时任务、超时与心跳机制都可能出现异常,排障时也很难判断是业务问题还是虚拟化层问题。生产环境不要依赖嵌套虚拟化承载关键业务。