• Brad Fitzpatrick's avatar
    cmd/link: simplify readSymName, taking advantage of bufio.Reader · 73edd7b2
    Brad Fitzpatrick authored
    Now that cmd/link uses bufio.Reader, take advantage of it.
    I find this new version easier to reason about.
    
    Reduces allocations by 1.1% when linking a basic HTTP server.
    
    Numbers are stable with each round measuring using:
    rm prof.mem; go tool link -o foo  -memprofile=prof.mem -memprofilerate=1 foo.a
    
    Before:
    
    65.36MB of 74.53MB total (87.70%)
    Dropped 157 nodes (cum <= 0.37MB)
    Showing top 10 nodes out of 39 (cum >= 1.47MB)
          flat  flat%   sum%        cum   cum%
       21.48MB 28.81% 28.81%    21.48MB 28.81%  cmd/link/internal/ld.Linklookup
       16.04MB 21.52% 50.33%    16.04MB 21.52%  cmd/link/internal/ld.(*objReader).readSlices
        4.61MB  6.19% 56.52%     4.61MB  6.19%  cmd/link/internal/ld.(*objReader).readSymName
        4.51MB  6.05% 62.57%     6.32MB  8.48%  cmd/link/internal/ld.writelines
        4.50MB  6.03% 68.60%     4.50MB  6.03%  cmd/link/internal/ld.Symgrow
        4.02MB  5.39% 73.99%     4.02MB  5.39%  cmd/link/internal/ld.linknew
        3.98MB  5.34% 79.33%     3.98MB  5.34%  cmd/link/internal/ld.setaddrplus
        2.96MB  3.97% 83.30%    28.78MB 38.62%  cmd/link/internal/ld.(*objReader).readRef
        1.81MB  2.43% 85.73%     1.81MB  2.43%  cmd/link/internal/ld.newcfaoffsetattr
        1.47MB  1.97% 87.70%     1.47MB  1.97%  cmd/link/internal/ld.(*objReader).readSym
    
    After:
    
    64.66MB of 73.87MB total (87.53%)
    Dropped 156 nodes (cum <= 0.37MB)
    Showing top 10 nodes out of 40 (cum >= 1.47MB)
          flat  flat%   sum%        cum   cum%
       21.48MB 29.08% 29.08%    21.48MB 29.08%  cmd/link/internal/ld.Linklookup
       16.04MB 21.71% 50.79%    16.04MB 21.71%  cmd/link/internal/ld.(*objReader).readSlices
        4.51MB  6.10% 56.90%     6.32MB  8.56%  cmd/link/internal/ld.writelines
        4.50MB  6.09% 62.99%     4.50MB  6.09%  cmd/link/internal/ld.Symgrow
        4.02MB  5.44% 68.42%     4.02MB  5.44%  cmd/link/internal/ld.linknew
        3.98MB  5.38% 73.81%     3.98MB  5.38%  cmd/link/internal/ld.setaddrplus
        3.90MB  5.28% 79.09%     3.90MB  5.28%  cmd/link/internal/ld.(*objReader).readSymName
        2.96MB  4.01% 83.09%    28.08MB 38.01%  cmd/link/internal/ld.(*objReader).readRef
        1.81MB  2.45% 85.55%     1.81MB  2.45%  cmd/link/internal/ld.newcfaoffsetattr
        1.47MB  1.99% 87.53%     1.47MB  1.99%  cmd/link/internal/ld.(*objReader).readSym
    
    Also tested locally with asserts that that the calculated length is
    always correct and thus the adjName buf never reallocates.
    
    Change-Id: I19e3e8bfa6a12bcd8b5216f6232f42c122e4f80e
    Reviewed-on: https://go-review.googlesource.com/21481Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
    Run-TryBot: David Crawshaw <crawshaw@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    73edd7b2
Name
Last commit
Last update
..
addr2line Loading commit data...
api Loading commit data...
asm Loading commit data...
cgo Loading commit data...
compile Loading commit data...
cover Loading commit data...
dist Loading commit data...
doc Loading commit data...
fix Loading commit data...
go Loading commit data...
gofmt Loading commit data...
internal Loading commit data...
link Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
pprof Loading commit data...
trace Loading commit data...
vet Loading commit data...
yacc Loading commit data...