Открыть сервис

QEMU

QEMU (Quick Emulator) — это свободное программное обеспечение с открытым исходным кодом, предназначенное для эмуляции аппаратного обеспечения различных вычислительных систем. QEMU позволяет запускать операционные системы и программы, разработанные для одной архитектуры (например, x86-64), на устройстве с другой архитектурой (например, ARM или RISC-V) или в изолированной виртуальной среде на той же архитектуре. Программа поддерживает как полную системную эмуляцию (эмуляцию целого компьютера), так и эмуляцию на уровне пользовательского пространства (user-mode эмуляция), что позволяет запускать отдельные приложения, скомпилированные для другой архитектуры.

История

Проект QEMU был основан французским программистом Фабрисом Белларом (Fabrice Bellard) в 2003 году. Первоначально QEMU разрабатывался как эмулятор, способный выполнять код для различных процессорных архитектур. В 2005 году Беллар выпустил версию 0.8.0, которая включала поддержку эмуляции нескольких гостевых систем одновременно.

В 2008 году компания Red Hat объявила о включении QEMU в состав своего проекта по виртуализации KVM (Kernel-based Virtual Machine). KVM, являющийся модулем ядра Linux, использует QEMU в качестве пользовательского интерфейса для управления виртуальными машинами. Это партнёрство значительно ускорило развитие QEMU, добавив поддержку аппаратной виртуализации (технологии Intel VT-x и AMD-V) и повысив производительность.

С 2011 года проект QEMU управляется сообществом разработчиков под эгидой организации Software Freedom Conservancy. Ключевыми разработчиками являются сотрудники Red Hat, IBM, Google и других компаний. В 2020 году вышла версия 5.0, которая принесла поддержку новых архитектур (например, RISC-V) и улучшения для эмуляции графических процессоров.

Архитектура и принцип работы

QEMU состоит из двух основных компонентов: эмулятора процессора (TCG — Tiny Code Generator) и набора эмулируемых устройств (виртуальных периферийных устройств).

Tiny Code Generator (TCG)

TCG — это динамический транслятор кода. Он преобразует машинные инструкции гостевой архитектуры (например, ARM) в инструкции хост-архитектуры (например, x86-64) во время выполнения. Этот процесс называется «двоичной трансляцией» (binary translation). TCG разбивает гостевой код на блоки (трансляционные блоки), транслирует их в промежуточное представление (IR — Intermediate Representation), а затем компилирует в машинный код хост-системы. Транслированные блоки кэшируются для ускорения повторного выполнения.

Эмуляция устройств

QEMU эмулирует широкий спектр аппаратных устройств, включая:

  • Процессоры: x86, x86-64, ARM, AArch64, MIPS, PowerPC, SPARC, RISC-V, s390x и другие.
  • Контроллеры памяти: эмуляция различных типов оперативной памяти, кэшей и контроллеров.
  • Графические адаптеры: эмуляция VGA, Cirrus Logic, virtio-gpu, а также специализированных GPU для ускорения графики в гостевой системе.
  • Сетевые карты: эмуляция Realtek RTL8139, Intel E1000, virtio-net.
  • Дисковые контроллеры: IDE, SATA, SCSI, NVMe, virtio-blk.
  • Звуковые карты: Sound Blaster 16, AC97, HDA.
  • USB-контроллеры: эмуляция UHCI, EHCI, xHCI.

Режимы работы

QEMU поддерживает два основных режима работы:

Системная эмуляция (System Emulation)

В этом режиме QEMU эмулирует целый компьютер, включая процессор, память, периферийные устройства и BIOS. Гостевая операционная система (например, Windows, Linux, BSD) запускается как обычная программа на хост-системе. Этот режим позволяет:

  • Запускать операционные системы, несовместимые с хост-архитектурой (например, Windows на ARM-устройстве).
  • Тестировать и отлаживать операционные системы без физического оборудования.
  • Выполнять изолированные вычисления в виртуальной среде.

Эмуляция пользовательского пространства (User-Mode Emulation)

В этом режиме QEMU эмулирует только процессор и системные вызовы (syscalls) гостевой архитектуры. Он позволяет запускать отдельные приложения, скомпилированные для другой архитектуры, без эмуляции всей операционной системы. Например, можно запустить программу для ARM на x86-64-системе. Этот режим используется для:

  • Кросскомпиляции и тестирования программного обеспечения.
  • Запуска устаревших или редких приложений.
  • Выполнения кода в изолированном окружении.

Виртуализация с KVM

При использовании с KVM (Kernel-based Virtual Machine) QEMU переключается в режим аппаратной виртуализации. В этом режиме QEMU не эмулирует процессор, а передаёт управление гостевой операционной системе напрямую на физический процессор с помощью аппаратных расширений виртуализации (Intel VT-x или AMD-V). Это обеспечивает почти нативную производительность для гостевых систем, работающих на той же архитектуре, что и хост. QEMU в этом случае управляет виртуальными устройствами (дисками, сетью, графикой) и памятью.

