Modern Hypervisor for the Cloud
Clone or download
rbradford hw: virt: Add basic ACPI timer support
For the reduced ACPI platform implement the basic ACPI PM_TMR support.
Implement only the basic counter and not the optional interupt
triggering when the counter's carry changes value.

This is useful for implementing basic timekeeping in early firmware.

Signed-off-by: Rob Bradford <>
Latest commit 4728f53 Dec 6, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
accel accel: tcg: Group all TCG stubs into a single header Dec 13, 2018
audio audio: Make audio optional and configurable Dec 13, 2018
backends hostmem: no need to check for host_memory_backend_mr_inited() in alloc() Nov 28, 2018
block block: Make VVFAT support configurable Dec 13, 2018
bsd-user bsd-user: Use the IEC binary prefix definitions Jul 2, 2018
capstone @ 22ead3e disas: Add capstone as submodule Oct 26, 2017
chardev chardev: Indent list of chardevs Nov 5, 2018
contrib contrib: add elf2dmp tool Oct 2, 2018
crypto io: return 0 for EOF in TLS session read after shutdown Nov 19, 2018
default-configs default-configs: virt: Remove PFLASH Dec 13, 2018
disas accel: tcg: Group all TCG stubs into a single header Dec 13, 2018
docs qcow2: Document some maximum size constraints Nov 19, 2018
dtc @ 88f1890 Update dtc/libfdt submodule to v1.4.7 Oct 2, 2018
fpu qemu/compiler: Wrap __attribute__((flatten)) in a macro Oct 17, 2018
fsdev fsdev: Clean up error reporting in qemu_fsdev_add() Oct 19, 2018
gdb-xml s390x/gdb: add gs registers Jul 14, 2017
hw hw: virt: Add basic ACPI timer support Dec 13, 2018
include hw: virt: Add basic ACPI timer support Dec 13, 2018
io io: return 0 for EOF in TLS session read after shutdown Nov 19, 2018
libdecnumber build: remove CONFIG_LIBDECNUMBER Oct 16, 2017
linux-headers linux-headers: update to 4.20-rc1 Oct 19, 2018
linux-user linux-user: Update MIPS specific prctl() implementation Nov 17, 2018
migration vmstate: constify VMStateField Nov 27, 2018
nbd nbd/server: Advertise all contexts in response to bare LIST Nov 30, 2018
net net: hub: suppress warnings of no host network for qtest Dec 4, 2018
pc-bios update seabios to 1.12 Nov 20, 2018
po po/Makefile: Modern shell scripting (use $() instead of ``) Oct 24, 2018
qapi hw: watchdog: compile out watchdog Dec 13, 2018
qga qga: Add multiple include guard to guest-agent-core.h Nov 9, 2018
qobject qobject: Catch another straggler for use of qdict_put_str() Oct 26, 2018
qom Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2018-10-… Oct 23, 2018
replay replay: Exit on errors reading from replay log Nov 8, 2018
roms update seabios to 1.12 Nov 20, 2018
scripts checkpatch: g_test_message does not need a trailing newline Nov 27, 2018
scsi scsi: Address spurious clang warning Nov 27, 2018
slirp slirp: fork_exec(): create and connect child socket before fork() Nov 10, 2018
stubs hw: i386: Factorize madt cpu entry routine Dec 13, 2018
target target: i386: Fix the SMM getter from kvm_arch_init Dec 13, 2018
tcg tcg/tcg-op.h: Add multiple include guard Nov 8, 2018
tests virtio-net-test: add large tx buffer test Dec 4, 2018
tools nats: Update for newer govmm Dec 13, 2018
trace accel: tcg: Group all TCG stubs into a single header Dec 13, 2018
ui ui: Allow specifying 'rendernode' display option for egl-headless Nov 16, 2018
util vfio-helpers: Fix qemu_vfio_open_pci() crash Nov 27, 2018
.dir-locals.el Add .dir-locals.el file to configure emacs coding style Oct 8, 2015
.editorconfig editorconfig: set emacs mode Nov 1, 2018
.exrc qemu: add .exrc Sep 7, 2012
.gdbinit .gdbinit: load QEMU sub-commands when gdb starts Jun 7, 2017
.gitignore edid: Ignore built binary Oct 5, 2018
.gitmodules gitmodules: use 'https://' instead of 'git://' Nov 12, 2018
.gitpublish Add a git-publish configuration file Mar 5, 2018
.mailmap mailmap: Add an item for Yongbok Kim Oct 18, 2018
.shippable.yml shippable: Remove Debian 8 libfdt kludge May 11, 2018
.travis.yml .travis.yml: split MacOSX builds and reduce target list Nov 14, 2018
CODING_STYLE CODING_STYLE: Define our preferred form for multiline comments Jun 15, 2018
COPYING COPYING: update from FSF Oct 12, 2008
COPYING.LIB Update FSF address in GPL/LGPL boilerplate Jan 4, 2009
Changelog Use HTTPS for and other domains Nov 21, 2017
HACKING HACKING: document preference for g_new instead of g_malloc May 20, 2018
Jenkinsfile build: Add release automation to Jenkinsfile Dec 13, 2018
LICENSE vfio: move hw/misc/vfio.c to hw/vfio/pci.c Move vfio.h into include/h… Dec 19, 2014
MAINTAINERS MAINTAINERS: Add an entry for the Firmware Configuration (fw_cfg) device Nov 27, 2018
Makefile Makefile: Install new vgabios binaries Oct 15, 2018
Makefile.objs hw: vfio: Move quirks into their own directory Dec 13, 2018 dump: add Windows dump format to dump-guest-memory Jun 29, 2018
README README: use 'https://' instead of 'git://' Nov 12, 2018 README: Re-introduce a NEMU specific README Dec 13, 2018
VERSION Update version for v3.1.0 release Dec 11, 2018
arch_init.c arch_init: sort architectures Jun 1, 2018
balloon.c balloon: Allow multiple inhibit users Aug 17, 2018
block.c block: Don't inactivate children before parents Nov 27, 2018
blockdev-nbd.c nbd/server: drop old-style negotiation Oct 3, 2018
blockdev.c blockdev: Consistently use snapshot_node_name in external_snapshot_pr… Nov 12, 2018
blockjob.c block: Use a single global AioWait Sep 25, 2018
bootdevice.c fw_cfg: ignore suffixes in the bootdevice list dependent on machine c… Aug 17, 2018
configure block: Make VVFAT support configurable Dec 13, 2018
cpus-common.c qom: convert the CPU list to RCU Aug 23, 2018
cpus.c accel: tcg: Group all TCG stubs into a single header Dec 13, 2018
device-hotplug.c blockdev: Convert drive_new() to Error Oct 19, 2018
device_tree.c device_tree: Add qemu_fdt_node_unit_path Jun 29, 2018
disas.c RISC-V Disassembler Mar 6, 2018
dma-helpers.c block: explicitly acquire aiocontext in bottom halves that need it Feb 21, 2017
dump.c qapi: Drop qapi_event_send_FOO()'s Error ** argument Aug 28, 2018
exec.c accel: tcg: Group all TCG stubs into a single header Dec 13, 2018
gdbstub.c accel: tcg: Group all TCG stubs into a single header Dec 13, 2018
hmp-commands-info.hx hmp-commands-info: add sync-profile Aug 23, 2018
hmp-commands.hx hmp-commands: add sync-profile Aug 23, 2018
hmp.c qmp, hmp: make subsystem/system-vendor identities optional Oct 11, 2018
hmp.h hmp-commands: add sync-profile Aug 23, 2018
ioport.c trace: switch to modular code generation for sub-directories Jan 31, 2017
iothread.c iothread: fix crash with invalid properties Oct 12, 2018
job-qmp.c jobs: canonize Error object Aug 31, 2018
job.c job: Fix off-by-one assert checks for JobSTT and JobVerbTable Nov 12, 2018
memory.c memory: learn about non-volatile memory region Nov 6, 2018 exec: Fix MAP_RAM for cached access Jun 28, 2018
memory_mapping.c memory-mapping: skip non-volatile memory regions in GuestPhysBlockList Nov 6, 2018
module-common.c all: Clean up includes Feb 4, 2016
monitor.c accel: tcg: Group all TCG stubs into a single header Dec 13, 2018
numa.c numa: Clean up error reporting in parse_numa() Oct 19, 2018
os-posix.c util: add qemu_write_pidfile() Oct 2, 2018
os-win32.c util: add qemu_write_pidfile() Oct 2, 2018
qdev-monitor.c qdev-monitor: Make device options help nicer Nov 5, 2018
qdict-test-data.txt Introduce QDict test data file Sep 4, 2009
qemu-bridge-helper.c all: Remove unnecessary glib.h includes Jun 7, 2016
qemu-deprecated.texi bt: Mark the bluetooth subsystem as deprecated Nov 12, 2018
qemu-doc.texi doc: replace x-root with rootdir for usb-mtp Oct 1, 2018
qemu-edid.c display/edid: add edid generator to qemu. Sep 27, 2018
qemu-ga.texi qemu-ga: Remove stray 'q' in documentation Oct 28, 2016
qemu-img-cmds.hx qemu-img: Add -C option for convert with copy offloading Jul 30, 2018
qemu-img.c qemu-img: Fix leak Nov 21, 2018
qemu-img.texi qemu-img: Add -C option for convert with copy offloading Jul 30, 2018
qemu-io-cmds.c qemu-io-cmds: Fix two format strings Nov 5, 2018
qemu-io.c qom: Clean up error reporting in user_creatable_add_opts_foreach() Oct 19, 2018
qemu-keymap.c ui: use enum to string helpers Aug 24, 2018
qemu-nbd.c qom: Clean up error reporting in user_creatable_add_opts_foreach() Oct 19, 2018
qemu-nbd.texi nbd: Add qemu-nbd -D for human-readable description Nov 2, 2016
qemu-option-trace.texi qemu-option-trace: -trace enable= is a pattern, not a file May 20, 2018
qemu-options-wrapper.h qemu-img: remove references to GEN_DOCS May 20, 2018
qemu-options.h Clean up ill-advised or unusual header guards Jul 12, 2016
qemu-options.hx hostmem-memfd: honour share=on/off property Nov 27, 2018
qemu-seccomp.c seccomp: Clean up error reporting in parse_sandbox() Oct 19, 2018
qemu-tech.texi cli qmp: Mark --preconfig, exit-preconfig experimental Jul 16, 2018
qemu.nsi Use HTTPS for and other domains Nov 21, 2017
qemu.sasl Default to GSSAPI (Kerberos) instead of DIGEST-MD5 for SASL May 9, 2017
qmp.c cli qmp: Mark --preconfig, exit-preconfig experimental Jul 16, 2018
qtest.c qtest: Use cpu address space instead of system memory Jul 6, 2018
replication.c replication: Introduce new APIs to do replication operation Sep 13, 2016
replication.h block/replication: Remove protocol_name field Mar 26, 2018
rules.mak tests/docker/Makefile.include: handle empty TARGET_LIST Jun 4, 2018
thunk.c thunk: assert nb_fields is valid Jul 31, 2017
tpm.c tpm: Clean up error reporting in tpm_init_tpmdev() Oct 19, 2018
trace-events jobs: remove ret argument to job_completed; privatize it Aug 31, 2018
version.rc Use HTTPS for and other domains Nov 21, 2017
vl.c vl: Adjust QEMU system binary to indicate this is NEMU Dec 13, 2018
win_dump.c dump: fix Windows dump memory run mapping Oct 2, 2018
win_dump.h dump: move Windows dump structures definitions Oct 2, 2018

