-
Notifications
You must be signed in to change notification settings - Fork 17.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
runtime: preemption takes longer on OpenBSD #17712
Comments
Also seen in CL 32447: https://storage.googleapis.com/go-build-log/d1cd8dd4/openbsd-amd64-gce58_ac08be40.log. |
I've got this on trybots a number of times in the past day. |
@bradfitz All openbsd-amd64? |
IIRC. Email finds at least: https://storage.googleapis.com/go-build-log/a5085c96/openbsd-amd64-gce58_66ea63b8.log (they failed slightly differently) |
I can not duplicate it on my Ubuntu box. I suspect that it is openbsd time On Tue, Nov 1, 2016 at 1:22 PM, Brad Fitzpatrick notifications@github.com
|
Just flaked for me at https://storage.googleapis.com/go-build-log/ad82e14d/openbsd-amd64-gce58_81897bfd.log |
Looks like BSD is the only place that flakes. On Tue, Nov 1, 2016 at 6:30 PM, Quentin Smith notifications@github.com
|
and another flake of TestGCFairness2 on OpenBSD AMD64: https://storage.googleapis.com/go-build-log/a9a27137/openbsd-amd64-gce58_5d2f625d.log |
CL https://golang.org/cl/32634 mentions this issue. |
@mdempsky I spent the past few hours investigating this with @RLH. This is indeed fallout from OpenBSD's usleep granularity. Austin's d35dfd4 causes the test to no longer block in GC assists, which means only preemptions cause goroutine switches. Those preemptions are supposed to happen every 10ms, but on OpenBSD the I just sent a CL that allows up to 1s for the test to complete, which should deflake it on OpenBSD. I'll repurpose this bug for investigating the OpenBSD scheduler behavior; I don't understand why |
@quentinmit Ah, yeah, that explanation makes sense. I was wondering how scheduler granularity could affect the test, since it didn't obviously rely on sleeping (other than the 30ms sleep, which is itself fine). |
Looks like a lot of runtime's usleep calls might be significantly oversleeping on OpenBSD, and maybe Windows based on the comment in runqgrab. |
OpenBSD's scheduler causes preemption to take 20+ms, so 30ms is not enough time for 3 goroutines to run. This change continues to sleep for 30ms, but if it finds that the 3 goroutines have not run, it sleeps for an additional 1s before declaring failure. Updates #17712 Change-Id: I3e886e40d05192b7cb71b4f242af195836ef62a8 Reviewed-on: https://go-review.googlesource.com/32634 Reviewed-by: Rick Hudson <rlh@golang.org> Run-TryBot: Quentin Smith <quentin@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Oooh, a FreeBSD failure too: https://storage.googleapis.com/go-build-log/23fd8345/freebsd-amd64-gce101_1d4008a0.log |
No, its git parent is well before that test tweak. (Btw, the failure log contains a git hash at the top you can paste into Gerrit's search.) |
https://storage.googleapis.com/go-build-log/bc7889a5/openbsd-amd64-gce58_a614fab1.log
/cc @aclements @RLH
I don't see any evidence that this is a known flake in the issue tracker, so filing a bug and tagging Go1.8Maybe in case it's of interest.
The text was updated successfully, but these errors were encountered: