Cua

How fast do files move into and out of a Space?

Uploading one 100 MiB file into a running QEMU Linux VM Space ran at 625.7 MiB/s and downloading it at 873.3 MiB/s (p50 time, n = 10) on a Mac Studio (Apple M2 Max, 96 GB), measured 2026-10-25 on Cua Spaces 0.15.0.

Measured Build app 0.15.0, cua 0.9.0, cua-spacesd 0.8.0n = 10Raw data (CSV)

Results

Throughput at the p50 time, one file per transfer, from the same Mac. Higher is better.

Upload 1 MiB
211.1 MiB/s
Upload 16 MiB
509.9 MiB/s
Upload 100 MiB
625.7 MiB/s
Upload 512 MiB
619.3 MiB/s
Download 1 MiB
148.8 MiB/s
Download 16 MiB
549.2 MiB/s
Download 100 MiB
873.3 MiB/s
Download 512 MiB
1,164 MiB/s
Values shown in the chart
MeasureValue
Upload 1 MiB211.1 MiB/s
Upload 16 MiB509.9 MiB/s
Upload 100 MiB625.7 MiB/s
Upload 512 MiB619.3 MiB/s
Download 1 MiB148.8 MiB/s
Download 16 MiB549.2 MiB/s
Download 100 MiB873.3 MiB/s
Download 512 MiB1,164 MiB/s
Samples10

Method

Driver on the host: bench/channel/run.sh from tag cua-spaces-v0.15.0 with channel_bench (Rust SDK example built from the tag). It creates one Linux VM Space on this Mac (cua spaces create linux --on local --kind vm --cpus 2 --memory-mb 2048, QEMU on HVF), measures it through the SDK and deletes it. Route: local 127.0.0.1 (gRPC to the Space's cua-spacesd). Exec: 300 serial round trips each of a no-op RPC, true run directly, and sh -c (5 warm-up calls excluded). Files: one file per transfer of 1 MiB (n=20), 4 MiB (20), 16 MiB (10), 100 MiB (10), 512 MiB (5), upload then download, MiB/s = size / p50 time; files of 2 MiB and more use the VM's bulk lane (a shared disk, SHA-256 checked). channel_bench writes percentiles per metric, not per sample, so samples.csv holds one row per metric.

Caveats

  • Same machine (loopback): a client on another machine adds its network.
  • Files of 2 MiB and more use the VM's bulk lane, a shared disk; every transfer is SHA-256 checked.
  • samples.csv has one row per metric (percentiles), not one per sample.

Environment and build

MachineMac Studio, Mac14,13 (Mac Studio)
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2 (25G83)
Wherelocal
Other vms1
Networkn/a (local)
Kindvm
Imagelinux (catalog alias, full Linux VM disk)
Shape2 vCPU, 2 GiB
BuildCua 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
App0.15.0
cua0.9.0
cua_spacesd0.8.0

Reproduce

# 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 &
cd ~/bench/cua/libs/cua
CUA=cua BENCH=target/release/examples/channel_bench FILES=1:20,4:20,16:10,100:10,512:5 OUT=results \
  bash bench/channel/run.sh bench/channel/baselines/macos-m2max-qemu.json

Cua commands use the published Cua Spaces 0.15.0 release and the public trycua/cua repository at the tag cua-spaces-v0.15.0. Downloads: samples (CSV), result (JSON), this page as Markdown.

Questions

Why are small files slower?

Per-transfer overhead dominates a 1 MiB file. From 2 MiB on, files go through the VM's bulk lane (a shared disk), which is where the throughput rises.

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.

Checked 2026-10-25. Sources: the samples and result files above, measured by Cua. All benchmarks.

Open in your browser to continue

Sign-in often fails inside this app's built-in browser. Open this page in Safari or Chrome to continue.