Qemu-KVM

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 18:09, 14 мая 2016.
Qemu-KVM
200px
Qemu linux.png
QEMU с запущенной в нём операционной системой ReactOS
Создатели: Фабрис Беллар
Разработчики: QEMU team:
Peter Maydell, et al.
Постоянный выпуск: 2.5.0 / 16 December 2015 года; 6 years ago (2015-12-16)[1]
Написана на: C
Операционная система: Linux, Microsoft Windows, Mac OS X и другие UNIX платформы
Тип ПО: Гипервизор
Лицензия: GNU GPL version 2
Веб-сайт qemu.org

QEMU — свободная программа с открытым исходным кодом для эмуляции аппаратного обеспечения различных платформ. Включает в себя эмуляцию процессоров Intel x86 и устройств ввода-вывода. Может эмулировать 80386, 80486, Pentium, Pentium Pro, AMD64 и другие x86-совместимые процессоры; PowerPC, ARM, MIPS, SPARC, SPARC64, m68k — лишь частично. Работает на Syllable, FreeBSD, FreeDOS, Linux, Windows 9x, Windows 2000, Mac OS X, QNX, Android и др.

Автор программы — французский программист Фабрис Беллар (фр. Fabrice Bellard), создатель популярной библиотеки libavcodec, которую используют такие известные программы, как FFmpeg, ffdshow, MPlayer, VideoLAN и др.

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

Проблемы QEMU

Недостаток QEMU его медлительность, связанная с программной эмуляцией, даже если запущен на железе совместимом с гостевой ОС. Для улучшения производительности, в QEMU имеется модуль ядра KVM, который позволяет большинству гостевых ОС выполняться непосредственно на x86 и x86_64 процессорах с поддержкой аппаратной виртуализации Intel VT или AMD-V.

Технология виртуализации

Под виртуализацией в этой статье подразумевается виртуализация платформы. Для физического оборудования, контролирующая программа может быть операционной системой-хозяином или гипервизором (см. Рисунок). В некоторых случаях сама хозяйская операционная система и является гипервизором. Гостевые операционные системы "проживают" на гипервизоре. В некоторых случаях гостевые операционные системы ориентированы на тот же процессор, что и контролирующая программа, но в других случаях платформы могут быть отличными (например, гостевая система PowerPC работает на x86 платформе).

Базовая архитектура виртуализации платформы

Реализовать виртуализацию можно множеством путей, но наиболее часто встречаются три основных метода. Первый называется "родной" (или полной) виртуализацией. В этом варианте гипервизор реализует основные элементы изоляции, отделяя физическое оборудование от гостевой операционной системы. Этот подход впервые был продемонстрирован в 1966 году в операционной системе виртуальных машин/виртуальной памяти IBM® CP - 40, а сейчас тот же метод используется в VMware ESX Server.

Другой популярный метод виртуализации называется паравиртуализацией. В случае паравиртуализации контролирующая программа реализует интерфейса прикладных программ (API) гипервизора, который используется гостевой операционной системой. Паравиртуализацию используют Xen и Linux Kernel-based Virtual Machine (KVM).

Третий полезный метод называется эмуляцией. Эмуляция, как видно из названия, виртуализует гостевую платформу благодаря полной имитации аппаратной среды. Эмуляция осуществляется в различных формах, даже в пределах одного и того же приложения. Примерами виртуализации посредством эмуляции -являются QEMU и Bochs.

Основные операции

QEMU поддерживает два режима эмуляции: пользовательский режим [User-mode] и системный режим [System-mode]. Пользовательский режим эмуляции позволяет процессу, созданному на одном процессоре, работать на другом (выполняется динамический перевод инструкций для принимающего процессора и конвертация системных вызовов Linux). Системный режим эмуляции позволяет эмулировать систему целиком, включая процессор и разнообразную периферию.

При эмуляции кода для x86 на хост-системе с архитектурой x86 можно достичь эффективности, близкой к родной, с помощью так называемого акселератора QEMU. Он позволяет исполнять эмулируемый код непосредственно на центральном процессоре хоста (на Linux через модуль ядра).

Но что делает QEMU действительно интересным с технической точки зрения, так это его быстрый и компактный динамический транслятор [dynamic translator]. Динамический транслятор позволяет выполнять во время исполнения переводить инструкции целевого (гостевого) процессора в инструкции центрального процессора хоста для обеспечения эмуляции. Это может быть сделано методом грубой силы (просто заменяя инструкции одного процессора другими), но это не всегда легко сделать, а в некоторых случаях одна инструкция может потребовать нескольких инструкций или даже изменений в их порядке следования для транслируемой архитектуры.

QEMU обеспечивает динамическую трансляцию преобразованием целевой инструкции в микрооперации. Эти микрооперации представляют собой элементы С-кода, которые компилируются в объекты. Затем вступает в дело основной транслятор. Он отображает целевые инструкции на микрооперации для динамической трансляции. Такой подход не только эффективен, но и обеспечивает переносимость.

