]> Cypherpunks repositories - gostls13.git/commit
runtime: faster GC scan
authorDmitriy Vyukov <dvyukov@google.com>
Wed, 8 Oct 2014 09:51:12 +0000 (13:51 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Wed, 8 Oct 2014 09:51:12 +0000 (13:51 +0400)
commitb8fdaaf028c54c97be20fa9dfbe372578902fad8
treedca3bfd2a941eef927a4dbab75cc50e498059169
parent94bdf13497f8a72673d71cc4d4c1a6e05a35b2dc
runtime: faster GC scan
The change contains 3 spot optimizations to scan loop:
1. Don't use byte vars, use uintptr's instead.
This seems to alleviate some codegen issue,
and alone accounts to a half of speedup.
2. Remove bitmap cache. Currently we cache only 1 byte,
so caching is not particularly effective anyway.
Removal of the cache simplifies code and positively affects regalloc.
3. Replace BitsMultiword switch with if and
do debug checks only in Debug mode.
I've benchmarked changes separately and ensured that
each of them provides speedup on top of the previous one.
This change as a whole fixes the unintentional regressions
of scan loop that were introduced during development cycle.
Fixes #8625.
Fixes #8565.

On go.benchmarks/garbage benchmark:
GOMAXPROCS=1
time: -3.13%
cputime: -3.22%
gc-pause-one: -15.71%
gc-pause-total: -15.71%

GOMAXPROCS=32
time: -1.96%
cputime: -4.43%
gc-pause-one: -6.22%
gc-pause-total: -6.22%

LGTM=khr, rsc
R=golang-codereviews, khr
CC=golang-codereviews, rlh, rsc
https://golang.org/cl/153990043
src/runtime/mgc0.c