Explicitly state what the downsides to sandboxing are. PiperOrigin-RevId: 467160648 Change-Id: I62464908770c24c945befb6eabed4d6e880397be
diff --git a/site/en/docs/sandboxing.md b/site/en/docs/sandboxing.md index eb53d4d..4b5839b 100644 --- a/site/en/docs/sandboxing.md +++ b/site/en/docs/sandboxing.md
@@ -6,7 +6,7 @@ This article covers sandboxing in Bazel, installing `sandboxfs`, and debugging your sandboxing environment. -_Sandboxing_ is a permission restricting strategy that isolates processes from +*Sandboxing* is a permission restricting strategy that isolates processes from each other or from resources in a system. For Bazel, this means restricting file system access. @@ -95,6 +95,26 @@ strategies that Bazel tries to use (for example, `bazel build --spawn_strategy=worker,linux-sandbox`). +Dynamic execution usually requires sandboxing for local execution. To opt out, +pass the `--experimental_local_lockfree_output` flag. Dynamic execution silently +sandboxes [persistent workers](/persistent-workers.html). + +## Downsides to sandboxing {:#sandboxing_downsides} + +- Sandboxing incurs extra setup and teardown cost. How big this cost is + depends on many factors, including the shape of the build and the + performance of the host OS. For Linux, sandboxed builds are rarely more than + a few percent slower. Setting `--experimental_reuse_sandbox_directories` can + mitigate the setup and teardown cost. + +- Sandboxing effectively disables any cache the tool may have. You can + mitigate this by using [persistent workers](/persistent-workers.html), at + the cost of weaker sandbox guarantees. + +- [Multiplex workers](/multiplex-worker.html) require explicit worker support + to be sandboxed. Workers that do not support multiplex sandboxing run as + singleplex workers under dynamic execution, which can cost extra memory. + ## sandboxfs {:#sandboxfs} `sandboxfs` is a FUSE file system that exposes an arbitrary view of the @@ -115,20 +135,21 @@ **Run `sandboxfs`** -1. (macOS-only) [Install OSXFUSE](https://osxfuse.github.io/){: .external}. -2. (macOS-only) Run: +1. (macOS-only) [Install OSXFUSE](https://osxfuse.github.io/){: .external}. +2. (macOS-only) Run: - ```posix-terminal - sudo sysctl -w vfs.generic.osxfuse.tunables.allow_other=1 - ``` - You will need to do this after installation and after every reboot to ensure - core macOS system services work through sandboxfs. + ```posix-terminal + sudo sysctl -w vfs.generic.osxfuse.tunables.allow_other=1 + ``` -3. Run a Bazel build with `--experimental_use_sandboxfs`. + You will need to do this after installation and after every reboot to ensure + core macOS system services work through sandboxfs. - ```posix-terminal - bazel build {{ '<var>' }}target{{ '</var>' }} --experimental_use_sandboxfs - ``` +3. Run a Bazel build with `--experimental_use_sandboxfs`. + + ```posix-terminal + bazel build {{ '<var>' }}target{{ '</var>' }} --experimental_use_sandboxfs + ``` **Troubleshooting** @@ -143,23 +164,22 @@ ### Deactivated namespaces {:#deactivated-namespaces} -On some platforms, such as [Google Kubernetes -Engine](https://cloud.google.com/kubernetes-engine/){: .external} cluster nodes -or Debian, user namespaces are deactivated by default due to security -concerns. If the `/proc/sys/kernel/unprivileged_userns_clone` file exists and -contains a 0, you can activate user namespaces by running: +On some platforms, such as +[Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/){: .external} +cluster nodes or Debian, user namespaces are deactivated by default due to +security concerns. If the `/proc/sys/kernel/unprivileged_userns_clone` file +exists and contains a 0, you can activate user namespaces by running: - ```posix-terminal +```posix-terminal sudo sysctl kernel.unprivileged_userns_clone=1 - ``` +``` ### Rule execution failures {:#rule-failures} -The sandbox may fail to execute rules because of the system setup. -If you see a message like `namespace-sandbox.c:633: execvp(argv[0], argv): No -such file or directory`, try to deactivate the sandbox with -`--strategy=Genrule=local` for genrules, and `--spawn_strategy=local` -for other rules. +The sandbox may fail to execute rules because of the system setup. If you see a +message like `namespace-sandbox.c:633: execvp(argv[0], argv): No such file or +directory`, try to deactivate the sandbox with `--strategy=Genrule=local` for +genrules, and `--spawn_strategy=local` for other rules. ### Detailed debugging for build failures {:#debugging-build-failures}