QEMU和QEMU-KVM的關係

不同的基於KVM的虛擬化平臺,可能會採用不同的虛擬化組件,目前主流的採用QEMU-KVM組件,但在不同的產品裏版本有所不同,功能也有差異,下面就幾個概念進行梳理下


KVM:Kernel-Based Virtual Machine 基於內核的虛擬機,是Linux內核的一個可加載模塊,通過調用Linux本身內核功能,實現對CPU的底層虛擬化和內存的虛擬化,使Linux內核成爲虛擬化層,需要x86架構的,支持虛擬化功能的硬件支持(比如Intel VT,AMD-V),是一種全虛擬化架構。KVM在2007年年2月被導入Linux 2.6.20內核中。從存在形式來看,它包括兩個內核模塊:kvm.ko  和  kvm_intel.ko(或kvm_amd.ko),本質上,KVM是管理虛擬硬件設備的驅動,該驅動使用字符設備/dev/kvm(由KVM本身創建)作爲管理接口,主要負責vCPU的創建,虛擬內存的分配,vCPU寄存器的讀寫以及vCPU的運行


QEMU:是一套由Fabrice Bellard編寫的模擬處理器的自由軟件,它是一個完整的可以單獨運行的軟件,可以獨立模擬出整臺計算機,包括CPU,內存,IO設備,通過一個特殊的“重編譯器”對特定的處理器的二進制代碼進行翻譯,從而具有了跨平臺的通用性。QEMU有兩種工作模式:系統模式,可以模擬出整個電腦系統,另一種是用戶模式,可以運行不同與當前硬件平臺的其他平臺上的程序(比如在x86平臺上運行跑在ARM平臺上的程序);其代碼地址 http://git.qemu.org/qemu.git  ,有興趣的同學可以自己去看看,目前最新的版本是2.7.0,在0.9.1及之前版本還可以使用kqemu加速器(可以理解爲QEMU的一個插件,用來提高QEMU的翻譯性能,支持Windows平臺),但1.0以後版本就只能使用qemu-kvm(只支持Linux)進行加速了,1.3版本後QEMU和QEMU-KVM合二爲一了。


QEMU-KVM:從前面對KVM內核模塊的介紹知道,它只負責CPU和內存的虛擬化,加載了它以後,用戶就可以進一步通過工具創建虛擬機(KVM提供接口),但僅有KVM還是不夠的,用戶無法直接控制內核去做事情(KVM只提供接口,怎麼創建虛擬機,分配vCPU等並不在它上面進行),還必須有個運行在用戶空間的工具才行,KVM的開發者選擇了比較成熟的開源虛擬化軟件QEMU來作爲這個工具,並對其進行了修改,最後形成了QEMU-KVM。

在QEMU-KVM中,KVM運行在內核空間,QEMU運行在用戶空間,實際模擬創建,管理各種虛擬硬件,QEMU將KVM整合了進來,通過/ioctl 調用 /dev/kvm,從而將CPU指令的部分交給內核模塊來做,KVM實現了CPU和內存的虛擬化,但kvm不能虛擬其他硬件設備,因此qemu還有模擬IO設備(磁盤,網卡,顯卡等)的作用,KVM加上QEMU後就是完整意義上的服務器虛擬化

當然,由於qemu模擬io設備效率不高的原因,現在常常採用半虛擬化的virtio方式來虛擬IO設備,另文再談

綜上所述,QEMU-KVM具有兩大作用:

1.提供對cpu,內存(KVM負責),IO設備(QEMU負責)的虛擬

2.對各種虛擬設備的創建,調用進行管理(QEMU負責)


libvirt

順帶提一提libvirt,這是RedHat開始支持KVM後,大概是覺得QEMU+KVM方案中的用戶空間虛擬機管理工具不太好用或者通用性不強,所以乾脆搞了個libvirt出來,一個針對各種虛擬化平臺的虛擬機管理的API庫,一些常用的虛擬機管理工具如virsh(類似vim編輯器),virt-install,virt-manager等和雲計算框架平臺(如OpenStack,OpenNebula,Eucalyptus等)都在底層使用libvirt提供的應用程序接口。

libvirt主要由三個部分組成:API庫,一個守護進程 libvirtd 和一個默認命令行管理工具 virsh。


總結:

目前來說,QEMU是一個獨立的虛擬化解決方案,並不依賴KVM(它本身自己可以做CPU和內存的模擬,只不過效率較低),而KVM是另一套虛擬化解決方案,對CPU進行虛擬效率較高(採用了硬件輔助虛擬化),但本身不提供其他設備的虛擬化,借用了QEMU的代碼進行了定製,所以KVM方案一定要依賴QEMU

即使後來RedHat後來開發了libvirt,也只能簡單的認爲是個虛擬機管理工具,仍然需要通過用戶空間QEMU來與KVM進行交互


發佈了38 篇原創文章 · 獲贊 83 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章