---
title: "9apes Benchmarks - Reproducible GitHub Actions Runner Timings"
description: "Published build-step timings and estimated costs for open-source workloads on matched GitHub-hosted and 9apes runners, with original workflows and raw samples."
url: https://9apes.com/benchmarks/
---

# 9apes Benchmarks - Reproducible GitHub Actions Runner Timings

Build times and estimated costs for open-source workloads on GitHub-hosted and 9apes runners.

[View benchmark source](https://github.com/9apes/benchmarks)

## Measured build times

Median duration of the timed build step. Lower is better.

### google/xls

C++ · Bazel build

- **GitHub Actions · 8 vCPU:** 1h 22m 25s; estimated build cost: $1.83.

- **9apes · 8 vCPU:** 24m 46s; estimated build cost: $0.18.

3.3× faster.

Measured: 2026-08-27. Runs per runner: 3.

[Original workflow](https://github.com/9apes/benchmarks/blob/aedea273b54d5b3d51836b4d6c06a8be69a1c052/.github/workflows/bench-oss.yml)

[Source commit: 62f2007c932d4754cafdd4f95fad844b501fdfc8](https://github.com/google/xls/commit/62f2007c932d4754cafdd4f95fad844b501fdfc8)

Raw build-step samples. Seconds, sorted within each provider. Rows are not paired runs.

| Sample | GitHub-hosted | 9apes |
| --- | --- | --- |
| 1 | 4925.293 | 1480.534 |
| 2 | 4944.927 | 1486.253 |
| 3 | 4982.438 | 1537.843 |

### facebook/folly

C++ · getdeps build

- **GitHub Actions · 2 vCPU:** 21m 04s; estimated build cost: $0.13.

- **9apes · 2 vCPU:** 7m 51s; estimated build cost: $0.01.

2.7× faster.

Measured: 2026-08-27. Runs per runner: 3.

[Original workflow](https://github.com/9apes/benchmarks/blob/aedea273b54d5b3d51836b4d6c06a8be69a1c052/.github/workflows/bench-oss.yml)

[Source commit: 23b22c1a31f0d0777a2933aad093508dd42be8f9](https://github.com/facebook/folly/commit/23b22c1a31f0d0777a2933aad093508dd42be8f9)

Raw build-step samples. Seconds, sorted within each provider. Rows are not paired runs.

| Sample | GitHub-hosted | 9apes |
| --- | --- | --- |
| 1 | 996.429 | 450.854 |
| 2 | 1263.680 | 471.118 |
| 3 | 1286.875 | 484.664 |

### PeerDB-io/peerdb

Rust + Go · cargo + go build

- **GitHub Actions · 2 vCPU:** 21m 23s; estimated build cost: $0.13.

- **9apes · 2 vCPU:** 8m 12s; estimated build cost: $0.02.

2.6× faster.

Measured: 2026-08-27. Runs per runner: 3.

[Original workflow](https://github.com/9apes/benchmarks/blob/aedea273b54d5b3d51836b4d6c06a8be69a1c052/.github/workflows/bench-oss.yml)

[Source commit: 76442499812d43646cbb8c3c3f78bfe5260a13ff](https://github.com/PeerDB-io/peerdb/commit/76442499812d43646cbb8c3c3f78bfe5260a13ff)

Raw build-step samples. Seconds, sorted within each provider. Rows are not paired runs.

| Sample | GitHub-hosted | 9apes |
| --- | --- | --- |
| 1 | 1247.260 | 490.801 |
| 2 | 1283.481 | 491.557 |
| 3 | 1295.983 | 494.869 |

### duckdb/duckdb

C++ · CMake + Ninja release build

- **GitHub Actions · 2 vCPU:** 25m 54s; estimated build cost: $0.16.

- **9apes · 2 vCPU:** 12m 19s; estimated build cost: $0.02.

2.1× faster.

Measured: 2026-08-27. Runs per runner: 3.

[Original workflow](https://github.com/9apes/benchmarks/blob/aedea273b54d5b3d51836b4d6c06a8be69a1c052/.github/workflows/bench-oss.yml)

[Source commit: d8cdaa33fda8df955cc76ef58a280f68f4cd43fa](https://github.com/duckdb/duckdb/commit/d8cdaa33fda8df955cc76ef58a280f68f4cd43fa)

Raw build-step samples. Seconds, sorted within each provider. Rows are not paired runs.

| Sample | GitHub-hosted | 9apes |
| --- | --- | --- |
| 1 | 1533.179 | 700.574 |
| 2 | 1553.557 | 738.924 |
| 3 | 1832.295 | 788.431 |

Bar lengths are relative within each project. Cost estimates cover the timed build step only, before free allowances or discounts.

## How we measured

**The timer**

Times cover the build step. Checkout, toolchain preparation, system-package setup and code generation are outside the timer. Build commands can still download dependencies.

**Matched sizes**

Both providers use the same vCPU count within each project. Sizes differ between projects; each comparison shows its runner size.

**Caching and repeats**

Dependency caching is disabled in the workflow. Reported durations are medians of the recorded repetitions, with the raw samples available above.

**Estimated cost**

The collection script rounds build duration up to whole minutes, applies the published per-minute rate, then rounds USD to cents. Setup, storage, plan fees, free allowances and discounts are outside these estimates.

### What to keep in mind

- These are compile-heavy Linux x86_64 workloads. Jobs limited by network calls or external services can behave differently.

- These estimates are not invoices. Account allowances, repository visibility and other charges can change your bill; standard GitHub-hosted runners for public repositories can be free.

- Measure a representative job from your own workflow before projecting a speedup or saving.

## Run your own comparison

The historical 2 vCPU rows came from a private benchmark setup. The current public workflow uses 4 vCPU for those projects, so it produces a different comparison.

1. **Check the configuration:** Review the original workflow and source commit linked with each result. Check the current workflow before using a public fork.

2. **Prepare matched runners:** Configure the required 9apes runner labels and match the GitHub runner size. Reproducing the historical 2 vCPU configuration requires a private benchmark repository.

3. **Repeat and compare:** Dispatch separate repetitions and compare their median build-step times. The repeat input labels a repetition; it does not run multiple trials for you.

[Open current workflow](https://github.com/9apes/benchmarks/blob/main/.github/workflows/bench-oss.yml)

[See runner pricing](https://9apes.com/pricing/)
