美文网首页
Nested KVM

Nested KVM

作者: 斐然成章 | 来源:发表于2018-08-19 09:10 被阅读28次

    Nested KVM

    在 Intel 处理器上, KVM 使用 Intel 的 vmx(virtual machine eXtensions) 来提高虚拟机性能,即硬件辅助虚拟化技术。如果一台虚拟机能够和物理机一样支持 "vmx",那么就可以在这台虚拟机上再次安装虚拟机。Nested KVM是一个可通过内核参数来启用的功能。它能够使一台虚拟机具有物理 CPU 特性,支持 vmx 或者 svm(AMD) 硬件虚拟化。

    物理服务器开启 Nested KVM 支持

    ubuntu14.04

    1. 打开 /etc/default/grub,把 "kvm-intel.nested=1" 追加到 GRUB_CMDLINE_LINUX
    # cat /etc/default/grub | grep GRUB_CMDLINE_LINUX
    GRUB_CMDLINE_LINUX="apparmor=0 nomodeset noautogroup kvm-intel.nested=1"
    update-grub
    
    1. 重启Host
     $ reboot
    
    1. 检查是否使能 Nested KVM
    $ cat /sys/module/kvm_intel/parameters/nested
    Y
    

    Y代表使能Nested KVM

    创建一台支持 'vmx' 的虚拟机

    如果你使用 libvirt 管理虚拟机,需要修改虚拟机 xml 中的 CPU 定义。

    • CPU定义 1
      <cpu mode='custom' match='exact'>
        <model fallback='allow'>Nehalem</model>
        <feature policy='require' name='vmx'/>
      </cpu>
    

    这种方式为虚拟机定义需要模拟的CPU类型 "Nehalem",并且为 CPU 添加 "vmx" 特性。

    • CPU定义 2
      <cpu mode='host-model'>
        <model fallback='allow'/>
      </cpu>
    
    • CPU定义 3
      <cpu mode='host-passthrough'>
        <topology sockets='1' cores='2' threads='2'/>
      </cpu>
    

    后两种 CPU 定义,CPU 穿透,在虚拟机中看到的 vcpu 与物理机的 CPU 是同样的配置,这种方式的缺点在于如果要对虚拟机进行迁移,迁移的目的服务器硬件配置必须与当前物理机一样。

    如果使用 qemu 命令行启动虚拟机,那么可以简单的添加 -enable-kvm -cpu qemu64,+vmx

    然后,启动虚拟机,查看cpuinfo的配置

    $ cat /proc/cpuinfo
    --- snip ---
    Model name:            Intel Core i7 9xx (Nehalem Class Core i7)
    Stepping:              3
    CPU MHz:               2394.456
    BogoMIPS:              4788.91
    Virtualization:        VT-x
    Hypervisor vendor:     KVM
    Virtualization type:   full
    --- snip ---
    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 rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap
    

    参考资料

    http://www.rdoxenham.com/?p=275
    http://www.linuxidc.com/Linux/2015-05/117026.htm
    https://www.kernel.org/doc/Documentation/virtual/kvm/nested-vmx.txt

    相关文章

      网友评论

          本文标题:Nested KVM

          本文链接:https://www.haomeiwen.com/subject/ehzqiftx.html