]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime: increase g0 stack size in non-cgo case
authorCherry Mui <cherryyz@google.com>
Fri, 8 Sep 2023 16:14:30 +0000 (12:14 -0400)
committerCherry Mui <cherryyz@google.com>
Fri, 8 Sep 2023 18:40:23 +0000 (18:40 +0000)
Currently, for non-cgo programs, the g0 stack size is 8 KiB on
most platforms. With PGO which could cause aggressive inlining in
the runtime, the runtime stack frames are larger and could
overflow the 8 KiB g0 stack. Increase it to 16 KiB. This is only
one per OS thread, so it shouldn't increase memory use much.

Fixes #62120.
Fixes #62489.

Change-Id: I565b154517021f1fd849424dafc3f0f26a755cac
Reviewed-on: https://go-review.googlesource.com/c/go/+/526995
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/runtime/proc.go

index 8fab6d46d1488a6b157431208554feabdb64c61f..1ec4712a2b575c2a309352260b58ffea76654fba 100644 (file)
@@ -1542,7 +1542,7 @@ func mstart0() {
                // but is somewhat arbitrary.
                size := gp.stack.hi
                if size == 0 {
-                       size = 8192 * sys.StackGuardMultiplier
+                       size = 16384 * sys.StackGuardMultiplier
                }
                gp.stack.hi = uintptr(noescape(unsafe.Pointer(&size)))
                gp.stack.lo = gp.stack.hi - size + 1024
@@ -1938,7 +1938,7 @@ func allocm(pp *p, fn func(), id int64) *m {
        if iscgo || mStackIsSystemAllocated() {
                mp.g0 = malg(-1)
        } else {
-               mp.g0 = malg(8192 * sys.StackGuardMultiplier)
+               mp.g0 = malg(16384 * sys.StackGuardMultiplier)
        }
        mp.g0.m = mp