Jump to navigation Jump to search

System emulation

Incompatible changes

  • The 82573L NIC was incorrectly treated as an 8254xx model. It no longer works correctly on either Linux (3.14.*) or Windows 7 and has been removed.
  • On x86, migration from QEMU 1.7 to QEMU 2.0 was broken if the guest had PCI bridges or for some number of CPUs (12, 13, 14, 54, 55, 56, 97, 98, 99, 139, 140) are the only ones). QEMU 2.1 fixes this, so that migration from QEMU 1.7 to QEMU 2.1 should always work. However, the fix breaks the following scenarios instead:
    • migration from QEMU 2.0 to QEMU 2.1 with PCI bridges and machine types pc-i440fx-1.7/pc-i440fx-2.0
    • migration from QEMU 2.0 to QEMU 2.1 with the aforementioned number of CPUs and machine type pc-i440fx-1.7

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".
Starting with QEMU xyz.jkl, -readconfig will standardize on the name for the command line option.


  • Firmware can be passed to the vexpress machine via -bios.
  • Improvements to Allwinner SoC emulation.
  • AArch64 TCG system emulation support.
  • AArch64 SHA and Crypto instruction support.


  • Support for semihosting.


  • Support for u-boot initrd images.


  • Support for KVM in the Malta board.



  • Support for VFIO (with guest-side IOMMU) on pSeries.
  • Support for emulation of decimal number instructions.
  • Support for PAPR compliant old CPU type compatibility
  • Little Endian guest support for dump-guest-memory, virtio and gdbstub
  • Magic page support for -M pseries with PR KVM
  • Improved live migration support (not stable yet!)


  • e500 machines now boot into u-boot by default


  • virtio-ccw supports migration
  • support for irqfds on adapter-interrupt enabled virtio-ccw devices
  • gdb server support for software breakpoints and hardware breakpoints (via PER)
  • enable CMMA on supported kernels
  • The s390-ccw bios now supports IPL (boot) from ECKD DASD (CDL, LDL or CMS formatted).


  • Improved IOMMU emulation.


  • QEMU now presents version 0x14 for the emulated local APIC, for consistency with KVM and improved compatibility with Mac OS X.
  • More faithful SMBus controller emulation.
  • More faithful CPL (current privilege level) emulation in TCG mode.
  • More faithful MMU emulation in TCG mode, including support for 1GB pages and SMEP/SMAP bugfixes.
  • Support for pinning memory on host NUMA nodes. The existing options "-mem-prealloc", "-mem-path", "-machine mem-merge" and "-machine dump-guest-core" are subsumed by the QOM objects "memory-backend-ram" and "memory-backend-file", and by the "memdev" option of "-numa node". This will be extended to other machines in future releases.
  • Support for memory hotplug using the new "pc-dimm" device and the QOM objects "memory-backend-ram" and "memory-backend-file".
  • New Broadwell CPU model.
  • TCG supports the "check" and "enforce" suboptions of "-cpu".


  • New "invtsc" (Invariant TSC) CPU feature. When enabled, this will block migration and savevm, so it is not enabled by default on any CPU model. To enable invtsc, the migratable=no flag (supported only by -cpu host, by now) is required. So, invtsc is available only if using: -cpu host,migratable=no,+invtsc.



  • Support for loading uImage, device tree and initrd.

Device emulation and assignment


  • Support for MSI and MSI-X in the megasas emulation.


  • Basic hot-plug/hot-unplug support for Q35 machine.


  • Full support for USB3 passthrough (including streams).
  • Host USB3 device can be attached to a EHCI (USB 2.0) controller in the guest
  • Support for read-only file-sharing via MTP emulation
  • Support for attaching keyboards and mice to a specific video card (multi-seat).


  • Support for RTL8168 NICs.


  • Many bug fixes for the GTK+ interface.
  • Mouse wheel support for the SDL 2.0 interface.
  • Support for multi-seat in the GTK+ and SDL 2.0 interfaces.


  • Ctrl-L (form feed) can be used to clear the screen in the monitor.
  • More commands support command-line completion.
  • New monitor command "info memdev" (with the QMP counterpart "query-memdev").
  • New QMP command "query-acpi-ospm-status" and event "ACPI_DEVICE_OST" provide information from the guest's invocation of the _OST method.


  • Many fixes to XBZRLE.
  • A new utility, scripts/ that checks two different QEMU vmstate information files to flag migration-related bugs that may have been introduced. The vmstate information files are produced with the new -dump-vmstate parameter to QEMU.
  • Improved detection of corrupt migration streams.


  • Improved emulation of link auto-negotiation fixes bugs in Mac OS X.
  • More variants of the e1000 NIC are supported (e1000-82540em, e1000-82544gc, e1000-82545em). The default e1000 fails with versions of Mac OS X starting at 10.9, while the new e1000-82545em works with all versions of Mac OS X starting at 10.6.
  • New "vhost-user" backend for -net and -netdev allows connecting with an external process on the same machine.
  • New "l2tpv3" transport is similar to "socket" but uses the standard Ethernet over L2TPv3 protocol. The transport supports all options present in the Linux kernel implementation, and allows QEMU to connect to any Linux host running kernel 3.3+, most routers and network devices as well as other QEMU instances.

Block devices in system emulation

  • virtio-blk dataplane, the threaded virtio-blk implementation introduced in QEMU 1.4, now supports almost all features of the block layer including: image formats, POSIX AIO (aio=threads), I/O throttling, statistics and error recovery (rerror/werror). It also does not require anymore manually setting config-wce=off. It is still considered experimental and is still missing support for long-running jobs (streaming, mirroring, snapshot deletion, backup, etc.).
  • The command-line interface for the threaded virtio-blk backend is now stable and looks like "-object iothread,id=id -device virtio-blk-pci,iothread=id". As in 2.0, this interface allows a M:N threading model. The old interface ("-device virtio-blk-pci,x-data-plane=on") is still present for backwards compatibility.
  • The option "top" to the "block-commit" QMP command is now optional, serving as a witness of support for active commit.
  • The new "change-backing-file" QMP command modifies the backing filename of a block device, as well as serving as a witness of a new optional "backing-file" option to "block-stream" and "block-commit".
  • "block-mirror" has a new optional replaces argument to move the target into the position of an existing block driver state node on completion. This can be used to repair broken quorum devices by replacing a child after block-mirror has synchronized it. The command also allows specifying the node-name for the mirror target.
  • Xen PV disks now support the discard operation.


  • Non-contiguous host CPUs can be assigned to a single NUMA node. Commas in the CPU list have to be escaped, as in "-numa node,cpus=0-3,,4-7"
  • The VNC server has been enhanced to be able to operate in a differnt resolution than the guest surface. This finally fixes the operation if the guest surface width is not dividable by 16.

Block devices and tools

  • Filenames can be JSON objects preceded by "json:", for example json:{'driver':'raw','file.filename':'test.img'}. This new syntax can be used in the file property for -drive, but also in qemu-io, qemu-img or backing file names.
  • Zero writes by the guest can now be automatically translated to write zero requests. (drive option detect-zeroes)
  • curl: The new sslverify option allows to use images over https with a self-signed certificate. Also some bugs were fixed which could lead to hangs with a slow connection.
  • iSCSI: The driver has been enhanced to cope with SCSI BUSY conditions and reads of big unallocated areas have been heavily improved. To avoid issues due to severe bugs in older libiscsi versions and to support BUSY handling the minimum required libiscsi version has been bumped to 1.9.0.
  • nfs: A new option to set the readahead size was added (requires libnfs >= 1.9.4).
  • quorum: The rewrite-corrupted option allows to automatically correct corrupted copies of the image.
  • vmdk: Support for compressed (streamOptimized) VMDK images as conversion targets.


  • Improvement to AArch64, Alpha, ia64, MIPS, S390 and SPARC backends.
  • ABIv2 support for PowerPC


  • Support for enabling multiple trace backends using for example "--enable-trace-backends=simple,ftrace" on the configure command line.

User-mode emulation

  • --enable-uname-release configure parameter has been removed
  • Improved support for FreeBSD.
  • Support for opening /proc/self/exe and /proc/self/cmdline
  • Support ARM HWCAP2 flags
  • Fixes in getrusage, wait4, uname, sched_getaffinity, settimeofday and epoll syscalls
  • New target ppc64le-linux-user, for little-endian Power platforms.

Build dependencies

  • The minimum required version of libiscsi was increased from 1.4.0 to 1.9.0; note that the libiscsi maintainers don't recommend versions before 1.8.0 for production use. Debian stable is the only recent distribution that has a version of libiscsi that is older than 1.9.0. Unless --enable-libiscsi is explicitly passed to the configure script, QEMU will be built without iSCSI initiator support if the installed version of the libiscsi is too old.

Known issues

  • The long-standing issue requiring configuration with --disable-coroutine-pool on Win32 is finally fixed.