# Blacksmith 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 | | --- | --- | ---: | ---: | ---: | --- | ---: | | blacksmith-linux-x64 | x64 (64-bit) | 45851.10 | 42062.37–51322.25 | 7.64% | 0 / 0 | 5 | | blacksmith-windows-x64 | x64 (64-bit) | 40527.14 | 38737.10–41099.40 | 2.00% | 0 / 0 | 5 | | blacksmith-linux-arm64 | arm64 (64-bit) | 27190.58 | 27131.28–27200.20 | 0.09% | 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 | | --- | --- | ---: | ---: | ---: | --- | ---: | | blacksmith-macos-arm64 | arm64 (64-bit) | 41000.91 | 39652.66–42235.85 | 2.18% | 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 | | --- | --- | ---: | ---: | ---: | ---: | ---: | | blacksmith-linux-arm64 | Pinned | 1024 | 2187.76 | 860.01 | 18691.98 | 19742.48 | | blacksmith-linux-x64 | Pinned | 1024 | 13757.86 | 2098.75 | 83878.21 | 85084.85 | | blacksmith-macos-arm64 | Unpinned | 1024 | 2227.11 | 3392.40 | 7940.81 | 5180.91 | | blacksmith-windows-x64 | Pinned | 1024 | 7763.61 | 2271.03 | 32948.42 | 28487.21 | ## 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 | | --- | --- | ---: | --- | --- | ---: | --- | --- | ---: | --- | | blacksmith-linux-arm64 | Blacksmith cache | 512.0 | 3/3 | 5.41; 5.28–5.62 | 94.70 | 2.64% | 6.23; 6.05–7.77 | 82.13 | 11.51% | | blacksmith-linux-arm64 | GitHub Actions cache | 512.0 | 3/3 | 8.08; 7.91–8.58 | 63.36 | 3.49% | 14.76; 14.45–16.96 | 34.69 | 7.26% | | blacksmith-linux-x64 | Blacksmith cache | 512.0 | 3/3 | 2.77; 2.64–2.96 | 184.78 | 4.79% | 3.97; 2.74–5.59 | 129.07 | 28.46% | | blacksmith-linux-x64 | GitHub Actions cache | 512.0 | 3/3 | 6.03; 5.63–10.42 | 84.97 | 29.49% | 10.97; 8.59–11.07 | 46.65 | 11.25% | | blacksmith-macos-arm64 | Blacksmith cache | 512.0 | 3/3 | 1.85; 1.70–2.00 | 276.13 | 6.73% | 2.05; 1.95–2.14 | 249.73 | 3.76% | | blacksmith-macos-arm64 | GitHub Actions cache | 512.0 | 3/3 | 2.57; 2.49–9.23 | 198.98 | 66.28% | 4.44; 3.54–4.45 | 115.28 | 10.35% | | blacksmith-windows-x64 | Blacksmith cache | 512.0 | 3/3 | 89.45; 87.85–90.38 | 5.72 | 1.17% | 4.76; 4.71–4.87 | 107.53 | 1.46% | | blacksmith-windows-x64 | GitHub Actions cache | 512.0 | 3/3 | 91.44; 90.59–91.97 | 5.60 | 0.62% | 8.41; 8.29–10.09 | 60.89 | 9.18% | ## 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 | | --- | --- | --- | ---: | ---: | ---: | ---: | | blacksmith-linux-arm64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | blacksmith-linux-x64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | blacksmith-macos-arm64 | LibreSpeed (Sharktech, Amsterdam) | ok | 1024 | 273.73 | 221.42 | 305.67 | | blacksmith-windows-x64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | ## Optional stages and notices - **blacksmith-linux-arm64 / internet**: HTTPS download sample 1: HTTPS test failed: curl: (22) The requested URL returned error: 403 - **blacksmith-linux-arm64 / blacksmith / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-arm64 / blacksmith / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-arm64 / blacksmith / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-arm64 / github / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-arm64 / github / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-arm64 / github / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-x64 / internet**: HTTPS download sample 1: HTTPS test failed: curl: (22) The requested URL returned error: 403 - **blacksmith-linux-x64 / blacksmith / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-x64 / blacksmith / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-x64 / blacksmith / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-x64 / github / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-x64 / github / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-linux-x64 / github / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-macos-arm64 / blacksmith / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-macos-arm64 / blacksmith / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-macos-arm64 / blacksmith / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-macos-arm64 / github / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-macos-arm64 / github / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-macos-arm64 / github / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-windows-x64 / internet**: HTTPS download sample 1: HTTPS test failed: curl: (22) The requested URL returned error: 403 - **blacksmith-windows-x64 / blacksmith / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-windows-x64 / blacksmith / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-windows-x64 / blacksmith / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-windows-x64 / github / trial 1 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-windows-x64 / github / trial 2 / cleanup**: Blacksmith exact-key cleanup action did not succeed - **blacksmith-windows-x64 / github / trial 3 / cleanup**: Blacksmith exact-key cleanup action did not succeed ## Machine and build details | Runner | CPU model | OS image | Compiler | Flags | | --- | --- | --- | --- | --- | | blacksmith-linux-arm64 | aarch64 | 20260819_202427 | GNU 13.3.0 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | blacksmith-linux-x64 | AMD EPYC | 20260819_203438 | GNU 13.3.0 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | blacksmith-macos-arm64 | Apple M4 Pro (Virtual) | 133416 | AppleClang 21.0.0.21000101 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | blacksmith-windows-x64 | AMD EPYC 4565P 16-Core Processor | dev | MSVC 19.44.35228.0 | /DWIN32 /D_WINDOWS /O2 /Ob2 /DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 |