From a6083e555cb6dbe43c616126fb52d5d0565a14ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Sun, 11 Dec 2022 15:55:21 +0200 Subject: [PATCH] tests with sysroot --- README.md | 33 +++++++++++++++++++-------------- WORKSPACE | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 2be5d94..b7f4840 100644 --- a/README.md +++ b/README.md @@ -28,30 +28,35 @@ bazel --batch clean; bazel --batch build --spawn_strategy=local --platforms=@zi INFO: Elapsed time: 17.021s, Critical Path: 1.67s ``` -zig cc with `--sandbox_base=/dev/shm`: all sandbox files, including the -zig_sdk, are put to `/dev/shm`. However, they are all symlinks, which means zig -will re-hash all it's dependencies. 42 seconds: - -``` -bazel --batch clean; bazel --batch build --sandbox_base=/dev/shm --platforms=@zig_sdk//libc_aware/platform:linux_amd64_gnu.2.28 ... -INFO: Elapsed time: 42.251s, Critical Path: 5.26s -``` - -zig cc plain: 142 seconds. Sandbox is on a real disk, which means it will take +zig cc plain: 61 seconds. Sandbox is on a real disk, which means it will take even longer to re-hash all its dependencies: ``` bazel --batch clean; bazel --batch build --platforms=@zig_sdk//libc_aware/platform:linux_amd64_gnu.2.28 ... -INFO: Elapsed time: 142.264s, Critical Path: 20.65s +INFO: Elapsed time: 61.128s, Critical Path: 8.35s ``` -Similar to `--config=hermetic-sandbox`. Which means there is something else at -play, not only re-hashing the sandbox files: +zig cc with hardlinks: `--config=hermetic-sandbox`. This uses hardlinks to +zig_sdk instead of symlinks: ``` bazel --batch clean; bazel --batch build --config=hermetic-sandbox --platforms=@zig_sdk//libc_aware/platform:linux_amd64_gnu.2.28 ... -INFO: Elapsed time: 136.957s, Critical Path: 18.14s +INFO: Elapsed time: 45.886s, Critical Path: 9.56s ``` +llvm with sysroot (this sysroot is about half the size of zig): + +``` +bazel --batch clean; bazel --batch build --config=hermetic-sandbox --extra_toolchains=@llvm_toolchain_with_sysroot//:cc-toolchain-x86_64-linux ... +INFO: Elapsed time: 25.644s, Critical Path: 3.03s +``` + +Flame graphs and discussion +--------------------------- + +Flame graphs are in results/. As of 2022-12-11 most of the overhead comes from +creating and deleting the sandboxes. Time for a new sandboxfs! + + [1]: https://sr.ht/~motiejus/bazel-zig-cc [2]: https://github.com/grailbio/bazel-toolchain diff --git a/WORKSPACE b/WORKSPACE index e04c031..fd147aa 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -19,12 +19,41 @@ bazel_toolchain_dependencies() load("@com_grail_bazel_toolchain//toolchain:rules.bzl", "llvm_toolchain") + +LLVM_VERSION = "14.0.0" + llvm_toolchain( name = "llvm_toolchain", - llvm_version = "14.0.0", + llvm_version = LLVM_VERSION, ) -load("@llvm_toolchain//:toolchains.bzl", "llvm_register_toolchains") +# This sysroot is used by github.com/vsco/bazel-toolchains. +http_archive( + name = "org_chromium_sysroot_linux_x64", + build_file_content = """ +filegroup( + name = "sysroot", + srcs = glob(["*/**"]), + visibility = ["//visibility:public"], +) +""", + sha256 = "84656a6df544ecef62169cfe3ab6e41bb4346a62d3ba2a045dc5a0a2ecea94a3", + urls = ["https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/2202c161310ffde63729f29d27fe7bb24a0bc540/debian_stretch_amd64_sysroot.tar.xz"], +) + +llvm_toolchain( + name = "llvm_toolchain_with_sysroot", + llvm_version = LLVM_VERSION, + sysroot = { + "linux-x86_64": "@org_chromium_sysroot_linux_x64//:sysroot", + }, + # We can share the downloaded LLVM distribution with the first configuration. + toolchain_roots = { + "": "@llvm_toolchain_llvm//", + }, +) + +load("@llvm_toolchain_with_sysroot//:toolchains.bzl", "llvm_register_toolchains") #llvm_register_toolchains()