1
0
mirror of https://github.com/golang/go synced 2024-11-19 10:24:43 -07:00

cmd/compile: add flag to disable DWARF generation

DWARF generation has non-trivial cost,
and in some cases is not necessary.
Provide an option to opt out.

Alloc impact of disabling DWARF generation:

name       old alloc/op      new alloc/op      delta
Template        38.7MB ± 0%       37.6MB ± 0%  -2.77%  (p=0.016 n=5+4)
Unicode         29.8MB ± 0%       29.8MB ± 0%  -0.16%  (p=0.032 n=5+5)
GoTypes          113MB ± 0%        110MB ± 0%  -2.38%  (p=0.008 n=5+5)
Compiler         463MB ± 0%        457MB ± 0%  -1.34%  (p=0.008 n=5+5)
SSA             1.25GB ± 0%       1.23GB ± 0%  -1.64%  (p=0.008 n=5+5)
Flate           25.3MB ± 0%       25.0MB ± 0%  -1.05%  (p=0.008 n=5+5)
GoParser        31.7MB ± 0%       30.9MB ± 0%  -2.74%  (p=0.008 n=5+5)
Reflect         78.2MB ± 0%       76.7MB ± 0%  -1.90%  (p=0.008 n=5+5)
Tar             26.5MB ± 0%       26.0MB ± 0%  -2.04%  (p=0.008 n=5+5)
XML             42.4MB ± 0%       41.1MB ± 0%  -2.86%  (p=0.008 n=5+5)

name       old allocs/op     new allocs/op     delta
Template          377k ± 0%         360k ± 1%  -4.46%  (p=0.008 n=5+5)
Unicode           321k ± 0%         320k ± 0%    ~     (p=0.151 n=5+5)
GoTypes          1.14M ± 0%        1.10M ± 0%  -4.13%  (p=0.008 n=5+5)
Compiler         4.26M ± 0%        4.13M ± 0%  -3.14%  (p=0.008 n=5+5)
SSA              9.70M ± 0%        9.33M ± 0%  -3.89%  (p=0.008 n=5+5)
Flate             233k ± 0%         228k ± 0%  -2.40%  (p=0.008 n=5+5)
GoParser          316k ± 0%         302k ± 0%  -4.48%  (p=0.008 n=5+5)
Reflect           980k ± 0%         945k ± 0%  -3.62%  (p=0.008 n=5+5)
Tar               249k ± 0%         241k ± 0%  -3.19%  (p=0.008 n=5+5)
XML               391k ± 0%         376k ± 0%  -3.95%  (p=0.008 n=5+5)

Change-Id: I97dbfb6b40195d1e0b91be097a4bf0e7f65b26af
Reviewed-on: https://go-review.googlesource.com/40857
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Josh Bleecher Snyder 2017-04-16 05:53:06 -07:00
parent 89a355c930
commit da67c23fbb
2 changed files with 6 additions and 1 deletions

View File

@ -201,6 +201,8 @@ var flag_race bool
var flag_msan bool var flag_msan bool
var flagDWARF bool
// Whether we are adding any sort of code instrumentation, such as // Whether we are adding any sort of code instrumentation, such as
// when the race detector is enabled. // when the race detector is enabled.
var instrumenting bool var instrumenting bool

View File

@ -118,7 +118,6 @@ func Main(archInit func(*Arch)) {
archInit(&thearch) archInit(&thearch)
Ctxt = obj.Linknew(thearch.LinkArch) Ctxt = obj.Linknew(thearch.LinkArch)
Ctxt.DebugInfo = debuginfo
Ctxt.DiagFunc = yyerror Ctxt.DiagFunc = yyerror
Ctxt.Bso = bufio.NewWriter(os.Stdout) Ctxt.Bso = bufio.NewWriter(os.Stdout)
@ -181,6 +180,7 @@ func Main(archInit func(*Arch)) {
flag.StringVar(&buildid, "buildid", "", "record `id` as the build id in the export metadata") flag.StringVar(&buildid, "buildid", "", "record `id` as the build id in the export metadata")
flag.BoolVar(&pure_go, "complete", false, "compiling complete package (no C or assembly)") flag.BoolVar(&pure_go, "complete", false, "compiling complete package (no C or assembly)")
flag.StringVar(&debugstr, "d", "", "print debug information about items in `list`") flag.StringVar(&debugstr, "d", "", "print debug information about items in `list`")
flag.BoolVar(&flagDWARF, "dwarf", true, "generate DWARF symbols")
obj.Flagcount("e", "no limit on number of errors reported", &Debug['e']) obj.Flagcount("e", "no limit on number of errors reported", &Debug['e'])
obj.Flagcount("f", "debug stack frames", &Debug['f']) obj.Flagcount("f", "debug stack frames", &Debug['f'])
obj.Flagcount("h", "halt on error", &Debug['h']) obj.Flagcount("h", "halt on error", &Debug['h'])
@ -227,6 +227,9 @@ func Main(archInit func(*Arch)) {
Ctxt.Debugasm = Debug_asm Ctxt.Debugasm = Debug_asm
Ctxt.Debugvlog = Debug_vlog Ctxt.Debugvlog = Debug_vlog
if flagDWARF {
Ctxt.DebugInfo = debuginfo
}
if flag.NArg() < 1 { if flag.NArg() < 1 {
usage() usage()