在 KVM(Kernel-based Virtual Machine) 裡面一直會談論到 QEMU 什麼是 QEMU 究竟在 KVM 的虛擬化中 QEMU 佔了什麼重要的地位.
-
QEMU
我們來看看 QEMU 的官方網頁對於 QEMU 的定義是什麼. http://www.nongnu.org/qemu/about.html QEMU 屬於 Open source 也就是可以讓大家免費來使用的,而且它就有兩種功能 1. 是 machine emulator 2. 是 virtualizer 各代表什麼意思呢!-
machine emulator (User mode emulation)
當 QEMU 當成 machine emulator 時它可以讓其他平台的作業系統 OSes 或是程式 Programes 比如是 ARM (一種常用於可攜式裝置的處理器) 系統可以直接執行在不同的平台上,比如是我們的桌機.使用的技術叫做 dynamic translation( JIT : just-in-time compilation http://en.wikipedia.org/wiki/Just-in-time_compilation ).藉此可以得到較佳的較能. -
virtualizer(System mode)
當 QEMU 當成 virtulizer 時, QEMU 幾乎可以以模擬的方式模擬出一台 PC ,包含了 CPU 以及其他的周邊裝置,所以透過這種方式,QEMU 可以模擬出不同的硬體出來,如 x86, AMD64, ARM, Alpha, ETRAX CRIS, MIPS, MicroBlaze 和 SPARC.不過目前可以執行 QEMU 的 virtualizer 只有 x86 x86_64 和 Power PC 詳細資料請參考 QEMU 的官方網頁 http://www.nongnu.org/qemu/status.html 也因此市面上的作業系統都可以模擬出來如 Linux, Solaris, Microsoft Windows, DOS, 以及 BSD.但是這種模擬的方式像是在 Host 的作業系統上跑應用程式(application),所以效能不是很好,所以在 Linux kernel 下的是使用另外一種的方式去模擬 KQEMU.
光是看完 QEMU 官方網站的說明可以會讓人更搞不懂到底 KVM 和 QEMU 是誰在做模擬的動作.
-
machine emulator (User mode emulation)
-
KVM & QEMU
一開始我對於 KVM 和 QEMU 的概念有點分不太清楚,但這兩個東西其實是主要構成 Linux 虛擬化的最重要的兩個元件(components).我們可以先上 KVM 官方網站的 FAQ 查看一下. 裡面的其中有一點就清楚的說明了 KVM 和 QEMU 的關係
http://www.linux-kvm.org/page/FAQ#What_is_the_difference_between_KVM_and_QEMU.3F
Q:What is the difference between KVM and QEMU?
A:QEMU uses emulation; KVM uses processor extensions (HVM) for virtualization.
原來 KVM 只負責虛擬化的部份 HVM (hardware-assisted virtualization),也就是 KVM 負責 VMM(Hypervisor) 的工作,至於模擬硬體裝置就交給了 QEMU.QEMU 的 FAQ
http://qemu-buch.de/cgi-bin/moin.cgi/FrequentlyAskedQuestions
Q:Can QEMU use hardware virtualization extensions – Intel's VT or AMD's SVM?
A:At present, no. A separate project named Kernel Virtual Machine currently uses a
modified QEMU to provide this ability for Intel's VT and AMD's SVM technologies.
上面也是講述同樣的關係.KVM 主要的功能就只是一個 VMM (hypervisor) 他並沒有去模擬硬體的裝置.模擬硬體的動作全都是交給 QEMU,不過 QEMU 只是存在 user space 的程式它必須透過 /dev/kvm 來和 kernel 與硬體溝通. -
KQEMU
那 KQEMU 又是什麼?
在 Linux KVM 上使用的的 QEMU 是修改過的版本叫做 KQEMU(也準備轉移到 FreeBSD 和 Windows 的系統上).主要是 QEMU 的公司 Fabrice Bellard 針對 x86 有虛擬化處理器的系統,修改一個只能使用在這種系統上的模擬器.這改寫過的 QEMU 被稱為 KQEMU 或是 QEMU Accelerator.最主要就是為了提升 x86 虛擬化處理器對於虛擬化效能的提升.所以我們在使用 KVM + KQEMU 時其處理器必須具有 Intel (VT) 或是 AMD (AMD-V) 功能才能使用.
關於 KVM 由 CPU 支援的虛擬化技術請參考 https://benjr.tw/3620 -
Guest Mode
系統會將工作模式分為 3 種,除了原本的 Kernel , User mode 之外還添加了 Guest Mode.這三種模式各處理不同的工作.
- Guest Model:執行關於 Guest OS 的 Memory & CPU 的 I/O 請求.
- User Model:透過 KQEMU 所模擬的裝置,User mode 接受 Guest OS 的 Storage 和 Network I/O 請求.
- Kernel Model:就負責 Guest Model 所提出的 Storage 和 Network I/O 請求並做轉換.
note: kernel space 和 user psace 在作業系統中會將 virtual memeory(記憶體技術的一種) 區分成兩塊,分別為 kernel space 和 user psace.很明顯的是 kernel space 就是保留給 kernel, kernel extensions, 或是 device drivers.這保留的空間是不會再釋放出來的.相對應的 user space 就是給一般使用者的應用程式 (applications) 來使用.這邊的空間會依據需求會被釋放出來給其他的程式來使用.
4 thoughts on “KVM(Kernel-based Virtual Machine) + KQEMU”