openstack中启用虚拟机嵌套

检查系统是否支持nested

nested参数值为N,表示内核支持虚拟机嵌套,但未启用。

1
2
3
4
5
6
7
8
# lsmod|grep kvm
kvm_intel 204800 0
kvm 626688 1 kvm_intel
irqbypass 16384 1 kvm
# systool -m kvm_intel -A nested
Module = "kvm_intel"

nested = "N"

未启用nested情况下创建的虚拟机不包含vmx指令集

1
2
# cat /proc/cpuinfo |grep flags
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 xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat arch_capabilities

内核模块启用nested特性

1
2
3
4
5
# echo "options kvm-intel nested=1" > /etc/modprobe.d/kvm-intel.conf
# modprobe -r kvm_intel
# modprobe kvm_intel
# cat /sys/module/kvm_intel/parameters/nested
Y

KVM中启用nested

KVM下CPU配置模式有customhost-model(默认)和host-passthough3种
host-model:libvirt会根据物理CPU的型号,从规定的CPU中选择一种最接近的CPU信号,
host-passthrough:直接将物理CPU暴露给虚拟机使用

1
2
# virsh edit centos7
<cpu mode='host-passthrough'>

OpenStack中启用nested

需要重启nova-compute服务

1
2
3
# vi /etc/nova/nova.conf
[libvirt]
cpu_mode=host-passthrough

启用nested情况下创建的虚拟机包含vmx指令集

1
2
# grep vmx /proc/cpuinfo
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 xtopology eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat arch_capabilities
坚持原创技术分享,您的支持将鼓励我继续创作!
0%