What a single thread CI runner benchmark can tell you
A single thread benchmark asks how quickly one execution thread completes a fixed CPU workload. It can help explain why a serial step behaves differently across runners, but it doesn't measure the total throughput of a machine. This suite uses CoreMark with a 2000-byte dataset and reports the median iterations per second across five CPU samples.
By TechCompare · Updated
Variation describes the accepted samples
The coefficient of variation is the population standard deviation divided by the sample mean, expressed as a percentage. The white line in each CPU bar shows the observed minimum and maximum. It isn't a confidence interval or a forecast of the next run. Five samples can expose variation in this test, but they don't capture every time of day, host allocation, or image update.
Pricing and CPU speed answer different questions
Dividing a published minute price by the billed vCPU count gives a normalized compute rate. Multiplying that count by the single thread score doesn't yield measured multicore performance. Likewise, dividing the score by the entire machine price isn't a cost per build. This snapshot has no complete application build timings or queue measurements, so it doesn't claim a best provider for every workflow.
Calculator
| RunnerRunner | CPUCPU scoreSingle thread | CPU valueCPU value | DiskDisk score | CacheCache score | InternetInternet score | Cost/vCPU/minCost/vCPU/minUSD | Max vCPUMax runner vCPU |
|---|---|---|---|---|---|---|---|
| Avrea Linux arm64 Apple M5 Max | 52,794 | 8.8M/USD | 1,239.3 | 220.8 | 18.8 | 0.006 | 16 |
| Avrea macOS arm64 Apple M5 Max | 52,014 | 5.2M/USD | 1,022 | 251.6 | 21.2 | 0.01 | 16 |
| Namespace macOS arm64 Apple M4 Pro | 46,338 | 3.1M/USD | 948.7 | 39.6 | 79 | 0.015 | 16 |
| Blacksmith Linux x64 AMD EPYC (model hidden) | 45,851 | 22.9M/USD | 1,331.6 | 154.4 | 741.9 | 0.002 | 32 |
| Avrea Linux x64 AMD EPYC 4585PX 16-Core | 43,680 | 21.8M/USD | 864.5 | 103.8 | 921.7 | 0.002 | 32 |
| BuildPulse Linux x64 AMD EPYC 9R45 | 43,146 | 21.6M/USD | 28.2 | 58 | 159.1 | 0.002 | 64 |
| Blacksmith macOS arm64 Apple M4 Pro | 41,001 | 3.1M/USD | 262.4 | 262.9 | 244.5 | 0.0133 | 12 |
| Blacksmith Windows x64 AMD EPYC 4565P 16-Core | 40,527 | 10.1M/USD | 708.9 | 24.8 | 731.2 | 0.004 | 32 |
| StarSling Linux x64 AMD EPYC (model hidden) | 38,218 | 19.1M/USD | 559.1 | 101 | 116.3 | 0.002 | 64 |
| Ubicloud Linux x64 AMD Ryzen 9 7950X3D 16-Core | 33,393 | 33.4M/USD | 243.7 | 48.5 | 1,104.1 | 0.001 | 30 |
| Namespace Linux x64 AMD EPYC (model hidden) | 33,130 | 22.1M/USD | 297.3 | 49.6 | 187.3 | 0.0015 | 64 |
| BuildPulse Linux arm64 AWS Graviton (gen undisclosed) | 33,116 | 26.5M/USD | 20.1 | 52.2 | 155.6 | 0.0013 | 64 |
| GitHub macOS arm64 Apple M2 Pro | 32,583 | 1.6M/USD | 656.7 | 145.8 | 273.4 | 0.0207 | 5 |
| GitHub Linux arm64 Microsoft Cobalt 100 | 31,687 | 12.7M/USD | 73.1 | 82.1 | 102.9 | 0.0025 | 64 |
| Avrea Windows x64 AMD EPYC 4585PX 16-Core | 31,647 | 7.9M/USD | 335.3 | 17.6 | 823 | 0.004 | 16 |
| GitHub Linux x64 AMD EPYC 9V74 80-Core | 31,133 | 10.4M/USD | 67 | 100.5 | 209.9 | 0.003 | 96 |
| Latchkey Linux x64 AMD EPYC 7R13 | 30,065 | 24.1M/USD | 28.3 | 168.2 | 214.4 | 0.0013 | 16 |
| Blacksmith Linux arm64 ARM64 (model undisclosed) | 27,191 | 21.8M/USD | 320.8 | 88.2 | 616.7 | 0.0013 | 32 |
| GitHub Linux x86 AMD EPYC 7763 64-Core | 25,491 | 8.5M/USD | 81.2 | 96.6 | 116.3 | 0.003 | 96 |
| Namespace Linux arm64 AmpereOne family (SKU undisclosed) | 23,534 | 15.7M/USD | 197.8 | 34.7 | 143.6 | 0.0015 | 32 |
| GitHub Windows arm64 Cobalt 100 | 22,553 | 4.5M/USD | 35 | 13.8 | 120.8 | 0.005 | 64 |
| Ubicloud Linux arm64 Ampere Altra Q80-30 | 21,630 | 34.6M/USD | 80.6 | 50.8 | 670.4 | 0.0006 | 30 |
| GitHub Windows x64 AMD EPYC 7763 64-Core | 18,327 | 3.7M/USD | 76.7 | 18.9 | 134.2 | 0.005 | 96 |
| RunJob Linux x64 AMD EPYC 7502 32-Core | 17,973 | 13.4M/USD | 492.9 | 53.5 | 382.6 | 0.0013 | 48 |
| GitHub Windows x86 AMD EPYC 7763 64-Core | 15,003 | 3M/USD | 68.6 | 17.5 | 262.4 | 0.005 | 96 |
| GitHub macOS x64 Intel Core i7-8700B | 8,375 | 540.4K/USD | 91.9 | 37.2 | 76.1 | 0.0155 | 12 |
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 toolMeasurement context
Linux and Windows require hard affinity to one logical CPU. macOS is deliberately unpinned, so its one thread may migrate. The compiler and optimization flags are also part of the measurement. All results appear together in the table, with compiler information and raw measurements in each row's details.
Verdict
Use the median together with the sample range, then validate any runner change against a complete workflow on your own repository. A microbenchmark is useful evidence, but it's only one part of that decision.
More runner benchmark scenarios
Frequently asked questions
Are these independent GitHub Actions runner benchmarks?
Does a CoreMark score predict my build time?
How are disk, cache, and internet scores calculated?
How is price per minute per vCPU calculated?
What does CPU value mean?
Why is an exact CPU model sometimes missing?
Are missing tests counted as zero?
Related tools
Data Transfer Calculator
Estimate transfer times for files over USB, WiFi, Ethernet, and more.
Use tool ➜Memory and Storage Throughput Visualizer
Visualize the massive speed difference between CPU cache, RAM, and storage.
Use tool ➜RAM Latency Calculator
Convert DDR3/DDR4/DDR5 timings (CL, tRCD, tRP, tRAS) into true latency in nanoseconds.
Use tool ➜