KVM 開啟嵌套虛擬化


問題

在 CentOS KVM 上啟動虛擬機來部署 OpenStack 測試環境,在啟動具有 CPU 綁定、NUMA 親和的虛擬機時觸發錯誤:

libvirtError: Requested operation is not valid: cpu affinity is not supported

這是因為 Nova 使用了 qemu virt_type,而 Qemu 是通過模擬來實現 CPU、內存虛擬化的,所以自然也就不支持 cpu affinity 了。要使用 KVM 硬件虛擬化才可以支持 CPU 綁定,於是修改 nova.conf:

[libvirt]
...
virt_type=kvm

重試,又出現錯誤:

libvirtError: invalid argument: could not find capabilities for domaintype=kvm

這是因為我的 HostOS 沒有開啟 KVM Nested 嵌套虛擬化,即 KVM 虛擬機里面不支持 KVM 虛擬機,因為第一次 KVM 虛擬機沒能具有與 HostOS 相同的 CPU 環境。

解決

KVM 嵌套式虛擬 Nested 是一個可通過修改內核參數來啟用的功能,它能夠使一台虛擬機具相同的有物理機 CPU 特性,支持 vmx|svm(AMD) 硬件虛擬化,該特性需要 Linux 內核版本大於 Linux 3.x。

查看是否啟動了 Nested:

[root@virtualbmc ~]# cat /sys/module/kvm_intel/parameters/nested
Y

啟用 Nested:

echo 'options kvm_intel nested=1' >/etc/modprobe.d/kvm-nested.conf

# 卸載內核模塊
modprobe -r kvm_intel

# 重新加載內核模塊
modprobe kvm_intel

NOTE:如果無法重載內核模塊,可以考慮直接重啟

如果希望已經存在的虛擬機支持嵌套虛擬化,還需要重新編輯虛擬機的 XML 文件,修改其 cpu mode。

# 關機
$ virsh shutdown domain-xxx

# 編輯
$ virsh edit domain-xxx

<cpu mode='host-passthrough'>

# 開機
$ virsh start domain-xxx

登錄入虛擬機檢查是否有 CPU 穿透:

[root@overcloud-ovscompute-0 ~]# egrep '(vmx|svm)' /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 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM