quickstart →

Fastest GitHub Actions cache.

A 4 GB file saved with actions/cache and restored right away on 9 providers, 2 to 12 vCPU, x64 and arm64. The runner is half of it: where actions/cache goes is the other half.

Fastest restore, x64 at 4 vCPU 7s RunsOn r8a.xlarge · tmpfs
Fastest restore, arm64 at 4 vCPU 8s RunsOn m9g.xlarge · tmpfs
GitHub's own service 34s x64 restore on GitHub 4-core, the baseline · 27s on its 8 vCPU runner
Reroute actions/cache 4 of 9 providers; 3 with no workflow change, RunsOn with a label and the runs-on/action step

4 GB restore per provider

Each provider's fastest ranked result (3+ runs) at any sizeEach provider's fastest ranked 2 vCPU resultEach provider's fastest ranked 4 vCPU resultEach provider's fastest ranked 8 vCPU result, any action; RunsOn once per storage (EBS, local NVMe, tmpfs: the Storage pill); faded rows are provisional. Right: how long the save step took.

x649 providers · restore, lower is better
  1. RunsOn + Magic Cache4 vCPU · 32 GBtmpfsr8a.xlarge7s, 7s to save, ×1.00
  2. RunsOn + Magic Cache8 vCPU · 32 GBtuned gp3m8a.2xlarge8s, 7s to save, ×1.14
  3. RunsOn + Magic Cache8 vCPU · 64 GBlocal NVMei7i.2xlarge12s, 8s to save, ×1.71
  4. Avrea8 vCPU · 32 GB13s, 19s to save, ×1.86
  5. Blacksmith4 vCPU · 16 GB15s, 7s to save, ×2.14
  6. Namespace8 vCPU · 16 GB8x1619s, 13s to save, ×2.71
  7. StarSling8 vCPU · 32 GB26s, 13s to save, ×3.71
  8. Warpbuild2 vCPU · 8 GB27s, 16s to save, ×3.86
  9. GitHub8 vCPU · 32 GB27s, 16s to save, ×3.86
  10. AWS CodeBuild8 vCPU · 16 GBlarge34s, 2m 04s to save, ×4.86
  11. Ubicloud8 vCPU · 32 GBpremium1m 02s, 47s to save, ×8.79

Fastest x64 restore: RunsOn r8a.xlarge · tmpfs (7s), ahead of RunsOn m8a.2xlarge · EBS (8s).

arm647 providers · restore, lower is better
  1. RunsOn + Magic Cache4 vCPU · 16 GBtmpfsm9g.xlarge8s, 7s to save, ×1.00
  2. RunsOn + Magic Cache8 vCPU · 32 GBlocal NVMem9gd.2xlarge11s, 9s to save, ×1.38
  3. Avrea8 vCPU · 32 GB11s, 15s to save, ×1.38
  4. RunsOn + Magic Cache8 vCPU · 32 GBEBS gp3m9g.2xlarge · EBS gp313s, 12s to save, ×1.63
  5. Namespace2 vCPU · 8 GBApple silicon 2x818s, 16s to save, ×2.25
  6. Warpbuild8 vCPU · 32 GB19s, 15s to save, ×2.38
  7. GitHub4 vCPU · 16 GB29s, 25s to save, ×3.63
  8. Blacksmith4 vCPU · 16 GB32s, 20s to save, ×4.00
  9. Ubicloud4 vCPU · 16 GBstandard58s, 49s to save, ×7.25

Fastest arm64 restore: RunsOn m9g.xlarge · tmpfs (8s), ahead of RunsOn m9gd.2xlarge · NVMe (11s).

x648 providers · restore, lower is better
  1. RunsOn + Magic Cache2 vCPU · 16 GBtmpfsr8a.large10s, 7s to save, ×1.00
  2. Avrea2 vCPU · 8 GB15s, 19s to save, ×1.50
  3. Blacksmith2 vCPU · 8 GB17s, 8s to save, ×1.70
  4. RunsOn + Magic Cache2 vCPU · 16 GBEBS gp3r8a.large · EBS gp319s, 16s to save, ×1.90
  5. Namespace2 vCPU · 8 GB2x821s, 15s to save, ×2.10
  6. RunsOn + Magic Cache2 vCPU · 16 GBlocal NVMei7i.large21s, 14s to save, ×2.10
  7. Warpbuild2 vCPU · 8 GB27s, 16s to save, ×2.70
  8. GitHub2 vCPU · 8 GB46s, 34s to save, ×4.60
  9. AWS CodeBuild2 vCPU · 3 GBsmall51s, 2m 15s to save, ×5.10
  10. Ubicloud2 vCPU · 8 GBstandard1m 08s, 58s to save, ×6.80

Fastest x64 2 vCPU restore: RunsOn r8a.large · tmpfs (10s), ahead of Avrea (15s).

arm647 providers · restore, lower is better
  1. RunsOn + Magic Cache2 vCPU · 16 GBtmpfsr9g.large11s, 9s to save, ×1.00
  2. Avrea2 vCPU · 8 GB12s, 15s to save, ×1.09
  3. Namespace2 vCPU · 8 GBApple silicon 2x818s, 16s to save, ×1.64
  4. Warpbuild2 vCPU · 8 GB28s, 25s to save, ×2.55
  5. RunsOn + Magic Cache2 vCPU · 8 GBEBS gp3m9g.large · EBS gp329s, 16s to save, ×2.64
  6. Blacksmith2 vCPU · 6 GB35s, 25s to save, ×3.18
  7. GitHub2 vCPU · 8 GB52s, 42s to save, ×4.73
  8. RunsOn + Magic Cache2 vCPU · 8 GBlocal NVMem9gd.large53s, 35s to save, ×4.82
  9. Ubicloud2 vCPU · 8 GBstandard1m 11s, 53s to save, ×6.41

Fastest arm64 2 vCPU restore: RunsOn r9g.large · tmpfs (11s), ahead of Avrea (12s).

x649 providers · restore, lower is better
  1. RunsOn + Magic Cache4 vCPU · 32 GBtmpfsr8a.xlarge7s, 7s to save, ×1.00
  2. RunsOn + Magic Cache4 vCPU · 16 GBtuned gp3m8azn.xlarge9s, 9s to save, ×1.29
  3. RunsOn + Magic Cache4 vCPU · 32 GBlocal NVMei7i.xlarge13s, 9s to save, ×1.86
  4. Avrea4 vCPU · 16 GB14s, 20s to save, ×2.00
  5. Blacksmith4 vCPU · 16 GB15s, 7s to save, ×2.14
  6. Namespace4 vCPU · 8 GB4x820s, 12s to save, ×2.86
  7. Warpbuild4 vCPU · 16 GB28s, 16s to save, ×4.00
  8. StarSling4 vCPU · 16 GB32s, 12s to save, ×4.57
  9. GitHub4 vCPU · 16 GB34s, 20s to save, ×4.86
  10. AWS CodeBuild4 vCPU · 8 GBmedium35s, 1m 56s to save, ×5.00
  11. Ubicloud4 vCPU · 16 GBstandard1m 06s, 52s to save, ×9.43

Fastest x64 4 vCPU restore: RunsOn r8a.xlarge · tmpfs (7s), ahead of RunsOn m8azn.xlarge · EBS (9s).

arm647 providers · restore, lower is better
  1. RunsOn + Magic Cache4 vCPU · 16 GBtmpfsm9g.xlarge8s, 7s to save, ×1.00
  2. Avrea4 vCPU · 16 GB12s, 15s to save, ×1.50
  3. RunsOn + Magic Cache4 vCPU · 16 GBEBS gp3m9g.xlarge · EBS gp318s, 15s to save, ×2.25
  4. Namespace4 vCPU · 16 GBApple silicon 4x1619s, 15s to save, ×2.38
  5. RunsOn + Magic Cache4 vCPU · 16 GBlocal NVMem9gd.xlarge24s, 20s to save, ×3.00
  6. Warpbuild4 vCPU · 16 GB26s, 21s to save, ×3.25
  7. GitHub4 vCPU · 16 GB29s, 25s to save, ×3.63
  8. Blacksmith4 vCPU · 16 GB32s, 20s to save, ×4.00
  9. Ubicloud4 vCPU · 16 GBstandard58s, 49s to save, ×7.25

Fastest arm64 4 vCPU restore: RunsOn m9g.xlarge · tmpfs (8s), ahead of Avrea (12s).

x649 providers · restore, lower is better
  1. RunsOn + Magic Cache8 vCPU · 32 GBtmpfsm8a.2xlarge7s, 7s to save, ×1.00
  2. RunsOn + Magic Cache8 vCPU · 32 GBtuned gp3m8a.2xlarge8s, 7s to save, ×1.14
  3. RunsOn + Magic Cache8 vCPU · 64 GBlocal NVMei7i.2xlarge12s, 8s to save, ×1.71
  4. Avrea8 vCPU · 32 GB13s, 19s to save, ×1.86
  5. Blacksmith8 vCPU · 32 GB15s, 7s to save, ×2.14
  6. Namespace8 vCPU · 16 GB8x1619s, 13s to save, ×2.71
  7. StarSling8 vCPU · 32 GB26s, 13s to save, ×3.71
  8. GitHub8 vCPU · 32 GB27s, 16s to save, ×3.86
  9. Warpbuild8 vCPU · 32 GB30s, 12s to save, ×4.29
  10. AWS CodeBuild8 vCPU · 16 GBlarge34s, 2m 04s to save, ×4.86
  11. Ubicloud8 vCPU · 32 GBpremium1m 02s, 47s to save, ×8.79

Fastest x64 8 vCPU restore: RunsOn m8a.2xlarge · tmpfs (7s), ahead of RunsOn m8a.2xlarge · EBS (8s).

arm646 providers · restore, lower is better
  1. RunsOn + Magic Cache8 vCPU · 32 GBtmpfsm9g.2xlarge8s, 7s to save, ×1.00
  2. RunsOn + Magic Cache8 vCPU · 32 GBlocal NVMem9gd.2xlarge11s, 9s to save, ×1.38
  3. Avrea8 vCPU · 32 GB11s, 15s to save, ×1.38
  4. RunsOn + Magic Cache8 vCPU · 32 GBEBS gp3m9g.2xlarge · EBS gp313s, 12s to save, ×1.63
  5. Warpbuild8 vCPU · 32 GB19s, 15s to save, ×2.38
  6. Namespace8 vCPU · 32 GB8x3232s, 18s to save, ×4.00
  7. Blacksmith8 vCPU · 32 GB35s, 17s to save, ×4.38
  8. Ubicloud8 vCPU · 32 GBstandard1m 02s, 48s to save, ×7.75

Fastest arm64 8 vCPU restore: RunsOn m9g.2xlarge · tmpfs (8s), ahead of RunsOn m9gd.2xlarge · NVMe (11s).

Restore, job to job

Each provider's fastest machineEach provider's fastest 2 vCPU machineEach provider's fastest 4 vCPU machineEach provider's fastest 8 vCPU machine with two or more jobs (it may differ from the machine on the chart above). Every dot is one job.

x64% off each row's own p50
  1. AWS CodeBuild 8 vCPU · 16 GB large spread 7.1% (p10–p90) around a p50 of 34s, min 33s, max 37s, 5 samples
  2. Ubicloud 8 vCPU · 32 GB premium p50 1m 02s, min 54s, max 1m 06s, 4 samples, not ranked
  3. Avrea 8 vCPU · 32 GB spread 21.5% (p10–p90) around a p50 of 13s, min 13s, max 17s, 5 samples
  4. Warpbuild 2 vCPU · 8 GB spread 24.4% (p10–p90) around a p50 of 27s, min 23s, max 32s, 5 samples
  5. Namespace 8 vCPU · 16 GB 8x16 spread 26.3% (p10–p90) around a p50 of 19s, min 19s, max 26s, 5 samples
  6. RunsOn 12 vCPU · 48 GB m8azn.3xlarge · EBS gp3 spread 35.6% (p10–p90) around a p50 of 9s, min 9s, max 13s, 5 samples
  7. Blacksmith 8 vCPU · 32 GB spread 36% (p10–p90) around a p50 of 15s, min 12s, max 19s, 5 samples
  8. GitHub 8 vCPU · 32 GB spread 45.9% (p10–p90) around a p50 of 27s, min 20s, max 38s, 5 samples
  9. StarSling 8 vCPU · 32 GB spread 186.2% (p10–p90) around a p50 of 26s, min 19s, max 1m 17s, 5 samples
one job p50 p10–p90 min–max
arm64% off each row's own p50
  1. RunsOn 8 vCPU · 32 GB m9g.2xlarge · EBS gp3 spread 7.7% (p10–p90) around a p50 of 13s, min 13s, max 14s, 5 samples
  2. Avrea 8 vCPU · 32 GB spread 10.9% (p10–p90) around a p50 of 11s, min 11s, max 13s, 5 samples
  3. Warpbuild 8 vCPU · 32 GB spread 11.6% (p10–p90) around a p50 of 19s, min 18s, max 21s, 5 samples
  4. GitHub 4 vCPU · 16 GB spread 15.2% (p10–p90) around a p50 of 29s, min 26s, max 32s, 5 samples
  5. Ubicloud 4 vCPU · 16 GB standard p50 58s, min 57s, max 1m 09s, 3 samples, not ranked
  6. Blacksmith 4 vCPU · 16 GB spread 28.1% (p10–p90) around a p50 of 32s, min 31s, max 44s, 5 samples
  7. Namespace 2 vCPU · 8 GB Apple silicon 2x8 p50 18s, min 18s, max 27s, 3 samples, not ranked
one job p50 p10–p90 min–max
x64% off each row's own p50
  1. RunsOn 2 vCPU · 16 GB r8a.large · EBS gp3 spread 8.4% (p10–p90) around a p50 of 19s, min 18s, max 20s, 5 samples
  2. Ubicloud 2 vCPU · 8 GB standard spread 18.8% (p10–p90) around a p50 of 1m 08s, min 1m 05s, max 1m 23s, 5 samples
  3. Avrea 2 vCPU · 8 GB spread 21.3% (p10–p90) around a p50 of 15s, min 12s, max 16s, 5 samples
  4. Warpbuild 2 vCPU · 8 GB spread 24.4% (p10–p90) around a p50 of 27s, min 23s, max 32s, 5 samples
  5. AWS CodeBuild 2 vCPU · 3 GB small spread 30.6% (p10–p90) around a p50 of 51s, min 50s, max 1m 14s, 5 samples
  6. Blacksmith 2 vCPU · 8 GB spread 31.8% (p10–p90) around a p50 of 17s, min 12s, max 19s, 5 samples
  7. Namespace 2 vCPU · 8 GB 2x8 spread 41.9% (p10–p90) around a p50 of 21s, min 18s, max 32s, 5 samples
  8. GitHub 2 vCPU · 8 GB spread 70.4% (p10–p90) around a p50 of 46s, min 40s, max 1m 18s, 5 samples
one job p50 p10–p90 min–max
arm64% off each row's own p50
  1. Avrea 2 vCPU · 8 GB spread 13.3% (p10–p90) around a p50 of 12s, min 11s, max 13s, 5 samples
  2. Warpbuild 2 vCPU · 8 GB spread 13.6% (p10–p90) around a p50 of 28s, min 26s, max 31s, 5 samples
  3. GitHub 2 vCPU · 8 GB spread 15.4% (p10–p90) around a p50 of 52s, min 48s, max 1m 00s, 5 samples
  4. RunsOn 2 vCPU · 8 GB m9g.large · EBS gp3 spread 17.9% (p10–p90) around a p50 of 29s, min 28s, max 36s, 5 samples
  5. Ubicloud 2 vCPU · 8 GB standard p50 1m 11s, min 59s, max 1m 22s, 4 samples, not ranked
  6. Blacksmith 2 vCPU · 6 GB spread 25.1% (p10–p90) around a p50 of 35s, min 33s, max 45s, 5 samples
  7. Namespace 2 vCPU · 8 GB Apple silicon 2x8 p50 18s, min 18s, max 27s, 3 samples, not ranked
one job p50 p10–p90 min–max
x64% off each row's own p50
  1. RunsOn 4 vCPU · 16 GB m8azn.xlarge · EBS gp3 spread 8.9% (p10–p90) around a p50 of 18s, min 17s, max 19s, 5 samples
  2. Ubicloud 4 vCPU · 16 GB standard spread 11.8% (p10–p90) around a p50 of 1m 06s, min 1m 01s, max 1m 12s, 5 samples
  3. AWS CodeBuild 4 vCPU · 8 GB medium spread 13.1% (p10–p90) around a p50 of 35s, min 33s, max 40s, 5 samples
  4. Avrea 4 vCPU · 16 GB spread 15.7% (p10–p90) around a p50 of 14s, min 13s, max 16s, 5 samples
  5. Namespace 4 vCPU · 8 GB 4x8 spread 31% (p10–p90) around a p50 of 20s, min 17s, max 26s, 5 samples
  6. GitHub 4 vCPU · 16 GB spread 39.4% (p10–p90) around a p50 of 34s, min 25s, max 46s, 5 samples
  7. Warpbuild 4 vCPU · 16 GB spread 44.3% (p10–p90) around a p50 of 28s, min 26s, max 42s, 5 samples
  8. Blacksmith 4 vCPU · 16 GB spread 46.7% (p10–p90) around a p50 of 15s, min 13s, max 22s, 5 samples
  9. StarSling 4 vCPU · 16 GB spread 63.1% (p10–p90) around a p50 of 32s, min 19s, max 44s, 5 samples
one job p50 p10–p90 min–max
arm64% off each row's own p50
  1. RunsOn 4 vCPU · 16 GB m9g.xlarge · EBS gp3 spread 0% (p10–p90) around a p50 of 18s, min 18s, max 18s, 5 samples
  2. Warpbuild 4 vCPU · 16 GB spread 7.7% (p10–p90) around a p50 of 26s, min 24s, max 26s, 5 samples
  3. GitHub 4 vCPU · 16 GB spread 15.2% (p10–p90) around a p50 of 29s, min 26s, max 32s, 5 samples
  4. Ubicloud 4 vCPU · 16 GB standard p50 58s, min 57s, max 1m 09s, 3 samples, not ranked
  5. Avrea 4 vCPU · 16 GB spread 16.7% (p10–p90) around a p50 of 12s, min 10s, max 12s, 5 samples
  6. Blacksmith 4 vCPU · 16 GB spread 28.1% (p10–p90) around a p50 of 32s, min 31s, max 44s, 5 samples
  7. Namespace 4 vCPU · 16 GB Apple silicon 4x16 spread 30.5% (p10–p90) around a p50 of 19s, min 17s, max 26s, 5 samples
one job p50 p10–p90 min–max
x64% off each row's own p50
  1. AWS CodeBuild 8 vCPU · 16 GB large spread 7.1% (p10–p90) around a p50 of 34s, min 33s, max 37s, 5 samples
  2. Ubicloud 8 vCPU · 32 GB premium p50 1m 02s, min 54s, max 1m 06s, 4 samples, not ranked
  3. Avrea 8 vCPU · 32 GB spread 21.5% (p10–p90) around a p50 of 13s, min 13s, max 17s, 5 samples
  4. RunsOn 8 vCPU · 32 GB m8a.2xlarge · EBS gp3 spread 24.6% (p10–p90) around a p50 of 13s, min 12s, max 16s, 5 samples
  5. Namespace 8 vCPU · 16 GB 8x16 spread 26.3% (p10–p90) around a p50 of 19s, min 19s, max 26s, 5 samples
  6. Blacksmith 8 vCPU · 32 GB spread 36% (p10–p90) around a p50 of 15s, min 12s, max 19s, 5 samples
  7. Warpbuild 8 vCPU · 32 GB spread 37.3% (p10–p90) around a p50 of 30s, min 22s, max 36s, 5 samples
  8. GitHub 8 vCPU · 32 GB spread 45.9% (p10–p90) around a p50 of 27s, min 20s, max 38s, 5 samples
  9. StarSling 8 vCPU · 32 GB spread 186.2% (p10–p90) around a p50 of 26s, min 19s, max 1m 17s, 5 samples
one job p50 p10–p90 min–max
arm64% off each row's own p50
  1. RunsOn 8 vCPU · 32 GB m9g.2xlarge · EBS gp3 spread 7.7% (p10–p90) around a p50 of 13s, min 13s, max 14s, 5 samples
  2. Avrea 8 vCPU · 32 GB spread 10.9% (p10–p90) around a p50 of 11s, min 11s, max 13s, 5 samples
  3. Warpbuild 8 vCPU · 32 GB spread 11.6% (p10–p90) around a p50 of 19s, min 18s, max 21s, 5 samples
  4. Ubicloud 8 vCPU · 32 GB standard spread 15.8% (p10–p90) around a p50 of 1m 02s, min 54s, max 1m 07s, 5 samples
  5. Blacksmith 8 vCPU · 32 GB spread 23.4% (p10–p90) around a p50 of 35s, min 35s, max 44s, 5 samples
  6. Namespace 8 vCPU · 32 GB 8x32 spread 24.4% (p10–p90) around a p50 of 32s, min 30s, max 39s, 5 samples
one job p50 p10–p90 min–max

Every result

Every machine and action, failures included.

Show every result101 results · x64, arm64
x64 · runnerActionRestoreSave
RunsOnr8a.xlarge · tmpfs4 vCPU · 32 GBactions/cache7s7s
RunsOnm8a.2xlarge · tmpfs8 vCPU · 32 GBactions/cache7s7s
RunsOnr8a.2xlarge · tmpfs8 vCPU · 64 GBactions/cache7s7s
RunsOnm8a.2xlarge · gp3 1000 MiB/s8 vCPU · 32 GB tuned gp3actions/cache8s7s
RunsOnm8azn.xlarge · gp3 1000 MiB/s4 vCPU · 16 GB tuned gp3actions/cache9s9s
RunsOnm8azn.3xlarge · EBS gp312 vCPU · 48 GBactions/cache9s9s
RunsOnr8a.large · tmpfs2 vCPU · 16 GBactions/cache10s7s
RunsOni7i.2xlarge · local NVMe8 vCPU · 64 GBactions/cache12s8s
RunsOni7i.xlarge · local NVMe4 vCPU · 32 GBactions/cache13s9s
RunsOnm8a.2xlarge · EBS gp38 vCPU · 32 GBactions/cache13s12s
RunsOnm8id.2xlarge · local NVMe8 vCPU · 32 GBactions/cache14s11s
RunsOnm8i-flex.2xlarge · EBS gp38 vCPU · 32 GBactions/cache15s11s
RunsOnm8i.2xlarge · EBS gp38 vCPU · 32 GBactions/cache15s11s
RunsOnm8a.xlarge · EBS gp34 vCPU · 16 GBactions/cache18s16s
RunsOnm8azn.xlarge · EBS gp34 vCPU · 16 GBactions/cache18s15s
RunsOnc8a.2xlarge · EBS gp38 vCPU · 16 GBactions/cache18s16s
RunsOnr8a.large · EBS gp32 vCPU · 16 GBactions/cache19s16s
RunsOnm8i-flex.xlarge · EBS gp34 vCPU · 16 GBactions/cache19s14s
RunsOnm8i.xlarge · EBS gp34 vCPU · 16 GBactions/cache19s14s
RunsOni7i.large · local NVMe2 vCPU · 16 GBactions/cache21s14s
RunsOnc8a.xlarge · EBS gp34 vCPU · 8 GBactions/cache23s16s
RunsOnm8a.large · EBS gp32 vCPU · 8 GBactions/cache25s16s
RunsOnm8azn.large · EBS gp32 vCPU · 8 GBactions/cache25s16s
RunsOnm8i-flex.large · EBS gp32 vCPU · 8 GBactions/cache26s16s
RunsOnm8i.large · EBS gp32 vCPU · 8 GBactions/cache27s15s
RunsOnm8id.xlarge · local NVMe4 vCPU · 16 GBactions/cache32s24s
RunsOnc8a.large · EBS gp32 vCPU · 4 GBactions/cache33s34s
RunsOnt8i.medium · EBS gp32 vCPU · 4 GBactions/cache37s32s
RunsOnm8id.large · local NVMe2 vCPU · 8 GBactions/cache1m 11s44s
actions/cache: 1 of 5 jobs failed, latest saved in 31s, restore failed after 10s
Avrea8 vCPU · 32 GBactions/cache13s19s
Avrea4 vCPU · 16 GBactions/cache14s20s
Avrea2 vCPU · 8 GBactions/cache15s19s
Blacksmith4 vCPU · 16 GBactions/cache15s7s
Blacksmith8 vCPU · 32 GBactions/cache15s7s
Blacksmith2 vCPU · 8 GBactions/cache17s8s
Namespace8x168 vCPU · 16 GBactions/cache19s13s
Namespace4x84 vCPU · 8 GBactions/cache20s12s
Namespace2x82 vCPU · 8 GBactions/cache21s15s
Namespace4x164 vCPU · 16 GBactions/cache21s14s
Namespace8x328 vCPU · 32 GBactions/cache21s14s
StarSling8 vCPU · 32 GBactions/cache26s13s
StarSling4 vCPU · 16 GBactions/cache32s12s
Warpbuild2 vCPU · 8 GBactions/cache27s16s
Warpbuild4 vCPU · 16 GBactions/cache28s16s
Warpbuild8 vCPU · 32 GBactions/cache30s12s
Warpbuild4 vCPU · 16 GBWarpBuilds/cache1m 13s1m 27s
Warpbuild2 vCPU · 8 GBWarpBuilds/cache1m 15s1m 22s
Warpbuild8 vCPU · 32 GBWarpBuilds/cache1m 15s59s
WarpBuilds/cache: 1 of 5 jobs failed, latest save step ran 2m 08s but reported a failed upload, restore failed after 1s
GitHub8 vCPU · 32 GBactions/cache27s16s
GitHub4 vCPU · 16 GBactions/cache34s20s
GitHub2 vCPU · 8 GBactions/cache46s34s
AWS CodeBuildlarge8 vCPU · 16 GBactions/cache34s2m 04s
AWS CodeBuildmedium4 vCPU · 8 GBactions/cache35s1m 56s
AWS CodeBuildsmall2 vCPU · 3 GBactions/cache51s2m 15s
Ubicloudpremium8 vCPU · 32 GBactions/cache1m 02s47s
Ubicloudstandard8 vCPU · 32 GBactions/cache1m 03s47s
Ubicloudstandard4 vCPU · 16 GBactions/cache1m 06s52s
Ubicloudstandard2 vCPU · 8 GBactions/cache1m 08s58s
Ubicloudpremium2 vCPU · 8 GBactions/cache1m 09s53s
Ubicloudpremium4 vCPU · 16 GBactions/cache1m 10s47s
actions/cache: 1 of 5 jobs failed, latest saved in 41s, restore failed after 1sactions/cache: 2 of 5 jobs failed, latest saved in 52s, restore failed after 24s
arm64 · runnerActionRestoreSave
RunsOnm9g.xlarge · tmpfs4 vCPU · 16 GBactions/cache8s7s
RunsOnr9g.xlarge · tmpfs4 vCPU · 32 GBactions/cache8s7s
RunsOnm9g.2xlarge · tmpfs8 vCPU · 32 GBactions/cache8s7s
RunsOnr9g.large · tmpfs2 vCPU · 16 GBactions/cache11s9s
RunsOnm9gd.2xlarge · local NVMe8 vCPU · 32 GBactions/cache11s9s
RunsOnm9g.2xlarge · EBS gp38 vCPU · 32 GBactions/cache13s12s
RunsOnm9g.xlarge · EBS gp34 vCPU · 16 GBactions/cache18s15s
RunsOnc8g.2xlarge · EBS gp38 vCPU · 16 GBactions/cache18s13s
RunsOnm9gd.xlarge · local NVMe4 vCPU · 16 GBactions/cache24s20s
RunsOnm9g.large · EBS gp32 vCPU · 8 GBactions/cache29s16s
RunsOnc8g.xlarge · EBS gp34 vCPU · 8 GBactions/cache30s15s
RunsOnc8g.large · EBS gp32 vCPU · 4 GBactions/cache32s28s
RunsOnm9gd.large · local NVMe2 vCPU · 8 GBactions/cache53s35s
Avrea8 vCPU · 32 GBactions/cache11s15s
Avrea2 vCPU · 8 GBactions/cache12s15s
Avrea4 vCPU · 16 GBactions/cache12s15s
NamespaceApple silicon 2x82 vCPU · 8 GBactions/cache18s16s
NamespaceApple silicon 4x164 vCPU · 16 GBactions/cache19s15s
Namespace8x328 vCPU · 32 GBactions/cache32s18s
Namespace4x84 vCPU · 8 GBactions/cache34s21s
Namespace8x168 vCPU · 16 GBactions/cache34s18s
Namespace4x164 vCPU · 16 GBactions/cache36s22s
Namespace2x82 vCPU · 8 GBactions/cache39s33s
Warpbuild8 vCPU · 32 GBactions/cache19s15s
Warpbuildxfast (Apple M4 Pro)12 vCPU · 28 GBactions/cache20s12s
Warpbuildxfast (Apple M4 Pro)6 vCPU · 14 GBactions/cache25s16s
Warpbuild4 vCPU · 16 GBactions/cache26s21s
Warpbuild2 vCPU · 8 GBactions/cache28s25s
Warpbuildxfast (Apple M4 Pro)12 vCPU · 28 GBWarpBuilds/cache59s44s
Warpbuildxfast (Apple M4 Pro)6 vCPU · 14 GBWarpBuilds/cache1m 06s47s
Warpbuild8 vCPU · 32 GBWarpBuilds/cache1m 13s50s
Warpbuild4 vCPU · 16 GBWarpBuilds/cache1m 17s1m 31s
Warpbuild2 vCPU · 8 GBWarpBuilds/cache1m 57s1m 28s
WarpBuilds/cache: 1 of 5 jobs failed, latest saved in 41s, restore failed after 6sWarpBuilds/cache: 1 of 5 jobs failed, latest saved in 1m 20s, restore failed after 6s
GitHub4 vCPU · 16 GBactions/cache29s25s
GitHub2 vCPU · 8 GBactions/cache52s42s
Blacksmith4 vCPU · 16 GBactions/cache32s20s
Blacksmith2 vCPU · 6 GBactions/cache35s25s
Blacksmith8 vCPU · 32 GBactions/cache35s17s
Ubicloudstandard4 vCPU · 16 GBactions/cache58s49s
Ubicloudstandard8 vCPU · 32 GBactions/cache1m 02s48s
Ubicloudstandard2 vCPU · 8 GBactions/cache1m 11s53s
actions/cache: 2 of 5 jobs failed, latest saved in 49s, restore failed after 24sactions/cache: 1 of 5 jobs failed, latest saved in 49s, restore failed after 52s
  • tinted: fastest providers on the arch
  • bold: fastest result
  • actions/cache: GitHub's standard action
  • owner/cache: the provider's own action
Which machines ran it2 notes
  • RunsOn ran on m8a.2xlarge, r8a.2xlarge, r8a.xlarge, r8a.large, m8azn.xlarge, i7i.2xlarge, m8azn.3xlarge, i7i.xlarge, m8i.2xlarge, m8i-flex.2xlarge, m8id.2xlarge, m8i.xlarge, c8a.2xlarge, m8i-flex.xlarge, m8a.xlarge, i7i.large, c8a.xlarge, m8a.large, m8azn.large, m8i-flex.large, m8i.large, m8id.xlarge, c8a.large, t8i.medium and m8id.large (x64) and m9g.2xlarge, r9g.xlarge, m9g.xlarge, r9g.large, m9gd.2xlarge, c8g.2xlarge, c8g.xlarge, m9gd.xlarge, m9g.large, c8g.large and m9gd.large (arm64) with Magic Cache: the extras=s3-cache label and the runs-on/action step. Its other machines have no cache run.

Where actions/cache goes

4 providers send it to their own storage, 3 with no workflow change. Namespace, StarSling and Warpbuild leave it on GitHub's cache service, as GitHub's own runners do. AWS CodeBuild documents no rerouting.

Provider actions/cache goes to Own cache Docs
GitHub GitHub's cache service (Azure Blob) – GitHub
RunsOn rerouted S3 in your AWS account, via a label and runs-on/action – Magic Cache
Avrea rerouted a local cache proxy – Avrea
AWS CodeBuild not rerouted – –
Blacksmith rerouted Blacksmith's colocated cache useblacksmith/cache (archived) Blacksmith
Namespace not rerouted GitHub's cache service (Azure Blob) Cache Volumes (not a save and restore; not measured) Namespace
StarSling not rerouted GitHub's cache service (Azure Blob) – StarSling
Ubicloud rerouted Ubicloud's cache, stored on Cloudflare R2 – Ubicloud
Warpbuild not rerouted GitHub's cache service (Azure Blob) WarpBuilds/cache, to WarpBuild's storage WarpBuild
  • GitHub GitHub's cache service (Azure Blob)

    own cache: none · docs

  • RunsOn rerouted S3 in your AWS account, via a label and runs-on/action

    own cache: none · docs

  • Avrea rerouted a local cache proxy

    own cache: none · docs

  • AWS CodeBuild not rerouted

    own cache: none

  • Blacksmith rerouted Blacksmith's colocated cache

    own cache: useblacksmith/cache (archived) · docs

  • Namespace not rerouted GitHub's cache service (Azure Blob)

    own cache: Cache Volumes (not a save and restore; not measured) · docs

  • StarSling not rerouted GitHub's cache service (Azure Blob)

    own cache: none · docs

  • Ubicloud rerouted Ubicloud's cache, stored on Cloudflare R2

    own cache: none · docs

  • Warpbuild not rerouted GitHub's cache service (Azure Blob)

    own cache: WarpBuilds/cache, to WarpBuild's storage · docs

  • Warpbuild: WarpBuild's docs call GitHub's own cache "the recommended approach and is the most seamless experience for users", and keep WarpBuilds/cache for advanced use and bring-your-own-cloud. This test measures both on every WarpBuild runner.

