mbox series

[v7,0/4] Implements the NetBSD Virtual Machine Monitor accelerator

Message ID 20210402202535.11550-1-reinoud@NetBSD.org (mailing list archive)
Headers show
Series Implements the NetBSD Virtual Machine Monitor accelerator | expand

Message

Reinoud Zandijk April 2, 2021, 8:25 p.m. UTC
The NetBSD team has implemented its new hypervisor called NVMM. It has been
included since NetBSD 9.0 and has been in use now for quite some time. NVMM
adds user-mode capabilities to create and manage virtual machines, configure
memory mappings for guest machines, and create and control execution of
virtual processors.

With this new API we are now able to bring our hypervisor to the QEMU
community! The following patches implement the NetBSD Virtual Machine Monitor
accelerator (NVMM) for QEMU on NetBSD 9.0 and newer hosts.

When compiling QEMU for x86_64 it will autodetect nvmm and will compile the
accelerator for use if found. At runtime using the '-accel nvmm' should see a
significant performance improvement over emulation, much like when using 'hax'
on NetBSD.

The documentation for this new API is visible at https://man.netbsd.org under
the libnvmm(3) and nvmm(4) pages.

NVMM was designed and implemented by Maxime Villard <max@m00nbsd.net>

Thank you for your feedback.

Refrences:
https://m00nbsd.net/4e0798b7f2620c965d0dd9d6a7a2f296.html


Test plan:

1. Download a NetBSD 9.1 release:
http://cdn.netbsd.org/pub/NetBSD/NetBSD-9.1/amd64/installation/cdrom/boot.iso

2. Install it natively on a not too old x86_64 hardware (Intel or AMD).

There is no support for nested virtualization in NVMM.

3. Setup the system.

 export PKG_PATH=http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/9.0/All/
 pkg_add git gmake python37 glib2 bison pkgconf pixman
 
Install mozilla-rootcerts and follow post-install instructions.

 pkg_add mozilla-rootcerts

More information: https://wiki.qemu.org/Hosts/BSD#NetBSD

4. Build qemu

 mkdir build
 cd build
 ../configure --python=python3.7
 gmake
 gmake check

5. Test

 qemu -accel nvmm ...

History:
v6 -> v7:
 - Remove small patches from pkgsrc that krept in
 - Enhance the possible race on exit fix
 - update the build system to only link the nvmm library for targets that
   support NVMM
v5 -> v6:
 - Ported to updated Qemu 6.0 build system, reshuffeling and refactoring
 - Improved auto detection
 - Added support for improved NVMM interface fixing feedback on the use of
   signals
v4 -> v5:
 - Mainly cosmetic
 - Automatic detection
v3 -> v4:
 - Correct build warning by adding a missing include
 - Do not set R8-R16 registers unless TARGET_X86_64
v2 -> v3:
 - Register nvmm in targetos NetBSD check
 - Stop including hw/boards.h
 - Rephrase old code comments (remove XXX)
v1 -> v2:
 - Included the testing plan as requested by Philippe Mathieu-Daude
 - Formatting nit fix in qemu-options.hx
 - Document NVMM in the accel section of qemu-options.hx


Signed-off-by: Kamil Rytarowski <kamil@NetBSD.org>
Signed-off-by: Reinoud Zandijk <reinoud@NetBSD.org>


Reinoud Zandijk (4):
  Add NVMM accelerator: configure and build logic
  Add NVMM accelerator: x86 CPU support
  Add NVMM accelerator: acceleration enlightenments
  Add NVMM Accelerator: add maintainers for NetBSD/NVMM

 MAINTAINERS                       |   11 +
 accel/Kconfig                     |    3 +
 configure                         |    8 +-
 include/sysemu/hw_accel.h         |    1 +
 include/sysemu/nvmm.h             |   26 +
 meson.build                       |   14 +
 meson_options.txt                 |    2 +
 qemu-options.hx                   |    8 +-
 target/i386/helper.c              |    2 +-
 target/i386/meson.build           |    1 +
 target/i386/nvmm/meson.build      |   10 +
 target/i386/nvmm/nvmm-accel-ops.c |  111 +++
 target/i386/nvmm/nvmm-accel-ops.h |   24 +
 target/i386/nvmm/nvmm-all.c       | 1226 +++++++++++++++++++++++++++++
 14 files changed, 1441 insertions(+), 6 deletions(-)
 create mode 100644 include/sysemu/nvmm.h
 create mode 100644 target/i386/nvmm/meson.build
 create mode 100644 target/i386/nvmm/nvmm-accel-ops.c
 create mode 100644 target/i386/nvmm/nvmm-accel-ops.h
 create mode 100644 target/i386/nvmm/nvmm-all.c