6,296 瀏覽數

QEMU machine emulator (Ubuntu)

測試環境 Ubuntu 16.04 (X86_64)

如何在 x86_64 環境下產生非 x86_64 的虛擬機器.這就需要透過 QEMU machine emulator 透過全模擬的方式來做.

在使用 QEMU machine emulator 前,我們先來看看 QEMU 三種不同的模擬方式 machine emulator , virtualizer 在加上 KVM.

  • machine emulator (User mode emulation)
    當 QEMU 當成 machine emulator 時他可以在不同的機器(例如 x86 x64 PC) 上運行另外一種型態的一個機器 如 ARM (一種常用於可攜式裝置的處理器) 的處理器 的系統和程序,使用的技術叫做動態翻譯 (dynamic translation).藉此可以得到較佳的較能.
  • virtualizer (System mode)
    當 QEMU 當成 virtulizer 時可以以模擬的方式模擬出一台 PC ,包含了 CPU 以及其他的周邊裝置,所以透過這種方式,QEMU 可以模擬出不同的硬體出來,如 x86, AMD64, ARM, Alpha, ETRAX CRIS, MIPS, MicroBlaze 和 SPARC.
    透過 QEMU 這種全模擬的方式就可以在 x86_64 環境下產生非 x86_64 的虛擬機器.
  • virtualizer (System mode)+KVM
    前面的效能不會太好,所以新的方式是透過 CPU 硬體的支援 – Intel VT 或者 AMD-V,而且要搭配必 Linux KVM 時才可以使用,這時候 QEMU 可以直接在主機的 CPU 上執行虛擬機的請求來實現接近本機的效能.

    為了解決 Guest OS 的核心無法處在 Ring 0 所以將 CPU 的操作畫分成兩種不同等級,一是 VMX root operation(根虛擬化操作).這邊就是提供給 VMM(Virtual Machine Monitor) 也可以稱作 Hybervisor 來使用,二是 VMX non-root operation(非根虛擬化操作) 這邊就可以提供給 Guest OS 來使用,並以傳統的方式將 Ring 劃分為 4 個等級 (Privileges levels).此時 Guest OS 的核心就可以在 Ring 0 下操作,也不會有效能上的損益( overhead )的問題了.

    關於 X86-64 虛擬化,請參考 http://benjr.tw/3407

    至於 ARM 處理器,到了 ARMv8-A 64bits 也開始支援類似這樣的模式,他定義了四個層級,從 EL0 到 EL3 , 數字越大 特權 (privilege) 越大.

    1. EL0: unprivileged
    2. EL1: OS kernel mode
    3. EL2: Hypervisor mode (VHE : Virtualization Host Extension)
    4. EL3: TrustZone® monitor mode

    其他關於
    KVM 請參考 http://benjr.tw/3620
    KVM + QEMU 請參考 http://benjr.tw/3631

要在 Ubuntu 使用 QEMU 所需套件為:

root@ubuntu:~# apt-get install qemu-kvm libvirt-bin virtinst virt-manager bridge-utils
  • qemu-kvm: QEMU virtualization
  • virtinst: Command line tool to create virtual machines.
  • libvirt-bin: Provides libvirtd daemon that manages virtual machines and controls hypervisor.
  • virt-manager: GUI tool to create virtual machines.

詳細設定請參考 http://benjr.tw/96185,這樣就可以透過 QEMU + KVM 建立虛擬機器.但沒有辦法在 x86_64 環境下產生非 x86_64 的虛擬機器.

我們可以在 Create a new virtual machine , step 5 of 5 , Advanced options 可以看到 Virt Type 為 KVM.
qemu_kvm01

其他全模擬的方式則需要個別的 QEMU 套件來支援.

  • qemu: No summary available for qemu in ubuntu saucy.
  • qemu-common: No summary available for qemu-common in ubuntu saucy.
  • qemu-guest-agent: No summary available for qemu-guest-agent in ubuntu saucy.
  • qemu-keymaps: QEMU keyboard maps
  • qemu-system: QEMU full system emulation binaries
  • qemu-system-arm: No summary available for qemu-system-arm in ubuntu saucy.
  • qemu-system-common: QEMU full system emulation binaries (common files)
  • qemu-system-mips: QEMU full system emulation binaries (mips)
  • qemu-system-misc: No summary available for qemu-system-misc in ubuntu saucy.
  • qemu-system-ppc: QEMU full system emulation binaries (ppc)
  • qemu-system-sparc: No summary available for qemu-system-sparc in ubuntu saucy.
  • qemu-system-x86: QEMU full system emulation binaries (x86)
  • qemu-user: No summary available for qemu-user in ubuntu saucy.
  • qemu-user-static: No summary available for qemu-user-static in ubuntu saucy.
  • qemu-utils: No summary available for qemu-utils in ubuntu saucy.

安裝 qemu-system-arm 套件就可以靠 QEMU 模擬成 ARM 處理器.

root@ubuntu:~# apt-get install qemu-system-arm

qemu_kvm02

發表迴響