AOS / Docs

Build concurrency and resource pressure

Some builds may fail under high resource utilization and high concurrency. Nested build jobs, compiler codegen work, thread pools, and test processes can consume memory or file descriptors beyond what the outer job count suggests. A failure under those conditions does not, by itself, identify a compiler bug.

The following packages previously carried concurrency or execution limits and are useful starting points when investigating such failures:

Package or buildArea to watchValidation when removing limits
Rust 1.74 bootstrapmrustc/minicargo C++ compilation and nested Rust bootstrap jobsUncapped mrustc/minicargo compilation passed; the remaining bootstrap was not rerun.
Intermediate and final Rust compilersCodegen parallelism and Cargo/tool rebuilding during both build and installUncapped Rust 1.79 and 1.81 builds and installations passed. Earlier compiler-corruption claims were not reproduced. Other tiers were not rerun.
OpenJDK 7 and 8Nested IcedTea and javac bootstrap phasesNot rerun without the limits.
OpenJDK 11Boot JVM execution and parallel compiler requestsUncapped build and installation passed.
OpenJDK 14 Darwin cross buildInterim javac and parallel image generationNot rerun without the limit.
GuileThread wakeup pipes and descriptor usage in the thread testsDescriptor exhaustion and an FD_SETSIZE abort were reproduced. The high-descriptor regression and full suite passed with 32 build jobs after fixing wakeup handling and isolating parallel port-test fixtures.
Bash, Perl, and their historical toolchain buildsBuild parallelism, including Perl's Darwin extension buildThe complete native/cross matrix was not rerun.
AutogenParallel test executionNot rerun without the limit.

These observations identify investigation targets, not permanent concurrency ceilings. Preserve the failing command, inputs, logs, and available resource information. Temporary per-command limits can help distinguish resource exhaustion from repeatable build-graph or runtime defects.