# How many VM Spaces can run on one Mac?

One Mac ran 96 VMs at once as idle QEMU VM Spaces (1 vCPU, 1 GiB each), about 328.2 MB of host memory per VM, on a Mac Studio (Apple M2 Max, 96 GB), measured 2026-10-25. The daemon's default CPU overcommit (8 per core) set the limit, not memory.

- Page: https://cua.ai/benchmarks/vms-per-mac
- Measured: 2026-10-25
- Raw data: https://cua.ai/benchmarks/vms-per-mac.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 = 12

## Results

Idle VMs running at once. Higher is better.

| Measure | Value |
| --- | --- |
| VMs | 96 VMs |

## Method

Driver on the host: `bench/spaces-startup/bench.sh vm-density` from tag cua-spaces-v0.15.0 with `rollout_bench` (built from the tag), VMD_PROFILE=rollout, through the release's own daemon (bench.sh restarts it) with the warm pool off. The first VM records a golden snapshot; then 8 VMs at a time are created through the SDK and kept running. After each step: a host sample (QEMU private memory, shared snapshot memory counted once, memory pressure) and 20 exec round trips on every VM at once. Stops at the first create failure or capacity refusal, exec p95 > 2x the one-VM value, or critical memory pressure.

## 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
- Kind: vm (QEMU 10.2.2 on HVF, Homebrew)
- Image: ghcr.io/trycua/linux:24.04-slim (QEMU disk)
- Shape: 1 vCPU, 1 GiB, VMD_PROFILE=rollout (no desktop, no display hardware)
- Settings: CUA_POOL_AUTO=off; default CUA_VM_VCPU_OVERCOMMIT (8x)
- Other vms: 1
- Network: n/a (local)
- 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

- Stopped by the daemon's admission control, not memory: 96 VMs of 1 vCPU = 12 cores x the default 8x vCPU overcommit. Memory alone would fit about 242 at this per-VM cost, and macOS caps a host at 128 VMs.
- Idle VMs (only cua-spacesd).

## 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
cd ~/bench/cua/libs/cua
CUA_POOL_AUTO=off CUA=$(command -v cua) ROLLOUT_BENCH=$RB OUT=/tmp/vmd VMD_PROFILE=rollout VMD_LABEL=m2max-96g \
  bash bench/spaces-startup/bench.sh vm-density
```

## Questions

### Could it run more?

With more CPU overcommit, yes: memory would have fit about 242 VMs at this per-VM cost. macOS itself caps a host at 128 VMs.

### 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.
