Exactly one year has passed since the release of the QEMU 5.0 emulator, and now the developers have presented a new version. The project makes it possible to run software prepared for one architecture on a hardware platform with a different architecture.
An example is running an ARM app on an x86 PC. Due to the features of the emulator, an application in an isolated environment runs with almost the same efficiency as in a native environment. This is achieved, in particular, through direct execution of instructions on the processor, as well as through the use of the Xen hypervisor or the KVM module. Now the emulator supports 14 hardware architectures and can emulate about 400 different devices. During the year, the developers made over 3 thousand changes from 268 developers.
Learn more about the key changes
It is clear that the volume of the article will not allow making all 3 thousand changes, so we will restrict ourselves to the key ones, the most important:
- The NVMe controller emulator is now fully compliant with the NVMe 1.4 specification. It also received experimental support for several new features, including zoned namespaces, multipath I / O, and end-to-end encryption of data on the drive.
- In addition, the experimental options “-machine x-remote” and “-device x-pci-proxy-dev” have been added, which are needed to move device emulation to external processes. In the current mode, the emulator currently only supports the lsi53c895 SCSI adapter.
- There is experimental support for snapshots of the contents of RAM.
- A new FUSE module has appeared, which is required for exporting block devices. It gives you the ability to mount a slice of state on almost any block device that is used in a guest system. In this case, the expert is implemented thanks to the block-export-add QMP command or through the “–export” option in the qemu-storage-daemon utility.
- An important update was received by the ARM architecture emulator – for example, the ARMv8.1-M ‘Helium’ architecture and the Cortex-M55 processors were added, as well as the extended instructions ARMv8.4 TTST, SEL2 and DIT. And there was also support for mps3-an524 and mps3-an547 ARM boards, plus additional device emulation was added for xlnx-zynqmp, xlnx-versal, sbsa-ref, npcm7xx boards.
- As for the system-level emulation modes for ARM, there is now support for the ARMv8.5 MTE (MemTag, Memory Tagging Extension) extension. It allows you to bind tags to each memory allocation operation, organizing a pointer check when accessing it. The latter must be associated with the correct tag. What was the extension for? It makes it possible to block the exploitation of vulnerabilities that are caused by access to already freed blocks of memory, buffer overflows, calls before initialization, and use outside the current context.
- In the emulator for 68k, the developers added a new type of emulated machines, virt. The innovation allows virtio to be used to optimize device performance.
- In the x86 architecture, it became possible to use AMD SEV-ES (Secure Encrypted Virtualization) technology to encrypt the processor registers used in the guest system. As a result, the contents of the registers are not available to the host environment if the guest system does not explicitly provide access to them.
- For the MIPS architecture, a new type of emulated machine “virt” has also been added with support for the new Chinese Loongson-3 processors.
- For PowerPC, more precisely, for emulated machines, support for external BMC controllers has been added. If pseries crashes due to an attempt to hot eject memory and the CPU, then the crash is reported.
- Added support for emulating Qualcomm Hexagon processors with DSP.
- Implemented support for macOS host environments on systems with the new ARM-based Apple M1 chip in the classic TCG (Tiny Code Generator) code generator.
- When emulating the RISC-V architecture for Microchip PolarFire boards, support for QSPI NOR flash is implemented.
- The Tricore emulator adds support for a new model of TriBoard boards that emulate the Infineon TC27x SoC.
- In the ACPI emulator, you can now assign network adapters in guest name systems that are independent of the PCI bus connection order.
A complete list of changes and additions can be found here…