導(dǎo)讀
- what's QEMU
- what's KVM
- what's QEMU-KVM
what's QEMU
WIKI定義如下:
QEMU (short for Quick Emulator) is a free and open-source hosted hypervisor that performs hardware virtualization.
QEMU是一個(gè)主機(jī)上的VMM(virtual machine monitor),通過動(dòng)態(tài)二進(jìn)制轉(zhuǎn)換來模擬CPU,并提供一系列的硬件模型,使guest os認(rèn)為自己和硬件直接打交道,其實(shí)是同QEMU模擬出來的硬件打交道,QEMU再將這些指令翻譯給真正硬件進(jìn)行操作。
通過這種模式,guest os可以和主機(jī)上的硬盤,網(wǎng)卡,CPU,CD-ROM,音頻設(shè)備和USB設(shè)備進(jìn)行交互。但由于所有指令都需要經(jīng)過QEMU來翻譯,因而性能會(huì)比較差:
運(yùn)行模式
QEMU提供多種運(yùn)行模式:
- User-mode emulation
這種模式下QEMU上僅進(jìn)運(yùn)行一個(gè)linux或其他系統(tǒng)程序,由和主機(jī)不同的指令集來編譯運(yùn)行。這種模式一般用于交叉編譯及交叉調(diào)試使用。 - System emulation
這種模式QEMU模擬一個(gè)完整的操作系統(tǒng),包括外設(shè)。可用來實(shí)現(xiàn)一臺(tái)物理主機(jī)模擬提供多個(gè)虛擬主機(jī)。QEMU也支持多種guest OS:Linux,windows,BSD等。支持多種指令集:x86,MIPS,ARMv8,PowerCP,SPARC,MicroBlaze等等。 - KVM Hosting
這種模式下QEMU處理包括KVM鏡像的啟停和移植,也涉及到硬件的模擬,guest的程序運(yùn)行由KVM請(qǐng)求調(diào)用QEMU來實(shí)現(xiàn)。 - Xen Hosting
這種模式下QEMU僅參與硬件模擬,guest的運(yùn)行完全對(duì)QEMU不可見。
what's KVM?
WIKI定義如下:
Kernel-based Virtual Machine(KVM) is a virtualization infrastructure for the Linux kernel that it into a hypervisor.
KVM實(shí)際是linux內(nèi)核提供的虛擬化架構(gòu),可將內(nèi)核直接充當(dāng)hypervisor來使用。KVM需要處理器硬件本身支持虛擬化擴(kuò)展,如intel VT 和AMD AMD-V技術(shù)。
KVM自2.6.20版本后已合入主干并發(fā)行,除此之外,還以模塊形式被移植到FreeBSD和illumos中。除了支持x86的處理器,同時(shí)也支持S/390,PowerPC,IA-61以及ARM等平臺(tái)。
工作原理
KVM包含一個(gè)內(nèi)核模塊kvm.ko用來實(shí)現(xiàn)核心虛擬化功能,以及一個(gè)和處理器強(qiáng)相關(guān)的模塊如kvm-intel.ko或kvm-amd.ko。
KVM本身不實(shí)現(xiàn)任何模擬,僅僅是暴露了一個(gè)/dev/kvm接口,這個(gè)接口可被宿主機(jī)用來主要負(fù)責(zé)vCPU的創(chuàng)建,虛擬內(nèi)存的地址空間分配,vCPU寄存器的讀寫以及vCPU的運(yùn)行。
有了KVM以后,guest os的CPU指令不用再經(jīng)過QEMU來轉(zhuǎn)譯便可直接運(yùn)行,大大提高了運(yùn)行速度。但KVM的kvm.ko本身只提供了CPU和內(nèi)存的虛擬化,所以它必須結(jié)合QEMU才能構(gòu)成一個(gè)完整的虛擬化技術(shù),也就是下面要介紹的技術(shù)。
what's QEMU-KVM
從前面的介紹可知,KVM負(fù)責(zé)cpu虛擬化+內(nèi)存虛擬化,實(shí)現(xiàn)了cpu和內(nèi)存的虛擬化,但kvm并不能模擬其他設(shè)備。還必須有個(gè)運(yùn)行在用戶空間的工具才行,KVM的開發(fā)者選擇了比較成熟的開源虛擬化軟件QEMU來作為這個(gè)工具,QEMU模擬IO設(shè)備(網(wǎng)卡,磁盤等),對(duì)其進(jìn)行了修改,最后形成了QEMU-KVM。
在QEMU-KVM中,KVM運(yùn)行在內(nèi)核空間,QEMU運(yùn)行在用戶空間,實(shí)際模擬創(chuàng)建、管理各種虛擬硬件,QEMU將KVM整合了進(jìn)來,通過/ioctl 調(diào)用 /dev/kvm,從而將CPU指令的部分交給內(nèi)核模塊來做,KVM實(shí)現(xiàn)了CPU和內(nèi)存的虛擬化,但kvm不能虛擬其他硬件設(shè)備,因此qemu還有模擬IO設(shè)備(磁盤,網(wǎng)卡,顯卡等)的作用,KVM加上QEMU后就是完整意義上的服務(wù)器虛擬化。
綜上所述,QEMU-KVM具有兩大作用:
- 提供對(duì)cpu,內(nèi)存(KVM負(fù)責(zé)),IO設(shè)備(QEMU負(fù)責(zé))的虛擬
- 對(duì)各種虛擬設(shè)備的創(chuàng)建,調(diào)用進(jìn)行管理(QEMU負(fù)責(zé))
這個(gè)方案中,QEMU模擬其他的硬件,如Network, Disk,同樣會(huì)影響這些設(shè)備的性能。于是又產(chǎn)生了pass through半虛擬化設(shè)備virtio_blk, virtio_net,提高設(shè)備性能。
總結(jié)
通過前面三節(jié)描述,大家應(yīng)該能基本掌握三種不同技術(shù)之前的區(qū)別和聯(lián)系了。