NEMU, a cloud hypervisor

NEMU is an open source hypervisor specifically built and designed to run modern cloud workloads on modern 64-bit Intel and ARM CPUs.


Modern guest operating systems that host cloud workloads run on virtual hardware platforms that do not require any legacy hardware. Additonally modern CPUs used in data centers have advanced virtualization features that have eliminated the need for most CPU emulation.

There currently is no open source hypervisor solutions with a clear and narrow focus on running cloud specific workloads on modern CPUs. All available solutions have evolved over time and try to be fairly generic. They attempt to support a wide range of virtual hardware architectures and run on hardware that has varying degree of hardware virtualization support. This results in a need to provide a large set of legacy platforms and device models requiring CPU, device and platform emulation. As a consequence they are built on top of large and complex code bases.

NEMU on the other hand aims to leverage KVM, be narrow focused on exclusively running modern, cloud native workloads, on top of a limited set of hardware architectures and platforms. It assumes fairly recent CPUs and KVM allowing for the the elimination of most emulation logic.

This will allow for smaller code base, lower complexity and a reduced attack surface compared to existing solutions. It also gives more space for providing cloud specific optimizations and building a more performant hypervisor for the cloud. Reducing the size and complexity of the code allows for easier review, fuzz testing, modularization and future innovation.

