KVM虚拟机嵌套虚拟化
KVM虚拟机嵌套虚拟化
背景介绍
在Arch linux的 KVM 虚拟机上启动来部署开源Iaas系统zstack时,需要开启虚拟机嵌套虚拟化。
解决
KVM 嵌套式虚拟 Nested 是一个可通过修改内核参数来启用的功能,它能够使一台虚拟机具相同的有物理机 CPU 特性,支持 vmx|svm(AMD) 硬件虚拟化,该特性需要 Linux 内核版本大于 Linux 3.x。
操作步骤
-
查看是否启动了 Nested
cat /sys/module/kvm_intel/parameters/nested
输出N(N没有开启,Y开启)
-
启用 Nested
echo 'options kvm_intel nested=1' >/etc/modprobe.d/kvm-nested.conf # 卸载内核模块 modprobe -r kvm_intel # 重新加载内核模块 modprobe kvm_intel
-
如果希望已经存在的虚拟机支持嵌套虚拟化,还需要重新编辑虚拟机的 XML 文件,修改其 cpu mode。
-
命令模式修改
virsh edit <virtual hostname>
修改内容:
<cpu mode='host-passthrough'>
-
用qemu图形管理界面修改
在“首选项”中启动Enable XML editing;
进入虚拟机详细中的“CPUs”的xml配置;
找到“
”节点,修该:mode='host-passthrough'; 点击应用保存。
-
-
在虚拟机中查看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