Bazel跑得很慢

时间:2018-02-12 01:05:18

标签: grpc bazel

我有一个相对简单的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'

1 个答案:

答案 0 :(得分:2)

我在AWS EC2实例上尝试了相同的构建。增量构建的速度要快得多。所以我认为缓慢是由于在VM内部运行导致的一些文件系统问题。