]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime: remove GODEBUG=gctrace=2 mode
authorAustin Clements <austin@google.com>
Wed, 15 Aug 2018 20:19:21 +0000 (16:19 -0400)
committerAustin Clements <austin@google.com>
Tue, 2 Oct 2018 20:35:17 +0000 (20:35 +0000)
It turns out if you set GODEBUG=gctrace=2, it enables an obscure
debugging mode that, in addition to printing gctrace statistics, also
does a second STW GC following each regular GC. This debugging mode
has long since lost its value (you could maybe use it to analyze
floating garbage, except that we don't print the gctrace line on the
second GC), and it interferes substantially with the operation of the
GC by messing up the statistics used to schedule GCs.

It's also a source of mark termination GC work when we're in
concurrent GC mode, so it's going to interfere with eliminating mark
2. And it's going to get in the way of unifying STW and concurrent GC.

This CL removes this debugging mode.

Updates #26903. This is preparation for eliminating mark 2 and
unifying STW GC and concurrent GC.

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

index 1773c8fe7ebe461bbbbb9c44bc69885d0dafde9b..3be1eca09c0d9ada402e038fdcc248e9751a3ccb 100644 (file)
@@ -61,8 +61,7 @@ It is a comma-separated list of name=val pairs setting these named variables:
 
        gctrace: setting gctrace=1 causes the garbage collector to emit a single line to standard
        error at each collection, summarizing the amount of memory collected and the
-       length of the pause. Setting gctrace=2 emits the same summary but also
-       repeats each collection. The format of this line is subject to change.
+       length of the pause. The format of this line is subject to change.
        Currently, it is:
                gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # P
        where the fields are as follows:
index c95b5ed37f8efcb267a02a8fe4994c6027be7380..f975011191ad5279980699ddbdb583355a8837d3 100644 (file)
@@ -1558,23 +1558,6 @@ func gcMarkTermination(nextTriggerRatio float64) {
                // marking is complete so we can turn the write barrier off
                setGCPhase(_GCoff)
                gcSweep(work.mode)
-
-               if debug.gctrace > 1 {
-                       startTime = nanotime()
-                       // The g stacks have been scanned so
-                       // they have gcscanvalid==true and gcworkdone==true.
-                       // Reset these so that all stacks will be rescanned.
-                       gcResetMarkState()
-                       finishsweep_m()
-
-                       // Still in STW but gcphase is _GCoff, reset to _GCmarktermination
-                       // At this point all objects will be found during the gcMark which
-                       // does a complete STW mark and object scan.
-                       setGCPhase(_GCmarktermination)
-                       gcMark(startTime)
-                       setGCPhase(_GCoff) // marking is done, turn off wb.
-                       gcSweep(work.mode)
-               }
        })
 
        _g_.m.traceback = 0