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>
This commit is contained in:
Michael Pratt 2025-05-28 14:34:52 -04:00 committed by Gopher Robot
parent f8c51b1a6c
commit 3b77085b40

View File

@ -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()
}
}