KVM中开启嵌套虚拟化

kvm 2018-09-04

起步

KVM 利用 CPU 虚拟化扩展的 Intel VT-xAMD-V ,因此具有出色的性能。KVM 不会模拟硬件,但会使用 QEMU。

启用嵌套虚拟化

嵌套虚拟化 nested 可通过内核参数来启用该功能,能够让虚拟机具有物理CPU特性,能够模拟 vmx 或者 svm 硬件虚拟化。此特性需要linux 内核 3.x 版本,文档看这里,contos6 需要升级内核,contos7 默认已支持该特性但未启用。

校验

可以先检查下宿主上是否启用了嵌套虚拟化,可以检查文件 /sys/module/kvm_intel/parameters/nested :

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

N 表示未开启。

启用

要启用这个特性需要先关闭所有的虚拟机。有两种启用方式,一种是通过载入kvm模块时设置,这种方式重启宿主后失效;另一种是设置模块的配置文件,得到永久支持。

载入kvm模块时设置

# modprobe -r kvm_intel             # 卸载KVM模块 如果是AMD: modprobe -r kvm_amd
# modprobe kvm_intel nested=1       # 重新加载KVM
# cat /sys/module/kvm_intel/parameters/nested  # 校验
Y

修改KVM模块的配置文件

# echo "options kvm-intel nested=1" >> /etc/modprobe.d/kvm-intel.conf
# rmmod kvm-intel
# modprobe  kvm-intel
# cat /sys/module/kvm_intel/parameters/nested
Y

在虚拟机中启用嵌套虚拟化

在虚拟机的配置中还要设置为主机模式才能实现嵌套。具体是把 CPU 那行改为 <cpu mode='host-model' check='partial'/> :

<features>
  <acpi/>
  <apic/>
  <pae/>
</features>
<cpu mode='host-model' check='partial'>
  <model fallback='allow'/>
</cpu>

启动虚拟机后可以用 dumpxml 看到cpu上的更新:

# virsh dumpxml vm_nested
<cpu mode='custom' match='exact' check='full'>
  <model fallback='forbid'>Haswell-IBRS</model>
  <vendor>Intel</vendor>
  <feature policy='require' name='vme'/>
  <feature policy='disable' name='ds'/>
  <feature policy='disable' name='acpi'/>
  <feature policy='require' name='ss'/>
  <feature policy='disable' name='ht'/>
  <feature policy='disable' name='tm'/>
  <feature policy='disable' name='pbe'/>
  <feature policy='disable' name='dtes64'/>
  <feature policy='disable' name='monitor'/>
  <feature policy='disable' name='ds_cpl'/>
  <feature policy='require' name='vmx'/>
  <feature policy='disable' name='smx'/>
  <feature policy='disable' name='est'/>
  <feature policy='disable' name='tm2'/>
  <feature policy='disable' name='xtpr'/>
  <feature policy='disable' name='pdcm'/>
  <feature policy='disable' name='dca'/>
  <feature policy='disable' name='osxsave'/>
  <feature policy='require' name='f16c'/>
  <feature policy='require' name='rdrand'/>
  <feature policy='disable' name='arat'/>
  <feature policy='disable' name='tsc_adjust'/>
  <feature policy='require' name='stibp'/>
  <feature policy='require' name='xsaveopt'/>
  <feature policy='require' name='pdpe1gb'/>
  <feature policy='require' name='abm'/>
  <feature policy='disable' name='hle'/>
  <feature policy='disable' name='rtm'/>
  <feature policy='require' name='hypervisor'/>
</cpu>

参考链接


本文由 hongweipeng 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

如果对您有用,您的支持将鼓励我继续创作!