]> Cypherpunks repositories - gostls13.git/commit
cmd/gc, cmd/ld, runtime: compact liveness bitmaps
authorRuss Cox <rsc@golang.org>
Wed, 2 Apr 2014 20:49:27 +0000 (16:49 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 2 Apr 2014 20:49:27 +0000 (16:49 -0400)
commit4676fae525a5c399274ac0fcb9503aee11d37c56
tree7c9205be2f1b00ec7d42e04584234c594c912bf4
parent9f9c9abb7e4bcc10398e2264a33cfe9ed805439f
cmd/gc, cmd/ld, runtime: compact liveness bitmaps

Reduce footprint of liveness bitmaps by about 5x.

1. Mark all liveness bitmap symbols as 4-byte aligned
(they were aligned to a larger size by default).

2. The bitmap data is a bitmap count n followed by n bitmaps.
Each bitmap begins with its own count m giving the number
of bits. All the m's are the same for the n bitmaps.
Emit this bitmap length once instead of n times.

3. Many bitmaps within a function have the same bit values,
but each call site was given a distinct bitmap. Merge duplicate
bitmaps so that no bitmap is written more than once.

4. Many functions end up with the same aggregate bitmap data.
We used to name the bitmap data funcname.gcargs and funcname.gclocals.
Instead, name it gclocals.<md5 of data> and mark it dupok so
that the linker coalesces duplicate sets. This cut the bitmap
data remaining after step 3 by 40%; I was not expecting it to
be quite so dramatic.

Applied to "go build -ldflags -w code.google.com/p/go.tools/cmd/godoc":

                bitmaps           pclntab           binary on disk
before this CL  1326600           1985854           12738268
4-byte align    1154288 (0.87x)   1985854 (1.00x)   12566236 (0.99x)
one bitmap len   782528 (0.54x)   1985854 (1.00x)   12193500 (0.96x)
dedup bitmap     414748 (0.31x)   1948478 (0.98x)   11787996 (0.93x)
dedup bitmap set 245580 (0.19x)   1948478 (0.98x)   11620060 (0.91x)

While here, remove various dead blocks of code from plive.c.

Fixes #6929.
Fixes #7568.

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/83630044
14 files changed:
src/cmd/gc/go.h
src/cmd/gc/md5.c
src/cmd/gc/md5.h
src/cmd/gc/pgen.c
src/cmd/gc/plive.c
src/cmd/gc/subr.c
src/cmd/ld/lib.h
src/cmd/ld/pobj.c
src/cmd/ld/symtab.c
src/liblink/objfile.c
src/pkg/runtime/heapdump.c
src/pkg/runtime/malloc.h
src/pkg/runtime/mgc0.c
src/pkg/runtime/stack.c