Restoring cache on MacOS is extremely slow
I figured out restoring the cache is very slow on MacOS. I have created a test case with some node_modules for a React Native application. The following action is used:
uses: actions/cache@v2
with:
path: 'node_modules'
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }}
Here are the results:
Restoring on ubuntu: Test run 1 took 6s: https://github.com/andrmoel/github-actions-speed-test/runs/3476428716?check_suite_focus=true Test run 2 took 8s: https://github.com/andrmoel/github-actions-speed-test/runs/3476523783?check_suite_focus=true
Restoring on macos: Test run 1 took 3m25s: https://github.com/andrmoel/github-actions-speed-test/runs/3476430657?check_suite_focus=true Test run 2 took 24s: https://github.com/andrmoel/github-actions-speed-test/runs/3476523785?check_suite_focus=true
In the best case restoring the cache on MacOS takes 3 times longer than on ubuntu. But what really makes me worry are the 3m25s from MacOS test run number 1.
Edit: I did some research on another repository and I assume the long action happens every time when the cache was hit the first time.
I have created a test repository with two identical github-actions. One action runs on ubuntu-latest the other one on macos-latest
https://github.com/andrmoel/github-actions-speed-test
I am seeing the same thing on a self hosted runner on macos. But the initial checkout is fast
Cache restore
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
9
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
10
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
11
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
12
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
13
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
14
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
15
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
16
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
17
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
18
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
19
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
20
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
21
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
22
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
23
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
24
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
25
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
26
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
27
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
28
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
29
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
30
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
31
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
32
Received 0 of 56392883 (0.0%), 0.0 MBs/sec
33
Received 16777216 of 56392883 (29.8%), 0.6 MBs/sec
34
Received 29360128 of 56392883 (52.1%), 1.0 MBs/sec
35
Received 29360128 of 56392883 (52.1%), 1.0 MBs/sec
36
Received 29360128 of 56392883 (52.1%), 1.0 MBs/sec
37
Received 33554432 of 56392883 (59.5%), 1.1 MBs/sec
38
Received 33554432 of 56392883 (59.5%), 1.0 MBs/sec
39
Received 33554432 of 56392883 (59.5%), 1.0 MBs/sec
40
Received 33554432 of 56392883 (59.5%), 1.0 MBs/sec
41
Received 33554432 of 56392883 (59.5%), 0.9 MBs/sec
42
Received 33554432 of 56392883 (59.5%), 0.9 MBs/sec
43
Received 33554432 of 56392883 (59.5%), 0.9 MBs/sec
44
Received 35421363 of 56392883 (62.8%), 0.9 MBs/sec
45
Received 35421363 of 56392883 (62.8%), 0.9 MBs/sec
46
Received 35421363 of 56392883 (62.8%), 0.9 MBs/sec
47
Received 35421363 of 56392883 (62.8%), 0.8 MBs/sec
48
Received 35421363 of 56392883 (62.8%), 0.8 MBs/sec
49
Received 35421363 of 56392883 (62.8%), 0.8 MBs/sec
50
Received 35421363 of 56392883 (62.8%), 0.8 MBs/sec
51
Received 35421363 of 56392883 (62.8%), 0.8 MBs/sec
52
Received 56392883 of 56392883 (100.0%), 1.2 MBs/sec
Checkout
Receiving objects: 0% (1/1494)
252
Receiving objects: 1% (15/1494)
253
Receiving objects: 2% (30/1494)
254
Receiving objects: 3% (45/1494)
255
Receiving objects: 4% (60/1494)
256
Receiving objects: 5% (75/1494)
257
Receiving objects: 6% (90/1494)
258
Receiving objects: 7% (105/1494)
259
Receiving objects: 8% (120/1494)
260
Receiving objects: 9% (135/1494)
261
Receiving objects: 10% (150/1494)
262
Receiving objects: 11% (165/1494)
263
Receiving objects: 12% (180/1494)
264
Receiving objects: 13% (195/1494)
265
Receiving objects: 14% (210/1494)
266
Receiving objects: 15% (225/1494)
267
Receiving objects: 16% (240/1494)
268
Receiving objects: 17% (254/1494)
269
Receiving objects: 18% (269/1494)
270
Receiving objects: 19% (284/1494), 1.69 MiB | 3.24 MiB/s
271
Receiving objects: 20% (299/1494), 1.69 MiB | 3.24 MiB/s
272
Receiving objects: 21% (314/1494), 1.69 MiB | 3.24 MiB/s
273
Receiving objects: 21% (315/1494), 10.02 MiB | 9.62 MiB/s
274
Receiving objects: 21% (315/1494), 16.39 MiB | 8.01 MiB/s
275
Receiving objects: 22% (329/1494), 16.39 MiB | 8.01 MiB/s
276
Receiving objects: 23% (344/1494), 16.39 MiB | 8.01 MiB/s
277
Receiving objects: 24% (359/1494), 16.39 MiB | 8.01 MiB/s
278
Receiving objects: 25% (374/1494), 16.39 MiB | 8.01 MiB/s
279
Receiving objects: 26% (389/1494), 16.39 MiB | 8.01 MiB/s
280
Receiving objects: 27% (404/1494), 16.39 MiB | 8.01 MiB/s
281
Receiving objects: 28% (419/1494), 16.39 MiB | 8.01 MiB/s
282
Receiving objects: 29% (434/1494), 16.39 MiB | 8.01 MiB/s
283
Receiving objects: 30% (449/1494), 16.39 MiB | 8.01 MiB/s
284
Receiving objects: 31% (464/1494), 16.39 MiB | 8.01 MiB/s
285
Receiving objects: 32% (479/1494), 19.62 MiB | 7.70 MiB/s
286
Receiving objects: 33% (494/1494), 19.62 MiB | 7.70 MiB/s
287
Receiving objects: 34% (508/1494), 19.62 MiB | 7.70 MiB/s
288
Receiving objects: 35% (523/1494), 19.62 MiB | 7.70 MiB/s
289
Receiving objects: 36% (538/1494), 19.62 MiB | 7.70 MiB/s
290
Receiving objects: 37% (553/1494), 19.62 MiB | 7.70 MiB/s
291
Receiving objects: 38% (568/1494), 19.62 MiB | 7.70 MiB/s
292
Receiving objects: 39% (583/1494), 19.62 MiB | 7.70 MiB/s
293
Receiving objects: 40% (598/1494), 19.62 MiB | 7.70 MiB/s
294
Receiving objects: 41% (613/1494), 19.62 MiB | 7.70 MiB/s
295
Receiving objects: 42% (628/1494), 19.62 MiB | 7.70 MiB/s
296
Receiving objects: 43% (643/1494), 19.62 MiB | 7.70 MiB/s
297
Receiving objects: 44% (658/1494), 19.62 MiB | 7.70 MiB/s
298
Receiving objects: 45% (673/1494), 19.62 MiB | 7.70 MiB/s
299
Receiving objects: 46% (688/1494), 19.62 MiB | 7.70 MiB/s
300
Receiving objects: 47% (703/1494), 19.62 MiB | 7.70 MiB/s
301
Receiving objects: 48% (718/1494), 19.62 MiB | 7.70 MiB/s
302
Receiving objects: 49% (733/1494), 19.62 MiB | 7.70 MiB/s
303
Receiving objects: 50% (747/1494), 19.62 MiB | 7.70 MiB/s
304
Receiving objects: 51% (762/1494), 19.62 MiB | 7.70 MiB/s
305
Receiving objects: 52% (777/1494), 19.62 MiB | 7.70 MiB/s
306
Receiving objects: 52% (779/1494), 19.62 MiB | 7.70 MiB/s
307
Receiving objects: 53% (792/1494), 22.84 MiB | 7.41 MiB/s
308
Receiving objects: 54% (807/1494), 25.99 MiB | 7.25 MiB/s
309
Receiving objects: 55% (822/1494), 25.99 MiB | 7.25 MiB/s
310
Receiving objects: 55% (830/1494), 25.99 MiB | 7.25 MiB/s
311
Receiving objects: 56% (837/1494), 29.22 MiB | 7.16 MiB/s
312
Receiving objects: 57% (852/1494), 29.22 MiB | 7.16 MiB/s
313
Receiving objects: 58% (867/1494), 29.22 MiB | 7.16 MiB/s
314
Receiving objects: 59% (882/1494), 29.22 MiB | 7.16 MiB/s
315
Receiving objects: 60% (897/1494), 29.22 MiB | 7.16 MiB/s
316
Receiving objects: 61% (912/1494), 29.22 MiB | 7.16 MiB/s
317
Receiving objects: 62% (927/1494), 29.22 MiB | 7.16 MiB/s
318
Receiving objects: 63% (942/1494), 29.22 MiB | 7.16 MiB/s
319
Receiving objects: 64% (957/1494), 29.22 MiB | 7.16 MiB/s
320
Receiving objects: 65% (972/1494), 29.22 MiB | 7.16 MiB/s
321
Receiving objects: 66% (987/1494), 29.22 MiB | 7.16 MiB/s
322
Receiving objects: 67% (1001/1494), 29.22 MiB | 7.16 MiB/s
323
Receiving objects: 68% (1016/1494), 29.22 MiB | 7.16 MiB/s
324
Receiving objects: 69% (1031/1494), 29.22 MiB | 7.16 MiB/s
325
Receiving objects: 70% (1046/1494), 29.22 MiB | 7.16 MiB/s
326
Receiving objects: 71% (1061/1494), 29.22 MiB | 7.16 MiB/s
327
Receiving objects: 72% (1076/1494), 29.22 MiB | 7.16 MiB/s
328
Receiving objects: 73% (1091/1494), 29.22 MiB | 7.16 MiB/s
329
Receiving objects: 74% (1106/1494), 29.22 MiB | 7.16 MiB/s
330
Receiving objects: 75% (1121/1494), 29.22 MiB | 7.16 MiB/s
331
Receiving objects: 76% (1136/1494), 29.22 MiB | 7.16 MiB/s
332
Receiving objects: 77% (1151/1494), 29.22 MiB | 7.16 MiB/s
333
Receiving objects: 78% (1166/1494), 29.22 MiB | 7.16 MiB/s
334
Receiving objects: 79% (1181/1494), 29.22 MiB | 7.16 MiB/s
335
Receiving objects: 80% (1196/1494), 29.22 MiB | 7.16 MiB/s
336
Receiving objects: 81% (1211/1494), 29.22 MiB | 7.16 MiB/s
337
Receiving objects: 82% (1226/1494), 29.22 MiB | 7.16 MiB/s
338
Receiving objects: 83% (1241/1494), 32.36 MiB | 7.06 MiB/s
339
Receiving objects: 84% (1255/1494), 32.36 MiB | 7.06 MiB/s
340
Receiving objects: 85% (1270/1494), 32.36 MiB | 7.06 MiB/s
341
Receiving objects: 86% (1285/1494), 32.36 MiB | 7.06 MiB/s
342
Receiving objects: 87% (1300/1494), 32.36 MiB | 7.06 MiB/s
343
Receiving objects: 88% (1315/1494), 32.36 MiB | 7.06 MiB/s
344
Receiving objects: 89% (1330/1494), 32.36 MiB | 7.06 MiB/s
345
Receiving objects: 90% (1345/1494), 32.36 MiB | 7.06 MiB/s
346
Receiving objects: 91% (1360/1494), 32.36 MiB | 7.06 MiB/s
347
Receiving objects: 92% (1375/1494), 32.36 MiB | 7.06 MiB/s
348
Receiving objects: 93% (1390/1494), 32.36 MiB | 7.06 MiB/s
349
Receiving objects: 94% (1405/1494), 32.36 MiB | 7.06 MiB/s
350
Receiving objects: 95% (1420/1494), 32.36 MiB | 7.06 MiB/s
351
Receiving objects: 96% (1435/1494), 32.36 MiB | 7.06 MiB/s
352
Receiving objects: 97% (1450/1494), 32.36 MiB | 7.06 MiB/s
353
Receiving objects: 98% (1465/1494), 32.36 MiB | 7.06 MiB/s
354
remote: Total 1494 (delta 262), reused 827 (delta 85), pack-reused 0
355
Receiving objects: 99% (1480/1494), 32.36 MiB | 7.06 MiB/s
356
Receiving objects: 100% (1494/1494), 32.36 MiB | 7.06 MiB/s
357
Receiving objects: 100% (1494/1494), 32.73 MiB | 7.04 MiB/s, done.
gtar performance on macos-11 is wildly inconsistent.
I have a run where it took 10 min:
Wed, 09 Feb 2022 14:37:31 GMT
Cache Size: ~1394 MB (1461838173 B)
Wed, 09 Feb 2022 14:37:31 GMT
/usr/local/bin/gtar --use-compress-program zstd -d -xf /Users/runner/work/_temp/uuid/cache.tzst -P -C /Users/runner/work/app --delay-directory-restore
Wed, 09 Feb 2022 14:47:42 GMT
Cache restored successfully
And 30 seconds in the previous run:
Wed, 09 Feb 2022 14:03:19 GMT
Cache Size: ~1394 MB (1461421762 B)
Wed, 09 Feb 2022 14:03:19 GMT
/usr/local/bin/gtar --use-compress-program zstd -d -xf /Users/runner/work/_temp/uuid/cache.tzst -P -C /Users/runner/work/app --delay-directory-restore
Wed, 09 Feb 2022 14:03:50 GMT
Cache restored successfully
I'm having the same issue on MacOS. It was taking over 27 minutes to decompress 1.2 GB and it still wasn't done, so I cancelled it. This isn't unacceptable. I'm using actions/cache@v3 and macos-11.
Closing this issue as we could not recreate the above macos performance issue. Feel free to create another issue if the problem recurs.
@pdotl I'm seeing the same issue.
this repo contains a reproducible workflow
MacOS is consistently much slower than linux:

I've also observed this many times in an real world environment of the same dependencies (notice the same hash in both runs 8f697dca40e59245771bc3babd61ce7eec68e51d1af2f99a79dff601c742dfe4):
linux: 30sec
macOS: 2:10min
name: Slow cache example
on:
workflow_dispatch:
push:
pull_request:
jobs:
generate:
name: generate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: generate large file to cache
run: dd if=/dev/urandom of=some-large-file bs=1M count=500
- name: cache large file
uses: actions/cache@v3
with:
path: some-large-file
key: ${{ hashFiles('some-large-file') }}
restore-linux:
name: restore-linux
needs: generate
runs-on: ubuntu-latest
steps:
- name: restore cached large file
uses: actions/cache@v3
with:
path: some-large-file
key: large-file
restore-macos:
name: restore-macos
needs: generate
runs-on: macos-12
steps:
- name: restore cached large file
uses: actions/cache@v3
with:
path: some-large-file
key: large-file