mirror of
https://github.com/golang/go
synced 2024-11-24 05:50:13 -07:00
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>
This commit is contained in:
parent
79db59ded9
commit
226346bb76
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user