2020-11-24 Triage Log

This week saw landing of #79237 which by itself provides no wins but opens the door to support for split debuginfo on macOS. This'll eventually show huge wins as we can likely avoid re-collecting debuginfo while retaining support for lldb and Rust backtraces. #79361 tracks the stabilization of the rustc flag, but the precise rollout to stable users is not yet 100% clear.

Triage done by @jyn514 and @simulacrum. Revision range: c919f490bbcd2b29b74016101f7ec71aaa24bdbb..25a691003cf6676259ee7d4bed05b43cb6283cea

4 regressions, 4 improvements, 2 mixed results. 5 of them in rollups.

Regressions

#79167: linux: try to use libc getrandom to allow interposition #78785

  • Large regression in instruction counts (up to 7.7% on incr-unchanged builds of deeply-nested-async-opt)
  • The PR allows intercepting getrandom at runtime with LD_PRELOAD, so it's possible a regression was expected. However, 40% increased bootstrap times for libcore seems excessive.
  • Landed in a rollup, so it's possible another PR may be to blame. Opened #79389 measuring the impact.

#78646: Use PackedFingerprint in DepNode to reduce memory consumption

  • Moderate regression in instruction counts (up to 3.2% on full builds of keccak-check)
  • Major improvement in memory usage (up to 21.6 on full builds of keccak-opt)
  • The regression in cycle count is worse than the last perf run on the PR, but overall seems to be expected. Not leaving a comment.

#79237: std: Update the backtrace crate submodule

  • Moderate regression in instruction counts (up to 1.4% on incr-unchanged builds of unify-linearly-debug), mostly on debug and opt builds.
  • @ehuss reports a 600% decrease in incremental builds when using -Z run-dsymutil=no on MacOS (!!). #79361 tracks enabling -Z run-dsymutil=no by default.
  • @alexcrichton theorizes the regression is because there's more code in libstd overall (since it now handles archives of debug symbol).
  • Not leaving a nag, since the regression is small and the improvement more than makes up for it.

#79273: Rollup of 8 pull requests

  • Moderate regression in instruction counts (up to 1.8% on full builds of coercions-debug). @Mark-Simulacrum thinks this is a false positive, since there are no similar regressions in -opt or -check builds.
  • Minor improvements in instruction counts on doc builds (up to .4% on unused-warnings-doc). Likely due to #79264: Get rid of some doctree items.
  • Most regressions are in LLVM/codegen, so likely due to #79067: Refactor the abi handling code a bit.

Improvements

#79200: Rollup of 14 pull requests

  • Moderate improvement in instruction counts (up to -1.9% on full builds of ctfe-stress-4-opt, up to -5.5 on doc builds)
  • Improvement is almost completely due to a -8.5% improvement on eval_to_allocation_raw
  • Unclear which PR caused the improvement; both #79149 and #79101 are likely candidates. Left a nag asking the authors to use rollup=never in the future.

#79220

  • Moderate improvement in instruction counts (up to -3.3% on full builds of deeply-nested-async-check)
  • Improvement is almost completely due to a -25.6% improvement in normalize_generic_arg_after_erasing_regions and -24.7% improvement in erase_regions_ty.
  • Likely due to #79193, which reverts an earlier PR. We should keep an eye on this, since it will likely regress again when the validation is re-enabled.

#78088: Add lint for panic!("{}")

  • Moderate improvement in instruction counts (up to -3.3% on incr-full builds of futures-opt)
  • The improvement is likely because the desugaring of panic! changed.

#78343

  • Moderate improvement in instruction counts (up to -3.0% on incr-full builds of wg-grammar-opt)
  • The improvement is likely because the way panic! is expanded changed.

#79319

  • Very large improvement in instruction counts (up to -26.4% on incr-patched: println builds of cargo-opt)
  • Predominantly incremental perf getting better, likely due to #77697 Split each iterator adapter and source into individual modules which presumably shuffled CGU ordering in core/std, avoiding multiple LLVM module invalidations.

Mixed

#78461

  • Very large regression in instruction counts (up to 36.6% on incr-patched: println builds of clap-rs-debug)
  • Moderate improvement in instruction counts (up to -2.6% on incr-patched: Compiler new builds of regex-opt)
  • Pretty much limited to just incremental builds, likely the addition of allocators to Vec is causing some problems in incremental caching. Potentially worth tracking down the specific cause.

#79186

  • Moderate improvement in instruction counts (up to -4.5% on full builds of regression-31157-opt)
  • Moderate regression in instruction counts (up to 4.4% on full builds of deeply-nested-async-check)
  • Seems to largely be an improvement due to less queries being run in some cases, but there is some upfront cost -- presumably the regressed test case didn't end up calling/using the now less needed queries, but paid the price in metadata decoding.

Nags requiring follow up

Compiler team notes