From 9bce7b70fde8572880e7a47bc2a4df8fb7b2c286 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 1 Apr 2021 18:01:46 +0000 Subject: [PATCH] runtime: create initializer for gcControllerState Now that gcControllerState contains almost all of the pacer state, create an initializer for it instead of haphazardly setting some fields. For #44167. Change-Id: I4ce1d5dd82003cb7c263fa46697851bb22a32544 Reviewed-on: https://go-review.googlesource.com/c/go/+/306601 Trust: Michael Knyszek Run-TryBot: Michael Knyszek TryBot-Result: Go Bot Reviewed-by: Michael Pratt --- src/runtime/mgc.go | 16 +++------------- src/runtime/mgcpacer.go | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go index b0d46d0060..f65402e94c 100644 --- a/src/runtime/mgc.go +++ b/src/runtime/mgc.go @@ -153,22 +153,12 @@ func gcinit() { if unsafe.Sizeof(workbuf{}) != _WorkbufSize { throw("size of Workbuf is suboptimal") } - gcController.heapMinimum = defaultHeapMinimum - // No sweep on the first cycle. mheap_.sweepDrained = 1 - // Set a reasonable initial GC trigger. - gcController.triggerRatio = 7 / 8.0 - - // Fake a heapMarked value so it looks like a trigger at - // heapMinimum is the appropriate growth from heapMarked. - // This will go into computing the initial GC goal. - gcController.heapMarked = uint64(float64(gcController.heapMinimum) / (1 + gcController.triggerRatio)) - - // Set gcPercent from the environment. This will also compute - // and set the GC trigger and goal. - _ = setGCPercent(readGOGC()) + // Initialize GC pacer state. + // Use the environment variable GOGC for the initial gcPercent value. + gcController.init(readGOGC()) work.startSema = 1 work.markDoneSema = 1 diff --git a/src/runtime/mgcpacer.go b/src/runtime/mgcpacer.go index e594dbdc06..2366cdb84b 100644 --- a/src/runtime/mgcpacer.go +++ b/src/runtime/mgcpacer.go @@ -243,6 +243,21 @@ type gcControllerState struct { _ cpu.CacheLinePad } +func (c *gcControllerState) init(gcPercent int32) { + c.heapMinimum = defaultHeapMinimum + + // Set a reasonable initial GC trigger. + c.triggerRatio = 7 / 8.0 + + // Fake a heapMarked value so it looks like a trigger at + // heapMinimum is the appropriate growth from heapMarked. + // This will go into computing the initial GC goal. + c.heapMarked = uint64(float64(c.heapMinimum) / (1 + c.triggerRatio)) + + // This will also compute and set the GC trigger and goal. + _ = setGCPercent(gcPercent) +} + // startCycle resets the GC controller's state and computes estimates // for a new GC cycle. The caller must hold worldsema and the world // must be stopped. -- 2.48.1