mirror of https://github.com/golang/go.git
runtime: remove GODEBUG=runtimecontentionstacks
Go 1.22 promised to remove the setting in a future release once the semantics of runtime-internal lock contention matched that of sync.Mutex. That work is done, remove the setting. Previously reviewed as https://go.dev/cl/585639. For #66999 Change-Id: I9fe62558ba0ac12824874a0bb1b41efeb7c0853f Reviewed-on: https://go-review.googlesource.com/c/go/+/668995 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Auto-Submit: Rhys Hiltner <rhys.hiltner@gmail.com> Reviewed-by: Carlos Amedee <carlos@golang.org>
This commit is contained in:
parent
591c4b50c0
commit
94c4cdc948
|
|
@ -169,6 +169,9 @@ Go command will follow symlinks to regular files embedding files.
|
||||||
The default value `embedfollowsymlinks=0` does not allow following
|
The default value `embedfollowsymlinks=0` does not allow following
|
||||||
symlinks. `embedfollowsymlinks=1` will allow following symlinks.
|
symlinks. `embedfollowsymlinks=1` will allow following symlinks.
|
||||||
|
|
||||||
|
Go 1.25 corrected the semantics of contention reports for runtime-internal locks,
|
||||||
|
and so removed the [`runtimecontentionstacks` setting](/pkg/runtime#hdr-Environment_Variable).
|
||||||
|
|
||||||
### Go 1.24
|
### Go 1.24
|
||||||
|
|
||||||
Go 1.24 added a new `fips140` setting that controls whether the Go
|
Go 1.24 added a new `fips140` setting that controls whether the Go
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
The mutex profile for contention on runtime-internal locks now correctly points
|
||||||
|
to the end of the critical section that caused the delay. This matches the
|
||||||
|
profile's behavior for contention on `sync.Mutex` values. The
|
||||||
|
`runtimecontentionstacks` setting for `GODEBUG`, which allowed opting in to the
|
||||||
|
unusual behavior of Go 1.22 through 1.24 for this part of the profile, is now
|
||||||
|
gone.
|
||||||
|
|
@ -166,15 +166,6 @@ It is a comma-separated list of name=val pairs setting these named variables:
|
||||||
panicnil: setting panicnil=1 disables the runtime error when calling panic with nil
|
panicnil: setting panicnil=1 disables the runtime error when calling panic with nil
|
||||||
interface value or an untyped nil.
|
interface value or an untyped nil.
|
||||||
|
|
||||||
runtimecontentionstacks: setting runtimecontentionstacks=1 enables inclusion of call stacks
|
|
||||||
related to contention on runtime-internal locks in the "mutex" profile, subject to the
|
|
||||||
MutexProfileFraction setting. When runtimecontentionstacks=0, contention on
|
|
||||||
runtime-internal locks will report as "runtime._LostContendedRuntimeLock". When
|
|
||||||
runtimecontentionstacks=1, the call stacks will correspond to the unlock call that released
|
|
||||||
the lock. But instead of the value corresponding to the amount of contention that call
|
|
||||||
stack caused, it corresponds to the amount of time the caller of unlock had to wait in its
|
|
||||||
original call to lock. A future release is expected to align those and remove this setting.
|
|
||||||
|
|
||||||
invalidptr: invalidptr=1 (the default) causes the garbage collector and stack
|
invalidptr: invalidptr=1 (the default) causes the garbage collector and stack
|
||||||
copier to crash the program if an invalid pointer value (for example, 1)
|
copier to crash the program if an invalid pointer value (for example, 1)
|
||||||
is found in a pointer-typed location. Setting invalidptr=0 disables this check.
|
is found in a pointer-typed location. Setting invalidptr=0 disables this check.
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ package runtime_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"internal/profile"
|
"internal/profile"
|
||||||
|
|
@ -955,17 +954,6 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) {
|
||||||
t.Fatalf("need MutexProfileRate 0, got %d", old)
|
t.Fatalf("need MutexProfileRate 0, got %d", old)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
before := os.Getenv("GODEBUG")
|
|
||||||
for _, s := range strings.Split(before, ",") {
|
|
||||||
if strings.HasPrefix(s, "runtimecontentionstacks=") {
|
|
||||||
t.Logf("GODEBUG includes explicit setting %q", s)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
defer func() { os.Setenv("GODEBUG", before) }()
|
|
||||||
os.Setenv("GODEBUG", fmt.Sprintf("%s,runtimecontentionstacks=1", before))
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Logf("NumCPU %d", runtime.NumCPU())
|
t.Logf("NumCPU %d", runtime.NumCPU())
|
||||||
t.Logf("GOMAXPROCS %d", runtime.GOMAXPROCS(0))
|
t.Logf("GOMAXPROCS %d", runtime.GOMAXPROCS(0))
|
||||||
if minCPU := 2; runtime.NumCPU() < minCPU {
|
if minCPU := 2; runtime.NumCPU() < minCPU {
|
||||||
|
|
@ -1229,9 +1217,9 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) {
|
||||||
|
|
||||||
stks[i] = []string{
|
stks[i] = []string{
|
||||||
"runtime.unlock",
|
"runtime.unlock",
|
||||||
"runtime_test." + name + ".func5.1.1",
|
"runtime_test." + name + ".func4.1.1",
|
||||||
marker,
|
marker,
|
||||||
"runtime_test." + name + ".func5.1",
|
"runtime_test." + name + ".func4.1",
|
||||||
"runtime_test.(*contentionWorker).run",
|
"runtime_test.(*contentionWorker).run",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1411,14 +1399,14 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) {
|
||||||
{
|
{
|
||||||
"runtime.unlock",
|
"runtime.unlock",
|
||||||
"runtime.semrelease1",
|
"runtime.semrelease1",
|
||||||
"runtime_test.TestRuntimeLockMetricsAndProfile.func6.1",
|
"runtime_test.TestRuntimeLockMetricsAndProfile.func5.1",
|
||||||
"runtime_test.(*contentionWorker).run",
|
"runtime_test.(*contentionWorker).run",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"runtime.unlock",
|
"runtime.unlock",
|
||||||
"runtime.semacquire1",
|
"runtime.semacquire1",
|
||||||
"runtime.semacquire",
|
"runtime.semacquire",
|
||||||
"runtime_test.TestRuntimeLockMetricsAndProfile.func6.1",
|
"runtime_test.TestRuntimeLockMetricsAndProfile.func5.1",
|
||||||
"runtime_test.(*contentionWorker).run",
|
"runtime_test.(*contentionWorker).run",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -732,11 +732,6 @@ func (prof *mLockProfile) captureStack() {
|
||||||
prof.haveStack = true
|
prof.haveStack = true
|
||||||
|
|
||||||
prof.stack[0] = logicalStackSentinel
|
prof.stack[0] = logicalStackSentinel
|
||||||
if debug.runtimeContentionStacks.Load() == 0 {
|
|
||||||
prof.stack[1] = abi.FuncPCABIInternal(_LostContendedRuntimeLock) + sys.PCQuantum
|
|
||||||
prof.stack[2] = 0
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var nstk int
|
var nstk int
|
||||||
gp := getg()
|
gp := getg()
|
||||||
|
|
|
||||||
|
|
@ -169,12 +169,6 @@ import (
|
||||||
// holds a lock for 1s while 5 other goroutines are waiting for the entire
|
// holds a lock for 1s while 5 other goroutines are waiting for the entire
|
||||||
// second to acquire the lock, its unlock call stack will report 5s of
|
// second to acquire the lock, its unlock call stack will report 5s of
|
||||||
// contention.
|
// contention.
|
||||||
//
|
|
||||||
// Runtime-internal locks are always reported at the location
|
|
||||||
// "runtime._LostContendedRuntimeLock". More detailed stack traces for
|
|
||||||
// runtime-internal locks can be obtained by setting
|
|
||||||
// `GODEBUG=runtimecontentionstacks=1` (see package [runtime] docs for
|
|
||||||
// caveats).
|
|
||||||
type Profile struct {
|
type Profile struct {
|
||||||
name string
|
name string
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
|
|
|
||||||
|
|
@ -320,7 +320,6 @@ var debug struct {
|
||||||
gctrace int32
|
gctrace int32
|
||||||
invalidptr int32
|
invalidptr int32
|
||||||
madvdontneed int32 // for Linux; issue 28466
|
madvdontneed int32 // for Linux; issue 28466
|
||||||
runtimeContentionStacks atomic.Int32
|
|
||||||
scavtrace int32
|
scavtrace int32
|
||||||
scheddetail int32
|
scheddetail int32
|
||||||
schedtrace int32
|
schedtrace int32
|
||||||
|
|
@ -385,7 +384,6 @@ var dbgvars = []*dbgVar{
|
||||||
{name: "madvdontneed", value: &debug.madvdontneed},
|
{name: "madvdontneed", value: &debug.madvdontneed},
|
||||||
{name: "panicnil", atomic: &debug.panicnil},
|
{name: "panicnil", atomic: &debug.panicnil},
|
||||||
{name: "profstackdepth", value: &debug.profstackdepth, def: 128},
|
{name: "profstackdepth", value: &debug.profstackdepth, def: 128},
|
||||||
{name: "runtimecontentionstacks", atomic: &debug.runtimeContentionStacks},
|
|
||||||
{name: "sbrk", value: &debug.sbrk},
|
{name: "sbrk", value: &debug.sbrk},
|
||||||
{name: "scavtrace", value: &debug.scavtrace},
|
{name: "scavtrace", value: &debug.scavtrace},
|
||||||
{name: "scheddetail", value: &debug.scheddetail},
|
{name: "scheddetail", value: &debug.scheddetail},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue