} else if ((!is_nacl && !is_linux) || is_debug || is_official_build || is_chromecast) { # Linux is slowed by having symbols as part of the target binary, whereas # Mac and Windows have them separate, so in Release Linux, default them off, # but keep them on for Official builds and Chromecast builds. symbol_level = 2
This comment says that on linux the binary runs slower with symbols. There are 2 strange things going on here though:
1. Official build gets symbol_level = 2 on linux. This means the official build performance is negatively affected. This was changed to be the case in https://codereview.chromium.org/1373323002.
Official builds get their symbols stripped before being sent to users, so it has no impact on performance after that - but we need the symbols at build time to generate the breakpad db for the binary to decode crashes. For non-official builds we don't care about generating breakpad symbols because we don't ship them to users, so it's not necessary to build them in the first place.
--
--
Chromium Developers mailing list: chromi...@chromium.org
View archives, change email options, or unsubscribe:
http://groups.google.com/a/chromium.org/group/chromium-dev
--
--
What specifically takes 25 vs 145 us?
The .text section is not affected by symbol_level. Afaik the only thing that could be slower is early startup time due to the dynamic loader having to parse a bigger elf header (+ the kernel readahead filling the I/O scheduler with read jobs on useless parts of the binary). But that shouldn't affect perf measurements as it happens before we reach the first line of code in Chrome, hence have any opportunity to bring up tracing or any perf measuring harness.
Like some of the others, I'm not sure if we're talking about compile/build speed or runtime speed.@danakj - can you clarify?
> We can also strip the binaries if that's useful, too.If you do that, in the case of a crash (or just a CHECK) base::debug::StackTrace will start printing addresses and lose actionability. This will make diagnosing a unittest/browsertest crash on the CQ quite hard.
I would be really curious to understand if there is a perf impact due to symbol_level. It should be quite easy to get some numbers using perf trybots.
> The release bots don't build with full symbols, and aren't going toI assume you are talking only about the main waterfall and not the official release bots?Those will still need symbols as they are used to generate the breakpad syms for crash reporting.
> I believe that we think that building with full symbols is both significantly slower and takes up more disk space and as a result most people don't actually want full symbols when doing release builds.When you say "full" you mean symbol_level=2 or symbol_level>0 ?one thing to keep in mind is that symbol_level=0 means no human-readable stacktrace on (D)CHECKs, which might be something that developers still care about on local builds. symbol_level=1 is enough for that, and maybe is a reasonable tradeoff in terms of build time?
> We can also strip the binaries if that's useful, too.My $0.02 is that what would make sense for developers is:is_debug=true -> symbol_level=2 by default. Rationale: if I build for debug I expect to be able to use a debugger. that means symbol_level=2)is_debug=false -> symbol_level=1 by default. Rationale: if I build for release I still expect crashes and CHECKs to spit out a meaningful stack trace.(but maybe I am just being confused by the various comments in this thread and just stating the obvious?)
You received this message because you are subscribed to the Google Groups "Chromium-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to chromium-dev+unsubscribe@chromium.org.
To unsubscribe from this group and stop receiving emails from it, send an email to chromium-dev...@chromium.org.
To unsubscribe from this group and stop receiving emails from it, send an email to chromium-dev+unsubscribe@chromium.org.