Skip to content

Commit

Permalink
runtime: increase g0 stack size in non-cgo case
Browse files Browse the repository at this point in the history
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 golang#62120.
Fixes golang#62489.

Change-Id: I565b154517021f1fd849424dafc3f0f26a755cac
Reviewed-on: https://go-review.googlesource.com/c/go/+/526995
Reviewed-by: Michael Pratt <[email protected]>
LUCI-TryBot-Result: Go LUCI <[email protected]>
  • Loading branch information
cherrymui committed Sep 8, 2023
1 parent 2b3c1c5 commit c6d550a
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/runtime/proc.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down

0 comments on commit c6d550a

Please sign in to comment.