Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
250 changes: 250 additions & 0 deletions triage/2025/2025-10-20.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
# 2025-10-21 Triage Log

Fairly busy week, with lots of mixed results. However, overall we ended with a
slight improvement on average.

Triage done by **@simulacrum**.
Revision range: [956f47c3..4068bafe](https://perf.rust-lang.org/?start=956f47c32f1bd97b22cd702d7ccf78f0f0d42c34&end=4068bafedd8ba724e332a5221c06a6fa531a30d2&absolute=false&stat=instructions%3Au)

**Summary**:

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.5% | [0.2%, 0.8%] | 21 |
| Regressions ❌ <br /> (secondary) | 0.6% | [0.1%, 2.5%] | 78 |
| Improvements ✅ <br /> (primary) | -0.8% | [-7.3%, -0.1%] | 88 |
| Improvements ✅ <br /> (secondary) | -0.6% | [-5.4%, -0.1%] | 87 |
| All ❌✅ (primary) | -0.6% | [-7.3%, 0.8%] | 109 |

2 Regressions, 5 Improvements, 10 Mixed; 5 of them in rollups
39 artifact comparisons made in total

#### Regressions

Rollup of 11 pull requests [#147745](https://github.com/rust-lang/rust/pull/147745) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=57ef8d642d21965304bde849bab4f389b4353e27&end=402ce0ef07d5db9ba26ae5c37ce6aff0c9002052&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | - | - | 0 |
| Regressions ❌ <br /> (secondary) | 1.0% | [0.8%, 2.0%] | 7 |
| Improvements ✅ <br /> (primary) | - | - | 0 |
| Improvements ✅ <br /> (secondary) | -0.3% | [-0.3%, -0.3%] | 1 |
| All ❌✅ (primary) | - | - | 0 |

Suspecting https://github.com/rust-lang/rust/pull/147718, but since regressions
are only to match-stress it's unlikely to be particularly interesting. Possibly
a missing #[inline] to regain instruction counts.

deduced_param_attrs: check Freeze on monomorphic types. [#147695](https://github.com/rust-lang/rust/pull/147695) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=c8a31b780d5415358566a20b94912620a3f27067&end=0c0f27afd42c977d5ea5f6df2c8f5bc192bdc67a&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:----:|:------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.3% | [0.3%, 0.4%] | 3 |
| Regressions ❌ <br /> (secondary) | - | - | 0 |
| Improvements ✅ <br /> (primary) | - | - | 0 |
| Improvements ✅ <br /> (secondary) | - | - | 0 |
| All ❌✅ (primary) | 0.3% | [0.3%, 0.4%] | 3 |

Appears to be a regression limited to the bitmaps benchmark. Most other
benchmarks, though below noise threshold, are slightly improved or neutral. The
initial perf run in PR was also a strict improvement. It doesn't seem like a
spurious regression, but also doesn't seem like it merits further followup.

#### Improvements

Restrict sysroot crate imports to those defined in this repo. [#143548](https://github.com/rust-lang/rust/pull/143548) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=4f08307f6efdbca86d27beecd257fad9913192e9&end=28d0a4a205f9e511ad2f51ee79a4aa19a704a455&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | - | - | 0 |
| Regressions ❌ <br /> (secondary) | - | - | 0 |
| Improvements ✅ <br /> (primary) | -2.8% | [-2.8%, -2.8%] | 1 |
| Improvements ✅ <br /> (secondary) | - | - | 0 |
| All ❌✅ (primary) | -2.8% | [-2.8%, -2.8%] | 1 |


rustdoc-search: stringdex 0.0.2 [#147660](https://github.com/rust-lang/rust/pull/147660) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=a41214f9bd7ce869d21898f31107f92c90a9112f&end=f46475914de626785090a05ae037578aaa119fc8&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | - | - | 0 |
| Regressions ❌ <br /> (secondary) | - | - | 0 |
| Improvements ✅ <br /> (primary) | -0.8% | [-2.5%, -0.2%] | 5 |
| Improvements ✅ <br /> (secondary) | -1.1% | [-5.7%, -0.3%] | 9 |
| All ❌✅ (primary) | -0.8% | [-2.5%, -0.2%] | 5 |


Rollup of 6 pull requests [#147842](https://github.com/rust-lang/rust/pull/147842) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=0c0f27afd42c977d5ea5f6df2c8f5bc192bdc67a&end=6380899f32599ea25615d4ccd708d0e8da652b0c&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | - | - | 0 |
| Regressions ❌ <br /> (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
| Improvements ✅ <br /> (primary) | - | - | 0 |
| Improvements ✅ <br /> (secondary) | -0.4% | [-1.1%, -0.1%] | 8 |
| All ❌✅ (primary) | - | - | 0 |


Rollup of 4 pull requests [#147884](https://github.com/rust-lang/rust/pull/147884) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=c6efb9019b3169fc672248339dbbf13e6a134de3&end=4ddbb6051271237f4192333e06b8129148995eef&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | - | - | 0 |
| Regressions ❌ <br /> (secondary) | - | - | 0 |
| Improvements ✅ <br /> (primary) | -0.3% | [-0.3%, -0.2%] | 2 |
| Improvements ✅ <br /> (secondary) | -0.2% | [-0.3%, -0.1%] | 5 |
| All ❌✅ (primary) | -0.3% | [-0.3%, -0.2%] | 2 |

Add a `!=` check to `ChunkedBitSet::union`. [#147619](https://github.com/rust-lang/rust/pull/147619) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=5413f7d39cae07b7b3809973fe201d21960a18aa&end=4f08307f6efdbca86d27beecd257fad9913192e9&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 2.9% | [2.9%, 2.9%] | 1 |
| Regressions ❌ <br /> (secondary) | - | - | 0 |
| Improvements ✅ <br /> (primary) | -3.5% | [-9.3%, -0.1%] | 8 |
| Improvements ✅ <br /> (secondary) | - | - | 0 |
| All ❌✅ (primary) | -2.8% | [-9.3%, 2.9%] | 9 |

One regression looks spurious so manually moved to improvements.

#### Mixed

Change int-to-ptr transmute lowering back to inttoptr [#147541](https://github.com/rust-lang/rust/pull/147541) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=9b8264604ef800b5539d04bf78ebdef5c5fa4968&end=ed1d94311e7ed53eabb5667ef577802d88d1aaee&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.2% | [0.2%, 0.2%] | 1 |
| Regressions ❌ <br /> (secondary) | 2.2% | [0.1%, 2.9%] | 8 |
| Improvements ✅ <br /> (primary) | - | - | 0 |
| Improvements ✅ <br /> (secondary) | -0.3% | [-0.6%, -0.1%] | 12 |
| All ❌✅ (primary) | 0.2% | [0.2%, 0.2%] | 1 |

Mitigation for soundness problems, costs are worth it.

only call polymorphic array iter drop machinery when the type requires it [#147353](https://github.com/rust-lang/rust/pull/147353) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=4b94758d2ba7d0ef71ccf5fde29ce4bc5d6fe2a4&end=fb24b04b096a980bffd80154f6aba22fd07cb3d9&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.7% | [0.7%, 0.7%] | 2 |
| Regressions ❌ <br /> (secondary) | 0.3% | [0.1%, 1.1%] | 4 |
| Improvements ✅ <br /> (primary) | - | - | 0 |
| Improvements ✅ <br /> (secondary) | -0.1% | [-0.1%, -0.0%] | 2 |
| All ❌✅ (primary) | 0.7% | [0.7%, 0.7%] | 2 |

Primary regressions to cargo and cranelift-codegen look real. However, previous
runs on the same PR saw oscillating results, and since this likely affects CGU
partitioning it doesn't seem unexpected that would be the case. Marking as
triaged.

Rollup of 12 pull requests [#147662](https://github.com/rust-lang/rust/pull/147662) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=2f7620a5ccfea7d59d1f500e2a2e59cf1c867a1b&end=e100792918c8bd9e0cb830f96fc9b171e8892fa1&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.4% | [0.3%, 0.5%] | 2 |
| Regressions ❌ <br /> (secondary) | 0.2% | [0.0%, 0.5%] | 3 |
| Improvements ✅ <br /> (primary) | -0.3% | [-0.4%, -0.2%] | 2 |
| Improvements ✅ <br /> (secondary) | -0.1% | [-0.1%, -0.1%] | 3 |
| All ❌✅ (primary) | 0.1% | [-0.4%, 0.5%] | 4 |

Per PR comment, perf change is from avoiding redundant UB checks:
https://github.com/rust-lang/rust/pull/147620#issuecomment-3404145907.

Regressions don't look spurious but seem unlikely to be practically
investigated to any real effect due to the nature of this change affecting lots
of generated code, and seeming like a good change on a surface level.

Rollup of 12 pull requests [#147692](https://github.com/rust-lang/rust/pull/147692) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=844264adda6f41ca6d0d61c4bcac0f263fc5072f&end=235a4c083eb2a2bfe8779d211c3232f39396de00&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.3% | [0.1%, 0.9%] | 20 |
| Regressions ❌ <br /> (secondary) | 0.6% | [0.0%, 2.7%] | 48 |
| Improvements ✅ <br /> (primary) | -0.4% | [-0.4%, -0.2%] | 3 |
| Improvements ✅ <br /> (secondary) | -0.1% | [-0.1%, -0.0%] | 5 |
| All ❌✅ (primary) | 0.2% | [-0.4%, 0.9%] | 23 |

Change identification appears to be ongoing on the PR, with no clear cause as yet identified.

prefer alias candidates for sizedness + auto trait goals [#144064](https://github.com/rust-lang/rust/pull/144064) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=3f2a5921a451378f219edec28810f5f2f45cf1be&end=57ef8d642d21965304bde849bab4f389b4353e27&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.4% | [0.1%, 0.8%] | 16 |
| Regressions ❌ <br /> (secondary) | 0.5% | [0.2%, 1.8%] | 19 |
| Improvements ✅ <br /> (primary) | -0.2% | [-0.6%, -0.1%] | 6 |
| Improvements ✅ <br /> (secondary) | -0.5% | [-0.7%, -0.3%] | 8 |
| All ❌✅ (primary) | 0.2% | [-0.6%, 0.8%] | 22 |

Fix for a regression. Generally fairly neutral so further investigation doesn't seem warranted.

Use regular Vec in BitSet. [#147644](https://github.com/rust-lang/rust/pull/147644) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=f5242367f4acf0130c9b68e6956531b2cb73bd38&end=779e19d8baa3e3625bd4fc5c85cbb2ad47b43155&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.4% | [0.2%, 0.7%] | 16 |
| Regressions ❌ <br /> (secondary) | 0.3% | [0.0%, 0.8%] | 26 |
| Improvements ✅ <br /> (primary) | -0.4% | [-0.7%, -0.1%] | 26 |
| Improvements ✅ <br /> (secondary) | -0.8% | [-3.0%, -0.1%] | 69 |
| All ❌✅ (primary) | -0.1% | [-0.7%, 0.7%] | 42 |

Marking as triaged as it's overall a slight improvement.

`TaskDeps` improvements [#147508](https://github.com/rust-lang/rust/pull/147508) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=53a741fc4b8cf2d8e7b1b2336ed8edf889db84f4&end=28c4c7d7abced7b35c49f38149b9cb6ea27dd2a6&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.5% | [0.5%, 0.5%] | 1 |
| Regressions ❌ <br /> (secondary) | 0.5% | [0.2%, 0.8%] | 17 |
| Improvements ✅ <br /> (primary) | -0.4% | [-1.0%, -0.1%] | 25 |
| Improvements ✅ <br /> (secondary) | -0.7% | [-1.2%, -0.2%] | 22 |
| All ❌✅ (primary) | -0.4% | [-1.0%, 0.5%] | 26 |

Improvements definitely outweigh regressions.

Pre-compute MIR CFG caches for borrowck and other analyses [#142540](https://github.com/rust-lang/rust/pull/142540) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=f46475914de626785090a05ae037578aaa119fc8&end=28fad9598975af7734be05116b3c5fc74b720d87&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 1.7% | [1.0%, 2.6%] | 4 |
| Regressions ❌ <br /> (secondary) | 0.9% | [0.1%, 1.6%] | 6 |
| Improvements ✅ <br /> (primary) | -0.2% | [-0.3%, -0.1%] | 15 |
| Improvements ✅ <br /> (secondary) | -0.3% | [-0.4%, -0.2%] | 13 |
| All ❌✅ (primary) | 0.2% | [-0.3%, 2.6%] | 19 |

> I think this is fine. We're seeing enough wins for more common Rust code
> (serde, image, syn, etc) that I think it is fine to take the hit for the two
> outliers (tt-muncher and cranelift-codegen for some reason), I do think it
> could be because of cloning taking more instructions than what gets saved,
> but I don't think that is preventable.

https://github.com/rust-lang/rust/pull/142540#issuecomment-3416857137

I think I'm broadly in agreement with this summary of the results.

Limit impl_trait_header query to only trait impls [#144607](https://github.com/rust-lang/rust/pull/144607) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=28fad9598975af7734be05116b3c5fc74b720d87&end=2170b4da847c9d75d400b13ba53bd47f749233bd&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.2% | [0.2%, 0.2%] | 1 |
| Regressions ❌ <br /> (secondary) | 0.2% | [0.1%, 0.2%] | 11 |
| Improvements ✅ <br /> (primary) | -0.6% | [-0.8%, -0.4%] | 7 |
| Improvements ✅ <br /> (secondary) | -1.8% | [-2.6%, -0.1%] | 4 |
| All ❌✅ (primary) | -0.5% | [-0.8%, 0.2%] | 8 |

Some regressions on smaller benchmarks. My guess is that this hurts the case
where there's lots of opt function lookups for that are now two query cache hit
lookups rather than just one? But that seems to generally be less likely in our
benchmarks than showing an improvement, so willing to just accept the
regressions.

Simplify trivial constants in SimplifyConstCondition [#147654](https://github.com/rust-lang/rust/pull/147654) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=ab1d2444533d829e2d5cff6634cd3c70de6d7103&end=c8a31b780d5415358566a20b94912620a3f27067&stat=instructions:u)

| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.5% | [0.5%, 0.5%] | 1 |
| Regressions ❌ <br /> (secondary) | 0.6% | [0.2%, 1.1%] | 4 |
| Improvements ✅ <br /> (primary) | -0.5% | [-0.9%, -0.2%] | 13 |
| Improvements ✅ <br /> (secondary) | -0.2% | [-0.3%, -0.1%] | 8 |
| All ❌✅ (primary) | -0.4% | [-0.9%, 0.5%] | 14 |

Improvements outweigh regressions.
Loading