Применение

QEMU широко используется в различных областях:

Разработка и тестирование программного обеспечения

  • Кроссплатформенная разработка: Разработчики используют QEMU для тестирования приложений на разных архитектурах (ARM, MIPS, PowerPC) без необходимости иметь физическое оборудование.
  • Отладка операционных систем: QEMU поддерживает GDB (GNU Debugger), что позволяет отлаживать ядро ОС и драйверы устройств.
  • Тестирование безопасности: Исследователи используют QEMU для анализа вредоносного ПО в изолированной среде.

Облачные вычисления и виртуализация серверов

  • Платформы виртуализации: QEMU является основой для многих облачных решений, включая OpenStack, oVirt и Proxmox VE.
  • Виртуализация рабочего стола: QEMU используется в проектах по виртуализации рабочих столов (VDI — Virtual Desktop Infrastructure).

Эмуляция устаревших систем

  • Ретрокомпьютинг: QEMU позволяет запускать старые операционные системы (например, MS-DOS, Windows 95, Mac OS 9) на современных компьютерах.
  • Эмуляция игровых консолей: QEMU используется для эмуляции игровых консолей, таких как PlayStation 2 (через проект PCSX2) и Nintendo 64 (через проект Mupen64Plus).

Образование и исследования

  • Изучение архитектуры компьютеров: QEMU используется в учебных курсах для демонстрации работы процессоров и операционных систем.
  • Исследования в области виртуализации: QEMU служит платформой для экспериментов с новыми методами виртуализации и эмуляции.

Производительность и оптимизация

Производительность QEMU в режиме системной эмуляции без аппаратной виртуализации обычно составляет от 10% до 50% от нативной производительности хост-системы, в зависимости от сложности эмулируемой архитектуры и нагрузки. При использовании KVM производительность приближается к нативной (потери обычно составляют 1-5%).

Основные методы оптимизации:

  • Кэширование трансляций: TCG кэширует транслированные блоки кода, что ускоряет повторное выполнение.
  • Виртуализация устройств: Использование virtio-драйверов (паравиртуализированных устройств) снижает накладные расходы на эмуляцию ввода-вывода.
  • Аппаратная виртуализация: Использование KVM для ускорения выполнения гостевого кода.
  • Многопоточность: QEMU поддерживает многопоточную эмуляцию, что позволяет использовать несколько ядер процессора для ускорения эмуляции.

Инструменты командной строки

QEMU поставляется с набором утилит командной строки:

  • qemu-system-<архитектура> (например, qemu-system-x86_64, qemu-system-arm) — основной инструмент для системной эмуляции.
  • qemu-<архитектура> (например, qemu-arm, qemu-aarch64) — инструмент для эмуляции пользовательского пространства.
  • qemu-img — утилита для создания, конвертации и управления образами дисков (поддерживает форматы qcow2, raw, vmdk, vdi и другие).
  • qemu-nbd — утилита для монтирования образов дисков QEMU в хост-систему через Network Block Device.
  • qemu-ga — агент гостевой системы, обеспечивающий взаимодействие между хостом и гостевой ОС.

Форматы образов дисков

QEMU поддерживает множество форматов образов дисков:

  • raw — неформатированный образ, занимающий ровно столько места, сколько указано.
  • qcow2 — формат с копированием при записи (copy-on-write), поддержкой сжатия, шифрования и снапшотов.
  • vmdk — формат, используемый VMware.
  • vdi — формат, используемый VirtualBox.
  • vhd — формат, используемый Microsoft Hyper-V.
  • qcow — устаревшая версия qcow2.

Лицензия и сообщество

QEMU распространяется под лицензией GNU General Public License (GPL) версии 2. Исходный код доступен на официальном сайте проекта и в репозиториях GitHub. Сообщество разработчиков активно поддерживает проект, выпуская новые версии каждые 3-4 месяца. Официальные релизы сопровождаются подробными списками изменений (changelog).

Интересные факты

  • QEMU был первым эмулятором, который поддерживал динамическую двоичную трансляцию для нескольких архитектур одновременно.
  • В 2005 году Фабрис Беллар использовал QEMU для эмуляции Windows XP на Linux, что стало одним из первых демонстраций кроссплатформенной эмуляции.
  • QEMU используется в проекте Android Emulator (в составе Android SDK) для эмуляции ARM-устройств на x86-системах.
  • В 2021 году QEMU добавил поддержку эмуляции процессоров архитектуры RISC-V, что способствовало развитию этой открытой архитектуры.

Источники

  • Официальная документация QEMU (qemu.readthedocs.io)
  • Исходный код QEMU (git.qemu.org)
  • Статья «QEMU: A Fast and Portable Dynamic Translator» (Fabrice Bellard, 2005)
  • Документация по KVM (linux-kvm.org)
  • Книга «Virtualization with QEMU and KVM» (Red Hat, 2019)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →