self-host →

RunsOn m8id.xlarge · local NVMe vs GitHub 4-⁠core x64

RunsOn does each build for 3.6–7.2× less; on time, RunsOn is faster on the TypeScript and Docker builds and tied on the Rust build. Both 4 vCPU x64.

All three builds 4.2× cheaper on RunsOn: $0.0593 vs $0.2498RunsOn 1.4× faster: 13m 35s vs 18m 27s
Rust build 6.6× cheaper on RunsOn: $0.0071 vs $0.0466about the same time: 2m 57s · 3m 47s
TypeScript build 7.2× cheaper on RunsOn: $0.0037 vs $0.0268RunsOn 1.4× faster: 1m 20s vs 1m 56s
Docker build 3.6× cheaper on RunsOn: $0.0485 vs $0.1764RunsOn 1.4× faster: 9m 18s vs 12m 44s

Side by side

Every measurement both runners share, cost first. The dot marks the better value; gap is the larger over the smaller.

Measurement RunsOn GitHub Gap
Cost
Cost per Rust build $0.0071 $0.0466 6.6× RunsOn
Cost per TypeScript build $0.0037 $0.0268 7.2× RunsOn
Cost per Docker build $0.0485 $0.1764 3.6× RunsOn
Price per minute $0.0017 $0.0120 7.1× RunsOn
Real builds, wall time
Rust build (spotify-⁠player) 2m 57s 3m 47s ≈ even
TypeScript build (opencode) 1m 20s 1m 56s 1.4× RunsOn
Docker build (PostHog) 9m 18s 12m 44s 1.4× RunsOn
CPU & memory
PassMark single-⁠thread (points) 3,269 2,370 1.4× RunsOn
PassMark CPU Mark, all cores (points) 8,058 6,130 1.3× RunsOn
sysbench CPU, 1 thread (events/s) 3,298 3,670 1.1× GitHub
7-⁠Zip compression (MIPS) 19,421 16,137 1.2× RunsOn
Memory read bandwidth 20.0 GiB/s 20.9 GiB/s ≈ even
Measurement RunsOn GitHub Gap
Workspace disk (fio)
Random read, 4k QD32 (IOPS) 67,089 19,587 3.4× RunsOn
Random write, 4k QD32 (IOPS) 33,526 11,712 2.9× RunsOn
Random read, 4k QD1 (IOPS) 11,056 6,843 1.6× RunsOn
QD1 read latency, p99 210 µs 251 µs 1.2× RunsOn
Sequential read 451 MiB/s 394 MiB/s 1.1× RunsOn
Sequential write 216 MiB/s 394 MiB/s 1.8× GitHub
Sync write, 4k + fdatasync (IOPS) 7,841 3,262 2.4× RunsOn
Network, cache & Docker
Download from GitHub 195 MiB/s 91 MiB/s 2.1× RunsOn
Cache restore, 4 GB (actions/cache) 32s 41s 1.3× RunsOn
Cache save, 4 GB (actions/cache) 25s 30s 1.2× RunsOn
docker pull 7.5s 16.4s 2.2× RunsOn
Database
pgbench read/write (TPS) 7,180 2,797 2.6× RunsOn
pgbench read-⁠only (TPS) 62,052 20,013 3.1× RunsOn
Queue
Queue under burst load 21s 4s 5.3× GitHub
  • ≈ even: under 5% apart, or a build inside both runners' run-to-run spread
  • Queue: identical jobs queued at the same instant (burst suite)
  • RunsOn at EC2 spot, its default (7-day average of the cheapest us-east-1 zone's spot price, fetched 5 Oct 2026); the jobs ran on spot
  • Cost: a managed SaaS runner against RunsOn self-hosted on your AWS account; the effort of running it was not measured

Other head-to-heads