Динамический транслятор QEMU также кэширует блоки транслируемого кода для снижения накладных расходов транслятора. Когда блок целевого кода встречается впервые, он переводится и хранится в виде транслированного блока [translated block]. Кэш QEMU хранит недавно переведенные блоки в буфере объемом 16 МБ. QEMU может даже поддерживать самомодифицирующийся код, аннулируя транслированные блоки в кэше.

Поддерживаемые периферийные устройства

Использование QEMU в качестве эмулятора персонального компьютера обеспечивает поддержку разнообразных периферийных устройств. Естественно, сюда входят стандартные периферийные устройства - эмулятор аппаратного видеоадаптера (VGA), мыши и клавиатуры PS/2, интерфейс IDE для жестких дисков, интерфейс CD-ROM и эмуляция дисковода. Кроме того, QEMU имеет возможность эмуляции сетевых адаптеров NE2000 (PCI), последовательных портов, многочисленных звуковых плат и контроллера PCI Universal Host Controller Interface (UHCI) Universal Serial Bus (USB) (с виртуальным USB концентратором). Также поддерживается до 255 процессоров с поддержкой симметричной многопроцессорности (SMP).

Помимо стандартных PC и ISA PC (без шины PCI), QEMU может эмулировать и другие аппаратные платформы, не связанные с ПК, такие как базовые платы АРМ Versatile (с использованием 926E) и платы на основе Malta million instructions per second (MIPS). В настоящее время ведется работа по реализации поддержки ряда других платформ, включая Power Macintosh G3 (Blue & White) и Sun 4u.

Эмулируемые платформы

В режиме запуска отдельных программ (user emulation):

  • x86
  • ARM
  • SPARC (32 бита)
  • PowerPC
  • MIPS
  • m68k

В режиме запуска полноценной ОС:

  • все выше перечисленные
  • AMD64 (x86-64)
  • EM64T

Платформы, на которых QEMU выполняется

Полноценно:

  • x86
  • x86-64
  • PowerPC

Поддержка тестируется:

  • DEC Alpha
  • SPARC (32 бита)
  • ARM
  • S390

Минимальная поддержка, только в текущей версии из CVS:

  • SPARC64
  • IA-64 — Itanium
  • m68k

Интеграция с другими системами виртуализации

VirtualBox

VirtualBox, выпущенный в январе 2007 года, использует некоторые из виртуальных аппаратных устройств QEMU, и имеет встроенный динамический рекомпилятор, основанный на QEMU. Как и в случае с KQEMU, VirtualBox обрабатывает почти весь гостевой код нативно на хосте через (Virtual Machine Manager) VMM и использует рекомпилятор только как механизм запасного варианта, например, когда гостевой код выполняется в режиме реального времени. Кроме того, VirtualBox анализирует код и улучшения, используя встроенный [2] для того, чтобы свести к минимуму перекомпиляции. VirtualBox является программным обеспечением с открытым исходным кодом (доступен под лицензией GPL), за исключением некоторых функций.

Xen-HVM

QEMU включает в себя несколько компонентов, используемых в Xen-HVM: эмуляторы CPU, эмуляторы устройств, универсальные устройства, описания машин, пользовательский интерфейс, и отладчик. Эмулированные устройства и универсальные устройства в QEMU составляют свои модели устройств для виртуализации ввода / вывода. Они включают в себя PIIX3 IDE (с некоторыми рудиментарными возможностями PIIX4), Cirrus Logic или обычная VGA эмуляция видео, RTL8139 или эмуляция сети E1000, и ACPI поддержка, обеспечиваемая Xen.

KVM

KVM (Kernel Virtual Machine) представляет собой модуль ядра FreeBSD и Linux, что позволяет пользовательским программам получать доступ к функциям аппаратной виртуализации различных процессоров, с которыми QEMU может предложить виртуализации для x86, PowerPC и S/390. Когда выбранная архитектура такая же, как архитектура хоста, QEMU может использовать определенные функции KVM, такие как ускорение.

SerialICE

SerialICE является основанным на QEMU инструментом отладки микропрограммы, запускающим систему внутри самой QEMU в то время как реальное оборудование последовательно подключено к системе хоста. Это может быть использовано в качестве дешевой замены [3].

WinUAE

WinUAE Amiga эмулятор введенный в версии 3.0.0 для поддержки CyberStorm PPC и Blizzard, 603e плат с использованием ядра QEMU PPC.

Источники

  1. https://en.wikipedia.org/wiki/QEMU#Integration_with_other_virtualization_solutions
  2. http://wiki.qemu.org/KVM
  3. https://habrahabr.ru/post/170259/

Примечания

  1. "ChangeLog/2.5". QEMU. 2015-12-16. Retrieved 2015-12-16. 
  2. "Дизассемблер". 
  3. "ICEs".