xhypervisor
is a Rust library that taps into functionality that enables hardware-accelerated execution of virtual machines on OS X.
It is a fork of hypervisor-rs and modified for the development of uhyve and ehyve.
Derived from ahv, we added the support of Apple's Hypervisor Framework on Apple Silicon.
It binds to the Hypervisor framework on OS X, and exposes a safe Rust interface through the hypervisor
module, and an unsafe foreign function interface through the xhypervisor::ffi
module.
A xhypervisor derived from the 16 bits VM is used as test example, which was original published in blog post http://www.pagetable.com/?p=764.
To use this library, you need
-
OS X Yosemite (10.10), or newer
-
a Intel processor with the VT-x feature or an Apple Silicon processor with virtualization support. To verify this, run and expect the following in your Terminal:
$ sysctl kern.hv_support kern.hv_support: 1
- WARNING: The Apple Silicon support is in an early state
- Accessing x86 registers
- Accessing aarch64 registers
- x86: Accessing model-specific registers (MSRs)
- Mapping guest physical memory segments into guest physical address space
- Virtual CPUs
- Executing and interrupting
- Force flushing cached state
- Invalidating translation lookaside buffer (TLB)
- Accessing floating point (FP) and SIMD state
- Obtaining cumulative execution time
- Synchronizing guest timestamp-counters (TSC)
- x86: Accessing fields of Virtual Machine Control Structures (VMCS)