如何在Linux中启用KVM中的嵌套虚拟化

时间:2020-03-21 11:44:19  来源:igfitidea点击:

在本教程中,我们将看到Linux中KVM中的嵌套虚拟化。

嵌套虚拟化是一个功能,允许我们在仍然使用来自主机系统的硬件加速度时在另一个虚拟机内运行虚拟机。
换句话说,嵌套虚拟化是运行虚拟机(VM)内部运行虚拟机管理程序的机制,它本身在虚拟机管理程序上运行。

在Linux中启用KVM中的嵌套虚拟化

在启用嵌套VT功能之前,请关闭所有正在运行的VM。

接下来,卸载KVM模块。

要在英特尔系统上卸载KVM模块,请运行:

$sudo modprobe -r kvm_intel

在AMD系统上:

$sudo modprobe -r kvm_amd

使用命令中的Intel CPU上启用嵌套功能重新加载KVM模块:

$sudo modprobe kvm_intel nested=1

使用命令在AMD CPU上启用嵌套功能重新加载KVM模块:

$sudo modprobe kvm_amd nested=1

永久启用嵌套虚拟化

请注意,嵌套的VT功能仅启用,直到重新启动KVM主机系统。
要永久启用嵌套功能,请编辑/etc/modprobe.d/kvm.conf文件:

$sudo vi /etc/modprobe.d/kvm.conf

如果文件不存在,只需创建它。

在英特尔主机上添加以下行:

options kvm_intel nested=1

在AMD主机上添加以下行:

options kvm_amd nested=1

保存并关闭文件。

完毕!我们在KVM主机系统上启用了嵌套vt。

验证KVM主机中是否启用了嵌套的虚拟化

如果处理器是英特尔,请使用"cat"命令检查"/sys/module/kvm_intel/parameters/parameters/parameters/parameters/paramety/paramety"文件:

$cat /sys/module/kvm_intel/parameters/nested

如果返回"Y"或者"1",则表示系统支持嵌套虚拟化。
如果输出为"n"或者"0",则系统不会支持嵌套虚拟化。

如果处理器是AMD,请检查"/sys/module/kvm_amd/parameters/nested"文件的内容。

或者,我们可以使用以下命令确保"KVM_INTEL"内核模块已启用嵌套:

$modinfo kvm_intel | grep -i nested

示例输出:

parm:           nested_early_check:bool
parm:           nested:bool

在AMD CPU上:

$modinfo kvm_amd | grep -i nested

嗯,我的KVM主机支持嵌套虚拟化,它已启用。

启用KVM Guest Machines上的嵌套虚拟化

我们可以从命令行或者使用像righermant等图形KVM管理应用程序的kvm vm上嵌套功能。

在命令行启用KVM Guest中的嵌套功能

登录到virsh控制台:

$virsh

编辑要启用嵌套功能的VM:

virsh # edit centos

要查找所有可用的VM,请在virsh控制台内运行此命令:

virsh # list --all

查找"CPU模式"参数并将其值设置为"主机型号"。

<cpu mode='host-model' check='partial'

保存并关闭文件。

启动VM:

virsh # start centos8

验证是否为VM启用了嵌套功能:

virsh # dumpxml centos8

我们应该看到"CPU模式"指令下的所有必要功能策略都会更新:

<cpu mode='custom' match='exact' check='full'>
    <model fallback='forbid'>SandyBridge-IBRS</model>
    <vendor>Intel</vendor>
    <feature policy='require' name='vme'
    <feature policy='require' name='vmx'
    <feature policy='require' name='pcid'
    <feature policy='require' name='hypervisor'
    <feature policy='require' name='arat'
    <feature policy='require' name='tsc_adjust'
    <feature policy='require' name='umip'
    <feature policy='require' name='md-clear'
    <feature policy='require' name='stibp'
    <feature policy='require' name='arch-capabilities'
    <feature policy='require' name='ssbd'
    <feature policy='require' name='xsaveopt'
    <feature policy='require' name='ibpb'
    <feature policy='require' name='amd-ssbd'
    <feature policy='require' name='skip-l1dfl-vmentry'
    <feature policy='disable' name='aes'
  </cpu>

嵌套虚拟化功能已为CentOS 8 VM启用。

使用Virt-Manager启用KVM访客中的嵌套功能

打开Virt-Manager GUI应用程序并双击要启用嵌套VT功能的KVM Guest虚拟机。
单击"显示虚拟硬件详细信息"按钮,然后转到左侧菜单中的"CPU"部分。

在CPU配置窗口中选择"复制主机CPU配置"复选框,然后单击"应用"。

现在,物理主机的CPU模型和配置将应用于VM。

检查KVM访客是否支持虚拟化

打开电源并登录启用嵌套功能的KVM Guest机。

在KVM Guest的终端中运行以下命令,以验证是否已启用虚拟化:

# egrep --color -i "svm|vmx" /proc/cpuinfo

如果在输出中看到"VMX"(Intel-VT技术)或者"SVM"(AMD-V支持),则KVM Guest机可以作为管理程序和主机VM。
正如我们在上面的输出中看到的,我的CentOS 8 KVM VM支持虚拟化。