- 1 Warning: unsupported host systems
- 2 System emulation
- 2.1 Incompatible changes
- 2.2 Deprecated options and features
- 2.3 Future incompatible changes
- 2.4 Alpha
- 2.5 68k
- 2.6 ARM
- 2.7 HPPA
- 2.8 Microblaze
- 2.9 MIPS
- 2.10 Nios2
- 2.11 OpenRISC
- 2.12 PowerPC
- 2.13 RISC-V
- 2.14 s390
- 2.15 SH
- 2.16 SPARC
- 2.17 TileGX
- 2.18 Tricore
- 2.19 x86
- 2.20 Xtensa
- 2.21 Device emulation and assignment
- 2.22 Audio
- 2.23 Character devices
- 2.24 Crypto subsystem
- 2.25 GUI
- 2.26 Host support
- 2.27 Memory backends
- 2.28 Monitor
- 2.29 Migration
- 2.30 Network
- 2.31 Block devices and tools
- 2.32 Tracing
- 2.33 Miscellaneous
- 3 User-mode emulation
- 4 TCG
- 5 Guest agent
- 6 Build Information
- 7 Known issues
Warning: unsupported host systems
Unsupported host setups are CPU and operating systems which we do not have access to and are thus unable to test. They will continue to work in this release (though configure will warn you about the unsupported status), but in a future QEMU release we may drop support for those hosts unless somebody volunteers to help us with maintaining them (and can provide build/CI machines).
This affects the OSes:
- DragonFly BSD
- The deprecated CLI options "-tdf", "-no-kvm-pit" and "-drive boot=on|off" have been removed (they only emitted a warning since QEMU 1.3.0).
- The deprecated CLI option "-net channel" has been removed. You can use "-netdev user,guestfwd=..." instead.
- The deprecated CLI option "-hdachs" has been removed. You can specify the disk geometry e.g. via -device ide-hd,cyls=c,heads=h,secs=s instead.
- The deprecated way of configuring SCSI devices with "-drive if=scsi" on x86 has been removed. Use an appropriate SCSI controller together "-device scsi-hd" or "-device scsi-cd" and a corresponding "-blockdev" parameter instead.
- The deprecated way of configuring a "host", "serial", "disk" or "net" USB device with "-usbdevice" has been removed. Use "-device usb-..." instead.
- The deprecated HMP commands "usb_add" and "usb_del" have been removed. Use "device_add" and "device_del" as replacement instead.
- The deprecated HMP commands "host_net_add" and "host_net_remove" have been removed. Use "netdev_add" and "netdev_remove" instead.
- The deprecated way of dumping network traffic with "-net dump" has been removed. Use "-object filter-dump" instead.
- The deprecated "spapr-pci-vfio-host-bridge" device has been removed (from qemu-system-ppc64). It is not needed for vfio since QEMU v2.6.0 anymore.
Deprecated options and features
- qemu-system-ppcemb is deprecated. Use qemu-system-ppc instead.
- The parameters "serial", "trans", "secs", "heads", "cyls" and "addr" of the "-drive" option are now deprecated. Use the corresponding options of "-device" instead.
- The "-nodefconfig" option is now deprecated. Use "-no-user-config" instead.
- The "-s390-squash-mcss" parameter for the s390-ccw-virtio machine is now deprecated. It has been made obsolete by allowing to put any device into any channel subsystem image (unrestricted cssids).
- The parameter "handle" of the "-fsdev" and "-virtfs" options is now depecrated. Use "local" instead.
- The qmp command "query-cpus" is now deprecated. Use the new "query-cpus-fast" qmp command instead, which does not interrupt all running vCPUs. (However, there is a known bug that in 2.12, the "query-cpus-fast" command reports bogus architecture information for all architectures except "x86" and "s390".)
- While "-net" is not deprecated yet, you are encouraged to use the new option "-nic" instead of "-net", as it provides a simpler and better interface ("-nic user" replaces the old "-net nic -net user").
- The "-no-frame" parameter is now deprecated and will be removed together with SDL 1.2 in a future release.
- The "-balloon" parameter is deprecated, use "-device virtio-balloon" instead.
- The "-rtc-td-hack", "-localtime" and "-startdate" parameters are deprecated. You can use the "-rtc" parameter instead.
- The "handle" backend for 9pfs is deprecated.
Consult the "Deprecated Features" appendix for the full list of historically deprecated features/options.
Future incompatible changes
- Three options are using different names on the command line and in configuration file. In particular:
- The "acpi" configuration file section matches command-line option "acpitable";
- The "boot-opts" configuration file section matches command-line option "boot";
- The "smp-opts" configuration file section matches command-line option "smp".
- -readconfig will standardize on the name for the command line option.
- Behavior of automatic calculation of SMP topology when some SMP topology options for -smp are omitted (sockets, cores, threads) will change in the future. If guest ABI needs to be preserved on upgrades while using the SMP topology options, users should either set set all options explicitly (sockets, cores, threads), or omit all of them.
- Devices "allwinner-a10", "pc87312", "ssi-sd" will be configured with explicit properties instead of implicitly. This is unlikely to affect users.
- For x86, specifying a CPUID feature with both "+feature/-feature" and "feature=on/off" will cause a warning. The current behavior for this combination ("+feature/-feature" wins over "feature=on/off") will be changed so that "+feature" and "-feature" will be synonyms for "feature=on" and "feature=off" respectively).
- The read-only block drivers "bochs", "cloop" and "dmg" as well as "rbd" and "vvfat" in certain read-only configurations will no longer enable read-only mode automatically. It will be necessary to specify "read-only=on" explicitly on the command line and in QMP commands for the setup to keep working; the default "read-only=off" setting will result in an error.
- On s390x, using KVM with a Linux host kernel version < 3.15 has been broken since QEMU version 2.10. This will not be fixed unless a need is communicated (otherwise the code will be removed in the near future, so that you need at least Linux kernel version 3.15 on the host to run KVM on System z)
- Support for "info tlb", MC68040 MMU
- Full MC68040 FPU support
- MC68040 supervisor mode support (new instructions: moves, pflush, ptest, cpush, cinv)
- new user mode instructions: movep, move16, chk, chk2
- Cortex-M33 v8M emulation, used by the new mps2-an505 board.
- Many other improvements to M profile emulation.
- AArch64 v8.1 SIMD extensions (Rounding Multiply Add/Subtract).
- AArch64 v8.2 FP16 extensions (half-precision variants of FP instructions).
- AArch64 v8.2 crypto instructions support.
- AArch64 v8.3 Complex number extensions.
- FCMA and RDM v8.1 and v8.3 instructions support.
- Initial support for Raspberry Pi 3 machine model
- i.MX6 SD controller support.
- i.MX7 SoC and i.MX7 Sabre board emulation.
- Display controller emulation for vexpress board.
- ZynqMP: support for QSPI, IPI and PMU devices.
- New options "-cpu max" and "-machine gic-version=max".
- New target hppa-softmmu.
- Improvements to the PPC4xx emulation, including I2C bus support.
- New Sam460ex machine types.
- Significant performance improvements for TCG.
- Support for Meltdown/Spectre mitigations
- New RISC-V target, supporting machines "spike_v1.9.1", "spike_v1.10" and "virt".
- unrestrict cssids: any device can now live in any channel subsystem image (no more virtual/non-virtual restrictions)
- this obsoletes the -s390-squash-mcss machine option
- pci: refactor and improve code, including handling of subregions
- virtio-pci devices that use MSI-X can now be used on s390x
- Support for sclp-based memory hotplug has been removed. It was incompatible with memory hotplug semantics on any other architecture, and has never worked correctly with regard to migration. You can still specify a 'maxmem=' parameter on the command line, but no standby memory will be available to the guest. This feature may be reintroduced with a s390x-specific interface in future releases.
- support for boot menu via the s390-ccw bios
- expose s390x guest crash information
- Rework of interrupt handling
- Implementation of missing instructions: SCKPF, STCRW, SAL, SCHM,
- Change qemu cpu model to a stripped down z12
- Can now boot recent Linux distributions (Fedora 26/27, Ubuntu 18.04,...)
- SMP support is now considered non-experimental
- PCI can now be used in tcg as well (add 'zpci=on' to the cpu model)
- allow for systems larger than 7.999TB
- Split sun4u APB device into separate Sabre, Simba and IOMMU devices and wire up using QOM/qdev instead of legacy init functions
- Add trace-events support for sun4u Sabre, IOMMU, and ebus devices (plus shared sparc64 functions)
- Add sun4u power device (including SUNW,power-off CIF service support)
- Add "power-off" command to OpenBIOS for sun4m and sun4u
- Fix leon3 irqmp software ACK
- Fix sparc_cpu_get_phys_page_debug() accesses to IO addresses
- Added variant instructions of JEQ and JNE
- Added 64 bit MOV instruction
- Added CORE_ID register
- IBRS support ("spec-ctrl" CPU option) and new -IBRS version of CPU models. Some guest OSes use IBRS to mitigate Meltdown (CVE-2017-5753 and CVE-2017-5715)
- Intel IOMMU now supports 48-bit addresses.
- The default NIC for the q35 machine type is now e1000e (Intel 82574)
- -kernel now supports Multiboot kernels that set bss_end_addr = 0 in their Multiboot header
- Support for Processor Tracing
- Support for the "dedicated physical CPU" performance hint ("-cpu kvm-hint-dedicated=on")
- Support for AMD Secure Encrypted Virtualization
- The backend was changed to use the Xtensa libisa for instruction decoding and disassembling.
- New cores: de212 and sample_controller.
- XTFPGA boards now support noMMU configurations variants.
- Add MTTCG support.
Device emulation and assignment
- Lots of SD card emulation cleanups and bugfixes.
- Allow properties of the BMC device to be set.
- Clear device ATTN flag on a loss of connection to an external BMC, to avoid a hang.
- Fix some issues with some overly complicated macros.
- Add a Platform Event Message command to the internal BMC.
- Fix timestamp handling of events in the internal BMC.
- Fix SEL get/set time commands in the internal BMC.
- New "unarmed" option, to control unarmed flag in guest ACPI NFIT
- The share-rw property is now supported on scsi-block and scsi-generic.
- The -smbios argument now supports setting data for type=11 tables, "OEM Strings". Applications using this are encouraged to prefix all strings with their application name to allow concurrent usage by multiple applications. e.g.
$QEMU -smbios type=11,value=cloud-init:ds=nocloud-net;s=http://10.10.0.1:8000/
- Support for the TPM 2.0 Command Response Buffer.
- MTP write support.
- The share-rw property is now supported on usb-storage.
- New experimental option x-no-geforce-quirks to disable GeForce quirks
- New experimental option x-msix-relocation to relocate the MSI-X MMIO BAR.
- Display support for vGPUs, on graphic backends that support dmabufs.
- Virtio balloon exposes statistics on disk caches
- No longer send spurious EINTR back to the guest on request cancellation (ie, when I/O was interrupted by a signal in the guest)
- Audio drivers for ALSA, OSS, PulseAudio and SDL can be build as run-time loaded modules.
- The socket character device backend will now listen on all IP addresses reported by getaddrinfo(), instead of only the first one. This will improve support for IPv4/IPv6 dual stack.
- The socket character device backend supports the fd parameter to -chardev. This allows a pre-opened UNIX or TCP socket to be passed into QEMU at startup, giving parity with the QMP chardev_add command
- A regression in handling non-blocking I/O was fixed for the socket character device.
- Building with GTK2 is now deprecated in favour of GTK3. Support for GTK2 will be removed entirely in a future release.
- Building with SDL1 is now deprecated in favour of SDL2. Support for SDL1 will be removed entirely in a future release.
- The Curses, GTK+ and SDL interfaces can be build as run-time loaded modules.
- GTK and Spice support dmabufs.
- The VNC websockets server has been patched to pevent a denail of service bug that would allow a malicious client or slow network connection to make QEMU's memory usage grow without bound. CVE-2017-15268
- The VNC server has been patched to prevent denial of service bugs that would allow a malicious client to make QEMU's memory usage grow without bound. CVE-2017-15124
- The GTK frontend is now able to correctly detect the keymapping to use when displaying on the XWin (Win32) and XQuartz (macOS) X11 servers.
- The GTK frontend now correctly handles the Pause key on Win32.
- The SDL1, SDL2, GTK and VNC frontends are converted to use keycodemapdb for scan code mapping, fixing many missing/incorrect key mappings.
- The VNC server now avoids spinning in a loop when a websockets client closes the connection during initial handshake
- Experimental support for two new virtualization accelerators: Apple's Hypervisor.framework ("-accel hvf") and Microsoft's Windows Hypervisor Platform Extensions ("-accel whpx")
- Support for memfd memory backend (memory-backend-memfd). Unlike the default backend, memfd-backed memory can be shared with external vhost-user processes.
- "align" option on hostmem-file backend, allowing it to be backed by a DAX device with more strict alignment requirements
- A new qmp command, "query-cpus-fast", has been introduced to obtain information about vCPUs without the need to interrupt running vCPUs. In turn, "query-cpus" has been deprecated.
- The "info cpus" hmp command has been switched to use "query-cpus-fast" as a backend.
- The QMP monitor now advertises a new "oob" capability on initial connection if you pass the 'x-oob=on' property on the command line; if the client requests this capability during "qmp_capabilities", then the client can request that certain QMP commands be processed out-of-band (where a reply may occur prior to a longer-running previous in-band command). A future release may make the advertisement unconditional rather than depending on x-oob on the command line.
- Support for postcopy live migration when using a cooperative vhost-user server.
- The migration TCP transport will now listen on all IP addresses reported by getaddrinfo(), instead of only the first one. This will improve support for IPv4/IPv6 dual stack.
- The migration TCP transport URIs will now honour the ipv4=on|off and ipv6=on|off flags to control IPv4/IPv6 protocol usage in both clients and servers.
- Backends created with -netdev can be used with the hostfwd_add and hostfwd_remove monitor commands
- A hub can be connected to a netdev using "-netdev hubport,id=...,netdev=NAME"
- CAN bus support, including support for Linux SocketCAN and three SJA1000-based PCI interfaces.
- Support for the VMware paravirtualized RDMA device. The device supports both RDMA HCA and Soft-RoCE (rxe).
- New option "-nic" to quickly create a network front-end (emulated NIC) and a host back-end.
- Any PCI NIC can be specified in "-net nic,model=..." or "-nic ...,model=".
Block devices and tools
- Block device dirty bitmaps can be copied to the destination machine during migration.
- Host NVMe controllers can be directly driven by QEMU via VFIO, with the new nvme:// protocol.
- Support for backing files in the Parallels driver.
- The QEMU NBD implementation (both as server and as client) has learned support for more efficient reads of sparse files (via structured reads), and for querying block status to learn which portions of an NBD export read as zeroes (via NBD_CMD_BLOCK_STATUS on the base:allocation namespace).
- qcow2 images can be configured with a custom L2 cache entry size.
- gluster and sheepdog support preallocation for resize now.
- The interactive qemu-io shell now recognises Ctrl-D for quit.
- Fixed some crashes related to guests attempting I/O on empty drives (for removable media).
- Added the experimental x-blockdev-create QMP command to create images. All block drivers that can create images are supported, with the exception of VMDK. This interface is not considered stable yet and may change incompatibly in future QEMU versions.
- The drive-backup and blockdev-backup QMP commands support the new options "auto-finalize" and "auto-dismiss", which allow clients to disable the automatic completion and/or deletion of block jobs so that the result can be queried even if the QMP event was missed, and changes to the block graph occur at a defined point.
- The QEMU NBD server (in qemu-nbd or QEMU system emulator) will now listen on all IP addresses reported by getaddrinfo(), instead of only the first one. This will improve support for IPv4/IPv6 dual stack.
- A flaw preventing the luks driver working with qemu-img commit was fixed.
- The ftrace backend supports the "tracefs" file system that is provided by recent Linux kernels.
- Improved support for dual-stack IPv4/IPv6 networks. QEMU can now listen on separate sockets for IPv4 and IPv6 connections.
- Improved memory usage, especially at startup.
- New aarch64_be target.
- Preliminary SVE support.
- ARMv8.2 arithmetic extension for linux-user
- Support for renameat2, getcpu(), AT_SECURE auxval, ioctl TIOCGPTPEER
- Fixes for fork() deadlocks on heavily multi-threaded programs.
- MIPS and m68k select CPU model according to ELF header values
- ARM ELF startup speed fix
- Xtensa support
- Dropped unicore32 support
- fix alpha and sparc32plus signal handlers
- Generic Vectors Support - a new extension to the TCG register types for better handling of SIMD registers
- Half Precision support added to SoftFloat, along with a major re-factor of the code
- GTK+ 2.x support is deprecated, GTK+ 3.x should be used instead.
- SDL 1.2 support is deprecated, SDL 2.0 should be used instead.
- Python 3.x can be used to build QEMU.
- see Planning/2.12