虛擬化之QEMU與KVM
阿新 • • 發佈:2019-01-27
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
因為前面我大體瀏覽過KVM的某些程式碼,KVM核心模組會生成一個“/dev/kvm”裝置檔案供使用者空間程式使用,上面的提示資訊就是因為QEMU在初始化階段因為無法找到該“/dev/kvm"檔案,因此認為當前系統沒有提供對KVM的支援,因而QEMU回退到所謂的tcg accelerator模式,這從另一個角度說明,獨立的QEMU虛擬化方案並不一定需要KVM提供支援。
我的理解是KVM模組的存在可以視為QEMU對i386處理器模擬的一種accelerator,如同GPU對3D的hardware acceleration一樣(在沒有GPU存在的情況下,軟體也可以實現某些3D的功能,不過效能顯然要慢多了,比如mesa).所以即便在kvm_intel.ko不存在的情況下,QEMU也可以完成對一個pc的虛擬化。
KVM是Kernel-based Virtual Machine,從存在形式看,是兩個核心模組kvm.ko和kvm_intel.ko(對AMD處理器來說,就是kvm_amd.ko),這兩個模組用來實現CPU的虛擬化,如果要讓使用者在KVM上完成一個虛擬機器相關的操作,顯然需要使用者空間的東西,同時還包括IO虛擬化,所以KVM的解決方案借鑑了QEMU的東西並做了一定的修改,形成了自己的KVM虛擬機器工具集和IO虛擬化的支援,也就是所謂的qumu-kvm.
所以總結下來是:QEMU是個獨立的虛擬化解決方案,從這個角度它並不依賴KVM。 而KVM是另一套虛擬化解決方案,不過因為這個方案實際上只實現了核心中對處理器(Intel VT, AMD SVM)虛擬化特性的支援,換言之,它缺乏裝置虛擬化以及相應的使用者空間管理虛擬機器的工具,所以它借用了QEMU的程式碼並加以精簡,連同KVM一起構成了另一個獨立的虛擬化解決方案,不妨稱之為:KVM+QEMU. 在我看來,KVM在使用者空間的工具實際上是QEMU虛擬機器管理工具的一個子集(KVM使用的QEMU程式碼可以在
當然由於redhat已經開始支援KVM,它認為KVM+QEMU'的方案中使用者空間虛擬機器管理工具不太好使,或者通用性不強(可以參考2011年10月份在南京大學舉辦的中國核心開發者大會上,來自redhat從事libvirt工作的