Релиз эмулятора QEMU 2.12.0

Представлен релиз проекта QEMU 2.12. В качестве эмулятора QEMU позволяет запустить программу, собранную для одной аппаратной платформы, на системе с совершенно иной архитектурой, например, выполнить приложение для ARM на x86-совместимом ПК. В режиме виртуализации в QEMU производительность выполнения кода в изолированном окружении близка к нативной системе за счёт прямого выполнения инструкций на CPU и задействования гипервизора Xen или модуля KVM.

Изначально проект был создан Фабрисом Белларом (Fabrice Bellard) с целью обеспечения возможности запуска собранных для платформы x86 исполняемых файлов Linux на архитектурах, отличных от x86. За годы разработки была добавлена поддержка полной эмуляции для 14 аппаратных архитектур, число эмулируемых аппаратных устройств превысило 400. При подготовке версии 2.12 внесено более 2700 изменений от 204 разработчиков.

Ключевые улучшения, добавленные в QEMU 2.12:

  • Внесены улучшения в драйверы блочных устройств. Добавлена возможность прямого взаимодействия с работающим в пространстве пользователя драйвером NVMe при помощи протокола «nvme://». Улучшена работа сервера и клиента NBD, в том числе повышена эффективность чтения файлов с пустотами. Добавлена новая QMP-команда x-blockdev-create для создания образов;
  • Добавлена поддержка паравиртуализированного драйвера VMWare RDMA, способного работать в режимах RDMA HCA и Soft-RoCE (rxe);
  • Реализована поддержка CAN bus, включая поддержку Linux SocketCAN и сетевых интерфейсов SJA1000 PCI;
  • Улучшена работа в окружениях с двойным сетевым стеком (IPv4 и IPv6);
  • Добавлена опция »-nic» для быстрого создания сетевых фронтэндов (эмулируемых сетевых адаптеров) и работающих на стороне хост-системы бэкендов. Реализована возможность указания любых PCI NIC в опциях »-net nic, model=…» или »-nic …, model=»;
  • Проведена работа по исправлению ошибок в GUI (например, устранены проблемы с раскладкой клавиатуры). В интерфейс GTK и Spice добавлена поддержка технологии DMABuff для совместного использования нескольких GPU. Сборка GUI с GTK2 и SDL1 объявлена устаревшей (следует собирать с GTK3 и SDL2). Интерфейсы Curses, GTK+ и SDL теперь могут быть собраны как модули, загружаемые в процессе работы;
  • Добавлена поддержка двух новых систем ускорения виртуализации: Apple Hypervisor.framework (»-accel hvf») и Microsoft Windows Hypervisor Platform Extensions (»-accel whpx»);
  • Для архитектур x86, pseries и s390 добавлен механизм защиты гостевых систем от атак Spectre и Meltdown. Защита от Meltdown основана на патчах KPTI, а защита от Spectre построена с привлечением IBRS (Indirect Branch Restricted Speculation) и IBPB (Indirect Branch Prediction Barriers), предложенных в обновлённом микрокоде Intel и AMD;
  • Звуковые драйверы для ALSA, OSS, PulseAudio и SDL теперь могут быть собраны как загружаемые модули;
  • Добавлена поддержка бэкенда для работы с памятью на базе memfd (memory-backend-memfd). Memfd позволяет выделить память как через malloc, но обращаться к ней как с файлом, по файловому дескриптору, что позволяет бэкенду совместно использовать память с внешними процессами vhost-user;
  • Проведена чистка и работа над ошибками в коде эмуляции SD-карт;
  • Во встроенном эмуляторе BMC-контроллеров улучшена поддержка IPMI, расширены возможности по генерации событий платформы (Platform Events) и ведения SEL-логов;
  • В KVM добавлена поддержка систем, имеющих более 7.999TB памяти;
  • В KVM добавлена поддержка расширения AMD SEV (Secure Encrypted Virtualization), трассировки процессов и выборочной настройки производительности CPU (»-cpu kvm-hint-dedicated=on»);
  • В SMBIOS добавлена поддержка идентификаторов «OEM Strings» (таблицы 11 типа), которые могут применяться для автоматизации активации образов гостевых систем без использования сетевых запросов (например,»$QEMU -smbios type=11, value=cloud-init: ds=nocloud-net; s=http://10.10.0.1:8000/»);
  • В подсистеме USB добавлена поддержка записи с использованием протокола MTP;
  • В драйвер virtio-balloon добавлена поддержка вывода информации о дисковом кэше;
  • Добавлена новая целевая платформа RISC-V и связанные с ней типы эмулируемых систем «spike_v1.9.1», «spike_v1.10» и «virt»;
  • В эмулятор архитектуры ARM добавлена начальная поддержка Raspberry Pi 3 и поддержка инструкций FCMA, RDM, SIMD, FP16 и crypto, предлагаемых архитектурой AArch64. Добавлен эмулятор для чипов Corex-M33/Armv8-M (плата mps2-an505);
  • Добавлена поддержка полной эмуляции систем HPPA (hppa-softmmu);
  • В эмуляторе архитектуры PowerPC улучшена эмуляция PPC4xx, добавлен новый тип эмулируемых устройств Sam460ex, значительно увеличена производительность классического генератора кода TCG (Tiny Code Generator);
  • В эмулятор архитектуры SPARC добавлена поддержка эмуляции систем управления питанием sun4u, улучшены средства трассировки;
  • В эмуляторе Tricore появилась поддержка вариантов инструкций JEQ/JNE и 64-разрядной инструкции MOV;
  • В эмулятор x86 добавлена поддержка Intel IOMMU для 48-разрядной адресации. По умолчанию для систем q35 задействован сетевой адаптер e1000e (Intel 82574);
  • В эмуляторе процессоров семейства Tensilica Xtensa для декодирования/дизассемблирования инструкций теперь применяется libisa. Добавлена поддержка многопоточного генератора кода TCG и различных конфигураций noMMU;
  • Сообщается, что в будущем возможно будет прекращена поддержка платформ GNU/kFreeBSD, DragonFly BSD, Solaris и Haiku, из-за отсутствия сопровождающих или инфраструктуры для тестирования;
  • Объявлены устаревшими параметры «serial», «trans», «secs», «heads», «cyls» и «addr» в опции »-drive», вместо которых следует использовать обобщённую опцию »-device». Опция »-net» пока не объявлена устаревшей, но вместо неё рекомендовано использовать опцию »-nic», предоставляющую более простой интерфейс (»-nic user» вместо »-net nic -net user»). Удалены ранее объявленные устаревшими опции »-hdachs»,»-usbdevice»,»-net dump»,»-drive if=scsi»,»-net channel»,»-tdf»,»-no-kvm-pit»,»-drive boot=on|off»;
  • Для сборки QEMU теперь можно использовать Python 3.x.

© OpenNet