2021-11-16 Triage Log

A large amount of noise in the comparisons this week, likely due to new probabilistic query hash verification increasing likelihood of changes in each benchmark; solutions are being tracked in rustc-perf#1105.

Otherwise, though, the week largely amounted to a neutral one for performance. There were some regressions, particularly in doc builds, as a result of the addition of portable SIMD. These are relatively speaking minor and primarily impact small crates.

Triage done by @simulacrum. Revision range: eee8b9c7bafade55981d155dae71657f1cc55a22..934624fe5f66ce3fb8abf0597a6deb079783335f

5 Regressions, 2 Improvements, 6 Mixed; 2 of them in rollups

41 comparisons made in total

Regressions

pub use core::simd; #89167

  • Very large regression in instruction counts (up to 11.8% on full builds of helloworld)
  • Expected regression due to expansion of libcore size; this continues to be a pain point as we add features to the standard library. Largest regressions are in rustdoc builds as it's more sensitive to the addition of new traits and impls.

proc_macro: Add an expand_expr method to TokenStream #87264

  • Very large regression in instruction counts (up to 5.3% on incr-unchanged builds of inflate)
  • Incremental regressions are likely to be due to random hashing added for incr-comp verification (which we may decide to disable during perf collection to avoid this). Otherwise, the regression is minimal to TokenStream processing.

MIRI says reverse is UB, so replace it with something LLVM can vectorize #90821

  • Moderate regression in instruction counts (up to 0.8% on full builds of deeply-nested)
  • Unclear cause to these regressions, but they seem to larely be in doc builds.

Rollup of 5 pull requests #90769

  • Very large regression in instruction counts (up to 84.9% on full builds of webrender-wrench)
  • Also has a small improvement, but that is likely to be the incremental verification noise.

Added the --temps-dir option #83846

  • Small regression in instruction counts (up to 0.5% on incr-unchanged builds of helloworld)
  • Unclear what the cause of this is; we would not generally expect a regression from such an introduction.

Improvements

Use Vec extend and collect instead of repeatedly calling push #90813

  • Very large improvement in instruction counts (up to -8.7% on full builds of match-stress-enum)
  • Excellent improvement to a number of benchmarks. Mostly limited to somewhat unrealistic stress tests.

Address performance regression introduced by #90218 #90845

  • Very large improvement in instruction counts (up to -5.1% on full builds of regression-31157)

Mixed

Replace Copy/Clone compiler magic on arrays with library impls #86041

  • Moderate improvement in instruction counts (up to -1.2% on incr-unchanged builds of deeply-nested)
  • Moderate regression in instruction counts (up to 1.0% on full builds of cranelift-codegen)
  • Limited regressions in codegen, mostly due to more complicated MIR for these impls when done in library code vs. directly generated.

Optimize pattern matching #90746

  • Very large improvement in instruction counts (up to -5.3% on full builds of match-stress-enum)
  • Large regression in instruction counts (up to 4.0% on incr-unchanged builds of deep-vector)

rustdoc: Go back to loading all external crates unconditionally #90489

Make RawVec private to alloc #90542

  • Very large improvement in instruction counts (up to -5.1% on incr-unchanged builds of inflate)
  • Large regression in instruction counts (up to 4.0% on incr-unchanged builds of deep-vector)

Optimize Eq and Hash for Path/PathBuf #90596

  • Very large improvement in instruction counts (up to -6.0% on incr-unchanged builds of coercions)
  • Very large regression in instruction counts (up to 12.9% on incr-unchanged builds of tuple-stress)

Rollup of 8 pull requests #90945

  • Small improvement in instruction counts (up to -0.4% on full builds of deeply-nested-async)
  • Small regression in instruction counts (up to 0.3% on incr-patched: println builds of clap-rs)

Untriaged Pull Requests