QEMU – jak działa emulator i hypervisor maszyn wirtualnych
Wirtualizacja

QEMU – jak działa emulator i hypervisor maszyn wirtualnych

QEMU – jak działa emulator i hypervisor maszyn wirtualnych

QEMU (Quick Emulator) to jeden z najważniejszych projektów w świecie wirtualizacji Linux. Potrafi emulować sprzęt, ale w połączeniu z KVM może również uruchamiać maszyny wirtualne z wykorzystaniem sprzętowej wirtualizacji CPU.

Najważniejsze rozróżnienie:

QEMU
→ emulacja urządzeń + model całej maszyny

KVM
→ sprzętowa akceleracja CPU

Dlatego często spotykamy:

QEMU + KVM

Czym jest QEMU?

QEMU może działać na dwa podstawowe sposoby.

Emulacja

Guest CPU
    |
    v
QEMU
    |
    v
Physical CPU

QEMU tłumaczy instrukcje jednego procesora na instrukcje procesora hosta.

To pozwala uruchomić np. system ARM na komputerze x86.

Wirtualizacja

Guest OS
    |
    v
QEMU
    |
    v
KVM
    |
    v
Physical CPU

Tutaj większość kodu CPU gościa wykonywana jest bezpośrednio przez fizyczny procesor.


QEMU vs KVM

To często powoduje zamieszanie.

Element QEMU KVM
Emulacja urządzeń
Emulacja CPU
Sprzętowa wirtualizacja CPU współpracuje
Wirtualne dyski
vNIC
VM management częściowo
Linux kernel niezbędny część rozwiązania

Najprościej:

QEMU = wirtualny komputer

KVM = akcelerator CPU

Architektura QEMU + KVM

                 Physical Server
                       |
                       v
                  Linux Kernel
                       |
              +--------+--------+
              |                 |
             KVM              QEMU
              |                 |
              |        +--------+--------+
              |        |        |        |
              |       Disk     NIC     BIOS
              |        |        |        |
              +--------+--------+--------+
                       |
                       v
                   Virtual Machine

Uruchomienie pierwszej VM

Przykładowo:

qemu-system-x86_64 \
  -enable-kvm \
  -m 4096 \
  -smp 2 \
  -drive file=ubuntu.qcow2,format=qcow2

Najważniejsze parametry:

-enable-kvm
→ użyj KVM

-m 4096
→ 4 GB RAM

-smp 2
→ 2 vCPU

-drive
→ wirtualny dysk

Co QEMU emuluje?

QEMU może stworzyć praktycznie kompletny komputer:

Virtual Machine
 |
 +-- CPU
 |
 +-- RAM
 |
 +-- BIOS/UEFI
 |
 +-- Disk
 |
 +-- Network Card
 |
 +-- USB
 |
 +-- PCI
 |
 +-- Serial
 |
 +-- GPU
 |
 +-- RNG

Guest OS widzi to jak prawdziwy sprzęt.


BIOS i UEFI

QEMU może uruchamiać VM z:

BIOS

lub:

UEFI

W nowoczesnych systemach często wykorzystywany jest:

OVMF

czyli firmware UEFI dla maszyn wirtualnych.

Schemat:

VM
 |
 v
UEFI
 |
 v
Bootloader
 |
 v
Operating System

Wirtualny dysk

QEMU obsługuje wiele formatów.

Najpopularniejsze:

qcow2
raw
vmdk
vdi

Przykład:

qemu-img create \
  -f qcow2 \
  ubuntu.qcow2 \
  40G

Powstanie wirtualny dysk o deklarowanym rozmiarze 40 GB.


qemu-img

To bardzo ważne narzędzie QEMU.

Możemy:

qemu-img info ubuntu.qcow2

sprawdzić informacje o obrazie.

Konwersja:

qemu-img convert \
  -f qcow2 \
  -O raw \
  ubuntu.qcow2 \
  ubuntu.raw

QCOW2

qcow2 oznacza:

QEMU Copy-On-Write version 2

Jego zalety obejmują m.in.:

  • snapshoty,
  • thin provisioning,
  • copy-on-write,
  • kompresję,
  • szyfrowanie obrazu w określonych zastosowaniach.

Schemat:

Base Image
    |
    +---- Changes
    |
    +---- Changes

Snapshoty

Można stworzyć punkt kontrolny:

VM
 |
 v
Snapshot
 |
 +-- Current State

Potem można wrócić do wcześniejszego stanu.

Trzeba jednak uważać: snapshot nie jest zamiennikiem backupu.


Wirtualna karta sieciowa

QEMU może stworzyć:

Guest
 |
 v
virtio-net
 |
 v
QEMU
 |
 v
Linux Network

Najczęściej w nowoczesnych VM warto korzystać z:

virtio-net

zamiast cięższej emulacji starego sprzętu.


QEMU networking

Możliwe są różne modele:

User Networking
      |
      v
NAT

albo:

VM
 |
 v
tap
 |
 v
Linux Bridge
 |
 v
Physical NIC

Przykład:

VM1 ----+
        |
VM2 ----+---- br0 ---- Physical NIC
        |
VM3 ----+

Virtio

Virtio jest jednym z kluczowych elementów wydajnej wirtualizacji.

Zamiast emulować starą kartę:

VM
 |
 v
Emulated Intel NIC
 |
 v
QEMU

możemy:

VM
 |
 v
virtio-net
 |
 v
Host

Podobnie działa:

virtio-blk
virtio-scsi
virtio-fs
virtio-rng

QEMU i GPU

QEMU może emulować wirtualną kartę graficzną.

Ale przy wymagających zastosowaniach można użyć:

PCI Passthrough

Schemat:

Physical GPU
      |
      v
IOMMU
      |
      v
VFIO
      |
      v
QEMU
      |
      v
VM

Dzięki temu VM może korzystać z fizycznego GPU.

 

QEMU – jak działa emulator i hypervisor maszyn wirtualnych
QEMU – jak działa emulator i hypervisor maszyn wirtualnych

VFIO

VFIO pozwala bezpiecznie przekazywać urządzenia PCI do VM.

Przykład:

GPU
 |
 v
VFIO
 |
 v
QEMU
 |
 v
Windows VM

To popularne rozwiązanie przy:

  • GPU passthrough,
  • AI,
  • machine learning,
  • workstation VM,
  • wymagających aplikacjach graficznych.

QEMU i CPU

Bez KVM:

Guest Instructions
       |
       v
QEMU Translation
       |
       v
Host CPU

Z KVM:

Guest Instructions
       |
       v
KVM
       |
       v
Physical CPU

Dlatego:

QEMU emulation

może być znacznie wolniejsza niż:

QEMU + KVM

TCG – Tiny Code Generator

Gdy KVM nie jest dostępne, QEMU może wykorzystać TCG.

TCG

Guest CPU
   |
   v
Translation
   |
   v
Host CPU

Pozwala to emulować inną architekturę.

Przykład:

x86 Host
   |
   v
QEMU TCG
   |
   v
ARM Guest

To ogromna zaleta QEMU.


Emulacja różnych architektur

QEMU potrafi uruchamiać między innymi:

x86
x86-64
ARM
AArch64
RISC-V
PowerPC
MIPS
SPARC

Przykład:

Intel x86-64

      |
      v

QEMU

      |
      v

ARM64 Linux

Nie wymaga to fizycznego procesora ARM, choć wydajność będzie niższa niż natywna.


QEMU i kontenery

QEMU może być również wykorzystywane do uruchamiania systemów o innych architekturach w środowiskach developerskich.

Przykład:

x86 Developer PC
       |
       v
QEMU
       |
       v
ARM64 Environment
       |
       v
Container

To przydatne podczas budowania obrazów dla:

linux/amd64
linux/arm64

QEMU i Docker Buildx

Przykładowy workflow:

Developer
   |
   v
Docker Buildx
   |
   +---- amd64
   |
   +---- arm64
          |
          v
        QEMU

Dzięki emulacji można budować obrazy dla innej architektury niż ta, na której działa host.


QEMU Machine Types

QEMU pozwala określić model maszyny.

Przykładowo:

qemu-system-x86_64 \
  -machine q35 \
  ...

