]> Cypherpunks repositories - gostls13.git/commit
cmd/link: reduce the size of Reloc struct
authorCherry Zhang <cherryyz@google.com>
Tue, 23 Apr 2019 15:34:58 +0000 (11:34 -0400)
committerCherry Zhang <cherryyz@google.com>
Fri, 26 Apr 2019 20:50:31 +0000 (20:50 +0000)
commit8ef45cf60b347abb1a08416fca1b6d19d317b26e
treeec8e55e26c634c4d1d1b0742da28730ad60ee3bc
parent1805f425ada8184b53175fd166b5fec7c02850a4
cmd/link: reduce the size of Reloc struct

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: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/internal/objabi/reloctype.go
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ppc64/asm.go
src/cmd/link/internal/s390x/asm.go
src/cmd/link/internal/sym/reloc.go
src/cmd/link/internal/sym/symbol.go