aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Anthony Knyszek <mknyszek@google.com>2022-04-21 22:18:31 +0000
committerMichael Knyszek <mknyszek@google.com>2022-04-26 22:08:12 +0000
commit226346bb763233ed9341bc1d829752628479845f (patch)
tree311e1ba799f61bfbf29f7612799d1132e0b2b559
parent79db59ded9dab276507f3a045e42b76eef5a35b4 (diff)
downloadgo-226346bb763233ed9341bc1d829752628479845f.tar.gz
go-226346bb763233ed9341bc1d829752628479845f.zip
runtime: yield instead of sleeping in runqgrab on OpenBSD
OpenBSD has a coarse sleep granularity that rounds up to 10 ms increments. This can cause significant STW delays, among other issues. As far as I can tell, there's only 1 tightly timed sleep without an explicit wakeup for which this actually matters. Fixes #52475. Change-Id: Ic69fc11096ddbbafd79b2dcdf3f912fde242db24 Reviewed-on: https://go-review.googlesource.com/c/go/+/401638 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Michael Pratt <mpratt@google.com> Run-TryBot: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
-rw-r--r--src/runtime/proc.go4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index b281d9f3b8..96d44efddd 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -5904,10 +5904,10 @@ func runqgrab(_p_ *p, batch *[256]guintptr, batchHead uint32, stealRunNextG bool
// between different Ps.
// A sync chan send/recv takes ~50ns as of time of
// writing, so 3us gives ~50x overshoot.
- if GOOS != "windows" {
+ if GOOS != "windows" && GOOS != "openbsd" {
usleep(3)
} else {
- // On windows system timer granularity is
+ // On some platforms system timer granularity is
// 1-15ms, which is way too much for this
// optimization. So just yield.
osyield()