q35 emuluje nowocześniejszą platformę chipsetu niż starsze modele i jest często używany w nowych VM.


QEMU i libvirt

Ręczne uruchamianie QEMU jest bardzo elastyczne, ale konfiguracja dużej liczby VM może być niewygodna.

Dlatego często używa się:

libvirt

Schemat:

Administrator
      |
      v
libvirt
      |
      v
QEMU
      |
      v
KVM
      |
      v
Hardware

Narzędzia:

virsh
virt-install
virt-manager

QEMU i Proxmox

Proxmox wykorzystuje QEMU/KVM do obsługi maszyn wirtualnych.

Schemat:

Proxmox VE
    |
    v
QEMU
    |
    v
KVM
    |
    v
Hardware

Administrator nie musi więc ręcznie tworzyć skomplikowanych poleceń QEMU.


QEMU a bezpieczeństwo

QEMU jest bardzo ważną granicą bezpieczeństwa.

Guest
  |
  v
QEMU
  |
  v
Host

Jeżeli pojawi się błąd w emulowanym urządzeniu:

Guest
  |
  v
QEMU Vulnerability
  |
  v
Potential VM Escape
  |
  v
Host

Dlatego należy regularnie aktualizować:

QEMU
Linux Kernel
libvirt
Firmware
Guest OS

QEMU Sandbox

W środowiskach o podwyższonych wymaganiach bezpieczeństwa można dodatkowo ograniczać możliwości procesu QEMU.

Przydatne mechanizmy hosta obejmują:

SELinux
AppArmor
seccomp
cgroups
namespaces

Schemat:

VM
 |
 v
QEMU
 |
 +-- seccomp
 +-- AppArmor / SELinux
 +-- cgroups
 |
 v
Host

QEMU a KVM – pełny obraz

                    PHYSICAL HARDWARE
                           |
                           v
                     Linux Kernel
                           |
                  +--------+--------+
                  |                 |
                 KVM              QEMU
                  |                 |
                  |       +---------+---------+
                  |       |         |         |
                  |      Disk      NIC      Firmware
                  |       |         |         |
                  +-------+---------+---------+
                          |
                          v
                    Virtual Machine
                          |
                    +-----+-----+
                    |           |
                  vCPU        vRAM
                    |
                    v
                 Guest OS

QEMU vs KVM – najprościej

Zapamiętaj:

QEMU
→ tworzy wirtualny komputer

KVM
→ pozwala temu komputerowi korzystać
  ze sprzętowej wirtualizacji CPU

Dlatego typowy Linux hypervisor wygląda tak:

Linux
  |
  +-- KVM
  |
  +-- QEMU
  |
  +-- libvirt

A kompletna infrastruktura może wyglądać:

Proxmox / OpenStack
        |
      libvirt
        |
       QEMU
        |
       KVM
        |
     Hardware

QEMU jest więc czymś więcej niż „emulatorem”. W połączeniu z KVM tworzy pełną platformę wirtualizacji, w której QEMU dostarcza model sprzętu i obsługę urządzeń, a KVM zapewnia wydajne wykonywanie kodu CPU gościa na fizycznym procesorze.

Polecane wpisy
Rodzaje Wirtualizacji: Pełna, Parawirtualizacja, Wirtualizacja na Poziomie Systemu Operacyjnego
Rodzaje Wirtualizacji: Pełna, Parawirtualizacja, Wirtualizacja na Poziomie Systemu Operacyjnego

🖥️ Rodzaje Wirtualizacji: Pełna, Parawirtualizacja, Wirtualizacja na Poziomie Systemu Operacyjnego Współczesne środowiska IT nie mogłyby funkcjonować tak sprawnie bez technologii, Czytaj dalej

Jak sprawdzić konfigurację wysokiej dostępności (HA) w środowisku wirtualnym?
Jak sprawdzić konfigurację wysokiej dostępności (HA) w środowisku wirtualnym?

🖥️ Jak sprawdzić konfigurację wysokiej dostępności (HA) w środowisku wirtualnym? Współczesne środowiska IT nie mogą pozwolić sobie na przestoje. Dlatego Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.