Представлен релиз проекта QEMU 6.0. В качестве эмулятора QEMU позволяет запустить программу, собранную для одной аппаратной платформы, на системе с совершенно иной архитектурой, например, выполнить приложение для ARM на x86-совместимом ПК. В режиме виртуализации в QEMU производительность выполнения кода в изолированном окружении близка к аппаратной системе за счёт прямого выполнения инструкций на CPU и задействования гипервизора Xen или модуля KVM.
Изначально проект был создан Фабрисом Белларом (Fabrice Bellard) с целью обеспечения возможности запуска собранных для платформы x86 исполняемых файлов Linux на архитектурах, отличных от x86. За годы разработки была добавлена поддержка полной эмуляции для 14 аппаратных архитектур, число эмулируемых аппаратных устройств превысило 400. При подготовке версии 6.0 внесено более 3300 изменений от 268 разработчиков.
Ключевые улучшения, добавленные в QEMU 6.0:
- Эмулятор контроллеров NVMe приведён к соответствию спецификации NVMe 1.4 и снабжён экспериментальной поддержкой зонированных пространств имён, multipath I/O и сквозного шифрования данных на накопителе.
- Добавлены экспериментальные опции “-machine x-remote” и “-device x-pci-proxy-dev” для выноса эмуляции устройств во внешние процессы. В данном режиме пока поддерживается только эмуляция SCSI-адаптера lsi53c895.
- Добавлена экспериментальная поддержка создания снапшотов содержимого ОЗУ.
- Добавлен FUSE-модуль для экспорта блочных устройств, позволяющий примонтировать срез состояния любого блочного устройства, используемого в гостевой системе. Экспорт осуществляется через QMP-команду block-export-add или через опцию “–export” в утилите qemu-storage-daemon.
- В эмулятор ARM добавлена поддержка архитектуры ARMv8.1-M ‘Helium’ и процессоров Cortex-M55, а также расширенных инструкций ARMv8.4 TTST, SEL2 и DIT. Добавлена поддержка ARM-плат mps3-an524 и mps3-an547, а также. Для плат xlnx-zynqmp, xlnx-versal, sbsa-ref, npcm7xx и sabrelite реализована дополнительная эмуляция устройств.
- Для ARM в режимах эмуляции на уровне системы и пользовательского окружения реализована поддержка расширения ARMv8.5 MTE (MemTag, Memory Tagging Extension), позволяющего привязать теги к каждой операции выделения памяти и организовать при доступе к памяти проверку указателя, который должен быть связан с корректным тегом. Расширение может применяться для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнениями буфера, обращениями до инициализации и использованием вне текущего контекста.
- В эмуляторе архитектуры 68k добавлена поддержка нового типа эмулируемых машин “virt”, использующих для оптимизации производительности устройства virtio.
- В эмуляторе архитектуры x86 добавлена возможность применения технологии AMD SEV-ES (Secure Encrypted Virtualization) для шифрования регистров процессора, используемых в гостевой системе, что делает содержимое регистров недоступным для хост-окружения, если гостевая система явно не предоставит к ним доступ.
- В классическом генераторе кода TCG (Tiny Code Generator) при эмуляции систем x86 реализована поддержка механизма PKS (Protection Keys Supervisor), который можно применять для защиты доступа к привилегированным страницам памяти.
- В эмуляторе архитектуры MIPS добавлен новый тип эмулируемых машин
“virt” c поддержкой китайских процессоров Loongson-3. - В эмуляторе архитектуры PowerPC для эмулируемых машин “powernv” добавлена поддержка внешних BMC-контроллеров. Для эмулируемых машин pseries обеспечено информирование о сбоях при попытке горячего извлечения памяти и CPU.
- Добавлена поддержка эмуляции процессоров Qualcomm Hexagon c DSP.
- В классическом генераторе кода TCG (Tiny Code Generator) реализована поддержка хост-окружений macOS на системах с новым ARM-чипом Apple M1.
- В эмуляторе архитектуры RISC-V для плат Microchip PolarFire реализована поддержка QSPI NOR flash.
- В эмуляторе Tricore появилась поддержка новой модели плат TriBoard, эмулирующей SoC Infineon TC27x.
- В эмуляторе ACPI предоставлена возможность назначения сетевым адаптерам в гостевых системах имён, независящих от порядка подключения к шине PCI.
- В virtiofs добавлена поддержка опции USE_KILLPRIV_V2 для повышения производительности гостевых систем.
- В VNC добавлена поддержка прозрачности для курсора и поддержка масштабирования разрешения экрана в virtio-vga, отталкивающаяся от размера окна.
- В QMP (QEMU Machine Protocol) добавлена поддержка асинхронного параллельного доступа при выполнении задач резервного копирования.
- В эмуляторе USB добавлена возможность сохранения трафика, образующегося при работе с USB-устройствами, в отдельный pcap-файл для последующего инспектирования в Wireshark.
- Добавлены новые QMP-команды load-snapshot, save-snapshot и delete-snapshot для управления снапшотами qcow2.