QEMU base

QEMU is the current de facto standard open source cloud hypervisor. It has a rich set of features that have been developed and tested over time. This includes features such as live migration, PCI, Memory, NVDIMM and CPU hotplug, VFIO, mediated device passthrough and vhost-user. QEMU also has been the code base on which significant effort and innovation has been invested to create multiple performant I/O models

It also comes with a very large support for legacy features, for platforms and devices and is capable of running on a large number of hardware platforms. It also allows for cross platform emulation. One of its fundamental goal is about being as generic as possible and run on a large set of hardware and host a diversity of workloads. QEMU needed emulation support to be build into the code as hardware lacked critical virtualization features.

QEMU allows for build time configuration of some of its rich feature set. However there is quite a large amount of the code base that cannot be compiled out as the emulated platforms make assumptions about certain legacy devices being always present. QEMU also has abstractions within the code to support all of these legacy features.


NEMU is based off QEMU and leverage its rich feature set, but with a much narrower focus. It leverages the performant, robust and stable QEMU codebase without the need to supporting the myriad of features, platforms and harware that are not relevant for the cloud.

The goal of NEMU is to retain the absolute minimal subset of the QEMU codebase that is required for the feature set described below. The QEMU code base will also be simplified to reduce the number of generic abstractions.


NEMU provides a PCI virtio platform with support for vfio based device direct assigment and mediated device assigment support. It also aims to retain support for live migration, vhost-user and a build time configurable device hotplug support for PCI, memory, NVDIMM and CPU. NEMU will need to emulate a small subset of features including PCI host brige.

