From: Rhys Hiltner Date: Thu, 8 Aug 2024 22:24:15 +0000 (-0700) Subject: runtime: record all sampled mutex profile events X-Git-Tag: go1.24rc1~1197 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1416cebdd54b4d96f6095db18002ae3f90f1f4c0;p=gostls13.git runtime: record all sampled mutex profile events The block and mutex profiles have slightly different behaviors when a sampled event has a negative (or zero) duration. The block profile enforces a minimum duration for each event of "1" in the cputicks unit. It does so by clamping the duration to 1 if it was originally reported as being smaller. The mutex profile for app-level contention enforces a minimum duration of 0 in a similar way: by reporting any negative values as 0 instead. The mutex profile for runtime-internal contention had a different behavior: to enforce a minimum event duration of "1" by dropping any non-conforming samples. Stop dropping samples, and use the same minimum (0) that's in place for the other mutex profile events. Fixes #64253 Fixes #68453 Fixes #68781 Change-Id: I4c5d23a2675501226eef5b9bc1ada2efc1a55b9e Reviewed-on: https://go-review.googlesource.com/c/go/+/604355 LUCI-TryBot-Result: Go LUCI Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Michael Pratt Reviewed-by: Carlos Amedee Auto-Submit: Rhys Hiltner --- diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go index a9adc7b6f7..f82f6a6d37 100644 --- a/src/runtime/mprof.go +++ b/src/runtime/mprof.go @@ -722,8 +722,8 @@ type mLockProfile struct { } func (prof *mLockProfile) recordLock(cycles int64, l *mutex) { - if cycles <= 0 { - return + if cycles < 0 { + cycles = 0 } if prof.disabled {