aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2025-05-28 14:34:52 -0400
committerGopher Robot <gobot@golang.org>2025-05-29 09:15:21 -0700
commit3b77085b40bf0d53528d6852d07c00c81021c855 (patch)
tree954546f13feb8303821d15cc35612a661469ce35
parentf8c51b1a6c3d6ebfdbeab3c81d4157aefe0e8b71 (diff)
downloadgo-3b77085b40bf0d53528d6852d07c00c81021c855.tar.xz
runtime: increment updatemaxprocs metric only when disabled
The updatemaxprocs metric logic is currently backwards. We only increment the metric when we update GOMAXPROCS, but that only occurs if updatemaxprocs is enabled. Instead, the metric is supposed to increment when updatemaxprocs is disabled and there would be different behavior if it were enabled. Theoretically we should run the entire update system in a dry run mode, and only bail out right before committing updates. But that is an awful lot of effort for a feature that is disabled. Plus some users (like sandboxes) want to completely disable the update syscalls (sched_getaffinity and pread64). If we still do dry run updates then we need an additional GODEBUG for completely disabling functionality. This CL also avoids starting the update goroutine at all if disabled, since it isn't needed. For #73193. Change-Id: I6a6a636ceec8fced44e36cb27dcb1b4ba51fce33 Reviewed-on: https://go-review.googlesource.com/c/go/+/677036 Reviewed-by: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Pratt <mpratt@google.com>
-rw-r--r--src/runtime/proc.go19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index fe9f07723c..4ccce90e93 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -6567,6 +6567,22 @@ var (
//
// This is based on forcegchelper.
func defaultGOMAXPROCSUpdateEnable() {
+ if debug.updatemaxprocs == 0 {
+ // Unconditionally increment the metric when updates are disabled.
+ //
+ // It would be more descriptive if we did a dry run of the
+ // complete update, determining the appropriate value of
+ // GOMAXPROCS and the bailing out and just incrementing the
+ // metric if a change would occur.
+ //
+ // Not only is that a lot of ongoing work for a disabled
+ // feature, but some users need to be able to completely
+ // disable the update system calls (such as sandboxes).
+ // Currently, updatemaxprocs=0 serves that purpose.
+ updatemaxprocs.IncNonDefault()
+ return
+ }
+
go updateMaxProcsGoroutine()
}
@@ -6601,9 +6617,6 @@ func updateMaxProcsGoroutine() {
newprocsCustom = false
startTheWorldGC(stw)
-
- // We actually changed something.
- updatemaxprocs.IncNonDefault()
}
}