From cb10ff1ef9a9d1606e652573c1add5b698da7b25 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Sat, 4 Apr 2015 12:27:46 -0400 Subject: [PATCH] runtime: report next_gc for initial heap size in gctrace Currently, the initial heap size reported in the gctrace line is the heap_live right before sweep termination. However, we triggered GC when heap_live reached next_gc, and there may have been significant allocation between that point and the beginning of sweep termination. Ideally these would be essentially the same, but currently there's scheduler delay when readying the GC goroutine as well as delay from background sweep finalization. We should fix this delay, but in the mean time, to give the user a better idea of how much the heap grew during the whole of garbage collection, report the trigger rather than what the heap size happened to be after the garbage collector finished rolling out of bed. This will also be more useful for heap growth plots. Change-Id: I08476b9fbcfb2de90592405e9c9f434dfb9eb1f8 Reviewed-on: https://go-review.googlesource.com/8512 Reviewed-by: Rick Hudson --- src/runtime/mgc.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go index 855430e48c..a0975046c7 100644 --- a/src/runtime/mgc.go +++ b/src/runtime/mgc.go @@ -314,7 +314,14 @@ func gc(mode int) { if debug.gctrace > 0 { stwprocs, maxprocs = gcprocs(), gomaxprocs tSweepTerm = nanotime() - heap0 = memstats.heap_live + if mode == gcBackgroundMode { + // We started GC when heap_live == next_gc, + // but the mutator may have allocated between + // then and now. Report heap when GC started. + heap0 = memstats.next_gc + } else { + heap0 = memstats.heap_live + } } if trace.enabled {