首先KVM(Kernel Virtual Machine)是Linux的一個內核驅動模塊,它能夠讓Linux主機成為一個Hypervisor(虛擬機監控器)。在支持VMX(Virtual Machine Extension)功能的x86處理器中,Linux在原有的用戶模式和內核模式中新增加了客戶模式,並且客戶模式也擁有自己的內核模式和用戶模式,虛擬機就是運行在客戶模式中。KVM模塊的職責就是打開並初始化VMX功能,提供相應的介面以支持虛擬機的運行。

QEMU(quick emulator)本身並不包含或依賴KVM模塊,而是一套由Fabrice Bellard編寫的模擬計算機的自由軟體。QEMU虛擬機是一個純軟體的實現,可以在沒有KVM模塊的情況下獨立運行,但是性能比較低。QEMU有整套的虛擬機實現,包括處理器虛擬化、內存虛擬化以及I/O設備的虛擬化。QEMU是一個用戶空間的進程,需要通過特定的介面才能調用到KVM模塊提供的功能。從QEMU角度來看,虛擬機運行期間,QEMU通過KVM模塊提供的系統調用介面進行內核設置,由KVM模塊負責將虛擬機置於處理器的特殊模式運行。QEMU使用了KVM模塊的虛擬化功能,為自己的虛擬機提供硬體虛擬化加速以提高虛擬機的性能。

KVM只模擬CPU和內存,因此一個客戶機操作系統可以在宿主機上跑起來,但是你看不到它,無法和它溝通。於是,有人修改了QEMU代碼,把他模擬CPU、內存的代碼換成KVM,而網卡、顯示器等留著,因此QEMU+KVM就成了一個完整的虛擬化平台。

KVM只是內核模塊,用戶並沒法直接跟內核模塊交互,需要藉助用戶空間的管理工具,而這個工具就是QEMU。KVM和QEMU相輔相成,QEMU通過KVM達到了硬體虛擬化的速度,而KVM則通過QEMU來模擬設備。對於KVM來說,其匹配的用戶空間工具並不僅僅只有QEMU,還有其他的,比如RedHat開發的libvirt、virsh、virt-manager等,QEMU並不是KVM的唯一選擇。

所以簡單直接的理解就是:QEMU是個計算機模擬器,而KVM為計算機的模擬提供加速功能。

推薦閱讀:

相关文章