GitHub Issue

v0.4+ candidate: live-fork via memfd-backed source RAM + uffd_wp (deferred from v0.3)

Discovered On May 18, 2026
Primary Metric open
**Status:** Deferred from v0.3. The design and scaffolding are in the repo (see "What's already here" below) so the work can be picked up cleanly if/when the cost-benefit changes. The reason for deferral is in "Why deferred" below. ## Goal Cut BRANCH pause-window to ~30 ms regardless of source memory size, by replacing "pause source, write full memory.bin, resume" with "pause source, register WP on its memory, resume; children inherit a memfd view and the WP handler resolves source's post-fork writes lazily." Motivating measurement: `bench/pause-window/RESULTS-v0.2.md`. Today's pause is storage-bound: 163 ms (tmpfs) to 4.26 s (SATA SSD) for 513 MiB, scaling linearly with source memory. v0.2.5's prewarm ([PR #100](https://github.com/deeplethe/forkd/pull/100)) flattens the cold/warm ratio but doesn't change the absolute floor. ## What's already here (scaffolding from v0.3 cycle) | Artifact | Purpose | Notes | |---|---|---| | `docs/design/userfaultfd.md` | Full architectural design | Honest about the open question on source-divergence sync | | `crates/forkd-uffd/` | Workspace crate with Firecracker UDS handshake parser | Linux-only; tested over `socketpair(2)`; no event loop yet | | `crates/forkd-vmm/src/lib.rs` `MemoryBackend::Userfault` | Enum variant + ForkOpts field | `bail!`s in `restore_many_with` so no caller can rely on it | | `firecracker-patch/v0.3-memfd-backend.patch` | First-cut patch against Firecracker v1.10.1 | Not compile-tested; reviewed against real upstre...
View Raw Thread