QEMU — это две вещи одновременно: полнофункциональный эмулятор (запускает код x86 на ARM-процессоре и наоборот) и быстрый виртуализатор для нативных архитектур. В режиме эмуляции QEMU программно воспроизводит все аппаратные компоненты: CPU, память, диски, сетевые карты. В режиме KVM QEMU использует аппаратное ускорение процессора и работает с производительностью, близкой к нативной (5–10% накладных расходов).
Как работает
QEMU + KVM — стандартная пара для виртуализации в Linux. KVM предоставляет ядерный модуль для аппаратного ускорения, QEMU управляет виртуальными устройствами (диски, сеть, USB). Интерфейс управления — libvirt, который абстрагирует детали QEMU/KVM и предоставляет API для Proxmox, virt-manager и других.
Диски виртуальных машин в QEMU хранятся в формате QCOW2 (QEMU Copy-On-Write). Этот формат поддерживает снапшоты, сжатие, шифрование и тонкое выделение (thin provisioning). Один QCOW2-файл может содержать цепочку снапшотов с diff-блоками.
История
QEMU создал французский программист Фабрис Беллар (Fabrice Bellard) в 2003 году. Он же создал FFmpeg, tcc (Tiny C Compiler) и вычислил миллиард цифр числа Пи на стандартном ПК. Первая публичная версия QEMU вышла в 2003 году. KVM (Kernel-based Virtual Machine) интегрирован в ядро Linux в 2007 году. В 2007 году компания Qumranet разработала KVM и была приобретена Red Hat в 2008 году.
Режимы работы QEMU
- Full system emulation — полная эмуляция другой архитектуры (медленно, но универсально)
- KVM acceleration — нативная производительность на x86 (≥95% от bare-metal)
- User mode emulation — запуск ELF-бинарников другой архитектуры без полной ОС
- TCG (Tiny Code Generator) — JIT-компилятор для трансляции инструкций без KVM
На что обращать внимание
QEMU/KVM — основа большинства Linux-хостингов: Proxmox, OpenStack, oVirt, VDS-провайдеры — все используют QEMU под капотом. Важен выбор формата диска: QCOW2 гибок (снапшоты), но raw-образы производительнее на 5–10%. Для live migration между хостами нужен shared storage (Ceph, NFS, iSCSI).
QEMU и KVM: синергия
QEMU редко используется в одиночку — в production его связывают с KVM. KVM обеспечивает аппаратное ускорение виртуализации (через VT-x/AMD-V), QEMU предоставляет эмуляцию устройств. Управление связкой QEMU+KVM осуществляется через libvirt — стандартный демон виртуализации в Linux, используемый Proxmox VE и OpenStack. Virtio-драйверы для дисков и сети снижают оверхед I/O до 5--10% по сравнению с полной эмуляцией.
История QEMU
QEMU создал Фабрис Беллар (Fabrice Bellard) в 2003 году. Первоначально использовался для эмуляции других архитектур (ARM на x86). KVM-поддержка добавлена в 2007 году. В 2011 году QEMU 1.0 стал стандартом de facto для Linux-виртуализации. QEMU поддерживает эмуляцию ARM, RISC-V, PowerPC, MIPS — что позволяет разрабатывать под встраиваемые системы на x86-машине.
На что обращать внимание при QEMU на хостинге
Если хостер использует QEMU+KVM, проверьте наличие паравиртуализированных Virtio-драйверов в вашем образе. На Windows-гостях нужно ставить Virtio Windows Drivers отдельно — без них дисковый I/O в 5--10 раз медленнее. На Linux они встроены с ядра 2.6.25. Формат диска qcow2 поддерживает снапшоты и тонкое выделение (thin provisioning), raw немного быстрее, но не поддерживает снапшоты. Proxmox VE использует QEMU+KVM как основной гипервизор.