2022-08-16 Triage Log

A fairly quiet week for performance, with the exception of the LLVM 15 upgrade which resulted in many changes, mostly to the positive.

Triage done by @simulacrum. Revision range: cc4dd6fc9f1a5c798df269933c7e442b79661a86..14a459bf37bc19476d43e0045d078121c12d3fef

Summary:

(instructions:u)meanmaxcount
Regressions ❌
(primary)
0.7%7.7%62
Regressions ❌
(secondary)
1.3%5.0%51
Improvements ✅
(primary)
-1.8%-6.9%93
Improvements ✅
(secondary)
-2.4%-22.0%128
All ❌✅ (primary)-0.8%7.7%155

2 Regressions, 4 Improvements, 2 Mixed; 1 of them in rollups 38 artifact comparisons made in total

Regressions

consider unnormalized types for implied bounds #99217 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
0.7%1.9%37
Regressions ❌
(secondary)
2.0%2.4%11
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
--0
All ❌✅ (primary)0.7%1.9%37

This regression is caused by a soundness fix. #99725 recovered a small amount of the lost performance here.

rustdoc: Merge source code pages HTML elements together #100429 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
0.6%1.4%12
Regressions ❌
(secondary)
1.8%3.1%8
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
--0
All ❌✅ (primary)0.6%1.4%12

The regressions are limited to doc benchmarks and the underlying change reduces the number of DOM elements generated by ~30% across a few samples (see PR description for details). Those sizes aren‘t measured by perf.rust-lang.org today, so there’s no reflection of that here, but the size improvement is a welcome one.

Improvements

Reoptimize layout array #99174 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
-0.4%-0.8%10
Improvements ✅
(secondary)
-0.8%-1.2%5
All ❌✅ (primary)-0.4%-0.8%10

Remove manual implementations of HashStable for hir::Expr and hir::Ty. #100237 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
-0.2%-0.2%3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.2%-0.2%3

Possibly spurious, but leaving in the report -- bitmaps-3.1.0 check typically does not see this much impact on a run to run basis so it's probably at least partially real.

Shrink ast::Attribute. #100441 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
0.6%0.6%1
Regressions ❌
(secondary)
0.2%0.2%1
Improvements ✅
(primary)
-0.6%-1.4%22
Improvements ✅
(secondary)
-1.0%-1.5%23
All ❌✅ (primary)-0.5%-1.4%23

Mostly an improvement in doc benchmarks, though a few check benchmarks improved as well. An excellent win for memory usage, with up to 5.8% wins on helloworld.

passes: load defined_lib_features query less #100328 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%1.5%3
Improvements ✅
(primary)
-0.4%-0.4%1
Improvements ✅
(secondary)
-1.2%-1.8%8
All ❌✅ (primary)-0.4%-0.4%1

The regressions here appear to be spurious, with performance recovering on the next commit. Otherwise, this is a good improvement.

Mixed

Rollup of 13 pull requests #100426 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
0.3%0.4%4
Regressions ❌
(secondary)
0.5%0.7%5
Improvements ✅
(primary)
-0.9%-0.9%1
Improvements ✅
(secondary)
-1.8%-1.8%1
All ❌✅ (primary)0.0%-0.9%5

Small-ish regression narrowed down to #99337, some active work in this area of rustdoc is likely to help here soon.

Update to LLVM 15 #99464 (Comparison Link)

(instructions:u)meanmaxcount
Regressions ❌
(primary)
0.8%7.5%40
Regressions ❌
(secondary)
1.2%4.4%29
Improvements ✅
(primary)
-1.5%-6.0%100
Improvements ✅
(secondary)
-2.6%-21.6%94
All ❌✅ (primary)-0.9%7.5%140

Overall the benefits here outweigh the negatives, with a number of good improvements. LLVM upgrades are something we're going to keep rolling forward on regardless. For wall time metrics the improvement here looks particularly nice, with bootstrap times improved by ~4%, shaving 30 seconds of the total time measured by perf.