-
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
cmd/dist: "dist test" overhead increased by more than x10 from 1.9 to 1.10 on plan9/arm #24300
Comments
/cc @bradfitz for a decision on skipping the staleness check |
Change https://golang.org/cl/99296 mentions this issue: |
Well, I sent https://go-review.googlesource.com/#/c/go/+/99296 which helps when running under the builders, since the builders will always run But I'm not sure whether that helps you in your local development case. I'm not sure why it's taking an extra 180s. Is it just that slow, even in the no-op case? Or is it incorrectly doing work? |
Updates #24300 Change-Id: I7752dab67e15a6dfe5fffe5b5ccbf3373bbc2c13 Reviewed-on: https://go-review.googlesource.com/99296 Reviewed-by: Ian Lance Taylor <[email protected]> Run-TryBot: Brad Fitzpatrick <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
The staleness check (which is also what a no-op "go install" amounts to) is walking the source tree and seems to be opening each .go file two or three times. On linux this is mitigated by aggressive cacheing of directories and inodes, but the plan9/arm builder is running off a networked server where walk / open / stat all bypass the local cache and require an rpc to the server.
|
Yes, that's an improvement. Buildlet for plan9/arm now completes in just under 3 hours. Still considerably slower than the legacy |
There are still two calls to
Maybe @rsc can advise? |
I'm content for this issue to be closed. For plan9_arm buildlets with an external file server, we've added a more aggressive cache (this one), which brings the time down to just over an hour. |
Closing as @millerresearch asked. |
The new style plan9/arm buildlet (running on a Raspberry Pi 3) has become impossibly slow in go1.10 because of increased overhead in the "dist test" which is run for each test shard.
Previously:
But now:
An extra 180s for each shard, times 50+ shards, adds 2.5 hours to the buildlet run time.
The relevant change appears to be this new code in src/cmd/dist/test.go:
Note the comment; this must be a candidate for the most expensive no-op ever.
In the buildlet context, where we have just built everything with
make.rc
, could we possibly skip this staleness check?Alternatively, in the context of a single buildlet with no helpers, could we skip the sharding and run all the tests in a single invocation of "dist test" to avoid multiplying the overhead?
The text was updated successfully, but these errors were encountered: