commit | 3740768a2f625e7b3310f69bcec47b5dd0898cf1 | [log] [tgz] |
---|---|---|
author | ulfjack <ulfjack@google.com> | Tue Sep 17 06:30:49 2019 -0700 |
committer | Copybara-Service <copybara-worker@google.com> | Tue Sep 17 06:32:57 2019 -0700 |
tree | 565ff310192248afaaaec80c1f28ae3eee556520 | |
parent | 365a26bd89587d46e5cd4375dd4b1b7a8a6e878d [diff] |
Avoid all configured targets depending on all build infos Instead, throw a MissingDepException from CachingAnalysisEnvironment if the build info is missing, and restart the analysis of that configured target in the ConfiguredTargetFunction if so. This removes several Skyframe edges per configured target, since most of them never attempt to access the build info. For builds with a few hundred thousand targets, that's several million edges. The build info Skyframe nodes are the currently the nodes with the largest number of reverse deps, which creates a bottleneck in InMemoryNodeEntry.addReverseDepAndCheckIfDone during analysis, causing significant lock contention. In the builds we have looked at, this was the second most common source of lock contention. However, we have not measured any significant reduction in end-to-end build times. There is already an injected key for the build info factories, but it is never actually used, which looks like an incomplete refactoring. This change finishes that refactoring with the nice benefit of removing the build info factories from the SkyframeExecutor (doing so is a prerequisite for allowing multiple concurrent executions in the same SkyframeExecutor). PiperOrigin-RevId: 269555110
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel only rebuilds what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
Follow our tutorials:
See CONTRIBUTING.md
Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.