Performance overall improved in the last week, but some of this is due to fixing regressions from prior weeks. This week also brings an average of 4% improvement in memory usage across all profiles due to #95171 bumping the LLVM/clang used on x86_64-unknown-linux-gnu to compile C and C++ code linked into rustc.
Triage done by @simulacrum. Revision range: 1c988cfa0b7f4d3bc5b1cb40dc5002f5adbfb9ad..468492c2af3993f18b1fe98052200575c4a2e678
Summary: | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 13 | 1 | 78 | 29 | 91 | | mean | 0.8% | 0.3% | -0.9% | -0.8% | -0.7% | | max | 1.5% | 0.3% | -2.7% | -2.1% | -2.7% |
4 Regressions, 3 Improvements, 1 Mixed; 1 of them in rollups 52 artifact comparisons made in total
Rollup of 8 pull requests #96428 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 7 | 2 | 1 | 0 | 8 | | mean | 1.3% | 0.3% | -0.4% | N/A | 1.1% | | max | 1.8% | 0.3% | -0.4% | N/A | 1.8% |
Looks likely to be related to the new impl Default for AssertUnwindSafe
, though detailed query pages do not reflect the regressions. Marking the regression as triaged, because it‘s unlikely we would want to revert the impl at this point. However, it’s probably the case that impls for public standard library types may want to avoid being rolled up, as they can influence downstream performance across both rustdoc and regular compilation.
Enforce Copy bounds for repeat elements while considering lifetimes #95819 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 2 | 0 | 0 | 0 | 2 | | mean | 0.8% | N/A | N/A | N/A | 0.8% | | max | 1.0% | N/A | N/A | N/A | 1.0% |
Incremental-only regressions in a single benchmark. Looks likely to be a somewhat real change, but not one we can do much about: the extra enforcement naturally adds dependency edges which require re-computing.
Handle generic bounds in a uniform way in HIR #93803 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 11 | 4 | 0 | 0 | 11 | | mean | 0.3% | 0.3% | N/A | N/A | 0.3% | | max | 0.5% | 0.3% | N/A | N/A | 0.5% |
A regression primarily to diesel (quite common this week), but relatively slight and with a relatively good tradeoff to code maintenance. Earlier PR runs had some slight improvements which were used as a justification for regresions on benchmarks; this doesn't seem to be the case anymore, so asked for an updated justification on the regression.
Inline core::panic::Location methods #96348 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 0 | 11 | 0 | 0 | 0 | | mean | N/A | 0.5% | N/A | N/A | N/A | | max | N/A | 0.8% | N/A | N/A | N/A |
Secondary-only regressions, most likely due to slightly different codegen in relatively hot code (e.g., due to increased or decreased register pressure). Not likely to be an important change.
Fix incremental perf regression unsafety checking #96425 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 0 | 0 | 48 | 0 | 48 | | mean | N/A | N/A | -1.2% | N/A | -1.2% | | max | N/A | N/A | -2.8% | N/A | -2.8% |
Reduce duplication of RPO calculation of mir #96500 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 0 | 0 | 43 | 17 | 43 | | mean | N/A | N/A | -0.5% | -0.7% | -0.5% | | max | N/A | N/A | -0.9% | -1.4% | -0.9% |
Move Derefer before Retag #96549 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 0 | 0 | 20 | 18 | 20 | | mean | N/A | N/A | -0.4% | -0.4% | -0.4% | | max | N/A | N/A | -0.4% | -0.6% | -0.4% |
Inline __iterator_get_unchecked
for some iterator adapters. #92566 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 1 | 2 | 3 | 1 | 4 | | mean | 0.2% | 0.3% | -0.4% | -0.2% | -0.2% | | max | 0.2% | 0.3% | -0.4% | -0.2% | -0.4% |
Update LLVM used for building rustc in CI for x64 #95171 (Comparison Link) | | Regressions 😿
(primary) | Regressions 😿
(secondary) | Improvements 🎉
(primary) | Improvements 🎉
(secondary) | All 😿 🎉
(primary) | |:----------:|:------------------------------:|:--------------------------------:|:-------------------------------:|:---------------------------------:|:------------------------:| | count | 0 | 0 | 1 | 0 | 1 | | mean | N/A | N/A | -0.5% | N/A | -0.5% | | max | N/A | N/A | -0.5% | N/A | -0.5% |
A solid improvement in memory usage, with a rough average of 4% less memory used across many check, debug, and opt builds, presumably due to better optimizations when compiling C and C++ code linked into rustc.