• Than McIntosh's avatar
    [dev.link] cmd/link/internal/loader: do more bulk allocation · 5aea5979
    Than McIntosh authored
    Change the loader to do more bulk allocation when making slices of
    small objects (sym.Reloc, etc) as part of creating and populating
    sym.Symbols in loader.LoadFull(). This replaces a large number of
    small allocations with a smaller number of large allocations,
    improving performace. Compilebench numbers (linker portion) for this
    change:
    
    name                      old time/op       new time/op       delta
    LinkCompiler                    1.71s ±11%        1.57s ± 9%   -8.35%  (p=0.000 n=19+20)
    LinkWithoutDebugCompiler        1.19s ±14%        1.10s ±13%   -7.93%  (p=0.000 n=20+19)
    
    name                      old user-time/op  new user-time/op  delta
    LinkCompiler                    1.86s ±15%        1.34s ±10%  -28.02%  (p=0.000 n=20+20)
    LinkWithoutDebugCompiler        1.05s ±14%        0.95s ± 9%   -9.17%  (p=0.000 n=19+20)
    
    Hyperkube from kubernetes doesn't show any significant benefit (which
    seems a little surprising).
    
    Change-Id: Ide97f78532fb60b08bb6e4cfa097e9058f7ea8ab
    Reviewed-on: https://go-review.googlesource.com/c/go/+/203457
    Run-TryBot: Than McIntosh <thanm@google.com>
    Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    Reviewed-by: default avatarJeremy Faller <jeremy@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    5aea5979
loader.go 32.8 KB