3,482 瀏覽數

KVM(Kernel-based Virtual Machine) + KQEMU

在 KVM(Kernel-based Virtual Machine) 裡面一直會談論到 QEMU 什麼是 QEMU 究竟在 KVM 的虛擬化中 QEMU 佔了什麼重要的地位.
kvm_qemu02

  • 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 是誰在做模擬的動作.

  • 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 支援的虛擬化技術請參考 http://benjr.tw/3620

  • Guest Mode
    系統會將工作模式分為 3 種,除了原本的 Kernel , User mode 之外還添加了 Guest Mode.這三種模式各處理不同的工作.
    kvm_qemu01

    • 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 個網友的想法 “KVM(Kernel-based Virtual Machine) + KQEMU

  1. 自動參照通知: ARM KVM (Ubuntu) – Benjr.tw

  2. 自動參照通知: ARM KVM (CentOS) – Benjr.tw

  3. 自動參照通知: KVM – RHEL5 update4 | Benjr.tw

  4. 自動參照通知: Virtualization | Benjr.tw

發表迴響