QEMU,KVM及QEMU-KVM介紹
What‘s QEMU
QEMU是一個主機上的VMM(virtual machine monitor),通過動態二進制轉換來模擬CPU,並提供一系列的硬件模型,使guest os認為自己和硬件直接打交道,其實是同QEMU模擬出來的硬件打交道,QEMU再將這些指令翻譯給真正硬件進行操作。通過這種模式,guest os可以和主機上的硬盤,網卡,CPU,CD-ROM,音頻設備和USB設備進行交互。但由於所有指令都需要經過QEMU來翻譯,因而性能會比較差:
What‘s KVM?
KVM實際是linux內核提供的虛擬化架構,可將內核直接充當hypervisor來使用。KVM需要處理器硬件本身支持虛擬化擴展,如intel VT 和AMD AMD-V技術。KVM自2.6.20版本後已合入主幹並發行,除此之外,還以模塊形式被移植到FreeBSD和illumos中。除了支持x86的處理器,同時也支持S/390,PowerPC,IA-61以及ARM等平臺。
工作原理
KVM包含一個內核模塊kvm.ko用來實現核心虛擬化功能,以及一個和處理器強相關的模塊如kvm-intel.ko或kvm-amd.ko。KVM本身不實現任何模擬,僅僅是暴露了一個/dev/kvm接口,這個接口可被宿主機用來主要負責vCPU的創建,虛擬內存的地址空間分配,vCPU寄存器的讀寫以及vCPU的運行。有了KVM以後,guest os的CPU指令不用再經過QEMU來轉譯便可直接運行,大大提高了運行速度。但KVM的kvm.ko本身只提供了CPU和內存的虛擬化,所以它必須結合QEMU才能構成一個完整的虛擬化技術,也就是下面要介紹的技術。
What‘s QEMU-KVM
從前面的介紹可知,KVM負責cpu虛擬化+內存虛擬化,實現了cpu和內存的虛擬化,但kvm並不能模擬其他設備,還必須有個運行在用戶空間的工具才行。KVM的開發者選擇了比較成熟的開源虛擬化軟件QEMU來作為這個工具,QEMU模擬IO設備(網卡,磁盤等),對其進行了修改,最後形成了QEMU-KVM。
在QEMU-KVM中,KVM運行在內核空間,QEMU運行在用戶空間,實際模擬創建、管理各種虛擬硬件,QEMU將KVM整合了進來,通過/ioctl 調用 /dev/kvm,從而將CPU指令的部分交給內核模塊來做,KVM實現了CPU和內存的虛擬化,但KVM不能虛擬其他硬件設備,因此qemu還有模擬IO設備(磁盤,網卡,顯卡等)的作用,KVM加上QEMU後就是完整意義上的服務器虛擬化。
綜上所述,QEMU-KVM具有兩大作用:
- 提供對cpu,內存(KVM負責),IO設備(QEMU負責)的虛擬
- 對各種虛擬設備的創建,調用進行管理(QEMU負責)
這個方案中,QEMU模擬其他的硬件,如Network, Disk,同樣會影響這些設備的性能。於是又產生了pass through半虛擬化設備virtio_blk, virtio_net,提高設備性能。
QEMU-KVM,是QEMU的一個特定於KVM加速模塊的分支,裏面包含了很多關於KVM的特定代碼,與KVM模塊一起配合使用。 目前QEMU-KVM已經與QEMU合二為一,所有特定於KVM的代碼也都合入了QEMU,當需要與KVM模塊配合使用的時候,只需要在QEMU命令行加上 --enable-kvm就可以。轉自:https://www.cnblogs.com/echo1937/p/7138294.html
QEMU,KVM及QEMU-KVM介紹