# GitHub Runner Benchmarks CoreMark, one execution thread, 2000-byte dataset. Higher iterations/s is better. Linux/Windows require hard affinity to one logical CPU. macOS is explicitly **unpinned**: its one thread may migrate between CPUs. These are runner + compiler measurements; VM host scheduling, other workloads, turbo, and image updates can affect them. ## Benchmark parameters Compare providers using the same parameter fingerprint. Runner selection and provider identity are excluded; measurement protocol is included. | Profile | Protocol | CPU/disk samples | CPU seconds | Disk MiB | Cache MiB | Internet | Transfer MiB | | --- | --- | ---: | ---: | ---: | ---: | --- | ---: | | `866df6f892c3` | 5 | 5 | 30 | 1024 | 512 | Enabled | 1024 | ## Pinned results | Runner | Binary | Median iterations/s | Min–max | Variation | CPU / group | Samples | | --- | --- | ---: | ---: | ---: | --- | ---: | | github-linux-arm64 | arm64 (64-bit) | 31686.95 | 31654.62–31717.74 | 0.07% | 0 / 0 | 5 | | github-linux-x64 | x64 (64-bit) | 31132.53 | 30749.79–31883.81 | 1.37% | 0 / 0 | 5 | | github-linux-x86 | x86 (32-bit) | 25490.79 | 25364.03–25572.96 | 0.27% | 0 / 0 | 5 | | github-windows-arm64 | arm64 (64-bit) | 22553.45 | 21716.51–22861.14 | 1.76% | 0 / 0 | 5 | | github-windows-x64 | x64 (64-bit) | 18327.15 | 17544.39–18422.69 | 1.78% | 0 / 0 | 5 | | github-windows-x86 | x86 (32-bit) | 15002.72 | 13976.76–15819.80 | 3.94% | 0 / 0 | 5 | Variation is the population coefficient of variation across accepted samples. ## Unpinned macOS results | Runner | Binary | Median iterations/s | Min–max | Variation | CPU / group | Samples | | --- | --- | ---: | ---: | ---: | --- | ---: | | github-macos-arm64 | arm64 (64-bit) | 32582.98 | 31232.81–33121.15 | 2.04% | Unpinned | 5 | | github-macos-x64 | x64 (64-bit) | 8375.48 | 6937.67–9781.03 | 11.57% | Unpinned | 5 | Variation is the population coefficient of variation across accepted samples. ## Disk I/O One worker, queue depth one, 1 MiB sequential I/O, 4 KiB random I/O. OS file-cache bypass is required; write timings include the final flush. Protocol 2 and later repeat each operation for at least 5 seconds against the same file; total transferred bytes can exceed the file size. Medians across samples. | Runner | Affinity | File MiB | Read MiB/s | Write MiB/s | Random read IOPS | Random write IOPS | | --- | --- | ---: | ---: | ---: | ---: | ---: | | github-linux-arm64 | Pinned | 1024 | 178.51 | 152.64 | 8370.68 | 8212.06 | | github-linux-x64 | Pinned | 1024 | 204.20 | 101.32 | 7443.51 | 8591.59 | | github-linux-x86 | Pinned | 1024 | 204.17 | 204.56 | 7291.11 | 9367.95 | | github-macos-arm64 | Unpinned | 1024 | 6620.09 | 4408.27 | 22525.91 | 18537.15 | | github-macos-x64 | Unpinned | 1024 | 1289.79 | 373.24 | 2963.80 | 3282.24 | | github-windows-arm64 | Pinned | 1024 | 207.75 | 139.20 | 6554.45 | 521.48 | | github-windows-x64 | Pinned | 1024 | 199.33 | 200.33 | 6339.66 | 8970.14 | | github-windows-x86 | Pinned | 1024 | 205.80 | 199.83 | 5631.17 | 6255.39 | ## Cache backends Protocol 2 and later measure three unique-key save/restore pairs per backend. Each trial restores in a separate runner job after the save job completes; reused save OS instances are rejected. Backend order reverses on trial two. Archive services use zstd `--single-thread`; attached-volume transfers use one thread without compression. Linux/Windows action processes inherit one-CPU affinity; macOS is unpinned. Identical random payload bytes across trials and backends on each runner; an empty local target before restore, exact cache hit, SHA-256 and backend routing checked. Each time includes the action and adjacent step transitions; MiB/s uses logical payload bytes, including compression/extraction for archive services. Profile `866df6f892c3` waits 120 seconds after the save job finishes, before allocating its first restore runner. All providers use this publication gap; it is excluded from transfer speeds. It gives cache publication time to settle but does not guarantee cache availability. Misses remain failures; there are no retries or payload fallbacks. ### archive-service | Runner | Cache backend | Payload MiB | Verified pairs | Save s (median; range) | Save MiB/s | Save variation | Restore s (median; range) | Restore MiB/s | Restore variation | | --- | --- | ---: | --- | --- | ---: | --- | --- | ---: | --- | | github-linux-arm64 | GitHub Actions cache | 512.0 | 3/3 | 4.37; 3.60–4.69 | 117.06 | 10.83% | 8.89; 8.41–9.27 | 57.57 | 3.95% | | github-linux-x64 | GitHub Actions cache | 512.0 | 3/3 | 3.33; 3.14–3.65 | 153.72 | 6.24% | 7.79; 5.84–16.39 | 65.73 | 45.82% | | github-linux-x86 | GitHub Actions cache | 512.0 | 3/3 | 4.38; 4.24–5.63 | 116.96 | 13.19% | 6.41; 6.38–7.72 | 79.86 | 9.13% | | github-macos-arm64 | GitHub Actions cache | 512.0 | 3/3 | 2.59; 2.54–3.18 | 198.00 | 10.50% | 4.76; 3.91–4.78 | 107.64 | 9.00% | | github-macos-x64 | GitHub Actions cache | 512.0 | 3/3 | 16.83; 16.68–24.20 | 30.42 | 18.24% | 11.28; 5.65–12.06 | 45.38 | 29.56% | | github-windows-arm64 | GitHub Actions cache | 512.0 | 3/3 | 73.95; 72.14–74.63 | 6.92 | 1.43% | 18.70; 17.52–20.63 | 27.38 | 6.77% | | github-windows-x64 | GitHub Actions cache | 512.0 | 3/3 | 91.05; 87.42–94.19 | 5.62 | 3.04% | 8.02; 6.82–9.70 | 63.84 | 14.46% | | github-windows-x86 | GitHub Actions cache | 512.0 | 3/3 | 91.81; 91.30–98.34 | 5.58 | 3.42% | 9.34; 7.84–10.21 | 54.80 | 10.70% | ## Internet One HTTP/1.1 stream at a time, three downloads and three uploads. Each sample transfers the configured payload through sequential requests of at most 32 MiB on one persistent connection. Mbps uses decimal megabits. Zero-byte HTTPS request time includes connection/TLS/DNS overhead and is not ICMP RTT. Compare only results using the same endpoint and payload size. Unavailable tests have no speed score. - **LibreSpeed (Sharktech, Amsterdam)**: https://amsspeed.sharktech.net/backend/ | Runner | Service | Status | Transfer MiB | Download Mbps | Upload Mbps | HTTPS request ms | | --- | --- | --- | ---: | ---: | ---: | ---: | | github-linux-arm64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | github-linux-x64 | LibreSpeed (Sharktech, Amsterdam) | ok | 1024 | 267.20 | 164.88 | 426.32 | | github-linux-x86 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | github-macos-arm64 | LibreSpeed (Sharktech, Amsterdam) | ok | 1024 | 290.94 | 256.87 | 292.75 | | github-macos-x64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | github-windows-arm64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | github-windows-x64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | github-windows-x86 | LibreSpeed (Sharktech, Amsterdam) | ok | 1024 | 341.35 | 201.65 | 295.41 | ## Optional stages and notices - **github-linux-arm64 / internet**: HTTPS download sample 3 exceeded 60s; curl reported 771751936 bytes; the test did not complete, so no speed score is reported - **github-linux-x86 / internet**: HTTPS upload sample 1 exceeded 60s; curl reported 872415232 bytes; the test did not complete, so no speed score is reported - **github-macos-x64 / internet**: HTTPS download sample 2 exceeded 60s; curl reported 570425344 bytes; the test did not complete, so no speed score is reported - **github-windows-arm64 / internet**: HTTPS upload sample 1 exceeded 60s; curl reported 905969664 bytes; the test did not complete, so no speed score is reported - **github-windows-x64 / internet**: HTTPS upload sample 1 exceeded 60s; curl reported 1006632960 bytes; the test did not complete, so no speed score is reported ## Machine and build details | Runner | CPU model | OS image | Compiler | Flags | | --- | --- | --- | --- | --- | | github-linux-arm64 | aarch64 | 20261004.142.1 | GNU 13.3.0 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | github-linux-x64 | AMD EPYC 9V74 80-Core Processor | 20261004.327.1 | GNU 13.3.0 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | github-linux-x86 | AMD EPYC 7763 64-Core Processor | 20261004.327.1 | GNU 13.3.0 | -m32 -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | github-macos-arm64 | Apple M2 Pro (Virtual) | 20260907.0337.1 | AppleClang 17.0.0.17000013 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | github-macos-x64 | Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz | 20260824.0482.1 | AppleClang 17.0.0.17000013 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | github-windows-arm64 | Cobalt 100 | 20261004.176.1 | MSVC 19.51.36260.0 | /DWIN32 /D_WINDOWS /O2 /Ob2 /DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | github-windows-x64 | AMD EPYC 7763 64-Core Processor | 20260925.250.1 | MSVC 19.51.36260.0 | /DWIN32 /D_WINDOWS /O2 /Ob2 /DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | github-windows-x86 | AMD EPYC 7763 64-Core Processor | 20260925.250.1 | MSVC 19.51.36260.0 | /DWIN32 /D_WINDOWS /O2 /Ob2 /DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 |