]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime: create initializer for gcControllerState
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 1 Apr 2021 18:01:46 +0000 (18:01 +0000)
committerMichael Knyszek <mknyszek@google.com>
Wed, 14 Apr 2021 03:15:24 +0000 (03:15 +0000)
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 <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/runtime/mgc.go
src/runtime/mgcpacer.go

index b0d46d0060bb00da5f03110cf287429517e147d8..f65402e94cd69ebd43b0dace1bd54d4171c63f47 100644 (file)
@@ -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
index e594dbdc06e60dca66aa6546edaa9ca66b564093..2366cdb84b923e548db24d05c4eefe1abd413c0b 100644 (file)
@@ -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.