You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Save Turbo cache (main only) 只在 main 的 push run 上执行。但 ci.yml 的 concurrency group 对 push 事件解析为 refs/heads/main —— 每次 main 推送共享同一个组,叠加 cancel-in-progress: true:
⚠️ 注:该 concurrency 行为在 ci.yml 的注释里是有意设计(「an in-flight main run is cancelled only by a newer main push」)。所以这不是一个纯 bug,是一个当初的取舍在落地频率上升后产生了未被预期的副作用 —— 修法需要先回答「main 上那一轮 CI 到底是干什么用的」。
机制二:缓存键按 shard 分命名空间,三个 shard 的缓存各自独立老化
Test Core job 的 Turbo 缓存键把 matrix.shard 与 github.job 一起插进键里。结合「只有 main push 写入」,后果是三个 shard 的缓存各自老化,而不是共享一份。
实测(同一 shard index 的不同腿):
run
shard
cached / total
耗时
32233301407
1
28 / 79
9m22s
2
0 / 85
10m08s
3
31 / 79
14m48s
32335265453
1
81 / 83
4m48s
2
79 / 79
0m03s
32352993803
1
31 / 79
8m18s
2
55 / 59
4m53s
3
33 / 83
16m27s
同一条腿的区间是 866ms(79/79 命中,>>> FULL TURBO)到 10m08s(0/85 命中)。
承接自 #10149 §4(测量卡已收口)。未认领,无
pm:*/domain:*标签 —— 留给分诊定级与路由。#5401 曾记录 Turbo 缓存的时序竞态,其方向 C(缓存池挤出)被明确留档、不在该单做,并预设了触发条件,逐字:
两条触发条件现在都满足了,而且量到的是两条 #5401 当时没有的机制。
机制一:缓存的唯一写入方有 43% 跑不完
Save Turbo cache (main only)只在 main 的pushrun 上执行。但ci.yml的 concurrency group 对 push 事件解析为refs/heads/main—— 每次 main 推送共享同一个组,叠加cancel-in-progress: true:实测最近 30 次 push-to-main CI run:17 success / 13 cancelled(43%)。以一天 18+ 次落地、单 run 约 15 分钟的节奏,后一次落地几乎必然腰斩前一次。
ci.yml的注释里是有意设计(「an in-flight main run is cancelled only by a newer main push」)。所以这不是一个纯 bug,是一个当初的取舍在落地频率上升后产生了未被预期的副作用 —— 修法需要先回答「main 上那一轮 CI 到底是干什么用的」。机制二:缓存键按 shard 分命名空间,三个 shard 的缓存各自独立老化
Test Core job 的 Turbo 缓存键把
matrix.shard与github.job一起插进键里。结合「只有 main push 写入」,后果是三个 shard 的缓存各自老化,而不是共享一份。实测(同一 shard index 的不同腿):
322333014073233526545332352993803同一条腿的区间是 866ms(79/79 命中,
>>> FULL TURBO)到 10m08s(0/85 命中)。为什么值得单独立卡
partition-test-shards.mjs的头注释:单次构建的分片差不能当放置证据,要比就比同缓存状态的腿。未验证
Restore Turbo cachehit/miss 与对应 main push run 的 save 完成/被取消状态(merge_group 条目在前一次 main 合并后 ~4 分钟内入队时永远吃不到 Turbo 缓存 —— 连续合并每条多付数分钟冷构建(实测) #5401 当时用的正是这个方法)。建议排查从这里开始。候选方向(未定)
github.sha,让写入方跑完 —— 先要回答上面那个「main 那轮 CI 是干什么用的」。lint.yml的 typecheck 做过逐字相同的改动)。关联
lint.ymltypecheck,明确未扩到分片 job)partition-test-shards.mjs头注释里.github/workflows/ci.yml(concurrency、7 处 turbo 恢复/保存步)