我有一个相对简单的Bazel项目,其中包含以下内容:
- 2个原型文件(B.proto依赖于A.proto)
- 使用grpc支持从这些proto文件生成的Go / C ++库(使用从pubref/rules_protobuf导入的grpc / protobuf规则)
- 针对用C ++和Go编写的这些原型的服务器/客户端应用程序。
当我第一次运行bazel时,需要很多时间来执行。它编译grpc,protobuf等,这是有道理的。
但是,当我立即再次运行编译时,即使在增量情况下,我的构建也需要大约80秒。对于一个如此简单的项目,我本来期望更快的性能 - 特别是因为速度被认为是Bazel的主要优势。
据我所知,在我合并grpc / protos之前,我的bazel构建的性能非常快。
以下是bazel的剖析器报告的一些信息。我无法在剖面仪输出中看到任何吸烟枪。
一个可能的区别是我的构建在托管在macbook上的ubuntu docker容器上运行。 macos docker实现在轻量级hyperkit VM上运行。所以这不是本机构建。但我仍然不希望事情变得如此缓慢!
阶段摘要信息
- 总启动阶段时间101毫秒0.12%
- 总初始阶段时间11.560秒13.67%
- 总加载阶段时间282 ms 0.33%
- 总分析阶段时间15.2 ms 0.02%
- 总准备阶段时间1.002 s 1.19%
- 总执行阶段时间71.549 s 84.63%
- 总完成阶段时间30.9 ms 0.04%
- 总运行时间84.540 s 100.00%
初始阶段信息
- 总初始时间11.560秒
- 花费的总时间(跨所有主题):
- 类型总计数平均值
- VFS_STAT 88.18%12223 166 ms
- VFS_DIR 10.49%785 307 ms
- VFS_READLINK 0.81%221 84.4 ms
- VFS_OPEN 0.01%2 109 ms
- VFS_READ 0.01%4 28.7 ms
执行阶段信息
- 总准备时间1.002秒
- 总执行时间71.549秒
- 总完成时间30.9毫秒
- 动作依赖关系地图创建0.00毫秒
- 实际执行时间71.549 s
- 花费的总时间(跨所有主题):
- 类型总计数平均值
- 行动0.00%1 2.09 ms
- ACTION_CHECK 0.00%1 0.71 ms
- ACTION_EXECUTE 0.00%1 1.53 ms
- INFO 0.00%1 0.00 ms
- VFS_STAT 39.71%1803 26.3 ms
- VFS_DIR 0.02%2 14.0 ms
- VFS_READLINK 0.36%18 23.9 ms
- VFS_MD5 0.00%1 1.45 ms
- VFS_DELETE 0.00%1 1.44 ms
- VFS_OPEN 0.02%5 4.30 ms
- VFS_READ 0.00%4 0.48 ms
- VFS_WRITE 0.00%2 0.32 ms
- SKYFRAME_EVAL 0.03%1 31.0 ms
- SKYFUNCTION 0.02%5 5.83 ms
- 关键路径(25.7 ms):
- Id时间分享说明
- 15078 25.7 ms 100.00%action' BazelWorkspaceStatusAction stable-status.txt'