# Tenki 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 | | --- | --- | ---: | ---: | ---: | ---: | --- | ---: | | `e8902b667712` | 7 | 5 | 30 | 1024 | 512 | Enabled | 1024 | ## Pinned results | Runner | Binary | Median iterations/s | Min–max | Variation | CPU / group | Samples | | --- | --- | ---: | ---: | ---: | --- | ---: | | tenki-linux-x64 | x64 (64-bit) | 29355.68 | 29107.03–29450.13 | 0.42% | 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 | | --- | --- | ---: | ---: | ---: | --- | ---: | | tenki-macos-arm64 | arm64 (64-bit) | 44978.82 | 31081.60–45762.48 | 17.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 fully verified samples. Every requested sample is attempted, including after a 60-second sample timeout. Incomplete results remain visible and are excluded from complete-sample comparisons. | Runner | Affinity | File MiB | Completed / attempted / requested | Status | Read MiB/s | Write MiB/s | Random read IOPS | Random write IOPS | | --- | --- | ---: | --- | --- | ---: | ---: | ---: | ---: | | tenki-linux-x64 | Pinned | 1024 | 5 / 5 / 5 | ok | 2680.52 | 4902.75 | 23599.37 | 17390.59 | | tenki-macos-arm64 | Unpinned | 1024 | 5 / 5 / 5 | ok | 2557.53 | 3634.51 | 10067.95 | 6098.08 | ## 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 `e8902b667712` 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 | | --- | --- | ---: | --- | --- | ---: | --- | --- | ---: | --- | | tenki-linux-x64 | GitHub Actions cache | 512.0 | 3/3 | 4.20; 4.08–5.37 | 121.81 | 12.71% | 10.74; 10.65–11.68 | 47.67 | 4.24% | | tenki-linux-x64 | Tenki hosted Actions cache | 512.0 | 3/3 | 3.24; 3.05–3.89 | 157.81 | 10.66% | 3.11; 2.87–4.57 | 164.85 | 21.42% | | tenki-macos-arm64 | GitHub Actions cache | 512.0 | 3/3 | 13.61; 13.19–37.41 | 37.63 | 52.90% | 10.42; 10.37–10.92 | 49.14 | 2.36% | ## Internet One HTTP/1.1 stream at a time, three downloads and three uploads. Each sample transfers up to the configured payload through sequential requests of at most 32 MiB on one persistent connection, stopping after 60 seconds. Protocol 7 reports speed from actual payload bytes and elapsed time even at the time limit, including the final unfinished request. Upload bytes count bytes accepted by the client socket, with server acknowledgments retained in JSON. Partial results keep each available direction and latency. Mbps uses decimal megabits. Zero-byte HTTPS request time includes connection/TLS/DNS overhead and is not ICMP RTT. Sharktech errors trigger a separate Cloudflare attempt. Compare only results using the same endpoint, protocol and payload size. Sample counts include timed transfers. - **LibreSpeed (Sharktech, Amsterdam)**: https://amsspeed.sharktech.net/backend/ | Runner | Service | Status | Transfer limit MiB | Download Mbps | Upload Mbps | HTTPS request ms | Download samples | Upload samples | | --- | --- | --- | ---: | ---: | ---: | ---: | --- | --- | | tenki-linux-x64 | LibreSpeed (Sharktech, Amsterdam) | partial | 1024 | 147.26 | 138.70 | 586.41 | 3/3 | 3/3 | | tenki-macos-arm64 | LibreSpeed (Sharktech, Amsterdam) | partial | 1024 | 171.42 | 172.47 | 543.61 | 3/3 | 3/3 | ## Optional stages and notices - **tenki-linux-x64 / internet**: HTTPS download sample 1 reached the 60s limit. Speed uses 1040187392 measured payload bytes in 60.001s. HTTPS upload sample 1 reached the 60s limit. Speed uses 1040318464 measured payload bytes in 60.006s. HTTPS upload sample 2 reached the 60s limit. Speed uses 1038483456 measured payload bytes in 60.000s. HTTPS upload sample 3 reached the 60s limit. Speed uses 1042939904 measured payload bytes in 60.001s - **tenki-linux-x64 / tenki / trial 1 / cleanup**: The provider-managed cache entry is left to provider retention. Automatic native deletion requires a separately authenticated provider cleanup adapter; no deletion of unrelated entries was requested. - **tenki-linux-x64 / tenki / trial 2 / cleanup**: The provider-managed cache entry is left to provider retention. Automatic native deletion requires a separately authenticated provider cleanup adapter; no deletion of unrelated entries was requested. - **tenki-linux-x64 / tenki / trial 3 / cleanup**: The provider-managed cache entry is left to provider retention. Automatic native deletion requires a separately authenticated provider cleanup adapter; no deletion of unrelated entries was requested. - **tenki-macos-arm64 / internet**: HTTPS download sample 3 reached the 60s limit. Speed uses 973151800 measured payload bytes in 60.000s ## Machine and build details | Runner | CPU model | OS image | Compiler | Flags | | --- | --- | --- | --- | --- | | tenki-linux-x64 | AMD EPYC 7B13 64-Core Processor | 20260111.1.75 | GNU 13.3.0 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 | | tenki-macos-arm64 | Apple M4 Pro (Virtual) | 20260824.0517 | AppleClang 21.0.0.21000101 | -O2 -DNDEBUG; C99; MULTITHREAD=1; TOTAL_DATA_SIZE=2000; ITERATIONS=0 |