TechCompare LogoTechCompare

GitHub hosted runner benchmarks and private runner rates

GitHub has the broadest platform coverage in this snapshot. Linux and Windows each include x64, ARM64, and a 32-bit x86 binary, while macOS includes Intel and Apple Silicon. A 32-bit executable is a separate test configuration on x64 hardware. It isn't a special runner tier and it doesn't mean the host CPU is a 32-bit processor.

By TechCompare · Updated

Measured configurations
8
CPU execution threads
1
Five accepted samples per runner

Keep public and private allocations distinct

GitHub documents four vCPUs for public Linux and Windows standard runners, versus two for the private counterparts. The published benchmark summaries don't identify repository visibility or preserve VM allocation. Dividing a private rate by an assumed public CPU count would produce a misleading normalized price, so the tool uses the documented private billing size and labels the public size separately.

A larger runner isn't a faster single thread by definition

GitHub's larger runner families reach 96 vCPUs on x64 Linux and Windows and 64 on ARM. Intel macOS and ARM macOS have separate size limits. These figures describe offerings rather than results from the suite. Extra vCPUs can help parallel tasks, but these one-thread scores don't tell you how a larger shape scales or what processor it will receive.

Calculator

GitHub Actions runner CPU models, single thread CPU scores, disk, cache, and internet scores, and value per USD compute cost. Missing tests have no score.
RunnerCPUSingle threadCPU valueDiskCacheInternetCost/vCPU/minUSDMax vCPU
GitHub macOS arm64

Apple M2 Pro

32,583
1.6M/USD
656.7
145.8
273.4
0.02075
GitHub Linux arm64

Microsoft Cobalt 100

31,687
12.7M/USD
73.1
82.1
102.9
0.002564
GitHub Linux x64

AMD EPYC 9V74 80-Core

31,133
10.4M/USD
67
100.5
209.9
0.00396
GitHub Linux x86

AMD EPYC 7763 64-Core

25,491
8.5M/USD
81.2
96.6
116.3
0.00396
GitHub Windows arm64

Cobalt 100

22,553
4.5M/USD
35
13.8
120.8
0.00564
GitHub Windows x64

AMD EPYC 7763 64-Core

18,327
3.7M/USD
76.7
18.9
134.2
0.00596
GitHub Windows x86

AMD EPYC 7763 64-Core

15,003
3M/USD
68.6
17.5
262.4
0.00596
GitHub macOS x64

Intel Core i7-8700B

8,375
540.4K/USD
91.9
37.2
76.1
0.015512

Single thread CPU: CoreMark iterations/s. Disk and cache: composite MiB/s. Internet: composite Mbps. Value: score ÷ USD cost/vCPU/min. K means thousand, M means million. Higher is better. Cache uses each runner's best tested cache or artifact backend. Limits: maximum runner vCPU. Prices and value use USD. RunJob's EUR rate is converted at €1 = $1.1206 (ECB, 2026-10-09).

Open the full GitHub Actions runner benchmark tool

Measurement context

The reported x64 CPUs differ even when two jobs use the same label. The Linux x64 guest identifies EPYC 9V74, while Linux x86 and the Windows x64 guests identify EPYC 7763. ARM Linux is mapped to Cobalt 100 through GitHub's own documentation. The observed macOS CPU string is preserved even when it differs from the standard family description.

Verdict

GitHub pricing needs repository context. Eligible public standard jobs are free, while private standard jobs use an allowance and then a paid rate. The table shows the paid private rate explicitly and doesn't treat it as the bill for the measured run.

More runner benchmark scenarios

Frequently asked questions

Are these independent GitHub Actions runner benchmarks?
TechCompare publishes measurements from its own runner benchmark suite. The results come from the supplied published reports, while provider documentation supplies hardware mappings, prices, and available sizes. Scores from provider marketing pages aren't used as test results.
Does a CoreMark score predict my build time?
No. CoreMark is a CPU microbenchmark running one execution thread. A full build also depends on parallelism, memory, disk, dependencies, cache behavior, and queue time. This snapshot doesn't measure complete application builds or queue delays.
How are disk, cache, and internet scores calculated?
Each score is a geometric mean of that runner's own measurements. Disk combines sequential read/write MiB/s with random read/write IOPS converted to MiB/s using the 4 KiB operation size. Cache combines save and restore MiB/s from one backend. By default, each runner uses its highest verified score across tested cache and artifact backends. Hover or open details to see the backend, or select a specific backend type. Internet combines available download and upload Mbps, or uses the single recorded direction. Protocol 7 reports speeds from actual payload bytes and elapsed time, including transfers that reach the time limit. Older timeout records use recorded bytes divided by the nominal limit. These fixed formulas have no ranking reference or upper score limit, so adding a faster runner doesn't change existing scores. CPU keeps its measured CoreMark iterations per second.
How is price per minute per vCPU calculated?
A fixed runner's quoted minute rate is divided by its billed vCPU count. Prices are shown in USD and are list or overage rates before allowances and extras. RunJob publishes EUR consumed CPU rates, which are converted using the dated ECB reference rate shown on the page. Its original rate stays in the details, and memory charges are additional. GitHub uses private standard rates, and Namespace shows overage with prepaid equivalents.
What does CPU value mean?
CPU value is the measured single thread CoreMark score divided by the USD cost per vCPU per minute. More billed vCPUs don't multiply the measured score. EUR compute rates are converted before calculating value, so every provider is in one USD ranking. K means thousand and M means million. Optional disk, cache, and internet value columns use the same score divided by rate formula. These ratios don't measure full build performance or predict the final bill.
Why is an exact CPU model sometimes missing?
Some virtual machines expose only AMD EPYC or aarch64. The table uses a provider mapping where documentation identifies a family, labels that evidence, and leaves undisclosed model numbers unconfirmed. Similar benchmark scores aren't enough to identify a processor.
Are missing tests counted as zero?
No. Internet transfers with a nonzero recorded byte count can supply a speed even if they reach the time limit. A blocked request or a timeout with no recorded bytes stays unscored. Disk uses verified sample medians with all four throughput components. The updated BuildPulse ARM disk result is included using its three completed samples, with the original counts in the details. Cache requires all three verified save and restore pairs. The table shows a dash when no score is available. Hover or open the row details to inspect the measurements.