2022-06-21 Triage Log

A pretty busy week for performance, with quite a few PRs landing with significant improvements to specific benchmarks. Overall the week was positive, with many benchmarks improving at least a little. No significant changes in memory usage this week.

Triage done by @simulacrum. Revision range: edab34ab2abbafc16a78daedf71dbacd2eb0b7bf..abace0a1f17986d89aedf610819deab2b4afee56

Summary:

meanmaxcount
Regressions 😿
(primary)
0.4%0.5%6
Regressions 😿
(secondary)
2.9%14.7%37
Improvements πŸŽ‰
(primary)
-1.9%-19.4%89
Improvements πŸŽ‰
(secondary)
-8.4%-91.4%38
All πŸ˜ΏπŸŽ‰ (primary)-1.8%-19.4%95

5 Regressions, 6 Improvements, 3 Mixed; 1 of them in rollups 54 artifact comparisons made in total

Regressions

BTreeMap: Support custom allocators (v1.5) #98103 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
1.7%3.0%2
Regressions 😿
(secondary)
1.6%2.1%6
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)1.7%3.0%2

This regression is largely fixed by #98178.

Improve the tuple and unit trait docs #97842 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.4%0.6%2
Regressions 😿
(secondary)
0.3%0.4%3
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)0.4%0.6%2

Slight regressions to small number of doc benchmarks, likely due to slightly more work during generation (std's docs changed).

Fix SourceScope for if let bindings. #97931 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.4%0.5%4
Regressions 😿
(secondary)
0.3%0.3%1
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)0.4%0.5%4

Regression is pretty small and only one primary benchmark is affected (regex), and only incremental scenarios there. Likely not enough to worry about.

Obligation forest tweaks #97674 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.8%0.9%2
Regressions 😿
(secondary)
1.8%2.4%7
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
-0.3%-0.3%1
All πŸ˜ΏπŸŽ‰ (primary)0.8%0.9%2

keccak is the primary affected benchmark, and is known to be very sensitive to changes to the obligation forest code. See some analysis in this comment following up on the results from the merge perf run.

Rollup of 4 pull requests #98307 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.3%0.3%2
Regressions 😿
(secondary)
0.7%0.8%6
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
-0.4%-0.4%1
All πŸ˜ΏπŸŽ‰ (primary)0.3%0.3%2

Cause of regressions is unclear, but they‘re minor enough that it’s not worth the hassle of investigating a rollup.

Improvements

ctfe: limit hashing of big const allocations when interning #98097 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
-6.6%-6.6%3
All πŸ˜ΏπŸŽ‰ (primary)N/AN/A0

Batch proc_macro RPC for TokenStream iteration and combination operations #98186 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-1.0%-4.0%26
Improvements πŸŽ‰
(secondary)
-12.1%-37.5%15
All πŸ˜ΏπŸŽ‰ (primary)-1.0%-4.0%26

Fix MissingDoc quadratic behaviour #98153 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-0.3%-0.4%14
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)-0.3%-0.4%14

Make some lints incremental. #98238 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-0.4%-1.7%54
Improvements πŸŽ‰
(secondary)
-7.4%-90.8%17
All πŸ˜ΏπŸŽ‰ (primary)-0.4%-1.7%54

[RFC 2011] Expand expressions where possible #98148 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-0.3%-0.4%2
Improvements πŸŽ‰
(secondary)
-0.7%-0.8%6
All πŸ˜ΏπŸŽ‰ (primary)-0.3%-0.4%2

Compile unicode-normalization faster #97936 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
1.0%1.0%1
Improvements πŸŽ‰
(primary)
-14.2%-19.4%6
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)-14.2%-19.4%6

A solid improvement, though just to the one benchmark; coercions change in the regressions section is likely just noise, not an actual meaningful delta.

Mixed

Use valtrees as the type-system representation for constant values #96591 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.4%0.6%54
Regressions 😿
(secondary)
3.1%14.3%29
Improvements πŸŽ‰
(primary)
-3.0%-5.9%10
Improvements πŸŽ‰
(secondary)
-1.1%-1.6%7
All πŸ˜ΏπŸŽ‰ (primary)-0.2%-5.9%64

Large change (over 2000 lines changed) that is a first step for further work on constant evaluation in the compiler. Overall this is still an improvement, and regressions are primarily on stress tests. See this comment for some further context.

Split up Definitions and ResolverAstLowering. #98106 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
0.4%0.5%9
Improvements πŸŽ‰
(primary)
-0.3%-0.6%39
Improvements πŸŽ‰
(secondary)
-0.3%-0.6%5
All πŸ˜ΏπŸŽ‰ (primary)-0.3%-0.6%39

btree: avoid forcing the allocator to be a reference #98178 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.4%0.4%1
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-2.0%-2.0%1
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)-0.8%-2.0%2