使用 KVM 的嵌套虚拟化配置 DevStack¶
在使用 KVM 等虚拟化技术时,可以利用“嵌套 VMX”(即在 KVM 上运行 KVM)的能力,使云中的虚拟机(Nova 访客)比使用纯 QEMU 模拟时运行得更快。
Linux 发行版附带的内核默认情况下未启用此功能。本指南概述了在基于 KVM 的环境中启用嵌套虚拟化的配置细节。以及如何设置 DevStack(将在虚拟机中运行)以利用此功能。
嵌套虚拟化配置¶
配置基于 Intel 的机器的嵌套 KVM¶
在基于 Intel 的机器上启用嵌套 KVM 虚拟化的步骤。
检查是否启用了嵌套 KVM 内核参数
cat /sys/module/kvm_intel/parameters/nested
N
临时删除 KVM intel 内核模块,启用嵌套虚拟化以在重新启动后保持持久,然后添加回内核模块
sudo rmmod kvm-intel
sudo sh -c "echo 'options kvm-intel nested=y' >> /etc/modprobe.d/dist.conf"
sudo modprobe kvm-intel
确保在主机上启用了 Intel 的嵌套 KVM 内核模块参数
cat /sys/module/kvm_intel/parameters/nested
Y
modinfo kvm_intel | grep nested
parm: nested:bool
启动您的虚拟机,现在它应该具有 KVM 功能 - 您可以通过确保存在 /dev/kvm 字符设备来验证这一点。
配置基于 AMD 的机器的嵌套 KVM¶
在基于 AMD 的机器上启用嵌套 KVM 虚拟化的步骤。
检查是否启用了嵌套 KVM 内核参数
cat /sys/module/kvm_amd/parameters/nested
0
临时删除 KVM AMD 内核模块,启用嵌套虚拟化以在重新启动后保持持久,然后添加回内核模块
sudo rmmod kvm-amd
sudo sh -c "echo 'options kvm-amd nested=1' >> /etc/modprobe.d/dist.conf"
sudo modprobe kvm-amd
确保在主机上启用了 AMD 的嵌套 KVM 内核模块参数
cat /sys/module/kvm_amd/parameters/nested
1
modinfo kvm_amd | grep -i nested
parm: nested:int
为了使上述值在重新启动后保持持久,请在 /etc/modprobe.d/dist.conf 中添加一个条目,使其如下所示
cat /etc/modprobe.d/dist.conf
options kvm-amd nested=y
将虚拟化扩展暴露给 DevStack 虚拟机¶
通过 virsh 工具编辑 VM 的 libvirt XML 配置文件
sudo virsh edit devstack-vm
添加以下片段以将主机 CPU 功能暴露给 VM
<cpu mode='host-passthrough'>
</cpu>
确保 DevStack 虚拟机正在使用 KVM¶
在 VM 中调用 stack.sh 之前,请确保已启用 KVM。可以通过检查 VM 中是否存在文件 /dev/kvm 来验证这一点。如果存在,DevStack 将默认在 /etc/nova.conf 中使用配置属性 virt_type = kvm;否则,它将回退到 virt_type=qemu,即纯 QEMU 模拟。
可选地,要通过 libvirt 驱动程序在 nova 中显式设置虚拟化类型为 KVM,可以使用以下配置属性在 DevStack 的 local.conf 中
LIBVIRT_TYPE=kvm
成功配置 DevStack 后,通过注意 Nova 调用 QEMU CLI 时使用的参数 accel=kvm 来验证 Nova 实例是否正在使用 KVM,例如:
ps -ef | grep -i qemu
root 29773 1 0 11:24 ? 00:00:00 /usr/bin/qemu-system-x86_64 -machine accel=kvm [. . .]