-
Notifications
You must be signed in to change notification settings - Fork 13k
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
Collect and aggregate timing statistics of CI builders #48829
Comments
cc @rust-lang/infra |
my two cents: |
Indeed! Unfortunately though those timings are very coarse in that they generally only cover the entire build itself. The variance of time taken from build to build is huge so I'd particularly be interested in a step-by-step breakdown which we can hopefully track much more reliably over time. I'm also curious in things like 10 minute regressions over 1 hour regression which will be much more difficult to diagnose in looking at graphs of overall build times. |
We need to know the time taken to compile each crate (have each |
Unfortunately this needs to apply to the bootstrap cargo, meaning we can't benefit from it until the next 6-week cycle. Modifying |
Are you thinking something like this? #48867 (Direct travis log link) I made some stats tables for that run as an experiment: Crates we compile without anything else compiling at the same time (largely rustc, unsurprisingly)
Overall, the stage 1 compiler was 1.48 ×⁄÷ 1.62 times slower than stage0 (geometric mean and stdev)
|
Whoa that's awesome @scottmcm! Out of curiosity, how is the "time ratio" calculated? The serialize crate seems to have a very high one! (I'm also quite surprised that libserialize takes 30s to compile...) |
Very hacky code used to produce the numbers: https://gist.github.com/scottmcm/241223e4964279a71a41d9846384cb87 Hmm, it does look like it's picking up more things than intended for the ratio. For example, the big reason that The overall ratio is a time-weighted geometric mean of the crate ratios. The other thing I did is split time intervals between all the processes running in the slice (https://gist.github.com/scottmcm/241223e4964279a71a41d9846384cb87#file-timing-rs-L39) in an attempt to not penalize things that are running in parallel with others. |
This commit updates CI configuration to inform rustbuild that it should print out how long each step takes on CI. This'll hopefully allow us to track the duration of steps over time and follow regressions a bit more closesly (as well as have closer analysis of differences between two builds). cc rust-lang#48829
This commit updates CI configuration to inform rustbuild that it should print out how long each step takes on CI. This'll hopefully allow us to track the duration of steps over time and follow regressions a bit more closesly (as well as have closer analysis of differences between two builds). cc rust-lang#48829
ci: Print out how long each step takes on CI This commit updates CI configuration to inform rustbuild that it should print out how long each step takes on CI. This'll hopefully allow us to track the duration of steps over time and follow regressions a bit more closesly (as well as have closer analysis of differences between two builds). cc #48829
What's the current status of this issue? I see #49094 got merged - is that enough? Was the plan to also show that in a dashboard somewhere? cc @pietroalbini , I think you've done a lot of work on CI metrics. |
There was a dashboard at https://alexcrichton.github.io/rust-ci-timing-tracker/, but it broke many years ago. I think it was helpful for tracking unexpected increases in CI time. Mark has a project at https://github.com/Mark-Simulacrum/rustc-ci-timing for graphing CI time, but it has to be run manually. It would be nice to make that more accessible. |
Currently we only have a little bit of insight into how long all our CI builds are taking with a breakdown of where all that time is going. It's hoped that if we have a historical record of the duration of CI builds which is relatively consistent and granular we can more easily see regressions that happen over time and diagnose otherwise obvious-in-retrospect problems with the build.
The current thinking for how this might be done is to instrument rustbuild to, by default on CI, emit timing information about each step in a structured fashion. The thinking is we could then scrape the logs of all our CI builds to aggregate this structure data. The data needs to include enough information so that it can indeed be easily aggregated. For example we shouldn't have to look at the Travis environment to guess whether it's an OSX/Linux build or which architecture is being assembled.
Once we've got this data we can hopefully set up graphs over time like https://rust-lang-nursery.github.io/rustc-pr-tracking/ to see what time is going where. CI timings are very noisy but the hope is that general trends will still be relatively clear.
The text was updated successfully, but these errors were encountered: