System emulation

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.


  • Support for loading a device tree even with no -kernel option or when booting ELF images
  • Support for input interrupts in the PL061 GPIO controller
  • TCG can emulate breakpoints and watchpoints.
  • Support for PSCI firmware interface emulating in TCG
    • enables clean shutdown from non-kvm guests


  • Support for MIPS64 Release 6 emulation.
  • Support for MIPS SIMD Architecture emulation.
  • Fix for incorrectly handled delay slots in MIPS16 and microMIPS.


  • Mac OS X 10.2, 10.3 and 10.4 guests run with the mac99 machine type (CD-ROM emulation known broken).
  • Bugfixes and optimization for TCG emulation of PowerPC targets.

IBM (pSeries)

  • Support for the "nmi" monitor command, to enter the kernel debugger.
  • Live migration support for NVRAM

Freescale (BookE)

  • Breakpoint support on KVM.
  • Support for the e500 platform bus and dynamic instantiation of FreeScale eTSEC devices (-device eTSEC).
  • Support for MPC8XXX gpio controller to enable shutdown with 3.19+ Linux guests


  • Enhance support for boot from DASD to handle more formats.
  • Support for memory hotplug.
  • Support for cpu state handling and migration.
  • Support for booting newer kernels under TCG.
  • Improved SMP startup and cpu online/offline performance especially for large guests


  • Emulation of TCX hardware acceleration (allows X to run under NetBSD and Solaris)
  • NetBSD and OpenBSD can now run under qemu-system-sparc64 in -nographic mode


  • New target.


  • Support for IOMMU (VT-d) emulation on the Q35 machine type, enabled with "-machine iommu=on".
  • Support for specifying drives in short form on the command-line (i.e. using -cdrom, -hda, -drive if=ide) on the Q35 machine type.
  • TCG is reported to run QNX.
  • All CPUs now work with "-cpu MODEL,enforce", of course as long as TCG or KVM support the CPU's set of features. Previously, a few CPUs included extraneous CPUID flags that cause "-cpu MODEL,enforce" to fail.


  • More robust live migration of the kvm pv clock
  • Support for AVX512


  • QEMU can now boot a bzImage or multiboot kernel under Xen, using the command line option -kernel.


  • New script for automatic core import from xtensa configuration overlay.

Device emulation and assignment

  • The boot order set for hot-plugged devices will take effect during reboot. In addition, the boot order can be dynamically modified via QOM.


  • More accurate emulation of AHCI, especially visible with Windows guests.


  • Passthrough of vendor-specific commands now works (only with the virtio-scsi HBA).
  • Initial support in virtio-scsi for a threaded backend, which is used in the same way as virtio-blk ("-object iothread,id=id" and "-device virtio-scsi-pci,iothread=id"). Note that the code has known thread-safety problems that can lead to QEMU using freed memory. They should not happen in normal use, they can be triggered easily by malicious guests. This option should only be used if you are interested in making relevant parts of QEMU thread safe.
  • Support for LSI MegaRAID SAS 2108 HBAs (-device megasas-gen2). Note that booting from this device does not work yet.
  • virtio-scsi can now execute Abort Task and Abort Task Set task management functions asynchronously.


  • MSIs are now (correctly) disabled until bus master DMA is enabled for the device.
  • Support for ARI forwarding on PCIe root ports.


  • Support for hot-plugging XHCI/EHCI/UHCI controllers (in the case of EHCI/UHCI, only if there are no companion controllers).
  • Support for USB 2.0 (high speed) mice and keyboards, complementing the existing support for high speed USB tablets. High speed devices avoid the less efficient UHCI controller, and thus use less CPU on the host.


  • The default vga device on x86 has been switched from cirrus to stdvga, which works better for most guests. However, Windows XP will not suspend to RAM anymore; the change can be undone with "-vga cirrus" and does not affect PC machine types of versions 2.1 and earlier.

Character devices

  • Support for automatic reconnection of client sockets (e.g. "-chardev socket,host=localhost,port=12345,nowait,reconnect=5").



  • The "info pcmcia" command was removed. PCMCIA hotplug was never implemented, and thus the command could only return static information.



  • Samba 4.1 is now supported.

Block devices in system emulation

  • The list of functionality now supported in threaded virtio-blk backend is growing: new in 2.2 are resizing of disks, device hot-unplug, the embedded NBD server, and background jobs (backup, stream, mirror, commit).

Block devices and tools

  • QEMU is more resistent against failure of large allocations in the block layer
  • Support for Archipelago as a QEMU block backend
  • Support for Parallels images larger than 2TB.
  • Migration now works when using qcow2 over Ceph.
  • Network-based drivers (NBD, libiscsi, etc.) now work on Win32 hosts too.
  • Source image cache mode can be set for qemu-img check, convert and rebase
  • qemu-nbd has a new --detect-zeroes option.
  • Progress report for qemu-img commit and qemu-img amend


  • In icount mode, it is possible to slow down emulation to match the requested CPU frequency (thus ensuring that the host and guest clocks remain aligned). This is enabled with "-icount N,align=on".
  • A new "victim TLB" provides a 5-10% performance improvement.


  • QEMU provides a SystemTap script that outputs binary trace data, for use in flight-recorder mode. The resulting traces can be parsed with QEMU's script (using the --no-header command-line option).

User-mode emulation

  • New option: setting AT_RANDOM auxval with -seed option or QEMU_RAND_SEED env variable
  • New system calls supported
    • timerfd_create, timerfd_gettime and timerfd_settime
    • ioprio_get and ioprio_set
    • setns
    • unshare
  • epoll_pwait has been enabled on ARM
  • Signal handling support added for PPC64
  • Emulated contents of /proc/self/maps fixed

Build dependencies

Known issues