ChangeLog/5.2: Difference between revisions
No edit summary |
|||
(63 intermediate revisions by 21 users not shown) | |||
Line 1: | Line 1: | ||
IMPORTANT NOTE: in this release we have switched our build system to internally use Meson. Building should be broadly unchanged for most users, but please see the [[#Build Information|Build Information]] section of the changelog for details and for '''the list of new [[#Build Dependencies |build dependencies]] you now need to install'''. | |||
== System emulation == | == System emulation == | ||
Line 5: | Line 7: | ||
=== New deprecated options and features === | === New deprecated options and features === | ||
Consult the [https://www.qemu.org/docs/master/system/deprecated.html "Deprecated Features"] chapter of the QEMU System Emulation User's Guide for the full list of historically deprecated features/options. | |||
In particular, note that the Unicore32 and lm32 guest support have been deprecated and will be removed in a future version. They are now only built if explicitly enabled in --target-list. | |||
=== 68k === | === 68k === | ||
Line 11: | Line 17: | ||
=== Arm === | === Arm === | ||
* ARMv8.2 FEAT_FP16 (half-precision floating point) is now implemented for AArch32 emulation (AArch64 already supported this) | |||
* AArch64 BTI is now supported in linux-user emulation mode (it was already implemented for system emulation) | |||
* The SMMUv3 model now supports SMMUv3.2 range invalidation | |||
* The sbsa-ref board now has an embedded controller model for guest powerdown and reboot requests | |||
* The sbsa-ref board now has an SBSA-compatible generic watchdog device | |||
* The Raspberry Pi boards now emulate the CPRMAN clock manager device | |||
* Support for KVM on 32-bit host CPUs (deprecated in 5.0) has now been removed. (32-bit KVM guests on 64-bit hosts remain supported.) | |||
* Two new board models in the mps2 family: mps2-an386 (Cortex-M4 based) and mps2-an500 (Cortex-M7 based) | |||
* New board models in the raspi family: raspi3ap (the Pi 3 model A+), raspi0 (the Pi Zero) and raspi1ap (the Pi A+) | |||
* New Nuvoton iBMC board models: npcm750-evb, quanta-gsj | |||
* The 'max' CPU now implements a 48-bit physical address size when using TCG emulation. | |||
* The 'virt' board supports kvm-steal-time (enabled by default for virt-5.2 and on) so that a guest OS can account for time when its CPUs were not running due to the host not scheduling the corresponding vCPU threads. | |||
=== AVR === | === AVR === | ||
=== HPPA === | === HPPA === | ||
* Added power button emulation | |||
* Boots NetBSD | |||
* Boots old Linux CDs, e.g debian-0.5 and debian-0.6.1 | |||
* Artist framebuffer fixes when running dtwm on HP-UX | |||
* Artist graphics allows screen resolution up to 2048 x 2048 pixels | |||
* fw_cfg interface added | |||
=== Microblaze === | === Microblaze === | ||
Line 25: | Line 50: | ||
=== PowerPC === | === PowerPC === | ||
* The pseries machine now respects the nvdimm= machine option (previously NVDIMMs could be attached even with nvdimm=off) | |||
* The pseries machine now does a better job of reflecting the user specified NUMA distances in the guest (PAPR limitations mean it's still a pretty poor approximation, though) | |||
* We now fail more gracefully if attempting to run an HPT guest as a nested KVM guest (which isn't supported in the kernel for now) | |||
* spapr_vscsi should now properly report that it does not support hotplug | |||
* The pnv machine now allows firmware images up to 16MiB, instead of just 4 MiB (this matches the limit on physical FSP machines) | |||
=== Renesas RX === | === Renesas RX === | ||
Line 31: | Line 62: | ||
=== RISC-V === | === RISC-V === | ||
* Improvements to the Ibex (OpenTitan) PLIC | |||
* OpenSBI v0.8 included by default | |||
* Generic OpenSBI platform used when no -bios argument is supplied | |||
* Support for a noMMU Linux kernel with the `-kernel` option | |||
* A dummy L2 cache controller for the sifive_u is now included | |||
* Support for the SiFive OTP device | |||
* PMPCFG CSR setting bug fixed for RV64 | |||
* Improvements to the floating point helpers | |||
* Experimental Hypervisor support updated to v0.6.1 and bug fixes | |||
* Support for NUMA sockets on Virt and Spike Machines | |||
* Support for the Microchip PolarFire SoC Icicle Kit | |||
* Fix for crash seen when running 'poweroff' command on virt machine | |||
* virt and sifive_u machines allow a custom dtb argument | |||
* Support for migrating machines | |||
=== s390 === | === s390 === | ||
* KVM: The diagnose 0x318 instruction is now supported. | |||
* TCG: More instructions that were introduced with the z14 are now emulated. | |||
* zPCI: vfio-pci devices now report real hardware features for functions, instead of emulated values (needs host kernel support.) | |||
* virtiofs is now also supported on s390x via ccw | |||
=== SPARC === | === SPARC === | ||
* sun4m: fix panic when booting NetBSD with the TCX framebuffer | |||
* sun4u: fix for sabre PCI IRQs being lost due to memory overflow | |||
=== TileGX === | === TileGX === | ||
Line 41: | Line 94: | ||
=== x86 === | === x86 === | ||
* A new KVM feature which improves the handling of asynchronous page faults is available with ''-cpu ...,kvm-async-pf-int''. This requires Linux 5.8. | |||
=== Xtensa === | === Xtensa === | ||
* DFPU coprocessor with single and double precision floating point opcodes is now supported | |||
* NMI is now supported | |||
=== Device emulation and assignment === | === Device emulation and assignment === | ||
Line 63: | Line 120: | ||
==== NVMe ==== | ==== NVMe ==== | ||
* Add support for mandatory features of version 1.3 of the NVM Express specification | |||
* Add support for the Abort, Asynchronous Event Request and Get Log Page commands | |||
* Add support for Scatter Gather Lists (supported descriptors: Data Block, Bit Bucket, Segment and Last Segment) | |||
* Allow the device to be configured with the "Admin Only" command set | |||
* Support multiple namespaces through the new nvme-ns device | |||
* The unallocated Intel PCI Vendor and Device ID has been replaced with a QEMU allocated "Red Hat" ID | |||
* Support per-namespace SMART log | |||
==== PCI/PCIe ==== | ==== PCI/PCIe ==== | ||
Line 71: | Line 135: | ||
==== SMBIOS ==== | ==== SMBIOS ==== | ||
* The OEM Strings data can now be loaded from a file | |||
==== TPM ==== | ==== TPM ==== | ||
Line 85: | Line 150: | ||
==== 9pfs ==== | ==== 9pfs ==== | ||
* Significant [https://lists.gnu.org/archive/html/qemu-devel/2020-01/msg05539.html performance improvement of Treaddir] requests. | |||
* A performance warning is now logged on host side if 'msize' is set to a very small value, which especially includes Linux 9P clients not having any user specified 'msize' parameter at all. Simply setting 'msize' (on client/guest side) to any value larger than 8192 will cause the warning to disappear. See [https://wiki.qemu.org/Documentation/9psetup#msize msize documentation] for details. | |||
==== virtiofs ==== | ==== virtiofs ==== | ||
* virtiofsd xattrmap option to allow the host to see different xattr names to the guest | |||
* virtiofsd alternate sandbox option for environments where pivot_root isn't available | |||
* virtiofsd 'submount' mechanism (requiring newer guest kernel) allows different host mounts to be seen as separate submounts in the guest, avoiding inode clashes. | |||
==== Semihosting ==== | ==== Semihosting ==== | ||
Line 93: | Line 163: | ||
=== Character devices === | === Character devices === | ||
* Inverted logic in QAPI handling the "tight" option for abstract UNIX sockets was fixed. | |||
* The QAPI schema now only reports support for abstract UNIX sockets on platforms where it is available (Linux). | |||
=== Crypto subsystem === | === Crypto subsystem === | ||
Line 99: | Line 172: | ||
=== GUI === | === GUI === | ||
* Spice: add support for SIDE and EXTRA mouse buttons. Improve HiDPI, set physical dimensions of client monitors. | |||
* Build spice and opengl as modules | |||
=== GDBStub === | === GDBStub === | ||
* initial support for reverse debugging when using icount's record/replay | |||
=== Host support === | === Host support === | ||
Line 107: | Line 183: | ||
=== Migration === | === Migration === | ||
* A new 'block-bitmap-mapping' migration parameter is added, allowing finer control of which bitmaps to migrate, even when node names differ between source and destination. | |||
* Migration over 'vsock' is now allowed, for nested environments or hosts with hardware that looks like a vsock. | |||
* A new 'calc-dirty-rate'/'query-dirty-rate' call gathers an approximation of the rate at which the guest is dirtying RAM and thus gives an idea about whether precopy migration is likely to proceed. | |||
* The default migration bandwidth has been increased to 1Gbps; users are still encouraged to tune it to their own hardware. | |||
* TLS+multifd is now supported for higher bandwidth encrypted migration. | |||
* Migration with dirty bitmaps has several bugs fixed. | |||
=== Monitor === | === Monitor === | ||
==== QMP ==== | |||
* Command block_resize no longer blocks the main loop. | |||
==== HMP ==== | ==== HMP ==== | ||
* Command block_resize no longer blocks the main loop. | |||
=== Network === | === Network === | ||
=== Block device backends and tools === | === Block device backends and tools === | ||
* qcow2 files now support extended L2 entries that allow subcluster-based allocation (enable with <code>extended_l2=on</code> when creating the image). | |||
* Using qemu as an NBD client has fewer scenarios where network timeouts stall guest execution | |||
* More explicit errors are reported when use of O_DIRECT fails | |||
* The 'block-export-add' QMP command has been introduced to support qemu-storage-daemon, and replaces the now-deprecated 'nbd-server-add' command. | |||
* The 'vhost-user-blk' export type has been added, allowing qemu-storage-daemon to act as a vhost-user-blk device backend. | |||
* qemu-nbd now supports multiple '-B name' options for exposing multiple dirty bitmaps at once; it also supports a new '-A' option for exposing the new "qemu:allocation-depth" metadata context over NBD. | |||
=== Tracing === | === Tracing === | ||
* Add support of dtrace backend on macOS | |||
=== Miscellaneous === | === Miscellaneous === | ||
* The roms/edk2 submodule and the bundled edk2 binaries have been updated to [https://bugs.launchpad.net/qemu/+bug/1852196 edk2-stable202008]. | |||
== User-mode emulation == | == User-mode emulation == | ||
* ppc64abi32-linux-user is deprecated and only built when explicitly enabled in--target-list | |||
* tilegx-linux-user is deprecated and only built when explicitly enabled in--target-list | |||
* better reporting when we can't mmap the guest_base we want on systems without MAP_FIXED_NOREPLACE | |||
== TCG == | == TCG == | ||
== Guest agent == | == Guest agent == | ||
* New commands: <code>guest-get-devices</code>, <code>guest-get-disks</code> & <code>guest-ssh-{get,add,remove}-authorized-keys</code> | |||
* Support <code>guest-get-fsinfo</code> for non-PCI virtio devices, too | |||
== Build Information == | == Build Information == | ||
Line 130: | Line 235: | ||
* Binaries for emulators are placed in the root build directory, for example as ''qemu-system-ppc'' instead of ''ppc-softmmu/qemu-system-ppc''. Symbolic links from the old binary are preserved to simplify the transition. | * Binaries for emulators are placed in the root build directory, for example as ''qemu-system-ppc'' instead of ''ppc-softmmu/qemu-system-ppc''. Symbolic links from the old binary are preserved to simplify the transition. | ||
* In-tree builds are not supported anymore. The build system will try to cater for ''./configure && make && make install'' by building QEMU in a directory named ''build'', but you are encouraged to switch to out-of-tree builds instead. | * In-tree builds are not supported anymore. The build system will try to cater for ''./configure && make && make install'' by building QEMU in a directory named ''build'', but you are encouraged to switch to out-of-tree builds instead. | ||
* ivshmem-client and ivshmem-server are not installed anymore. They are merely examples, and not to be used in production. | |||
* QEMU installations are now relocatable. For example, if QEMU is configured with ''bindir=/usr/local/bin'' and ''datadir=/usr/local/share'', when QEMU is launched as ''/opt/local/qemu-5.2/bin/qemu-system-x86_64'' it will look automatically for data files in ''/opt/local/qemu-5.2/share''. Note that directories configured outside the prefix (as is often the case for ''/etc'' and ''/var'') will not be relocated! Previously this was done only under Windows and only for emulators. | |||
=== Python === | === Python === | ||
* Python 3.6 or newer is now required to build QEMU. | |||
=== GIT submodules === | === GIT submodules === | ||
=== Container Based Builds === | === Container Based Builds === | ||
* All Debian 9 based cross-compiler containers have been updated to Debian 10 | |||
=== Build Dependencies === | === Build Dependencies === | ||
* | * Ninja 1.7 or newer is now required to build QEMU: | ||
* | * '''$ apt-get install ninja-build''' (Debian/Ubuntu and derivative distros) | ||
* '''$ dnf/yum install ninja-build''' (RHEL/Fedora/CentOS and derivative distros) | |||
* '''$ brew install ninja''' (macOS with HomeBrew) | |||
* '''$ pkg install ninja''' (FreeBSD) | |||
=== | === Windows === | ||
* qemu-nbd is now built on mingw, and works for simple cases even if it can't duplicate the full functionality available on Unix systems | |||
=== | === Testing and CI === | ||
* a new script can wait on gitlab to finish with a pass/fail status (scripts/ci/gitlab-status) | |||
== Known issues == | == Known issues == | ||
* see [[Planning/5.2]] | * see [[Planning/5.2]] |
Latest revision as of 16:12, 14 May 2021
IMPORTANT NOTE: in this release we have switched our build system to internally use Meson. Building should be broadly unchanged for most users, but please see the Build Information section of the changelog for details and for the list of new build dependencies you now need to install.
System emulation
Incompatible changes
New deprecated options and features
Consult the "Deprecated Features" chapter of the QEMU System Emulation User's Guide for the full list of historically deprecated features/options.
In particular, note that the Unicore32 and lm32 guest support have been deprecated and will be removed in a future version. They are now only built if explicitly enabled in --target-list.
68k
Alpha
Arm
- ARMv8.2 FEAT_FP16 (half-precision floating point) is now implemented for AArch32 emulation (AArch64 already supported this)
- AArch64 BTI is now supported in linux-user emulation mode (it was already implemented for system emulation)
- The SMMUv3 model now supports SMMUv3.2 range invalidation
- The sbsa-ref board now has an embedded controller model for guest powerdown and reboot requests
- The sbsa-ref board now has an SBSA-compatible generic watchdog device
- The Raspberry Pi boards now emulate the CPRMAN clock manager device
- Support for KVM on 32-bit host CPUs (deprecated in 5.0) has now been removed. (32-bit KVM guests on 64-bit hosts remain supported.)
- Two new board models in the mps2 family: mps2-an386 (Cortex-M4 based) and mps2-an500 (Cortex-M7 based)
- New board models in the raspi family: raspi3ap (the Pi 3 model A+), raspi0 (the Pi Zero) and raspi1ap (the Pi A+)
- New Nuvoton iBMC board models: npcm750-evb, quanta-gsj
- The 'max' CPU now implements a 48-bit physical address size when using TCG emulation.
- The 'virt' board supports kvm-steal-time (enabled by default for virt-5.2 and on) so that a guest OS can account for time when its CPUs were not running due to the host not scheduling the corresponding vCPU threads.
AVR
HPPA
- Added power button emulation
- Boots NetBSD
- Boots old Linux CDs, e.g debian-0.5 and debian-0.6.1
- Artist framebuffer fixes when running dtwm on HP-UX
- Artist graphics allows screen resolution up to 2048 x 2048 pixels
- fw_cfg interface added
Microblaze
MIPS
Nios2
OpenRISC
PowerPC
- The pseries machine now respects the nvdimm= machine option (previously NVDIMMs could be attached even with nvdimm=off)
- The pseries machine now does a better job of reflecting the user specified NUMA distances in the guest (PAPR limitations mean it's still a pretty poor approximation, though)
- We now fail more gracefully if attempting to run an HPT guest as a nested KVM guest (which isn't supported in the kernel for now)
- spapr_vscsi should now properly report that it does not support hotplug
- The pnv machine now allows firmware images up to 16MiB, instead of just 4 MiB (this matches the limit on physical FSP machines)
Renesas RX
Renesas SH
RISC-V
- Improvements to the Ibex (OpenTitan) PLIC
- OpenSBI v0.8 included by default
- Generic OpenSBI platform used when no -bios argument is supplied
- Support for a noMMU Linux kernel with the `-kernel` option
- A dummy L2 cache controller for the sifive_u is now included
- Support for the SiFive OTP device
- PMPCFG CSR setting bug fixed for RV64
- Improvements to the floating point helpers
- Experimental Hypervisor support updated to v0.6.1 and bug fixes
- Support for NUMA sockets on Virt and Spike Machines
- Support for the Microchip PolarFire SoC Icicle Kit
- Fix for crash seen when running 'poweroff' command on virt machine
- virt and sifive_u machines allow a custom dtb argument
- Support for migrating machines
s390
- KVM: The diagnose 0x318 instruction is now supported.
- TCG: More instructions that were introduced with the z14 are now emulated.
- zPCI: vfio-pci devices now report real hardware features for functions, instead of emulated values (needs host kernel support.)
- virtiofs is now also supported on s390x via ccw
SPARC
- sun4m: fix panic when booting NetBSD with the TCX framebuffer
- sun4u: fix for sabre PCI IRQs being lost due to memory overflow
TileGX
Tricore
x86
- A new KVM feature which improves the handling of asynchronous page faults is available with -cpu ...,kvm-async-pf-int. This requires Linux 5.8.
Xtensa
- DFPU coprocessor with single and double precision floating point opcodes is now supported
- NMI is now supported
Device emulation and assignment
ACPI
Audio
Block devices
Graphics
Input devices
IPMI
Network devices
NVDIMM
NVMe
- Add support for mandatory features of version 1.3 of the NVM Express specification
- Add support for the Abort, Asynchronous Event Request and Get Log Page commands
- Add support for Scatter Gather Lists (supported descriptors: Data Block, Bit Bucket, Segment and Last Segment)
- Allow the device to be configured with the "Admin Only" command set
- Support multiple namespaces through the new nvme-ns device
- The unallocated Intel PCI Vendor and Device ID has been replaced with a QEMU allocated "Red Hat" ID
- Support per-namespace SMART log
PCI/PCIe
SCSI
SD card
SMBIOS
- The OEM Strings data can now be loaded from a file
TPM
USB
VFIO
virtio
Xen
fw_cfg
9pfs
- Significant performance improvement of Treaddir requests.
- A performance warning is now logged on host side if 'msize' is set to a very small value, which especially includes Linux 9P clients not having any user specified 'msize' parameter at all. Simply setting 'msize' (on client/guest side) to any value larger than 8192 will cause the warning to disappear. See msize documentation for details.
virtiofs
- virtiofsd xattrmap option to allow the host to see different xattr names to the guest
- virtiofsd alternate sandbox option for environments where pivot_root isn't available
- virtiofsd 'submount' mechanism (requiring newer guest kernel) allows different host mounts to be seen as separate submounts in the guest, avoiding inode clashes.
Semihosting
Audio
Character devices
- Inverted logic in QAPI handling the "tight" option for abstract UNIX sockets was fixed.
- The QAPI schema now only reports support for abstract UNIX sockets on platforms where it is available (Linux).
Crypto subsystem
experimental qmp interface
GUI
- Spice: add support for SIDE and EXTRA mouse buttons. Improve HiDPI, set physical dimensions of client monitors.
- Build spice and opengl as modules
GDBStub
- initial support for reverse debugging when using icount's record/replay
Host support
Memory backends
Migration
- A new 'block-bitmap-mapping' migration parameter is added, allowing finer control of which bitmaps to migrate, even when node names differ between source and destination.
- Migration over 'vsock' is now allowed, for nested environments or hosts with hardware that looks like a vsock.
- A new 'calc-dirty-rate'/'query-dirty-rate' call gathers an approximation of the rate at which the guest is dirtying RAM and thus gives an idea about whether precopy migration is likely to proceed.
- The default migration bandwidth has been increased to 1Gbps; users are still encouraged to tune it to their own hardware.
- TLS+multifd is now supported for higher bandwidth encrypted migration.
- Migration with dirty bitmaps has several bugs fixed.
Monitor
QMP
- Command block_resize no longer blocks the main loop.
HMP
- Command block_resize no longer blocks the main loop.
Network
Block device backends and tools
- qcow2 files now support extended L2 entries that allow subcluster-based allocation (enable with
extended_l2=on
when creating the image). - Using qemu as an NBD client has fewer scenarios where network timeouts stall guest execution
- More explicit errors are reported when use of O_DIRECT fails
- The 'block-export-add' QMP command has been introduced to support qemu-storage-daemon, and replaces the now-deprecated 'nbd-server-add' command.
- The 'vhost-user-blk' export type has been added, allowing qemu-storage-daemon to act as a vhost-user-blk device backend.
- qemu-nbd now supports multiple '-B name' options for exposing multiple dirty bitmaps at once; it also supports a new '-A' option for exposing the new "qemu:allocation-depth" metadata context over NBD.
Tracing
- Add support of dtrace backend on macOS
Miscellaneous
- The roms/edk2 submodule and the bundled edk2 binaries have been updated to edk2-stable202008.
User-mode emulation
- ppc64abi32-linux-user is deprecated and only built when explicitly enabled in--target-list
- tilegx-linux-user is deprecated and only built when explicitly enabled in--target-list
- better reporting when we can't mmap the guest_base we want on systems without MAP_FIXED_NOREPLACE
TCG
Guest agent
- New commands:
guest-get-devices
,guest-get-disks
&guest-ssh-{get,add,remove}-authorized-keys
- Support
guest-get-fsinfo
for non-PCI virtio devices, too
Build Information
- The build system is now partly based on Meson. However, building is still done with configure and make as in previous versions of QEMU.
- Binaries for emulators are placed in the root build directory, for example as qemu-system-ppc instead of ppc-softmmu/qemu-system-ppc. Symbolic links from the old binary are preserved to simplify the transition.
- In-tree builds are not supported anymore. The build system will try to cater for ./configure && make && make install by building QEMU in a directory named build, but you are encouraged to switch to out-of-tree builds instead.
- ivshmem-client and ivshmem-server are not installed anymore. They are merely examples, and not to be used in production.
- QEMU installations are now relocatable. For example, if QEMU is configured with bindir=/usr/local/bin and datadir=/usr/local/share, when QEMU is launched as /opt/local/qemu-5.2/bin/qemu-system-x86_64 it will look automatically for data files in /opt/local/qemu-5.2/share. Note that directories configured outside the prefix (as is often the case for /etc and /var) will not be relocated! Previously this was done only under Windows and only for emulators.
Python
- Python 3.6 or newer is now required to build QEMU.
GIT submodules
Container Based Builds
- All Debian 9 based cross-compiler containers have been updated to Debian 10
Build Dependencies
- Ninja 1.7 or newer is now required to build QEMU:
* $ apt-get install ninja-build (Debian/Ubuntu and derivative distros) * $ dnf/yum install ninja-build (RHEL/Fedora/CentOS and derivative distros) * $ brew install ninja (macOS with HomeBrew) * $ pkg install ninja (FreeBSD)
Windows
- qemu-nbd is now built on mingw, and works for simple cases even if it can't duplicate the full functionality available on Unix systems
Testing and CI
- a new script can wait on gitlab to finish with a pass/fail status (scripts/ci/gitlab-status)
Known issues
- see Planning/5.2