cpu 标记在哪里被考虑在内

Where are cpu tags taken into account

https://bazel.googlesource.com/bazel/+show/master/CHANGELOG.md 提到,有 cpu 标签。当然,现在我的问题是这些标签还被考虑到了什么地方。

在这里发布提交消息,因为我认为它完美地回答了问题:

TLDR:您可以通过在 BUILD 文件中的规则中添加 "cpu:"(例如 "cpu:4" 用于四核)标记来增加测试的 CPU 预留。如果并行性过多,测试会使您的系统不堪重负,则可以使用此方法。

这让用户可以指定他们的测试至少需要 CPU 个内核 到 运行 而不是片状。预订 4 CPUs 的示例:

sh_test(
  name = "test",
  size = "large",
  srcs = ["test.sh"],
  tags = ["cpu:4"],
)

这也可以被远程执行策略用来调整他们的 资源调整。


自 2017 年 6 月 21 日起,可以使用以下替代选项:

genrule:设置 tagssh_test 相同。 示例:

genrule(
    name = "foo",
    srcs = [],
    outs = ["foo.h"],
    cmd = "./$(location create_foo.pl) > \"$@\"",
    tools = ["create_foo.pl"],
    tags = ["cpu:4"],
)

Skylark 规则只要您不使用 Workers,这就可以工作。 See. 对于 Skylark 规则 cpu 可以单独为任何创建的操作手动设置。这是通过设置 execution_requirements 来实现的。 示例:

ctx.action(
    execution_requirements = {
        "cpu:4": "", # This is no mistake - you really encode the value in the dict key and an empty string in dict value
    },
)