commit | 1cda6e7869534d75defd1b3a86cbdd38e562f3fd | [log] [tgz] |
---|---|---|
author | Hans Wennborg <hans@chromium.org> | Thu Jan 21 13:37:48 2021 |
committer | Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com> | Thu Jan 21 13:37:48 2021 |
tree | 8201f74495f5c9ecc5a2292af6987a94cfcc018a | |
parent | 88cd329ebf2804892d3ff722df693d64f06d3298 [diff] |
[build] Only apply thin_lto_enable_optimizations to select targets Link-time optimization enables greater performance, but leads to significantly longer link times. This change turns off optimization in the link step except for select targets such as the actual browser executable/shared lib. Source files are still compiled with the usual optimization flags, and the ThinLTO mechanism is still used for all links; this only affects whether optimizations are also performed in the link step or not. The motivation is to speed up builds with thin_lto_enable_optimizations so that this can be enabled in official builds on all targets. Currently only ChromeOS and Android use thin_lto_enable_optimizations, and in terms of production builds this is a no-op since the optimization is applied to the shipping binaries as before. However it means that tests and auxiliary binaries won't be optimized during the link step. In terms of build speed, this reduces the link time of v8_context_snapshot_generator in a Linux build with thin_lto_enable_optimizations from 173 to 39 CPU minutes. On Windows, the link time of the same target goes from 2m50 to 1m40 (wall-clock time). Linking unit_tests goes from 8m50 to 5m40. Build timings (best of two) of official "all" builds on my Win workstation: - Without ThinLTO: 25m - With ThinLTO opts: 4h36m - With ThinLTO opts+this patch: 2h39m With the ThinLTO cache enabled (requires fixing crbug.com/871962): - With ThinLTO opts+this patch: 1h52m Hopefully this patch (esp. if we can also fix the thinlto cache bug) would make win-official survive enabling thin_lto_enable_optimizations in official builds. Build timings of official "all" builds on my Linux workstation: (ThinLTO without opts is already enabled in official builds due to CFI, so I didn't measure with it disabled.) - With ThinLTO opts: 4h00m - With ThinLTO + this patch: 1h12m Note that this means test binaries and the shipping browser see different levels of optimization. We think that is the right trade-off: the difference should only matter in case of compiler/linker bugs, and we believe the browser binary gets enough testing (e.g. by perf bots) that such bugs will still be caught. Also to some extent this is already the case: most testing is done on non-official builds, and official builds use different optimizations (notably PGO). We have more ideas for speeding up linking of the non-link-time-optimized targets, but we hope this is enough to enable ThinLTO in official Windows and Linux builds. Bug: 110124, 1057737 Change-Id: I4130c02d0b7fe7012e52c92e51a0b255b576ad2b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2628955 Commit-Queue: Hans Wennborg <hans@chromium.org> Reviewed-by: Nico Weber <thakis@chromium.org> Reviewed-by: Andrew Grieve <agrieve@chromium.org> Cr-Commit-Position: refs/heads/master@{#845618}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone
! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure .
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.