CI Bench

Self-hosted · CI Bench v1

RunsOn

1.2x faster than GitHub's 2 vCPU runner and 88% lower cost per job, averaged over 12 workloads.

Speed
1.2×
faster than GitHub-hosted (ubuntu-latest)
6th of 9 by speed
Cost per job
−88%
vs GitHub-hosted (ubuntu-latest)
at 100,000 jobs a month; 75% lower at 10,000, 43% higher at 1,000
Lowest median time
1 / 12
workloads
container
Failed runs
1 of 360
measured runs
vite 1 of 30. Counted, not replaced.

Speed on each workload

× faster than GitHub-hosted (ubuntu-latest) on the same workload
Burst: 20 jobs at once
1.5×
cli
1.1×
codex-lint
1.4×
container
1.4×
fd
1.0×
flask
0.6×
guava
1.3×
monorepo
1.3×
pydantic
1.2×
ts
1.4×
vite
1.4×
vue
1.2×

Configuration

Self-hosted · 2 vCPU / 8 GB
Measured configuration
RunsOn (self-hosted on AWS, defaults: spot), 2 vCPU
Size
2 vCPU / 8 GB
Label or setup
runs-on/runner=2cpu-linux-x64/extras=s3-cache
Price as measured
all-in: what the jobs use in your cloud account, plus fixed monthly costs spread over the volume ($40.8273 a month); measured per job (cost rules)
Accelerators used
Magic Cache: label extras=s3-cache and runs-on/action@v2 before the cache steps (RunsOn docs).
Notes
All-in (METHOD.md, Cost): measured per job by selfhosted/runson/cost_runson.py: EC2 seconds at the spot or on-demand price paid, root EBS, public IPv4, S3 cache storage and requests, internet egress (VPC flow logs), usage-driven control plane; plus the stack's fixed monthly cost (always-on worker and its IPv4, secrets, log storage, licence) spread over the reference volume. codex-lint runs on the next memory size (2 vCPU / 16 GiB).
Definition
providers/runson2.json

Per workload

Green marks the lowest median time on the workload. The burst row covers all 20 jobs.
WorkloadMedian timevs GitHub-hosted (ubuntu-latest)p95 timeMean costvs GitHub-hosted (ubuntu-latest)Successful runsRank
Burst: 20 jobs at once177 s1.5x faster340 s$0.05190% lower30 of 307th
cli327 s1.1x faster334 s$0.004190% lower30 of 306th
codex-lint623 s1.4x faster662 s$0.01088% lower30 of 307th
container174 s1.4x faster188 s$0.006078% lower30 of 301st
fd89 s1.0x faster93 s$0.001885% lower30 of 307th
flask38 s1.7x slower40 s$0.001476% lower30 of 308th
guava897 s1.3x faster919 s$0.009691% lower30 of 307th
monorepo288 s1.3x faster313 s$0.003990% lower30 of 308th
pydantic147 s1.2x faster152 s$0.002488% lower30 of 305th
ts570 s1.4x faster597 s$0.006192% lower30 of 308th
vite437 s1.4x faster456 s$0.005391% lower29 of 307th
vue101 s1.2x faster108 s$0.002086% lower30 of 306th
Slower than GitHub-hosted (ubuntu-latest)
flask (1.7x slower)
Burst queue, p95
194 s, against 31 s for GitHub-hosted (ubuntu-latest)
Indexes and 95% intervals
Time index
0.828 (95% interval 0.816 to 0.859)
Cost index
0.121 (0.117 to 0.125) at 100,000 jobs a month

Compare with…

Head-to-head pages: speed, cost, failures and each workload