]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: report next_gc for initial heap size in gctrace
authorAustin Clements <austin@google.com>
Sat, 4 Apr 2015 16:27:46 +0000 (12:27 -0400)
committerAustin Clements <austin@google.com>
Thu, 9 Apr 2015 22:18:06 +0000 (22:18 +0000)
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 <rlh@golang.org>
src/runtime/mgc.go

index 855430e48c7603969c363c5b7dc37a499338eeed..a0975046c711831190e1968e5e22371aace4d42c 100644 (file)
@@ -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 {