Annotation of wikisrc/users/kamil/qemu.mdwn, revision 1.1
1.1 ! kamil 1: QEMU for NetBSD
! 2:
! 3: # Current status
! 4:
! 5: Summary of the current status of QEMU hosted on a NetBSD host.
! 6:
! 7: ## What works?
! 8:
! 9: Quick summary:
! 10:
! 11: - The NetBSD target builds and works out of the box with elementary features.
! 12:
! 13: - There is a pkgsrc package that ships a recent version.
! 14:
! 15: - QEMU should work with all currently supported NetBSD versions starting from 6.x.
! 16:
! 17: - QEMU as of today is not PaX MPROTECT safe.
! 18:
! 19: - All tests in the check target pass.
! 20:
! 21: - NetBSD is a maintained platform.
! 22:
! 23: ## Standard features matrix
! 24:
! 25: Elementary features for NetBSD are probably well supported.
! 26:
! 27: Name | Description | NetBSD status
! 28: ----------------------|----------------------------------------------------|--------------
! 29: python | Python programming language | should work
! 30: smbd | Samba | net/samba, untested
! 31: git | GIT VCS | should work
! 32: debug | | should work
! 33: sanitizers | ASan, UBSan, ASan headers | should work
! 34: sanitizers Fibers | Asan headers with fibers | Futue GCC/Clang should work
! 35: stack-protector | Stack protector | works
! 36: audio oss | OSS audio backend | should work
! 37: audio sdl | SDL audio backend | should work
! 38: coroutine ucontext | | should work
! 39: coroutine sigaltstack | | should work
! 40: coroutine windows | | N/A, Windows specific
! 41: slirp | User networking | works
! 42: tcg-interpreter | Tiny Code Generator | should work
! 43: malloc-trim | GNU malloc(3) optimization | N/A, Linux specific
! 44: gcov | Test Coverage Program | should work
! 45: gprof | GNU profiling | should work
! 46: profiler | | should work
! 47:
! 48:
! 49: ## Optional feature matrix
! 50:
! 51: Additional features support various extensions,
! 52: most of them are a matter of using the emulator with a 3rd party and are OS independent.
! 53:
! 54: Part of features require OS specific extensions.
! 55:
! 56: Name | Description | NetBSD status
! 57: ---------------|----------------------------------------------------|--------------
! 58: system | all system emulation targets | works
! 59: user | supported user emulation targets | broken
! 60: linux-user | all linux usermode emulation targets | N/A
! 61: bsd-user | all BSD usermode emulation targets | broken (FreeBSD ships local patches)
! 62: docs | build documentation | should work
! 63: guest-agent | build the QEMU Guest Agent | unknown, probably broken
! 64: guest-agent-msi| build guest agent Windows MSI installation package | unknown, probably broken
! 65: pie | Position Independent Executables | should work
! 66: modules | modules support | unknown, should work
! 67: debug-tcg | TCG debugging (default is disabled) | should work
! 68: debug-info | debugging information | should work
! 69: sparse | sparse checker | should work
! 70: gnutls | GNUTLS cryptography support | should work
! 71: nettle | nettle cryptography support | should work
! 72: gcrypt | libgcrypt cryptography support | should work
! 73: sdl | SDL UI | should work
! 74: --with-sdlabi | select preferred SDL ABI 1.2 or 2.0 | should work, not imporant
! 75: gtk | gtk UI | should work
! 76: --with-gtkabi | select preferred GTK ABI 2.0 or 3.0 | should work, not important
! 77: vte | vte support for the gtk UI | should work
! 78: curses | curses UI | works with native NetBSD 8.0 curses(3)
! 79: vnc | VNC UI support | should work
! 80: vnc-sasl | SASL encryption for VNC server | should work
! 81: vnc-jpeg | JPEG lossy compression for VNC server | should work
! 82: vnc-png | PNG compression for VNC server | should work
! 83: cocoa | Cocoa UI (Mac OS X only) | N/A, Darwin specific
! 84: virtfs | VirtFS | probably broken
! 85: mpath | Multipath persistent reservation passthrough | unknown, problably not supported
! 86: xen | xen backend driver support | unknown
! 87: xen-pci-passthrough | PCI passthrough support for Xen | unknown, probably not supported
! 88: brlapi | BrlAPI (Braile) | unknown, should work
! 89: curl | curl connectivity | should work
! 90: membarrier | membarrier system call (for Linux 4.14+ or Windows)| not supported
! 91: fdt | fdt device tree | unknown, should work
! 92: bluez | bluez stack connectivity | unknown
! 93: kvm | KVM acceleration support | N/A , Linux specific kernel APIs required in userland
! 94: hax | HAX acceleration support | not ported, Windows/Darwin specific as of today
! 95: hvf | Hypervisor.framework acceleration support | not ported, Darwin specific
! 96: whpx | Windows Hypervisor Platform acceleration support | N/A
! 97: rdma | Enable RDMA-based migration and PVRDMA support | unknown, probably not supported
! 98: vde | support for vde network | probably not supported and Linux specific as of today
! 99: netmap | support for netmap network | not supported (FreeBSD specific?)
! 100: linux-aio | Linux AIO support | not supported, Linux specific
! 101: cap-ng | libcap-ng support | not supported, Linux specific
! 102: attr | attr and xattr support | N/A, Linux specific ?
! 103: vhost-net | vhost-net acceleration support | not supported
! 104: vhost-crypto | vhost-crypto acceleration support | not supported
! 105: spice | spice | unknown, probably not supported
! 106: rbd | rados block device (rbd) | unknown
! 107: libiscsi | iscsi support | unknown
! 108: libnfs | nfs support | unknown
! 109: smartcard | smartcard support (libcacard) | unknown
! 110: libusb | libusb (for usb passthrough) | unknown
! 111: live-block-migration | Block migration in the main migration stream| unknown
! 112: usb-redir | usb network redirection support | unknown
! 113: lzo | support of lzo compression library | should work
! 114: snappy | support of snappy compression library | should work
! 115: bzip2 | support of bzip2 compression library | should work
! 116: seccomp | seccomp support | Linux specific (?)
! 117: coroutine-pool | coroutine freelist (better performance) | unknown
! 118: glusterfs | GlusterFS backend | unknown
! 119: tpm | TPM support | unknown
! 120: libssh2 | ssh block device support | should work
! 121: numa | libnuma support | not ported
! 122: libxml2 | for Parallels image format | should work
! 123: tcmalloc | tcmalloc support | should work
! 124: jemalloc | jemalloc support | works
! 125: replication | replication support | not ported, N/A ?, Linux specific
! 126: vhost-vsock | virtio sockets device support | not ported
! 127: opengl | opengl support | unknown
! 128: virglrenderer | virgl rendering support | unknown
! 129: xfsctl | xfsctl support | N/A / not ported
! 130: qom-cast-debug | cast debugging support | unknown
! 131: tools | build qemu-io, qemu-nbd and qemu-image tools | works (userland nbd only)
! 132: vxhs | Veritas HyperScale vDisk backend support | N/A ?
! 133: crypto-afalg | Linux AF_ALG crypto backend driver | N/A / not ported
! 134: vhost-user | vhost-user support | not ported
! 135: capstone | capstone disassembler support | should work
! 136:
! 137: ## External features
! 138:
! 139: 1. HQEMU
! 140:
! 141: > HQEMU is a retargetable and multi-threaded dynamic binary translator on multicores. It integrates QEMU and LLVM as its building blocks. The translator in the enhanced QEMU acts as a fast translator with low translation overhead. The optimization-intensive LLVM optimizer running on separate threads dynamically improves code for higher performance. With the hybrid QEMU+LLVM approach, HQEMU can achieve low translation overhead and good translated code quality.
! 142: > HQEMU supports process-level emulation and full-system virtualization. It provides translation modes of running the QEMU translator and LLVM optimizer in one process, or running the LLVM optimizer as a stand-alone optimization server (version 0.13.0).
! 143:
! 144: http://itanium.iis.sinica.edu.tw/hqemu/
! 145:
! 146: 2. DPDK
! 147:
! 148: > DPDK is a set of libraries and drivers for fast packet processing.
! 149:
! 150: https://dpdk.org/
! 151:
! 152: 3. The ultimate CPU emulator
! 153:
! 154: > Unicorn is a lightweight multi-platform, multi-architecture CPU emulator framework.
! 155:
! 156: https://www.unicorn-engine.org/
! 157:
! 158: ## Prioritized tasks
! 159:
! 160: 1. Upstream remaining local pkgsrc patches, mostly (old?) NetBSD and SmartOS related ones.
! 161:
! 162: 2. Make QEMU PaX MPROTECT safe.
! 163:
! 164: 3. Develop NetBSD USER emulation, attempt to either share the code with FreeBSD (bsd-user, old broken, downstream patches) or with Linux (linux-user, recent, actively maintained). Preferred approach is to share as much code with linux-user as possible, regardless of the state of bsd-user.
! 165:
! 166: 4. Develop HAXM backend support for the NetBSD kernel.
! 167:
! 168: ## HAXM hardware assisted virtualization
! 169:
! 170: Features:
! 171:
! 172: - Open Source
! 173: - HAXM is an Intel hardware assisted virtualization.
! 174: - HAXM supports up to 8 active VMs.
! 175: - HAXM supports up to 16 active VCPUs per VM.
! 176: - ioctl(2) based API with statically created devices (/dev/HAX, /dev/haxm_vm/vmXX, /dev/haxm_vm/haxm_vmXX_vcpuYY)
! 177:
! 178: HAXM porting for NetBSD rationale:
! 179:
! 180: - Relatively low cost (compared to alternatives) to get it aboard to the NetBSD kernel.
! 181: - Relatively non-intrusive (compared to alternatives like bhyve and KVM)
! 182: - Scratch but non-functional port for NetBSD is ready.
! 183: - Active (paid developers) upstream to maintain this
! 184: - Clean separation between kernel specific and independent parts (there are at least 2 backends: Darwin and Windows)
! 185: - QEMU frontend already exists, API is ioctl(2) based
! 186: - Good license (BSD-3-clause) for the kernel driver
! 187: - Tailored down for desktop users, initially prepared for Android developers
! 188:
! 189: HAXM shortcomings:
! 190:
! 191: - No AMD support
! 192: - Required relatively recent Intel CPU
! 193: - Not as flexible as KVM-like solutions for embedded or server usage
! 194: - Not necessarily ready (not tested) to run every OS in existence, there are known failures to execute some versions of the Linux kernel
! 195:
! 196: Current HAXM/NetBSD status:
! 197:
! 198: - The module builds and loads into the kernel (triggering a panic)
! 199: - Revisit the UVM APIs to ship all the needed features of sharing memory between user and kernel that is used by HAXM
! 200:
! 201: ```
! 202: https://github.com/krytarowski/haxm/tree/netbsd-1
! 203:
! 204: $ cd netbsd && make
! 205: ```
! 206:
! 207: https://www.qemu.org/2017/11/22/haxm-usage-windows/
! 208: https://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-intel-haxm
! 209: https://github.com/intel/haxm
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb