pub struct VmConfig { /* private fields */ }Expand description
Configuration for Vm::start. Built via the chainable
VmConfig::with_* methods or constructed directly:
use supermachine::VmConfig;
let cfg = VmConfig::new()
.with_memory_mib(512)
.with_vcpus(2);Implementations§
Source§impl VmConfig
impl VmConfig
Sourcepub fn new() -> Self
pub fn new() -> Self
Use the image’s baked defaults for memory + vCPUs;
auto-discover assets; vsock-mux socket in $TMPDIR;
10 s restore timeout.
Sourcepub fn with_memory_mib(self, mib: u32) -> Self
pub fn with_memory_mib(self, mib: u32) -> Self
Override the image’s baked memory.
Sourcepub fn with_vcpus(self, vcpus: u32) -> Self
pub fn with_vcpus(self, vcpus: u32) -> Self
Override the image’s baked vCPU count.
Sourcepub fn with_balloon(self, enable: bool) -> Self
pub fn with_balloon(self, enable: bool) -> Self
Attach a virtio-balloon device so the host can reclaim guest memory via
Vm::request_balloon_inflate (KVM cold boot — Image::start). The
guest needs CONFIG_VIRTIO_BALLOON (the bundled supermachine kernel has
it). Off by default; the warm-pool acquire path ignores it (balloon is
a cold-boot reclaim lever, not snapshotted — matching HVF’s restore default).
Sourcepub fn with_volume(self, spec: VolumeSpec) -> Self
pub fn with_volume(self, spec: VolumeSpec) -> Self
Attach a data volume (KVM): a host-backed virtio-blk mounted in the guest
at spec.guest_path. The backing file is created sparse + formatted ext4
on first use and reused (so data persists across runs); pass the same
host_path to keep state. Multiple volumes become vdb, vdc, … Honored on
the cold-boot start path (snapshots/pools don’t carry volume mounts yet).
let image = Image::from_oci("postgres:16-alpine")?;
let cfg = VmConfig::new()
.with_volume(VolumeSpec::new("/srv/pgdata.img", "/var/lib/postgresql/data"));
let vm = image.start(&cfg)?;Sourcepub fn with_virtiofs(self, spec: MountSpec) -> Self
pub fn with_virtiofs(self, spec: MountSpec) -> Self
Expose a host directory to the guest over virtio-fs (KVM), mounted at
spec.guest_path. Served by an in-process FUSE backend with a DAX window
(the guest init mounts -o dax for zero-copy reads). Mounts survive a
snapshot: the device + FUSE backend tables + DAX slot table are captured
(SMSNAP05) and re-attached on restore (lazy fd reopen + eager DAX rebind).
let image = Image::from_oci("alpine")?;
let cfg = VmConfig::new()
.with_virtiofs(MountSpec::new("/srv/assets", "assets", "/mnt/assets"));
let vm = image.start(&cfg)?;Sourcepub fn with_assets(self, assets: AssetPaths) -> Self
pub fn with_assets(self, assets: AssetPaths) -> Self
Override asset auto-discovery. Useful for .app bundles
that ship the kernel + init shim under
Contents/Resources/.
Sourcepub fn with_vsock_mux_dir(self, dir: impl Into<PathBuf>) -> Self
pub fn with_vsock_mux_dir(self, dir: impl Into<PathBuf>) -> Self
Where to put the host-side vsock-mux unix socket. Default
is $TMPDIR. Use this if you need the socket inside an
app-private dir for sandboxing reasons.
Sourcepub fn with_restore_timeout(self, timeout: Duration) -> Self
pub fn with_restore_timeout(self, timeout: Duration) -> Self
How long to wait for the snapshot to restore. Default 10 s.