ChangeLog/5.0: Difference between revisions
(24 intermediate revisions by 12 users not shown) | |||
Line 8: | Line 8: | ||
* The "-virtfs_synth" option has been removed. You can use "-fsdev synth" together with "-device virtio-9p-..." instead. | * The "-virtfs_synth" option has been removed. You can use "-fsdev synth" together with "-device virtio-9p-..." instead. | ||
* The "-accel" and "-machine accel=" options are now incompatible with each other. | * The "-accel" and "-machine accel=" options are now incompatible with each other. | ||
* The deprecated "[hub_id name]" parameter tuple of 'hostfwd_add' / 'hostfwd_remove' has been removed. Use a "netdev_id" instead. | |||
=== New deprecated options and features === | === New deprecated options and features === | ||
Line 14: | Line 15: | ||
* The virtio-blk SCSI passthrough feature (" -device virtio-blk,scsi=on") is deprecated. Use virtio-scsi instead. | * The virtio-blk SCSI passthrough feature (" -device virtio-blk,scsi=on") is deprecated. Use virtio-scsi instead. | ||
* The "r4k" mips machine has been deprecated. The "malta" machine should be used nowadays instead. | * The "r4k" mips machine has been deprecated. The "malta" machine should be used nowadays instead. | ||
* Support for using an AArch32 host system to run KVM guests has been deprecated (because the Linux kernel has dropped its support for this) and will be removed in a future version of QEMU. AArch32 guests on an AArch64 host are still supported. | |||
Consult the [https://qemu. | 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. | ||
=== Alpha === | === Alpha === | ||
Line 23: | Line 25: | ||
=== Arm === | === Arm === | ||
* Support for using an AArch32 host system to run KVM guests is now deprecated (because the Linux kernel has dropped its support for this) and will be removed in a future version of QEMU. AArch32 guests on an AArch64 host are still supported. | |||
* Emulation of the following architecture features is now implemented: | * Emulation of the following architecture features is now implemented: | ||
** ARMv8.1-VHE | ** ARMv8.1-VHE | ||
Line 59: | Line 62: | ||
* The iMX6 machines wire up the USB controllers | * The iMX6 machines wire up the USB controllers | ||
* the gdbstub now supports SVE registers | * the gdbstub now supports SVE registers | ||
* virtio-iommu is now supported with machvirt (DT boot only) | |||
=== HPPA === | === HPPA === | ||
Line 71: | Line 75: | ||
* Support for R4000 machine is announced to be deprecated, and will be removed from code base in QEMU 5.2. | * Support for R4000 machine is announced to be deprecated, and will be removed from code base in QEMU 5.2. | ||
* | * Amended support for MemoryMapID CP0 register. | ||
* Amended support for WatchHi CP0 register. | |||
* Added support for GINVT instruction. | * Added support for GINVT instruction. | ||
Line 87: | Line 92: | ||
** NVDIMMs with file backend now supported | ** NVDIMMs with file backend now supported | ||
** If a guest panics with the ibm,os-term RTAS call, the error message it supplies is now reported | ** If a guest panics with the ibm,os-term RTAS call, the error message it supplies is now reported | ||
** Added firmware assisted NMI (FWNMI) support | |||
** SLOF updated to work with iommu_platform=on for virtio devices | |||
** Better handling of devices hotplugged early in boot (before the ibm,client-architecture-support call) | |||
* powernv machine type | * powernv machine type | ||
** Numerous improvements to the model | ** Numerous improvements to the model | ||
Line 92: | Line 100: | ||
** Basic POWER10 support | ** Basic POWER10 support | ||
** Removed num-chips machine property, use -smp sockets=NN instead | ** Removed num-chips machine property, use -smp sockets=NN instead | ||
* Deprecated the compat= property on CPUs (it's been obsolete for a while with a pseries specific machine property) | |||
* Fixed a longstanding bug if using big-endian ABIv2 binaries with linux-user | |||
* Implemented new forms of the slbia instruction present in POWER9 | |||
=== RISC-V === | === RISC-V === | ||
Line 98: | Line 109: | ||
* The GDB stub now allows for D on rv32 and non-D on rv64. | * The GDB stub now allows for D on rv32 and non-D on rv64. | ||
* The virt board now contains a Goldfish RTC. | * The virt board now contains a Goldfish RTC. | ||
* | * Experimental support for version 0.5 of the draft hypervisor extension has been added. | ||
=== s390 === | === s390 === | ||
* Adpater interrupt suppression is now available when running with KVM (previously disabled due to migration issues); support under tcg has already been available since 2.10 | * Adpater interrupt suppression is now available when running with KVM (previously disabled due to migration issues); support under tcg has already been available since 2.10 | ||
** enable by specifying the cpu feature "ais=on" | ** enable by specifying the cpu feature "ais=on" | ||
* QEMU now warns when it fixes up odd memory sizes for compatibility on compat machines | |||
** Only done on compat machines to avoid breaking incoming migrations. If you can, fix up the memory size on old machines or switch to a machine type >= 5.0, which supports 1M increments | |||
** The automatic fixup may be removed in a future version. | |||
=== SH === | === SH === | ||
Line 123: | Line 137: | ||
==== Block devices ==== | ==== Block devices ==== | ||
* hw/ide: remove legacy _init() functions and instantiate directly via pci_create_simple() instead | |||
* via-ide: miscellaneous cleanups and IRQ routing fix | |||
* cmd646: miscellaneous cleanups | |||
==== Graphics ==== | ==== Graphics ==== | ||
Line 149: | Line 167: | ||
==== virtio ==== | ==== virtio ==== | ||
* virtio-iommu (for ARM virt, DT boot only) | |||
==== Xen ==== | ==== Xen ==== | ||
Line 175: | Line 195: | ||
=== Memory backends === | === Memory backends === | ||
* hostmem based backends got new "prealloc-threads" property, which allows user to explicitly specify number of prealloc thread during backend's initialization.<br/>By default it is set to 1 thread, unless global -mem-prealloc option is used, in which case machine will set it to the number of VCPUs (-smp N).<br/>Users are advised to explicitly specify "prealloc-threads" property if they use memory backends. | |||
=== Monitor === | === Monitor === | ||
Line 196: | Line 216: | ||
* The command line <code>qemu-nbd --partition</code>, deprecated in 4.0, has been removed. Exposing a single partition of an image through NBD should now be accomplished via other means, such as using the offset and size parameters of an intermediate raw driver. | * The command line <code>qemu-nbd --partition</code>, deprecated in 4.0, has been removed. Exposing a single partition of an image through NBD should now be accomplished via other means, such as using the offset and size parameters of an intermediate raw driver. | ||
* <code>qemu-img convert -n</code> now understands a <code>--target-is-zero</code> option, which tells it that the target image is completely zero, so it does not need to be zeroed again. | * <code>qemu-img convert -n</code> now understands a <code>--target-is-zero</code> option, which tells it that the target image is completely zero, so it does not need to be zeroed again. | ||
* <code>qemu-img measure</code> works for LUKS images | |||
* The QMP command <code>blockdev-snapshot</code> can now be used even if the new overlay node is already in use, as long as it is write-only use (such as for the target of a mirror operation) | |||
* <code>block-commit</code> supports the new option <code>on-error</code> that works like in the other block jobs. This allows pausing the block job instead of aborting it on error. | |||
* VHD disk images created with the ''vpc'' block driver are compatible with Azure now | |||
* Image creation with the ''luks'' block driver doesn't leave half-created images behind any more in case of failure | |||
* The ''file-posix'' driver can now use the io_uring interface of Linux with <code>aio=io_uring</code> | |||
* The ''rbd'' driver supports Ceph namespaces now | |||
* The new ''compress'' filter driver can be used together with the backup job to create a compressed backup image | |||
* Fixed some crashes and deadlocks for iothreads, especially when used with block jobs | |||
* As an experimental feature, <code>qemu-storage-daemon</code> was added. It provides access to QEMU block layer features including QMP commands (e.g. block jobs or the built-in NBD server) without starting a full VM. The external interfaces such as command line and QMP command set are still considered unstable and may change incompatibly in future versions. | |||
=== Tracing === | === Tracing === | ||
Line 206: | Line 236: | ||
** "-machine kvm_shadow_mem=" (now "-accel kvm,kvm-shadow-mem=") | ** "-machine kvm_shadow_mem=" (now "-accel kvm,kvm-shadow-mem=") | ||
** "-machine igd-passthru=" (now "-accel xen,igd-passthrough=") | ** "-machine igd-passthru=" (now "-accel xen,igd-passthrough=") | ||
* New option "-machine memory-backend" allows to specify a memory backend which will be used for main RAM. | |||
** global options "-m X", "-mem-path" and "-mem-prealloc" are now aliased to "-machine memory-backend" option. An implicit backend will be created and assigned to "-machine memory-backend", using values user specified with help of the old options, unless "-machine memory-backend" was explicitly provided. If "-machine memory-backend" is explicitly provided, "-m X" value must match specified backend's size. Most of the boards use this mechanism (modulo a few SoC based ones with fixed RAM size and boards that use Xen accelerator) | |||
** fixed bug when "-mem-prealloc" made memory backends not to follow strict bind policy. | |||
* Boards started to make sanity check on user specified main RAM size (-m X value). In case the provided value doesn't match emulated board expectations, QEMU will print error suggesting valid value(s) and exit. | |||
* changing the logfile via HMP is now atomically thread-safe | * changing the logfile via HMP is now atomically thread-safe | ||
* virtiofsd is now included, this works with the vhost-user-fs device to provide a passthrough to a host filesystem directory. | * virtiofsd is now included, this works with the vhost-user-fs device to provide a passthrough to a host filesystem directory. | ||
* When dumping a device tree from a guest QEMU will now tell the user where the DTB was dumped. | |||
== User-mode emulation == | == User-mode emulation == | ||
* A bug in /proc/self/stat handling was fixed | |||
* The padding in /proc/self/maps is now correct | |||
== TCG == | == TCG == | ||
* A bug in TCG plugin address tracking was fixed | * A bug in TCG plugin address tracking was fixed | ||
* A bug in the guest_base_offset fallback code when x86 segment registers were unavailable was fixed | |||
== Guest agent == | == Guest agent == | ||
* The 'set-guest-time' command is now fenced off on systems that do not have the 'hwclock' command available (e.g. on s390x). | * The 'set-guest-time' command is now fenced off on systems that do not have the 'hwclock' command available (e.g. on s390x). | ||
* The 'guest-file-read' command now imposes a max read limit of 48MB for 'count' argument. Clients using larger sizes will need to update. | |||
== Build Information == | == Build Information == | ||
Line 230: | Line 270: | ||
=== Build Dependencies === | === Build Dependencies === | ||
* Most of our documentation is now built using Sphinx. If you want to build the documentation (including HTML and the manpages) you will need to have sphinx-build (at least Sphinx version 1. | * Most of our documentation is now built using Sphinx. If you want to build the documentation (including HTML and the manpages) you will need to have sphinx-build (at least Sphinx version 1.6, using Python 3). Pass --enable-docs to configure if you want to force the docs to be built; otherwise configure will default to "build docs if possible, skip if required tools are missing". | ||
=== Testing === | === Testing === |
Latest revision as of 20:38, 28 April 2020
System emulation
Incompatible changes
- The bluetooth code has been removed without replacement. It was quite neglected over the years and likely not usable anymore. You can passthrough a dedicated USB bluetooth dongle to guests on most machines instead if you still need bluetooth in your guest.
- The pc-0.12, pc-0.13, pc-0.14, pc-0.15 machines have been removed. Newer versions of the machine type should be used instead.
- The "prep" ppc machine has been removed. The "40p" machine should be used now instead.
- The "-virtfs_synth" option has been removed. You can use "-fsdev synth" together with "-device virtio-9p-..." instead.
- The "-accel" and "-machine accel=" options are now incompatible with each other.
- The deprecated "[hub_id name]" parameter tuple of 'hostfwd_add' / 'hostfwd_remove' has been removed. Use a "netdev_id" instead.
New deprecated options and features
- The "-tb-size N" option has been deprecated. It is replaced by "-accel tcg,tb-size=N".
- The virtio-blk SCSI passthrough feature (" -device virtio-blk,scsi=on") is deprecated. Use virtio-scsi instead.
- The "r4k" mips machine has been deprecated. The "malta" machine should be used nowadays instead.
- Support for using an AArch32 host system to run KVM guests has been deprecated (because the Linux kernel has dropped its support for this) and will be removed in a future version of QEMU. AArch32 guests on an AArch64 host are still supported.
Consult the "Deprecated Features" chapter of the QEMU System Emulation User's Guide for the full list of historically deprecated features/options.
Alpha
68k
Arm
- Support for using an AArch32 host system to run KVM guests is now deprecated (because the Linux kernel has dropped its support for this) and will be removed in a future version of QEMU. AArch32 guests on an AArch64 host are still supported.
- Emulation of the following architecture features is now implemented:
- ARMv8.1-VHE
- ARMv8.1-VMID16
- ARMv8.1-PAN
- ARMv8.1-PMU
- ARMv8.2-UAO
- ARMv8.2-DCPoP
- ARMv8.2-ATS1E1
- ARMv8.2-TTCNP
- ARMv8.3-RCPC
- ARMv8.3-CCIDX
- ARMv8.4-PMU
- ARMv8.4-RCPC
- The Cortex-M7 CPU is now supported
- New board: tacoma-bmc
- New board: Netduino Plus 2
- New board: Orangepi PC (orangepi-pc)
- QEMU now correctly implements trapping of more EL1 system register accesses to EL2 (eg HCR_EL2 TID1, TID2 bits, HSTR_EL2)
- The no-op system registers required for a "trivial Jazelle" implementation have been added
- The DC CVAP and DC CVADP instructions are now supported
- Support for blocking semiconsole SYS_READC
- the i.MX RNGC device is now supported
- the watchdog device is now implemented on the i.MX6 boards
- The Cortex-R5 and -R5f CPUs now provide a PMU
- The Exynos4210 SoC model now correctly handles DMA to/from the UARTs
- The Aspeed AST2600 SoC model now includes the eMMC controller
- Under KVM, we now by default stop and restart the guest generic timer counter when the VM is stopped and started so the guest OS doesn't see surprising time jumps. (This can be disabled with the kvm-no-adjvtime property.)
- The Aspeed AST2400, AST2500, AST2600 SoCs now support the EHCI controller
- The z2 and mainstone boards now permit booting with just a kernel image and no flash image file
- The Allwinner SoC model now wires up the USB ports
- The integratorcp board now wires up the audio codec controller
- The versal board now implements the ADMA DMA controllers
- TPM is now supported
- The iMX25 now wires up the eSDHC controllers and the USB controllers
- The iMX6 machines wire up the USB controllers
- the gdbstub now supports SVE registers
- virtio-iommu is now supported with machvirt (DT boot only)
HPPA
- Artist graphics emulation added.
- PS2 keyboard and mouse added to LASI chip.
- Accept LDCW to addresses not aligned mod 16.
Microblaze
MIPS
- Support for R4000 machine is announced to be deprecated, and will be removed from code base in QEMU 5.2.
- Amended support for MemoryMapID CP0 register.
- Amended support for WatchHi CP0 register.
- Added support for GINVT instruction.
Nios2
OpenRISC
- Fixed a bug that prevented the DZF bit of the FPCSR being set.
PowerPC
- pseries machine type
- No longer require a reconfiguration reboot for a guest selecting XIVE interrupt controller when ic-mode=dual
- Now consumes less host resources when running a KVM guest with XIVE (with a recent enough host kernel). This allows running more concurrent guests with KVM accelerated XIVE.
- New 'kernel-addr' property to control the load address for -kernel
- NVDIMMs with file backend now supported
- If a guest panics with the ibm,os-term RTAS call, the error message it supplies is now reported
- Added firmware assisted NMI (FWNMI) support
- SLOF updated to work with iommu_platform=on for virtio devices
- Better handling of devices hotplugged early in boot (before the ibm,client-architecture-support call)
- powernv machine type
- Numerous improvements to the model
- Can now run KVM guests under a TCG emulated powernv machine
- Basic POWER10 support
- Removed num-chips machine property, use -smp sockets=NN instead
- Deprecated the compat= property on CPUs (it's been obsolete for a while with a pseries specific machine property)
- Fixed a longstanding bug if using big-endian ABIv2 binaries with linux-user
- Implemented new forms of the slbia instruction present in POWER9
RISC-V
- The virt and sifive_u boards now have syscon device tree nodes, which allows the generic syscon drivers in Linux to control power/reboot.
- The GDB stub now allows for D on rv32 and non-D on rv64.
- The virt board now contains a Goldfish RTC.
- Experimental support for version 0.5 of the draft hypervisor extension has been added.
s390
- Adpater interrupt suppression is now available when running with KVM (previously disabled due to migration issues); support under tcg has already been available since 2.10
- enable by specifying the cpu feature "ais=on"
- QEMU now warns when it fixes up odd memory sizes for compatibility on compat machines
- Only done on compat machines to avoid breaking incoming migrations. If you can, fix up the memory size on old machines or switch to a machine type >= 5.0, which supports 1M increments
- The automatic fixup may be removed in a future version.
SH
SPARC
TileGX
Tricore
x86
Xtensa
Device emulation and assignment
ACPI
Audio
Block devices
- hw/ide: remove legacy _init() functions and instantiate directly via pci_create_simple() instead
- via-ide: miscellaneous cleanups and IRQ routing fix
- cmd646: miscellaneous cleanups
Graphics
Input devices
IPMI
Network devices
NVDIMM
PCI/PCIe
SCSI
SMBIOS
TPM
- There's TPM support for ARM now
USB
VFIO
virtio
- virtio-iommu (for ARM virt, DT boot only)
Xen
fw_cfg
9pfs
- Client is required to negotiate msize >= 4096 (9p client in linux already does that)
Semihosting
Audio
Character devices
Crypto subsystem
GUI
- The VNC server websocket impl has fixed compatibility with noVNC
GDBStub
- The limit on gdbserver packet size has been lifted
- Properly report vContSupported so gdbstub will use QEMU's single-step support
Host support
Memory backends
- hostmem based backends got new "prealloc-threads" property, which allows user to explicitly specify number of prealloc thread during backend's initialization.
By default it is set to 1 thread, unless global -mem-prealloc option is used, in which case machine will set it to the number of VCPUs (-smp N).
Users are advised to explicitly specify "prealloc-threads" property if they use memory backends.
Monitor
QMP
- The QMP command
nbd-server-add
now supports a 'description' parameter to match the behavior of command-lineqemu-nbd --description
. - Deprecated syntax is now marked in output of
query-qmp-schema
netdev_add
improvements:- Don't ignore arguments \
dnssearch
,hostfwd
, andguestfwd
- Drop undocumented and unwanted argument
ipv6-net
- Stricter argument type checking
- Don't ignore arguments \
Migration
- Add dbus-vmstate, a backend that allows external processes to migrate their data along with QEMU. See the documentation.
Network
Block device backends and tools
- The command line
qemu-nbd --partition
, deprecated in 4.0, has been removed. Exposing a single partition of an image through NBD should now be accomplished via other means, such as using the offset and size parameters of an intermediate raw driver. qemu-img convert -n
now understands a--target-is-zero
option, which tells it that the target image is completely zero, so it does not need to be zeroed again.qemu-img measure
works for LUKS images- The QMP command
blockdev-snapshot
can now be used even if the new overlay node is already in use, as long as it is write-only use (such as for the target of a mirror operation) block-commit
supports the new optionon-error
that works like in the other block jobs. This allows pausing the block job instead of aborting it on error.- VHD disk images created with the vpc block driver are compatible with Azure now
- Image creation with the luks block driver doesn't leave half-created images behind any more in case of failure
- The file-posix driver can now use the io_uring interface of Linux with
aio=io_uring
- The rbd driver supports Ceph namespaces now
- The new compress filter driver can be used together with the backup job to create a compressed backup image
- Fixed some crashes and deadlocks for iothreads, especially when used with block jobs
- As an experimental feature,
qemu-storage-daemon
was added. It provides access to QEMU block layer features including QMP commands (e.g. block jobs or the built-in NBD server) without starting a full VM. The external interfaces such as command line and QMP command set are still considered unstable and may change incompatibly in future versions.
Tracing
- DEBUG_MMAP build hack replaced by target_mmap_* tracepoints
Miscellaneous
- It is now possible to specify multiple "-accel" options. The first available accelerator will be used. For example, "-machine accel=kvm:tcg" can now be expressed as "-accel kvm -accel tcg" with the added possibility of including options to configure the accelerator.
- KVM and Xen-specific machine options have been moved to "-accel"; the previous way to set the option is still available for backwards-compatibility. The options that were moved are:
- "-machine kernel_irqchip=" (now "-accel kvm,kernel-irqchip=")
- "-machine kvm_shadow_mem=" (now "-accel kvm,kvm-shadow-mem=")
- "-machine igd-passthru=" (now "-accel xen,igd-passthrough=")
- New option "-machine memory-backend" allows to specify a memory backend which will be used for main RAM.
- global options "-m X", "-mem-path" and "-mem-prealloc" are now aliased to "-machine memory-backend" option. An implicit backend will be created and assigned to "-machine memory-backend", using values user specified with help of the old options, unless "-machine memory-backend" was explicitly provided. If "-machine memory-backend" is explicitly provided, "-m X" value must match specified backend's size. Most of the boards use this mechanism (modulo a few SoC based ones with fixed RAM size and boards that use Xen accelerator)
- fixed bug when "-mem-prealloc" made memory backends not to follow strict bind policy.
- Boards started to make sanity check on user specified main RAM size (-m X value). In case the provided value doesn't match emulated board expectations, QEMU will print error suggesting valid value(s) and exit.
- changing the logfile via HMP is now atomically thread-safe
- virtiofsd is now included, this works with the vhost-user-fs device to provide a passthrough to a host filesystem directory.
- When dumping a device tree from a guest QEMU will now tell the user where the DTB was dumped.
User-mode emulation
- A bug in /proc/self/stat handling was fixed
- The padding in /proc/self/maps is now correct
TCG
- A bug in TCG plugin address tracking was fixed
- A bug in the guest_base_offset fallback code when x86 segment registers were unavailable was fixed
Guest agent
- The 'set-guest-time' command is now fenced off on systems that do not have the 'hwclock' command available (e.g. on s390x).
- The 'guest-file-read' command now imposes a max read limit of 48MB for 'count' argument. Clients using larger sizes will need to update.
Build Information
Python
GIT submodules
Container Based Builds
- --disable-containers allows configure to skip attempting to use them from cross builds (useful on non-x86 builds)
Build Dependencies
- Most of our documentation is now built using Sphinx. If you want to build the documentation (including HTML and the manpages) you will need to have sphinx-build (at least Sphinx version 1.6, using Python 3). Pass --enable-docs to configure if you want to force the docs to be built; otherwise configure will default to "build docs if possible, skip if required tools are missing".
Testing
- multiarch targets added to Travis
- some simple gdbstub tests have been added
- the check-acceptance tests now test a wide range of architectures and platforms
Windows
Known issues
- see Planning/5.0