1. 程式人生 > >虛擬化之QEMU與KVM

虛擬化之QEMU與KVM


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程式碼可以在
http://www.linux-kvm.org/page/Code
上下載):KVM使用者空間虛擬機器管理工具有kvm, kvm-img, kvm-nbd ,kvm-ok 和kvm_stat,實際上kvm就是一個指向qemu-system-x86_64的符號連結,kvm-img則是指向qemu-img的符號連結,至少我的系統中就是如此。從適用的範圍來講, QEMU虛擬化方案除了支援x86架構外,還支援其他很多架構,這從上文中/home/dennis/workspace/Linux/qemu-bin-dbg/bin目錄下的檔名就可以看出來,比如qemu-system-m68k,qemu-system-mips64, qemu-system-ppc64, qemu-system-arm等等。但是目前提到KVM,一般指x86上基於Intel VT和AMD SVM的解決方案,雖然目前將KVM移植到ARM, PPC的工作正在進行中。

當然由於redhat已經開始支援KVM,它認為KVM+QEMU'的方案中使用者空間虛擬機器管理工具不太好使,或者通用性不強(可以參考2011年10月份在南京大學舉辦的中國核心開發者大會上,來自redhat從事libvirt工作的