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 | QEMU modules support (not kernel modules) | 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/](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/](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/](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: > https://github.com/krytarowski/haxm/tree/netbsd-1
202: >
203: > $ cd netbsd && make
204:
205: External links:
206:
207: [https://www.qemu.org/2017/11/22/haxm-usage-windows/](https://www.qemu.org/2017/11/22/haxm-usage-windows/)
208:
209: [https://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-intel-haxm](https://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-intel-haxm)
210:
211: [https://github.com/intel/haxm](https://github.com/intel/haxm)
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb