]> Cypherpunks.ru repositories - gostls13.git/commit
[release-branch.go1.21] runtime: add the disablethp GODEBUG setting
authorMichael Anthony Knyszek <mknyszek@google.com>
Tue, 5 Dec 2023 17:31:34 +0000 (17:31 +0000)
committerGopher Robot <gobot@golang.org>
Thu, 4 Jan 2024 17:32:44 +0000 (17:32 +0000)
commitcf65d74bc5198da0561252ab06a3f75961988338
treeecf3528ef2aa61c652aa5d0ec5c9d8772d8f48ca
parentad1ec60a5bae4e8afef7a5ee68fac80a758e4395
[release-branch.go1.21] runtime: add the disablethp GODEBUG setting

Go 1.21.1 and Go 1.22 have ceased working around an issue with Linux
kernel defaults for transparent huge pages that can result in excessive
memory overheads. (https://bugzilla.kernel.org/show_bug.cgi?id=93111)

Many Linux distributions disable huge pages altogether these days, so
this problem isn't quite as far-reaching as it used to be. Also, the
problem only affects Go programs with very particular memory usage
patterns.

That being said, because the runtime used to actively deal with this
problem (but with some unpredictable behavior), it's preventing users
that don't have a lot of control over their execution environment from
upgrading to Go beyond Go 1.20.

This change adds a GODEBUG to smooth over the transition. The GODEBUG
setting disables transparent huge pages for all heap memory on Linux,
which is much more predictable than restoring the old behavior.

For #64332.
Fixes #64561.

Change-Id: I73b1894337f0f0b1a5a17b90da1221e118e0b145
Reviewed-on: https://go-review.googlesource.com/c/go/+/547475
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit c915215af65897cc9cffed75630cbfbc6b2462cc)
Reviewed-on: https://go-review.googlesource.com/c/go/+/547636
Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
TryBot-Bypass: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Matthew Dempsky <mdempsky@google.com>
doc/godebug.md
src/runtime/extern.go
src/runtime/mem_linux.go
src/runtime/runtime1.go