本地磁盘上的Bazel远程缓存



我正在尝试更好地理解和利用远程缓存。

我在docker容器中运行bazel build,同时在本地磁盘上指定远程缓存目录:

docker run --rm -it -v $PWD:/work -w /work bazel:latest 
bazel build --disk_cache=.bazel-disk-cache //...

在此运行结束时,将在中填充远程缓存。barel -disk-cache目录。

然后我再次运行相同的命令。这一次,它是一个新的容器实例,具有空的本地缓存,但是存在远程缓存。然而,完成任务所花费的时间与第一次运行的时间几乎相同。

这是意料之中的吗?我希望在使用远程缓存时减少构建时间。我错过了什么?

我做了以下的事情,确实缩短了构建时间

在启用了metrics端点的情况下启动Docker的Bazel远程缓存

docker run -u 1000:1000 -v $(pws)/bzl-cache:/data -p 9090:8080 -p 9092:9092 buchgr/bazel-remote-cache --max_size 5 --enable_endpoint_metrics

查看Bazel远程缓存容器IP地址

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <CONTAINER_ID>
# assuming it is 172.17.0.2

查看缓存的当前状态

curl 172.17.0.2:8080/status

返回类似于(不同的数字取决于您的设置和Bazel远程缓存中已填充的数据)

{
"CurrSize": 7651328,
"UncompressedSize": 18616320,
"ReservedSize": 0,
"MaxSize": 5368709120,
"NumFiles": 14,
"ServerTime": 1690295548,
"GitCommit": "dc4aeace0af5b893c96bd994a816dfbaba9b18c2",
"NumGoroutines": 9
}

接下来启动另一个容器并使用Bazel构建一些东西,我编译了redis(一个本地的东西)

bazel build --remote_cache=http://172.17.0.2:8080 @redis//:build

Bazel远程缓存将报告几个PUT请求,数据将被放置在缓存中。在我的情况下,大约花了2分钟完成。之后,我清理了本地的东西,并再次调用build

bazel clean && bazel build --remote_cache=http://172.17.0.2:8080 @redis//:build

这次只花了5秒,在Bazel远程缓存上生成GET请求,因为所有数据都是从那里下载的。为了产生更多的负载,我准备了一堆并行调用缓存,结果几乎相同,大约5秒,有时7秒,因为缓存上的负载来处理所有的连接。

最新更新