runtime: on 32-bit systems, limit default GOMAXPROCS to 32
authorIan Lance Taylor <iant@golang.org>
Thu, 13 Feb 2020 04:35:50 +0000 (20:35 -0800)
committerIan Lance Taylor <iant@golang.org>
Sat, 15 Feb 2020 17:12:18 +0000 (09:12 -0800)
Otherwise we can easily run out of stack space for threads.

The user can still override by setting GOMAXPROCS.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219278

gcc/go/gofrontend/MERGE
libgo/go/runtime/proc.go

index 27f4ce342e54800773440a9e62c57d37b730d42c..9916b02c57f734e4ccfdde2715e17d9c767f9af4 100644 (file)
@@ -1,4 +1,4 @@
-c94637ad6fd38d4814fb02d094a1a73f19323d71
+3e46519cee5c916a9b39480fbac13f4ffc6a93b0
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index c0e857730984a43a6b772a9bd370f3ed0eed112d..e3f934ae7bd9b58b28c4054d569d8ce460e3b8e7 100644 (file)
@@ -563,6 +563,14 @@ func schedinit() {
 
        sched.lastpoll = uint64(nanotime())
        procs := ncpu
+
+       // In 32-bit mode, we can burn a lot of memory on thread stacks.
+       // Try to avoid this by limiting the number of threads we run
+       // by default.
+       if sys.PtrSize == 4 && procs > 32 {
+               procs = 32
+       }
+
        if n, ok := atoi32(gogetenv("GOMAXPROCS")); ok && n > 0 {
                procs = n
        }