Представлен релиз проекта QEMU 2.8. В качестве эмулятора QEMU позволяет запустить программу, собранную для одной аппаратной платформы, на системе с совершенно иной архитектурой, например, выполнить приложение для ARM на x86-совместимом ПК. В режиме виртуализации в QEMU производительность выполнения кода в изолированном окружении близка к нативной системе за счёт прямого выполнения инструкций на CPU и задействования гипервизора Xen или модуля KVM.
Изначально проект был создан Фабрисом Белларом (Fabrice Bellard) с целью обеспечения возможности запуска собранных для платформы x86 исполняемых файлов Linux на архитектурах, отличных от x86. За годы разработки была добавлена поддержка полной эмуляции для 14 аппаратных архитектур, число эмулируемых аппаратных устройств превысило 400. При подготовке версии 2.8 внесено более 1900 изменений от 201 разработчика.
Ключевые улучшения, добавленные в QEMU 2.8:
- Поддержка создания отказоустойчивых гостевых систем на базе технологии COLO (COarse-grained LOck-stepping), позволяющей в случае сбоя оборудования переключить выполнение виртуальной машины на другой хост без остановки работы. Суть технолгии в том, что на двух хостах запускаются две идентичные копии виртуальной машины, которые получают и выполняют все внешние запросы, обрабатывают сетевые пакеты, но клиенту выдаются ответы от первой, первичной, виртуальной машины (PVM), а вторая, запасная, виртуальная машина (SVM) работает на холостом ходу. Если оборудование PVM даёт сбой, то пользователь переключается на SVM, которая находится в точно таком же состоянии, как и PVM;
- Новое устройство vhost-vsock, предоставляющее средства для быстрого сетевого взаимодействия приложений гостевых систем и хостов при помощи сокетов с адресацией AF_VSOCK, работающих поверх virtio. В отличие от virtio-serial, virtio-vsock позволяет использовать штатный POSIX Sockets API для взаимодействия между приложениями на стороне гостевой системы и хоста, что позволяет легко адаптировать для такого взаимодействия обычные сетевые программы и реализовать взаимодействие нескольких клиентских программ с одним серверным приложением;
- Новое устройство virtio-crypto с реализацией виртуального ускорителя криптографических функций. Выполняемые через virtio-crypto запросы на шифрование и расшифровку помещаются в очередь и обрабатываются реальным аппаратным криптоакселератором. Предоставляются следующие криптографические сервисы: CIPHER, MAC, HASH, AEAD;
- Начальная поддержка подключения обработчиков сбоев в гостевых системах, позволяющих автоматически решить некоторые проблемы, без аварийного завершения гостевой системы с выводом ошибки;
- Поддержка использования сжатия при создании live-бэкапов;
- В реализацию протокола SPICE добавлена полноценная поддержка рендеринга с использованием OpenGL при указании «gl=on»;
- Добавлена поддержка ACPI для извлекаемых (hotplug) устройств с интерфейсом NVDIMM;
- В эмулятор архитектуры ARM добавлена реализация типа эмулируемых систем ‘virt’ c поддержкой Interrupt Translation Services (ITS) через ACPI. Добавлена поддержка платы STM32F2xx (Netduino 2) и улучшена поддержка платы Aspeed;
- В эмуляторе архитектуры MIPS добавлена поддержка процессоров 24KEc;
- В эмуляторе архитектуры PPC добавлена поддержка процессоров POWER9 и платформы powernv. Для платформы pseries добавлена возможность использования в гостевом окружении более 1 Тб памяти и поддержка горячего извлечения/добавления памяти;
- В эмуляторе x86 добавлена поддержка некоторых новых возможностей CPUID, связанных с набором инструкций AVX-512. В устройстве intel_iommu (эмулируемый IOMMUs) появилась поддержка расширенного режима прерываний (Extended Interrupt Mode). Для эмулируемой системы q35 до 288 увеличено максимальное число CPU;
- Для Xen добавлена поддержка операции unplug для дисков SCSI и устройств, совместимых с xenlinux;
- Добавлено универсальное псевдоустройство loader, позволяющее во время запуска загрузить несколько образов или параметров в память;
- В утилиту qemu-img добавлена новая команда «dd». При манипуляции с raw-образами добавлены опции «offset» и «size», позволяющие получить доступ к определённой части файла или устройства;
- Прекращена поддержка блочного уровня «tftp://», так как он уже очень давно неработоспособен и не может нормально обрабатывать файлы больше 256KB.