NEMU also introduces a new QEMU x86-64 machine type: virt. It is a purely virtual platform, that does not try to emulate any existing x86 chipset or legacy bus (ISA, SMBUS, etc) and offloads as many features to KVM as possible. This is a similar approach as the already existin AArch64 virt machine type and NEMU will only support the two virt machine types.

Below is a list of QEMU features that NEMU will retain and add.

High Level

  • KVM and KVM only based
  • Minimal emulation
  • Low latency
  • Low memory footprint
  • Low complexity
  • Small attack surface
  • 64-bit support only
  • Optional and build time configurable CPU, memory, PCI and NVDIMM hotplug
  • Machine to machine migration


NEMU only supports two 64-bit CPU architectures:

  • x86-64
  • AArch64

Guest OS

  • 64-bit Linux

Guest Platforms

  • virt (x86-64) QEMU x86-64 virtual machine
  • virt (AArch64) QEMU AArch64 virtual machine

Host Platforms

  • Linux

Firmware and boot

  • UEFI
  • ACPI
    • Hardware Reduced ACPI
    • Optional hotplug support
      • CPU
      • Memory
      • NVDIMM
      • PCI devices
      • VFIO
      • vhost-user

Boot methods

  • UEFI boot


  • QEMU allocated memory
  • File mapped memory
  • Huge pages
  • Memory pinning



  • virtio
    • blk
    • console
    • crypto
    • pci-net
    • rng-pci
    • scsi
      • virtio
      • vhost
    • 9pfs
    • vhost-user-scsi
    • vhost-user-net
    • vhost-user-blk
    • vhost-vsock-pci
  • vfio
    • network
    • mediated device
    • storage
    • rdma
  • TPM
    • vTPM
    • Host TPM passthrough
  • SCSI controller
  • PCI controller (pci-lite)


  • cdrom
  • nvme
  • ceph/rbd

Guest Image Formats

  • QCOW2
  • RAW
  • VHD


  • Network based over TLS
  • File based (Local migration)


  • QMP
  • QAPI

To be discussed

  • 64-bit Windows Server (headless)
  • qboot
  • Graphic Console
  • virtio-block-crypto
  • QEMU client support as modules
    • iscsi
    • nbd
    • nfs
    • gluster
  • RDMA live migration
  • Guest agent