grpc - 巴泽尔跑得很慢

标签 grpc bazel

我有一个相对简单的 Bazel 项目,它具有以下内容:

  • 2 个 proto 文件(B.proto 依赖于 A.proto)
  • 从这些具有 grpc 支持的 proto 文件生成的 Go/C++ 库(使用从 pubref/rules_protobuf 导入的 grpc/protobuf 规则)
  • 针对这些用 C++ 和 Go 编写的 protos 的服务器/客户端应用程序。

  • 当我第一次运行 bazel 时,它需要很多时间来执行。它编译了 grpc、protobuf 等,这是有道理的。

    但是,当我立即再次运行编译时,即使在增量情况下,我的构建也需要大约 80 秒。对于一个如此简单的项目,我本来期望性能会更快——尤其是因为据说速度是 Bazel 的主要优势。

    据我所知,在我合并 grpc/protos 之前,我的 bazel 构建的性能非常快。

    这是 bazel 的分析器报告的一些信息。我无法在分析器输出中看到任何冒烟的枪。

    一个可能的区别是我的构建在 macbook 上托管的 ubuntu docker 容器上运行。 macos docker 实现在轻量级 hyperkit VM 上运行。所以这不是原生构建。但我还是没想到事情会这么慢!

    阶段概要信息
  • 总启动阶段时间 101 毫秒 0.12%
  • 初始阶段总时间 11.560 秒 13.67%
  • 总加载阶段时间 282 毫秒 0.33%
  • 总分析阶段时间 15.2 ms 0.02%
  • 总准备阶段时间 1.002 秒 1.19%
  • 总执行阶段时间 71.549 秒 84.63%
  • 总完成阶段时间 30.9 毫秒 0.04%
  • 总运行时间 84.540 秒 100.00%

  • 初始化阶段信息
  • 总初始化时间 11.560 秒
  • 总时间(跨所有线程)花费在:
  • 类型 总计数平均值
  • VFS_STAT 88.18% 12223 166 毫秒
  • VFS_DIR 10.49% 785 307 毫秒
  • VFS_READLINK 0.81% 221 84.4 毫秒
  • VFS_OPEN 0.01% 2 109 毫秒
  • VFS_READ 0.01% 4 28.7 毫秒

  • 执行阶段信息
  • 总准备时间 1.002 秒
  • 总执行时间 71.549 秒
  • 总完成时间 30.9 毫秒
  • Action 依赖映射创建 0.00 毫秒
  • 实际执行时间 71.549 秒
  • 总时间(跨所有线程)花费在:
  • 类型 总计数平均值
  • Action 0.00% 1 2.09 毫秒
  • ACTION_CHECK 0.00% 1 0.71 毫秒
  • ACTION_EXECUTE 0.00% 1 1.53 毫秒
  • 信息 0.00% 1 0.00 毫秒
  • VFS_STAT 39.71% 1803 26.3 毫秒
  • VFS_DIR 0.02% 2 14.0 毫秒
  • VFS_READLINK 0.36% 18 23.9 毫秒
  • VFS_MD5 0.00% 1 1.45 毫秒
  • VFS_DELETE 0.00% 1 1.44 毫秒
  • VFS_OPEN 0.02% 5 4.30 毫秒
  • VFS_READ 0.00% 4 0.48 毫秒
  • VFS_WRITE 0.00% 2 0.32 毫秒
  • SKYFRAME_EVAL 0.03% 1 31.0 毫秒
  • SKYFUNCTION 0.02% 5 5.83 毫秒
  • 关键路径(25.7 毫秒):
  • Id 分时说明
  • 15078 25.7 毫秒 100.00% Action “BazelWorkspaceStatusAction stable-status.txt”
  • 最佳答案

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

    关于grpc - 巴泽尔跑得很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738232/

    相关文章:

    bazel - 处理复杂和大的依赖关系

    Python 无法从 bazel git_repository() 依赖项导入包

    go - 如何在 Go 中断言客户端的 gRPC 错误代码

    java - Scala (java) grpc 异步拦截器状态传播

    python - 有没有一种简单的方法可以优雅地关闭 python grpc 服务器?

    git - Bazel 构建不尊重我的 git 子模块

    node.js - 在 Windows 10(64 位)上使用 virtualbox 5.2.8 在 ubuntu 16.04 LTS 中执行 "npm install"命令时出错

    docker - 使用 gRPC Docker 容器构建 Go 时出错

    c++ - 如何在 Bazel 中忽略来自外部 C++ 依赖项 header 的警告

    javascript - 如何使用 Bazel 构建 TypeScript