New issue
Advanced search Search tips

Issue 680795 link

Starred by 2 users

Issue metadata

Status: WontFix
Owner:
Closed: Jun 2018
Cc:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 3
Type: Bug

Blocking:
issue 673025


Participants' hotlists:
PGO-bugs


Sign in to add a comment

Remove the full_wpo_on_official flag (enable full WPO by default).

Project Member Reported by sebmarchand@chromium.org, Jan 13 2017

Issue description

The 'full_wpo_on_official' GN flag allows to enable LTCG (WPO) by default for all the targets in Chrome, this flag is currently off by default because of the performance of doing full LTCG for every official build. There's several continuous official builders that build Chrome and its unittests, so enabling LTCG globally means that you're now optimizing every unittests with LTCG, and so the link time increase significantly as well as the memory usage (which cause some paging on the builders with less than 128GB of RAM).

Ideally this flag shouldn't exist and this should be the default configuration (and PGO should be the default config of chrome_child.dll), but there's a big performance cost in doing this (last time that I've tried the perf waterfall was on fire because of the build timeouts), so we should probably use a more gradual approach (e.g. turn it on one builder at a time in mb_config and add the required slaves to the bots that can't handle this).

wdyt? This is largely related to 673025 and it's a pretty important issue.


[1] https://cs.chromium.org/chromium/src/build/config/compiler/BUILD.gn?rcl=0&l=1378
 
Aha, that's a reasonable reason. :)

I guess we ideally would want the link of chrome[_child].dll to be WPO but the tests not to be. But I guess that'd be pretty much a disaster since we'd have to build all the objs twice then. (Maybe? Or maybe we'd just get a lot of "you screwed up you settings warnings, and it'd work OK?)

Otherwise, yeah, I guess turning it on slowly, and then flipping it so that the default is on, and the bots that can't handle it have it off?
I thought about trying to use LTCG on chrome[_child].dll only but I'm pretty sure that it won't work, most of the shared code (probably everything except the *_unittests.cc files) will be compiled with GL and so we'll get a lot of these warnings in the log:
 "MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance"

which mean that the targets will still be linked with LTCG, we'll just slow down the build even more.

I really don't like this partial LTCG thing, it has been here for years and it's what we used to ship (we never shipped full LTCG except for a few dev/beta builds before switching to PGO), but it's a hack that has lived for too long (and now it's hard to get rid of it).
Cc: sullivan@chromium.org sebmarchand@chromium.org
 Issue 681146  has been merged into this issue.
Blocking: 673025
Labels: Pri-3
Lowering the priority of the PGO bugs as we've switched the official build to Clang. I'll close these bugs once we decide that we won't support the VS build anymore.
Status: WontFix (was: Untriaged)
We don't use link.exe anymore.

Sign in to add a comment