KVM虚拟机嵌套虚拟化

背景介绍

​ 在Arch linux的 KVM 虚拟机上启动来部署开源Iaas系统zstack时,需要开启虚拟机嵌套虚拟化。

解决

​ KVM 嵌套式虚拟 Nested 是一个可通过修改内核参数来启用的功能,它能够使一台虚拟机具相同的有物理机 CPU 特性,支持 vmx|svm(AMD) 硬件虚拟化,该特性需要 Linux 内核版本大于 Linux 3.x。

操作步骤

  1. 查看是否启动了 Nested

    cat /sys/module/kvm_intel/parameters/nested
    

    输出N(N没有开启,Y开启)

  2. 启用 Nested

    echo 'options kvm_intel nested=1' >/etc/modprobe.d/kvm-nested.conf
    
    # 卸载内核模块
    modprobe -r kvm_intel
     
    # 重新加载内核模块
    modprobe kvm_intel
    
  3. 如果希望已经存在的虚拟机支持嵌套虚拟化,还需要重新编辑虚拟机的 XML 文件,修改其 cpu mode。

    1. 命令模式修改

      virsh edit <virtual hostname>
      

      修改内容:

      <cpu mode='host-passthrough'>
      
    2. 用qemu图形管理界面修改

      在“首选项”中启动Enable XML editing;

      进入虚拟机详细中的“CPUs”的xml配置;

      找到“ <cpu> ”节点,修该:mode='host-passthrough'; </cpu>

      点击应用保存。

  4. 在虚拟机中查看cpu嵌套是否生效

​ 实行命令:

egrep '(vmx|svm)' /proc/cpuinfo

输出(vmx或svm高亮):

flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust smep erms xsaveopt