# How fast can a microVM Space checkpoint and restore?

A microVM Space restored from a checkpoint to a ready Space in 611 ms (p50, n = 10), and checkpointing the running Space took 695.5 ms, on a Mac Studio (Apple M2 Max, 96 GB), measured 2026-10-25 on Cua Spaces 0.15.0.

- Page: https://cua.ai/benchmarks/microvm-checkpoint-restore
- Measured: 2026-10-25
- Raw data: https://cua.ai/benchmarks/microvm-checkpoint-restore.csv
- build Cua Spaces 0.15.0 DMG (https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg, sha256 8725a09ba4132aa8a1667fa48c86416c91d5dec0d3c7dc93f88f5f3e29e0aba0): bundled cua 0.9.0, Helpers/cua-spacesd 0.8.0, cua-vz; n = 10

## Results

p50 times through the cua CLI, serial. Lower is better.

| Measure | Value |
| --- | --- |
| Checkpoint | 695.5 ms |
| Restore | 611 ms |
| Fork a running Space | 1.21 s |
| 8 forks at once (wall) | 1.54 s |

## Method

Driver on the host: `bench/microvm-fork/bench.sh` from tag cua-spaces-v0.15.0 with N=10, FANOUT=8, through the release's `cua` CLI and daemon. Source: a microVM Space (`--kind microvm`, runtime vz via the bundled cua-vz, 2 vCPU / 2 GiB) that wrote 256 MiB to /dev/shm. Timed (wall time of each CLI command; create/fork return once the Space's cua-spacesd answers with its own token): checkpoint = `cua sb checkpoint` of the running source (n=10); restore = `cua sb fork <checkpoint>` to a ready Space (n=10, serial, each deleted); fork_running = `cua sb fork <running Space>` (n=10); fan-out = 8 forks of one checkpoint at once (wall). Headline = restore p50.

## Environment

- Machine: Mac Studio, Mac14,13 (Mac Studio)
- Chip: Apple M2 Max, 12 cores
- Memory: 96 GB
- OS: macOS 26.6.2 (25G83)
- Where: local
- Other vms: 1
- Network: n/a (local)
- Kind: microvm
- Image: ghcr.io/trycua/linux:24.04-slim
- Shape: 2 vCPU, 2 GiB (runtime vz)
- Build: Cua Spaces 0.15.0 DMG (https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg, sha256 8725a09ba4132aa8a1667fa48c86416c91d5dec0d3c7dc93f88f5f3e29e0aba0): bundled cua 0.9.0, Helpers/cua-spacesd 0.8.0, cua-vz
- App: 0.15.0
- cua: 0.9.0
- cua_spacesd: 0.8.0

## Caveats

- Host memory added per running fork in the fan-out was ~1,927 MiB (8 forks: +15,419 MiB) for a guest using 295 MiB: forks did not share the checkpoint's memory on this release.
- Times include the cua CLI process start (a few ms).

## Reproduce

```sh
# On an Apple silicon Mac (macOS 26), with Rust (rustup) and git:
curl -fLO https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg
hdiutil attach -nobrowse -mountpoint /tmp/cua-dmg cua-spaces-0.15.0-darwin-universal.dmg
mkdir -p ~/bench && ditto "/tmp/cua-dmg/Cua Spaces.app" ~/bench/"Cua Spaces.app" && hdiutil detach /tmp/cua-dmg
git clone --depth 1 --branch cua-spaces-v0.15.0 https://github.com/trycua/cua ~/bench/cua
(cd ~/bench/cua/libs/cua && cargo build --locked --release -p cua-sdk --example rollout_bench --example channel_bench)
export PATH="$HOME/bench/Cua Spaces.app/Contents/MacOS:$PATH" CUA_HOME=~/bench/home DO_NOT_TRACK=1 CUA_TELEMETRY=0
RB=~/bench/cua/libs/cua/target/release/examples/rollout_bench
cua daemon start --foreground &
CUA=cua OUT=results N=10 FANOUT=8 bash ~/bench/cua/libs/cua/bench/microvm-fork/bench.sh
```

## Questions

### Do forks share the checkpoint's memory?

Not on this release: each running fork added about 1.9 GB of host memory for a guest using 295 MiB.

### Can I run this myself?

Yes. The commands under Reproduce use the published Cua Spaces 0.15.0 release and the public trycua/cua repository at the tag cua-spaces-v0.15.0. A `cua bench run` command that wraps them is coming; it isn't in a release yet.
