-
Notifications
You must be signed in to change notification settings - Fork 4.4k
Test windows runners speed #26366
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
Test windows runners speed #26366
Conversation
92b975a
to
e055852
Compare
I have a theory. I suspect the slowdown might be related to the fact that our Windows runner never runs Unlike the Linux and macOS runners, which run the |
I don't think that's all of what's happening. Even if there is some statefulness across runs, each runner invocation can be in any of (at least 7 regions). The speeds to restore cache vary greatly: And creating the tarball to write to the cache is also dog-slow. This 13m0s example
I was surprised by the times to compress/decompress.
Sadly, even despite all this, caching still out performs non-caching in the worst examples when looking at clippy (3m56s vs 5m51s) and test+build (12m31s vs 16m40s). ![]() I'm going to blow away the runner caches for |
Are we by any chance caching target directory? If so, that likely has a tons of small object files. |
@osiewicz Not sure what all is being cached. It's these moments that I much miss CircleCI's "rerun with SSH shell" where you can live inspect the contents of a runner while tests are being run and after they've completed. New smaller caches unsurprisingly lead to improved cache loads speed (setup/xfer/decompress).
Generally I'm quite unhappy without our ability to get quick build times even with inordinate expense. Running tests+clippy on the biggest Windows runners available (64vCPU, 256GB ram, $0.512/min) takes in excess of 10minutes ($5.63/build)...of which caching is 1m49s: 18/31/60 ($0.93). My gut is that if we were using self-hosted stateful runners, with a local cargo cache I think we could get sub 10minutes with 32vcpu/48vpu instances. I don't know if the effort of managing windows instances is worth it, nor do I have hard data to support my hypothesis, but ideally sometime in Q2 I would like to see (a) windows tests to be running on every commit (b) taking less than 10mins per run. Out stateful macOS runners with 10-14cores and 32gb of ram cost ~$10-$13/day. It really bugs me that Windows builds with 4x the ram, 3x the cpu, at ~10x the cost still take 2x as long (~7mins vs 14mins). |
We should be caching Lines 169 to 173 in d3a295b
see https://github.com/Swatinem/rust-cache for more details. |
@notpeter if we had a windows machine to run the builds on, I would be down to look at rustc profiles with you. My gut instinct is that it might not be too great about fs (I've had one such pr in rust-lang/rust#134866 which was impactful even for Mac). |
Oh, yeah, that should do it. |
Hypothesis: Caching on Windows GitHub hosted runners is slower than without.
Release Notes: