From e7ab1a5ba83cd013af24b011d9d3a88dc5b05c07 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 1 Apr 2021 18:09:59 +0000 Subject: [PATCH] runtime: create setGCPercent method for gcControllerState This change breaks out the computations done by setGCPercent into a method on gcControllerState for easier testing later. It leaves behind the global implementation details. For #44167. Change-Id: I3b0cf1475b032fcd4ebbd01cf4e80de0b55ce7b0 Reviewed-on: https://go-review.googlesource.com/c/go/+/306602 Trust: Michael Knyszek Run-TryBot: Michael Knyszek TryBot-Result: Go Bot Reviewed-by: Michael Pratt --- src/runtime/mgcpacer.go | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/runtime/mgcpacer.go b/src/runtime/mgcpacer.go index 2366cdb84b..ea3b39f24d 100644 --- a/src/runtime/mgcpacer.go +++ b/src/runtime/mgcpacer.go @@ -255,7 +255,7 @@ func (c *gcControllerState) init(gcPercent int32) { c.heapMarked = uint64(float64(c.heapMinimum) / (1 + c.triggerRatio)) // This will also compute and set the GC trigger and goal. - _ = setGCPercent(gcPercent) + c.setGCPercent(gcPercent) } // startCycle resets the GC controller's state and computes estimates @@ -784,19 +784,31 @@ func gcEffectiveGrowthRatio() float64 { return egogc } +// setGCPercent updates gcPercent and all related pacer state. +// Returns the old value of gcPercent. +// +// The world must be stopped, or mheap_.lock must be held. +func (c *gcControllerState) setGCPercent(in int32) int32 { + assertWorldStoppedOrLockHeld(&mheap_.lock) + + out := c.gcPercent + if in < 0 { + in = -1 + } + c.gcPercent = in + c.heapMinimum = defaultHeapMinimum * uint64(c.gcPercent) / 100 + // Update pacing in response to gcPercent change. + c.commit(c.triggerRatio) + + return out +} + //go:linkname setGCPercent runtime/debug.setGCPercent func setGCPercent(in int32) (out int32) { // Run on the system stack since we grab the heap lock. systemstack(func() { lock(&mheap_.lock) - out = gcController.gcPercent - if in < 0 { - in = -1 - } - gcController.gcPercent = in - gcController.heapMinimum = defaultHeapMinimum * uint64(gcController.gcPercent) / 100 - // Update pacing in response to gcPercent change. - gcController.commit(gcController.triggerRatio) + out = gcController.setGCPercent(in) unlock(&mheap_.lock) }) -- 2.50.0