Представен е релиз на проекта QEMU 9.0. Като емулатор, QEMU позволява да стартирате програма, събрана за една хардуерна платформа, на система с напълно различна архитектура, например, да изпълните приложение за ARM на PC, съвместим с x86. В режим на виртуализация в QEMU производителността на изпълнение на кода в изолирана среда е близка до реалната система благодарение на директното изпълнение на инструкции на CPU и използването на хипервизора Xen или модула KVM в Linux, или модула NVMM в NetBSD.
Изначално проектът е създаден от Фабрис Беллар (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 (MPS3 с фърмуер AN536) и raspi4b (Raspberry Pi 4 Model B). Добавена е поддръжка за емуляция на процесорни разширения ECV (Enhanced Counter Virtualization), NV (Nested Virtualization) и NV2 (Enhanced Nested Virtualization). Разширени са възможностите на емуляторите на платките 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 MB. Добавена е поддръжка на опцията ‘—nodefaults’.
- В емулятора на архитектурата LoongArch е добавена поддръжка за ускорение KVM и е реализирана поддръжка за векторни разширения на набора от инструкции LSX/LASX.
- В емулятора на архитектурата s390x е добавена поддръжка на инструкциите CVDG, CVB, CVBY и CVBG. Подобрена е емуляцията LAE (Load Address Extended).
- В емулятора на архитектурата 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.
- Представен е релизът на проекта QEMU 9.0.
Източник: opennet.ru
