---
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.

### Do these results show faster pull request feedback?

They measure the timed build step for the listed cold, compile-heavy Linux x86_64 workloads. They do not include checkout, toolchain preparation, queue time, or every part of workflow completion. Use the recorded repetitions to understand these projects, then measure the time until your own required checks finish before projecting a feedback-time improvement.

[Measure and reduce complete GitHub Actions build times.](https://9apes.com/blog/reduce-github-actions-build-times/)

### Is this a ranking of every managed runner provider?

No. These measurements compare 9apes and GitHub-hosted runners at matched vCPU counts within each workload. The provider comparison pages discuss other services, but these results do not measure those services. The source workload, runner sizes, original workflow, and raw samples remain part of each result.

[Browse the provider comparison pages.](https://9apes.com/compare/)

## 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/)

[Evaluate runners for C++ and Bazel builds](https://9apes.com/blog/github-actions-runners-cpp-bazel-builds/)
