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
RunsOn m8id.xlarge · local NVMe
jobs ran from Amazon.com (US)
GitHub 4-core
jobs ran from Microsoft (US, CA)
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