]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: don't adjust GC trigger on forced GC
authorAustin Clements <austin@google.com>
Thu, 30 Mar 2017 18:59:53 +0000 (14:59 -0400)
committerAustin Clements <austin@google.com>
Fri, 31 Mar 2017 01:15:16 +0000 (01:15 +0000)
Forced GCs don't provide good information about how to adjust the GC
trigger. Currently we avoid adjusting the trigger on forced GC because
forced GC is also STW and we don't adjust the trigger on STW GC.
However, this will become a problem when forced GC is concurrent.

Fix this by skipping trigger adjustment if the GC was user-forced.

For #18216.

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

index ba7cf9cb14a98f1b1be6599af06aef7a86bb0ccb..9f59d8fa75fff04800864fd2c1a66dc68d5ceadd 100644 (file)
@@ -552,6 +552,13 @@ func (c *gcControllerState) revise() {
 // endCycle updates the GC controller state at the end of the
 // concurrent part of the GC cycle.
 func (c *gcControllerState) endCycle() {
+       if work.userForced {
+               // Forced GC means this cycle didn't start at the
+               // trigger, so where it finished isn't good
+               // information about how to adjust the trigger.
+               return
+       }
+
        h_t := c.triggerRatio // For debugging
 
        // Proportional response gain for the trigger controller. Must