• Cherry Zhang's avatar
    cmd/link: reduce the size of Reloc struct · 8ef45cf6
    Cherry Zhang authored
    For linking large binaries, the slice of Relocs consumes a large
    amount of memory. We can reduce this memory consumption by
    shrinking the size of the Reloc struct. This CL moves the fields
    used only in external linking or only on PPC64 and S390X to a
    lazily initialized side struct.
    
    Linking k8s.io/kubernetes/cmd/kube-apiserver on Linux/AMD64,
    before:
    inuse_space 1240.25MB total
    438.11MB 35.32% 35.32%   438.11MB 35.32%  cmd/link/internal/objfile.(*objReader).readSlices
    
    after:
    inuse_space 1123.39MB total
    306.85MB 27.31% 55.03%   306.85MB 27.31%  cmd/link/internal/objfile.(*objReader).readSlices
    
    Under GOGC=5 (to simulate system under memory pressure), the max
    RSS reduces from ~2.05G to ~1.83G. Even with external linking the
    max RSS doesn't increase.
    
    Change-Id: I9bb8a8effaed24a8b3c4b1cfb93e6992b8740f91
    Reviewed-on: https://go-review.googlesource.com/c/go/+/173437
    Run-TryBot: Cherry Zhang <cherryyz@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
    8ef45cf6
symbol.go 10 KB