# Namespace 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 | | --- | --- | ---: | ---: | ---: | --- | ---: | | namespace-linux-x64 | x64 (64-bit) | 33129.98 | 32077.30–35976.08 | 4.66% | 0 / 0 | 5 | | namespace-linux-arm64 | arm64 (64-bit) | 23533.74 | 23303.83–23635.50 | 0.49% | 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 | | --- | --- | ---: | ---: | ---: | --- | ---: | | namespace-macos-arm64 | arm64 (64-bit) | 46338.29 | 44915.23–46396.17 | 1.28% | 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 | | --- | --- | ---: | ---: | ---: | ---: | ---: | | namespace-linux-arm64 | Pinned | 1024 | 780.69 | 667.06 | 13903.04 | 13849.16 | | namespace-linux-x64 | Pinned | 1024 | 1205.04 | 784.53 | 24466.84 | 22132.35 | | namespace-macos-arm64 | Unpinned | 1024 | 10263.14 | 7165.92 | 29327.64 | 24610.44 | ## 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. Namespace Artifacts uses its pinned native upload/download actions with explicit finalization and exact artifact-ID verification in fresh jobs. Serial zstd compression matches the archive-cache workload; the artifact action adds a stored ZIP envelope without further compression. This is an **artifact-service**, not a volume cache hit, and is reported separately. Its transfers may benefit from provider object-storage caching. 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 | | --- | --- | ---: | --- | --- | ---: | --- | --- | ---: | --- | | namespace-linux-arm64 | GitHub Actions cache | 512.0 | 3/3 | 9.09; 8.31–9.35 | 56.35 | 4.97% | 23.94; 23.54–30.48 | 21.38 | 12.23% | | namespace-linux-x64 | GitHub Actions cache | 512.0 | 3/3 | 5.23; 4.62–6.98 | 97.82 | 17.84% | 23.18; 18.75–24.12 | 22.08 | 10.63% | | namespace-macos-arm64 | GitHub Actions cache | 512.0 | 3/3 | 7.09; 6.75–17.95 | 72.17 | 49.08% | 23.61; 10.64–26.61 | 21.68 | 34.17% | ### artifact-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 | | --- | --- | ---: | --- | --- | ---: | --- | --- | ---: | --- | | namespace-linux-arm64 | Namespace Artifacts | 512.0 | 3/3 | 14.33; 13.28–15.30 | 35.73 | 5.76% | 16.91; 16.21–18.97 | 30.28 | 6.75% | | namespace-linux-x64 | Namespace Artifacts | 512.0 | 3/3 | 9.04; 8.81–9.31 | 56.67 | 2.28% | 11.80; 11.64–21.45 | 43.38 | 30.67% | | namespace-macos-arm64 | Namespace Artifacts | 512.0 | 3/3 | 5.15; 4.64–5.34 | 99.43 | 5.92% | 45.62; 37.79–230.00 | 11.22 | 85.02% | ## 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 | | --- | --- | --- | ---: | ---: | ---: | ---: | | namespace-linux-arm64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | namespace-linux-x64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | | namespace-macos-arm64 | LibreSpeed (Sharktech, Amsterdam) | unavailable | 1024 | — | — | — | ## Optional stages and notices - **namespace-linux-arm64 / internet**: HTTPS download sample 1 exceeded 60s; curl reported 167772160 bytes; the test did not complete, so no speed score is reported - **namespace-linux-arm64 / namespace-artifacts / trial 1 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-linux-arm64 / namespace-artifacts / trial 2 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-linux-arm64 / namespace-artifacts / trial 3 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-linux-x64 / internet**: HTTPS download sample 1 exceeded 60s; curl reported 234881024 bytes; the test did not complete, so no speed score is reported - **namespace-linux-x64 / namespace-artifacts / trial 1 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-linux-x64 / namespace-artifacts / trial 2 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-linux-x64 / namespace-artifacts / trial 3 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-macos-arm64 / internet**: HTTPS download sample 1 exceeded 60s; curl reported 33554432 bytes; the test did not complete, so no speed score is reported - **namespace-macos-arm64 / namespace-artifacts / trial 1 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-macos-arm64 / namespace-artifacts / trial 2 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. - **namespace-macos-arm64 / namespace-artifacts / trial 3 / cleanup**: This invocation's native artifact expires after one day; no unrelated artifacts are deleted. ## Machine and build details | Runner | CPU model | OS image | Compiler | Flags | | --- | --- | --- | --- | --- | | namespace-linux-arm64 | aarch64 | Linux-7.1.4-aarch64-with-glibc2.39 | GNU 13.3.0 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | namespace-linux-x64 | AMD EPYC | Linux-7.1.4-x86_64-with-glibc2.39 | GNU 13.3.0 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | namespace-macos-arm64 | Apple M4 Pro (Virtual) | macOS-26.6.2-arm64-arm-64bit-Mach-O | AppleClang 21.0.0.21000099 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 |