QEMU,KVM及QEMU-KVM介紹

導(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ì)比較差:

QEMU工作原理

運(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。

具體的架構(gòu)如圖所示

在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具有兩大作用:

  1. 提供對(duì)cpu,內(nèi)存(KVM負(fù)責(zé)),IO設(shè)備(QEMU負(fù)責(zé))的虛擬
  2. 對(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)系了。

參考

  1. QEMU:https://en.wikipedia.org/wiki/QEMU
  2. KVM:https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine
  3. http://changfei.blog.51cto.com/4848258/1672147
  4. http://blog.csdn.net/shengxia1999/article/details/52244119
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容