Caches not measured here

Each works differently from a save and restore, so this test leaves it out.

  • RunsOn: the ECR Docker layer cache (extras=ecr-cache) and EFS shared across jobs (extras=efs).
  • Blacksmith: sticky disks (a disk attached to the runner, not a save and restore) and its Docker layer cache.
  • Namespace: Cache Volumes (nscloud-cache-action), a disk attached to the runner rather than a save and restore.
  • Warpbuild: snapshot runners (a job starts from a saved disk image).

Transparent cache or a provider action

Keep actions/cache and pick a runner that makes it fast.

  • Warpbuild x64: WarpBuilds/cache 1m 13s–1m 15s restore, 59s–1m 27s save; actions/cache 27s–30s restore, 12s–16s save on the same 3 runners.
  • Warpbuild arm64: WarpBuilds/cache 59s–1m 57s restore, 44s–1m 31s save; actions/cache 19s–28s restore, 12s–25s save on the same 5 runners.
  • A rerouted actions/cache speeds up every action built on the cache API at once: setup-node, setup-python, setup-go, Swatinem/rust-cache, Docker's type=gha cache. A provider action only speeds the steps you rewrite, on that provider's runners, and its fork lags upstream.

GitHub's cache limits

  • 10 GB per repository at no charge, entries evicted after 7 days unused; since November 2025, admins can pay for more. 4 GB took 34s to restore on GitHub's x64 runner.
  • RunsOn's Magic Cache keeps actions/cache and sends it to S3 in your AWS account: no quota, your retention, your IAM policies. It takes a label, extras=s3-cache, plus the runs-on/action step.

How it's measured

Methodology

One job per runner and action per run, 2 to 12 vCPU: save a 4 GB file, delete it, restore it, check its size. Times are the steps inside the job, medians across jobs; a failed job stays, at the step it failed.

Detailsworkload, consistency, earlier numbers
  • A 4 GB random file saved with a cache action, deleted, restored right away on the same runner, and checked to be complete: actions/cache (GitHub's cache service, or whatever the provider routes it to) and the provider's own cache action where the provider still recommends one (Blacksmith archived useblacksmith/cache: actions/cache is routed to its cache). No pause between save and restore, so a cache that isn't read-after-write consistent shows up as a failure. File generation is not timed. The size check is not counted.
  • Restore runs right after save. A cache that is not read-after-write consistent fails here; in a real job, the build silently starts cold.
  • The same machines as the all-runners table, where each runner's actions/cache restore sits next to its builds.
  • Earlier versions of this page came from a different harness on 2 vCPU runners; those numbers are not comparable and are gone.
  • Raw numbers: cache.json. Caching on RunsOn: docs.