Выпуск эмулятора QEMU 9.0.0

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

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

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

  • В virtio-blk, предоставляющий виртуальное блочное устройство для виртуальных машин, добавлена поддержка многоуровневой системы очередей (multiqueue) позволяющей разделить очереди для разных блочных устройств для обеспечения многопоточного доступа на многоядерных системах (разные очереди одного диска могут обрабатываться разными потоками ввода/вывода).
  • В блочном устройстве usb-storage добавлена поддержка свойств ‘backend_defaults’, ‘logical_block_size’, ‘physical_block_size’, ‘min_io_size’, ‘opt_io_size’ и ‘discard_granularity’.
  • В библиотеку gdbstub, позволяющей осуществлять удалённую отладку в GDB с использованием протокола RSP (Remote Serial Protocol), добавлена поддержка режима fork-follow, операции siginfo:read и перехвата системных вызовов в пространстве пользователя.
  • Бэкенды предварительного распределения памяти (preallocation) адаптированы для работы в многопоточном режиме и теперь могут одновременно обрабатывать запросы из нескольких потоков.
    .
  • В инструменты для миграции виртуальных машин добавлен режим “mapped-ram”, повышающий эффективность создания снапшотов виртуальных машин. Улучшено определение базовой страницы памяти, что позволило значительно ускорить миграцию неактивных виртуальных машин при наличии в системе поддержки multifd. В миграции на базе VFIO (Virtual Function I/O) добавлена поддержка перезапуска с сохранённого состояния (checkpoint-restart).
  • Переписана реализация устройства ESP SCSI (am53c974/dc390).
  • Добавлена поддержка алгоритма шифрования SM4 и обеспечена возможность его использования в драйвере блочного устройства ‘luks’.
  • В драйвер ‘luks’ добавлена поддержка создания и использования файлов с сохранёнными заголовками LUKS.
  • В эмуляторе архитектуры ARM реализована поддержка плат L475E-IOT01A IoT, mp3-an536 (Cortex-R52 MPS3 с прошивкой AN536) и raspi4b (Raspberry Pi 4 Model B). Добавлена поддержка эмуляции процессорных расширений ECV (Enhanced Counter Virtualization), NV (Nested Virtualization) и NV2 (Enhanced Nested Virtualization).
    Добавлена поддержка новых типов плат: b-l475e-iot01a (B-L475E-IOT01A), mps3-an536 (MPS3 с прошивкой AN536) и raspi4b (Raspberry Pi 4 Model B). Расширены возможности эмуляторов плат Freescale i.MX6, Allwinner R40, Bananapi, Raspberry Pi, npcm7xx и virt.
  • В эмулятор архитектуры RISC-V добавлена поддержка расширений архитектуры набора команд Zacas, amocas, RVA22, Zaamo, Zalrsc и Ztso. В виртуальных машинах RISC-V обеспечена поддержка SMBIOS. Для SRAT, SLIT, AIA и PLIC реализована поддержка ACPI. Обновлена поддержка таблиц RHCT.
  • В эмуляторе архитектуры HPPA до версии 16 обновлена прошивка SeaBIOS-hppa. Максимальный размер памяти увеличен с 3 ГБ до 3840 МБ. Добавлена поддержка опции “–nodefaults”.
  • В эмуляторе архитектуры LoongArch появилась поддержка ускорения KVM и реализована поддержка векторных расширений набора команд LSX/LASX.
  • В эмуляторе архитектуры s390x добавлена поддержка инструкций CVDG, CVB, CVBY и CVBG. Улучшена эмуляция LAE (Load Address Extended).
    команд LSX/LASX.
  • В эмулятор архитектуры 68k добавлено устройство nubus-virtio-mmio, позволяющее получить доступ к устройствам virtio из машин q800.
  • Обеспечена сборка с флагом ‘-fzero-call-used-regs’, позволяющим защититься от утечки информации из функций и сократить число блоков, пригодных для построения ROP-гаджетов (Return-Oriented Programming) в эксплоитах. Также добавлена сборка с флагом ‘-ftrivial-auto-var-init=zero’ для автоматической инициализации нулевым значением всех переменных, хранимых в стеке.
  • Для выполнения QEMU с KVM теперь требуется наличие как минимум ядра Linux 4.4. Для ARM-хостов в будущем эту планку планируют поднять до версии 4.19. Прекращена поддержка использования 32-разрядных Windows в качестве хостовых ОС.
  • Добавлена поддержка OpenBSD 7.4.
Release. Ссылка here.