KVM 模块与嵌套参数
KVM 由内核模块组成:通用模块 kvm 提供虚拟化基础,厂商模块 kvm_intel 或 kvm_amd 提供硬件辅助支持。行为由模块参数控制,最常用的是嵌套虚拟化开关 nested;参数会暴露在 /sys/module/<模块>/parameters/ 下,可以临时修改,也可以写进 /etc/modprobe.d/ 永久生效(需要重建 initramfs 并重启)。
基本信息
| 通用模块 | kvm |
|---|---|
| 厂商模块 | kvm_intel(Intel)/ kvm_amd(AMD) |
| 关键参数 | nested(嵌套虚拟化)、ept/npt 等 |
| 参数目录 | /sys/module/kvm_intel/parameters/ |
| 永久生效 | 写入 /etc/modprobe.d/kvm.conf 后重建 initramfs 并重启 |
典型使用场景
- 确认宿主是否加载了 KVM 模块与硬件辅助支持
- 在虚机里再跑虚机(嵌套虚拟化)做实验或搭建测试平台
- 调整模块参数验证性能或兼容性问题
- 排障虚机启动报错,确认是否为模块参数导致
- 自动化部署时把嵌套开关固化到镜像或配置管理里
查看与临时开启嵌套虚拟化
查看与临时开启嵌套虚拟化
lsmod | grep kvm # 确认已加载的模块
cat /sys/module/kvm_intel/parameters/nested # 期望 Y 或 1
sudo modprobe -r kvm_intel && sudo modprobe kvm_intel nested=1 # 临时开启,需先停掉虚机
cat /etc/modprobe.d/kvm.conf # 永久配置:options kvm_intel nested=1
sudo dracut -f && sudo reboot # RHEL 系重建 initramfs 后重启生效模块与参数读法
| 模块/参数 | 作用 | 注意 |
|---|---|---|
| kvm | 虚拟化基础模块 | 缺失时 /dev/kvm 不存在,虚机无法加速 |
| kvm_intel | Intel 平台的硬件辅助模块 | 与 kvm_amd 互斥,取决于 CPU 厂商 |
| kvm_amd | AMD 平台的硬件辅助模块 | 参数名与 Intel 平台略有差异 |
| nested | 控制嵌套虚拟化是否允许 | 关闭时虚机内看不到 vmx/svm 标志 |
| ept/npt | 二级地址转换相关参数 | 关闭会影响虚机内存性能 |
modprobe -r 卸载厂商模块时会因虚机在运行而拒绝执行;永久生效需写入 /etc/modprobe.d/kvm.conf 并重建 initramfs 后重启。
嵌套虚拟化的实际能力还取决于外层平台:公有云实例是否开放 CPU 虚拟化标志由厂商与实例规格决定,嵌套参数打开也不代表一定可用。
操作顺序与注意事项
- 先 lsmod 确认模块已加载、/dev/kvm 存在,再谈参数调整
- 临时改参数前先停掉该宿主上的所有虚机,卸载模块会被直接拒绝
- 确认参数写入 /etc/modprobe.d 后重建 initramfs,重启后复查参数值
- 用同一套配置管理覆盖所有宿主,避免部分主机开启、部分未开启
- 记录变更时间与验证结果,嵌套类问题往往在几天后才暴露