Skip to content

Commit b75bdc4

Browse files
authored
[docs] document Bazel worktree cache setup (alibaba#254)
1 parent 867c98f commit b75bdc4

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

docs/develop/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,38 @@
1111
```bash
1212
bazelisk run //kv_cache_manager:main
1313
```
14+
15+
### Bazel 缓存与多 worktree 开发
16+
17+
Bazel 默认会按 workspace 路径生成独立的 `output_base`。因此从同一个仓库拉出新的 git worktree 后,新的 worktree 不能直接复用旧 worktree 的 `bazel-out`、analysis cache 和本地 action cache;首次构建仍需要重新完成 loading/analysis、内部 symlink/action bookkeeping,以及测试执行。
18+
19+
为了让新 worktree 尽量复用已有编译产物,建议在个人 `~/.bazelrc` 中配置共享缓存:
20+
21+
```bazelrc
22+
# 将 Bazel output root 放到稳定、空间充足、IO 较快的本地目录。
23+
# 这主要加速同一个 worktree 的后续增量构建;不同 worktree 仍会有不同 output_base。
24+
startup --output_user_root=/path/to/local/bazel-output
25+
26+
# 共享 action output cache。不同 worktree 中 action key 相同的 C++ compile、link、proto、genrule 等动作可以直接命中。
27+
build --disk_cache=/path/to/local/bazel-disk-cache
28+
29+
# 共享外部依赖下载缓存,避免每个新 output_base 重新下载 http_archive/http_file。
30+
common --repository_cache=/path/to/local/bazel-repository-cache
31+
```
32+
33+
如果同一台机器上存在多套 Bazel、编译器、系统镜像或 CUDA/MUSA 工具链,建议按工具链维度拆分 `disk_cache` 目录,避免无效缓存占用空间,也避免不同工具链之间相互干扰。`repository_cache` 缓存的是下载文件,通常可以跨工具链共享。
34+
35+
`bazelisk clean --expunge` 只清理当前 worktree 的 `output_base`,不会清理上面配置的共享 `disk_cache``repository_cache`。如果需要释放共享缓存占用的磁盘空间,需要手动删除对应目录;删除后首次构建会重新下载依赖或重新编译产物。
36+
37+
排查缓存是否生效时,可先确认 Bazel 实际读取的 rc 配置和缓存路径:
38+
39+
```bash
40+
bazelisk info --announce_rc output_base
41+
bazelisk info --announce_rc repository_cache
42+
```
43+
44+
构建结束时关注 summary 中的 `disk cache hit``local` 数量。如果新 worktree 首次构建仍有大量 `local` C++ 编译,通常说明 cache 之前没有预热、构建参数/工具链发生变化、修改触发了相关 action key 变化,或启用 stamp 的目标受 stable status 变化影响。
45+
1446
## 测试
1547
- 单元测试: ```bazelisk test //kv_cache_manager/...```
1648
- 集成测试: ```bazelisk test //integration_test/...```

0 commit comments

Comments
 (0)