不同的基於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進行交互
————————————————
版權聲明:本文為CSDN博主「dAng1r0Us」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/shengxia1999/article/details/52244119
Aha,忽然發現我也是個標題黨,十分鍾搞定某某技能這種標題最吸引人了。當然我也不是華而不實,是不是干貨,你讀了才知道。話說,接觸Xen這么久了,現在才花時間搞清楚這個問題,要不是需要給別人解釋,還不知道要等到什么時候才來寫這篇博客。閑話少說,進入正題。
關於qemu
Qemu是一個獨立的虛擬化解決方案,通過intel-VT 或AMD SVM實現全虛擬化,安裝qemu的系統,可以直接模擬出另一個完全不同的系統環境,虛擬機的創建通過qemu-image既可完成。QEMU本身可以不依賴於KVM,但是如果有KVM的存在並且硬件(處理器)支持比如Intel VT功能,那么QEMU在對處理器虛擬化這一塊可以利用KVM提供的功能來提升性能。
關於KVM
KVM是集成到Linux內核的Hypervisor,是X86架構且硬件支持虛擬化技術(IntelVT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux做大量的事,如任務調度、內存管理與硬件設備交互等。准確來說,KVM是Linuxkernel的一個模塊。可以用命令modprobe去加載KVM模塊。加載了模塊后,才能進一步通過其他工具創建虛擬機。但僅有KVM模塊是遠遠不夠的,因為用戶無法直接控制內核模塊去作事情,你還必須有一個運行在用戶空間的工具才行。這個用戶空間的工具,kvm開發者選擇了已經成型的開源虛擬化軟件QEMU。說起來QEMU也是一個虛擬化軟件。它的特點是可虛擬不同的CPU。比如說在x86的CPU上可虛擬一個Power的CPU,並可利用它編譯出可運行在Power上的程序。KVM使用了QEMU的一部分,並稍加改造,就成了可控制KVM的用戶空間工具了。所以你會看到,官方提供的KVM下載有兩大部分(qemu和kvm)三個文件(KVM模塊、QEMU工具以及二者的合集)。也就是說,你可以只升級KVM模塊,也可以只升級QEMU工具。這就是KVM和QEMU的關系。
關於Xen
實驗室課題緣故,從一開始接觸的就是Xen虛擬機,關於Xen的使用和開發都做了,也算是熟悉。Xen的編譯安裝是第一個要掌握的東西,首先你需要下載Xen的源碼,然后執行configure、make 、make install。當然你也可以選擇性的安裝make install-xen,這種方法僅限於第二次使用Xen,並對源碼做了更改后,可以不去編譯安裝tools文件夾下的東西,直接編譯安裝xen即可。那么tools下有什么東西呢?實際tools除了實現xl 、xm命令之外,還有很重要的一部分,也就是qemu-xen,qemu-xen-traditional等一些與qemu有關的程序。這也就是我們今天要解釋的xen中是如何使用qemu的。
總結
Qemu是一套獨立的虛擬化解決方案,KVM是另一套虛擬化解決方案,不過因為這個方案實際上只實現了內核中對處理器(Intel VT, AMDSVM)虛擬化特性的支持,換言之,它缺乏設備虛擬化以及相應的用戶空間管理虛擬機的工具,所以它借用了QEMU的代碼並加以精簡,連同KVM一起構成了另一個獨立的虛擬化解決方案,不妨稱之為:KVM+QEMU.。Xen是另一套獨立的虛擬化解決方案,最初的Xen只支持半虛擬化,Intel VT技術出現后,添加了全虛擬化功能,這個全虛擬化功能也是借助了qemu實現,但不是完全依賴qemu。
————————————————
版權聲明:本文為CSDN博主「小近視愛老花鏡」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/YSBJ123/article/details/51166343