v0.3 shipped: BRANCH source-pause 29 s → 205 ms (143x) on 4 GiB SSD #110
WaylandYang
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
forkd v0.3 ships diff-snapshot BRANCH today (v0.3.0 in the morning + v0.3.1 with multi-BRANCH support in the afternoon). Source-pause window on
POST /v1/sandboxes/:id/branchdrops from a memory-bandwidth-bound write of the full memory image to just the diff of pages dirtied since the previous snapshot.Measured pause-window (mean of 3 trials, mem-2048 SSD)
The Diff column is roughly constant because Firecracker's
snapshot_type: "Diff"writes only dirtied pages (~900 KB for an idle source). For real workloads we swept dirty footprint separately: typical agent workloads with 30-300 MiB dirty see 6-15 ×; crossover (Diff loses) is at ~65 % source RAM dirty.What changed
"diff": trueon the BRANCH request.memory.bincopy with the source still running, takes a Diff snapshot during a sub-second pause, resumes, then merges the diff onto the pre-copied output. Source TCP / kvmclock / timers see a ~200 ms gap instead of seconds.memory.binis, by construction, source's state at that BRANCH's pause time — exactly the base the next diff needs). Zero extra storage, no shadow file.We considered forking Firecracker and chose not to
Original v0.3 plan was memfd + uffd_wp live-fork. After phase 1's 143 × on vanilla upstream, the cost-benefit on maintaining a
deeplethe/firecrackerfork (own CI, rebase per upstream tag, track CVEs, weakened trust story) stopped making sense for the remaining ~175 ms of Firecracker control-plane floor. Decision + revival criteria in issue #101 anddocs/design/userfaultfd.md§ "Why we won't fork Firecracker".Data + design
bench/pause-window/RESULTS-v0.3.md— 117 trials across phases 1a/1b/1c/1d, all CSVs in-tree.docs/design/diff-snapshots.md— phase 1 design including the rejected alternatives.Try it
Questions, real workloads to point the bench at, and PRs welcome.
Beta Was this translation helpful? Give feedback.
All reactions