什麼是QEMU ? 什麼是KVM ? 什麼是QEMU-KVM?

什麼是QEMU?

QEMU是一個主機上的VMM(virtual machine monitor),通過動態二進制轉換來模擬CPU,並提供一系列的硬件模型,使guest os認為自己和硬件直接打交道,其實是同QEMU模擬出來的硬件打交道,QEMU再將這些指令翻譯給真正硬件進行操作。通過這種模式,guest os可以和主機上的硬盤,網卡,CPU,CD-ROM,音頻設備和USB設備進行交互。但由於所有指令都需要經過QEMU來翻譯,因而性能比較差

什麼是KVM?

KVM實際是linux內核提供的虛擬化架構,可將內核直接充當hypervisor來使用。KVM需要處理器硬件本身支持虛擬化擴展,如intel VT 和AMD AMD-V技術。

工作原理

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才能構成一個完整的虛擬化技術,也就是QEMU-KVM。

什麼是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具有兩大作用:
  1. 提供對cpu,內存(KVM負責),IO設備(QEMU負責)的虛擬
  2. 對各種虛擬設備的創建,調用進行管理(QEMU負責)
這個方案中,QEMU模擬其他的硬件,如Network, Disk,同樣會影響這些設備的性能。於是又產生了pass through半虛擬化設備virtio_blk, virtio_net,提高設備性能。

原文出處:QEMU,KVM及QEMU-KVM介紹

留言

這個網誌中的熱門文章

[Mac OSX] 如何關閉開機啟動的應用程式?