]> Cypherpunks repositories - gostls13.git/commit
runtime: enlarge GC work buffer size
authorAustin Clements <austin@google.com>
Fri, 2 Oct 2015 13:51:12 +0000 (09:51 -0400)
committerAustin Clements <austin@google.com>
Tue, 3 Nov 2015 15:53:38 +0000 (15:53 +0000)
commit18705721807abd31888609920cce6a2b59e67ab7
treea4672d8409865ff2680186b0ef913b417dd8bd7b
parent456528304d4a20ee438b440fd6807c3f5ca7d5e2
runtime: enlarge GC work buffer size

Currently the GC work buffers are only 256 bytes and hence can record
only 24 64-bit pointer. They were reduced from 4K in commits db7fd1c
and a15818f as a way to minimize the amount of work the per-P workbuf
caches could "hide" from the mark phase and carry in to the mark
termination phase. However, this approach wasn't very robust and we
later added a "mark 2" phase to address this problem head-on.

Because of mark 2, there's now no benefit to having very small work
buffers. But there are plenty of downsides: small work buffers
increase contention on the work lists, increase the frequency and
hence net overhead of acquiring and releasing work buffers, and
somewhat increase memory overhead of the GC.

This commit expands work buffers back to 4K (504 64-bit pointers).
This reduces the rate of writes to work.full in the garbage benchmark
from a peak of ~780,000 writes/sec to a peak of ~32,000 writes/sec.

This has negligible effect on the go1 benchmarks. It slightly slows
down the garbage benchmark.

name              old time/op  new time/op  delta
XBenchGarbage-12  5.37ms ± 5%  5.60ms ± 2%  +4.37%  (p=0.000 n=20+20)

Change-Id: Ic9cc28e7a125d23d9faf4f5e690fb8aa9bcdfb28
Reviewed-on: https://go-review.googlesource.com/15893
Reviewed-by: Rick Hudson <rlh@golang.org>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/runtime/mgcwork.go