2023-01-03 Triage Log

Fairly busy week with some massive performance improvements at the expense of some significant albeit smaller regressions. The main wins came in a long-standing PR from @cjgillot to enable encoding spans in metadata relative to their enclosing item. This causes more work in full compilation which causes some regressions up to 5% but can lead to very large wins in incremental compilation scenarios (up to ~70%). For example, the clap crate compiles 68% faster after a small 1 line change than it did previously.

Triage done by @rylev. Revision range: b38a6d..b43596

Summary:

(instructions:u)meanrangecount
Regressions ❌
(primary)
1.6%[0.3%, 4.6%]97
Regressions ❌
(secondary)
1.8%[0.2%, 7.6%]60
Improvements ✅
(primary)
-9.7%[-68.7%, -0.2%]53
Improvements ✅
(secondary)
-1.7%[-15.3%, -0.1%]62
All ❌✅ (primary)-2.4%[-68.7%, 4.6%]150

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

Regressions

Rollup of 8 pull requests #106228 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.4%[0.2%, 0.6%]7
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
--0
All ❌✅ (primary)0.4%[0.2%, 0.6%]7
  • Kicked off a perf run on the only likely culprit. The regression is small enough that I don‘t think it’s a big deal if we don't figure this out.

Allow trait method paths to satisfy const Fn bounds #106210 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.3%[0.2%, 0.5%]16
Regressions ❌
(secondary)
0.4%[0.2%, 0.7%]16
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.4%, -1.4%]1
All ❌✅ (primary)0.3%[0.2%, 0.5%]16
  • Massive amount of noise reversed in #106268. No idea where this noise comes from.

Improvements

fix comment for TokenCursor::desugar #106268 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
-0.3%[-0.5%, -0.2%]17
Improvements ✅
(secondary)
-0.3%[-0.7%, -0.2%]15
All ❌✅ (primary)-0.3%[-0.5%, -0.2%]17
  • Massive amount of noise coming in #106210 reversed here. No idea where this noise comes from.

Abolish QueryVTable in favour of more assoc items on QueryConfig #106307 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.6%[0.4%, 1.0%]4
Improvements ✅
(primary)
-0.5%[-1.0%, -0.2%]63
Improvements ✅
(secondary)
-0.6%[-1.3%, -0.4%]60
All ❌✅ (primary)-0.5%[-1.0%, -0.2%]63

Mixed

Catch panics/unwinding in destruction of TLS values #105426 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.7%[0.3%, 1.9%]11
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
-0.3%[-0.6%, -0.2%]41
Improvements ✅
(secondary)
-1.8%[-14.6%, -0.2%]31
All ❌✅ (primary)-0.1%[-0.6%, 1.9%]52
  • Very much unsure where the performance changes are coming from. Some show LLVM regressions but not all. LLVM also does not explain the improvements.
  • Ask in the PR for thoughts.

Use some more const_eval_select in pointer methods for compile times #106275 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.4%[0.4%, 0.4%]1
Regressions ❌
(secondary)
0.7%[0.6%, 0.9%]2
Improvements ✅
(primary)
-0.5%[-0.9%, -0.2%]28
Improvements ✅
(secondary)
-0.8%[-0.8%, -0.7%]3
All ❌✅ (primary)-0.4%[-0.9%, 0.4%]29
  • Author investigated why this might have caused a regression in regex and found nothing. The gains much outweigh the regressions so we should be fine keeping it.

Encode spans relative to the enclosing item -- enable on nightly #84762 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
1.7%[0.2%, 5.0%]108
Regressions ❌
(secondary)
1.8%[0.2%, 7.6%]90
Improvements ✅
(primary)
-20.0%[-68.9%, -0.6%]25
Improvements ✅
(secondary)
-2.7%[-4.8%, -1.5%]11
All ❌✅ (primary)-2.4%[-68.9%, 5.0%]133
  • There was an FCP to decide whether the trade off of some regressions for some huge incremental performance wins was worth it.
  • This FCP passed and so the PR was merged.

Reenable limited top-down MIR inlining #106364 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.5%[0.3%, 1.1%]4
Regressions ❌
(secondary)
0.6%[0.5%, 0.6%]4
Improvements ✅
(primary)
-0.6%[-1.2%, -0.2%]9
Improvements ✅
(secondary)
-0.9%[-2.4%, -0.2%]18
All ❌✅ (primary)-0.2%[-1.2%, 1.1%]13
  • As pointed out here this was effectively a performance wash with regressions and improvements canceling themselves out.