Skip to content

Commit fc6a5ea

Browse files
rhyshgopherbot
authored andcommitted
runtime: test mutex contention stacks and counts
Fully testing the runtime's profiles and metrics for contention on its internal mutex values involves comparing two separate clocks (cputicks for the profile and nanotime for the metric), verifying its fractional sampling (when MutexProfileRate is greater than 1), and observing a very small critical section outside of the test's control (semrelease). Flakiness (#64253) from those parts of the test have led to skipping it entirely. But there are portions of the mutex profiling behavior that should have more consistent behavior: for a mutex under the test's control, the test and the runtime should be able to agree that the test successfully induced contention, and should agree on the call stack that caused the contention. Allow those more consistent parts to run. For #64253 Change-Id: I7f368d3265a5c003da2765164276fab616eb9959 Reviewed-on: https://go-review.googlesource.com/c/go/+/581296 LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Michael Knyszek <[email protected]> Reviewed-by: Joedian Reid <[email protected]> Auto-Submit: Rhys Hiltner <[email protected]>
1 parent 960fa9b commit fc6a5ea

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/runtime/metrics_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -948,8 +948,6 @@ func TestSchedPauseMetrics(t *testing.T) {
948948
}
949949

950950
func TestRuntimeLockMetricsAndProfile(t *testing.T) {
951-
testenv.SkipFlaky(t, 64253)
952-
953951
old := runtime.SetMutexProfileFraction(0) // enabled during sub-tests
954952
defer runtime.SetMutexProfileFraction(old)
955953
if old != 0 {
@@ -1181,12 +1179,17 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) {
11811179
}
11821180

11831181
const slop = 1.5 // account for nanotime vs cputicks
1184-
if profileGrowth > slop*metricGrowth || metricGrowth > slop*profileGrowth {
1185-
t.Errorf("views differ by more than %fx", slop)
1186-
}
1182+
t.Run("compare timers", func(t *testing.T) {
1183+
testenv.SkipFlaky(t, 64253)
1184+
if profileGrowth > slop*metricGrowth || metricGrowth > slop*profileGrowth {
1185+
t.Errorf("views differ by more than %fx", slop)
1186+
}
1187+
})
11871188
})
11881189

11891190
t.Run("sample-2", func(t *testing.T) {
1191+
testenv.SkipFlaky(t, 64253)
1192+
11901193
old := runtime.SetMutexProfileFraction(2)
11911194
defer runtime.SetMutexProfileFraction(old)
11921195

@@ -1218,6 +1221,8 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) {
12181221
})
12191222

12201223
t.Run("runtime.semrelease", func(t *testing.T) {
1224+
testenv.SkipFlaky(t, 64253)
1225+
12211226
old := runtime.SetMutexProfileFraction(1)
12221227
defer runtime.SetMutexProfileFraction(old)
12231228

0 commit comments

Comments
 (0)