Benchmarks
fs-bench
git commit.
We run its frozen script unchanged against pinned Cloudflare Computer and against LayerFS
v1.0.0, on the same image, one after the other.
LayerFS against Cloudflare Computer
vs Computer- LayerFS
- core at main e5c7aaae05, through the JS SDK
- Against
- Cloudflare Computer de87919a4
- Host
- arm64 Mac · Docker Desktop, linux/arm64, 8 CPUs, 8.3 GB
- Image
- sha256:66aeb6bb… (both sides)
- Load
- 7.5 / 8.2 (1 min)
Totals
5.20 s
sum of the 12 scenarios · faster in 10 of 12
1.71×
less total time
8.88 s
computerd at de87919a4 · faster in 2 of 12
One sample per side, pair 20261019T195401Z, LayerFS at main e5c7aaae05. The sum is a convenience total, not an agent-turn duration.
Scenario by scenario
LayerFS grows left, Computer grows right; each row is scaled to its slower side, so the shorter bar is the faster one.
- create 1000 files◀ 3.38× faster413 ms1.40 s
- stat 1000 files◀ 1.57× faster1.07 s1.68 s
- rm 1000 files◀ 2.60× faster476 ms1.24 s
- mkdir tree (10x10x10)◀ 1.68× faster835 ms1.41 s
- find tree◀ 1.56× faster960 ms1.50 s
- write 64 MiB1.26× faster ▶160 ms127 ms
- copy 64 MiB1.70× faster ▶598 ms352 ms
- read 64 MiBtie (0.6 ms apart)178 ms179 ms
- pure read 64 MiB◀ 10.56× faster· warm7.4 ms78 ms
- pure copy 64 MiB◀ 1.07× faster· warm209 ms224 ms
- overwrite 64 MiB◀ 1.52× faster· warm111 ms169 ms
- git init + commit 100 files◀ 2.95× faster181 ms535 ms
Same workload, two systems
Shared by both: fs-bench.sh sha256 0e2004339a9269b88c2de451d56575957477bde16b96a10cf1837519e37230ef; 12 offline scenarios; REPS=1 WARMUP=0 RANDOMIZE_TARGETS=0 · image sha256:66aeb6bbf7fc… (node:22-bookworm-slim arm64, computerd, git 2.39.5, bash 5.2.15, gawk 5.2.1) · macOS 26.4.1 arm64; Docker Desktop 29.5.2, linux/arm64, kernel 6.12.76-linuxkit, 8 CPUs, 8.3 GB.
How each side ran
LayerFS, only through the JS SDK
As an agent would: every step is a public @layerfs/sdk call, and the script runs through sandbox.exec as the Sandbox's user (501).
- project.init("/tmp/fs-bench-source")one README
- sandbox.create("bench", "fsbench", image)the Sandbox container and daemon
- branch.fork("bench", "main")its own Branch
- sandbox.mount("bench", "bench")/workspaces/1
- sandbox.exec(× 3)check, run fs-bench.sh, collect
- sandbox.unmount(…, discard)then sandbox.close
Cloudflare Computer, as its benchmark expects
computerd from the pinned commit's source CLI with its FUSE backend, mounted at/workspace in a privileged container. The script runs throughdocker exec as root, the owner of that mount.
Both sides run the same bytes of fs-bench.sh (hash-checked before each run), with one sample, no warm-up and a fixed order. Each scenario is timed inside the script, so how it was launched is outside every timer.
Read with care
One sample each
On this host, single rows have moved by up to about 2× between runs. Close rows such as read 64 MiB are a tie, not a win.
Each as deployed
Computer runs privileged with a larger max_read and auto_cache; LayerFS runs in a narrower Sandbox with writeback off. Kernel settings are not equalised.
Warm rows
pure read, pure copy and overwrite read or rewrite what the scenario just wrote: warm-state behaviour, not cold reads.
Not the whole call
Setup, mount, Commit and unmount are outside the timers. This is Docker Desktop on an arm64 Mac, not a native Linux host.
Data: benchmark/data/fs-bench/v1.0.0/ in the LayerFS repository (results, environment, raw receipts and the campaign record).