|
| 1 | +# 2025-08-25 Triage Log |
| 2 | + |
| 3 | +Lot of regressions this week, mostly in rustdoc benchmarks from newly added features. The rest of the suite saw mostly small regressions in small benchmarks and also some improvements, notably from token tree parsing optimization in macro code, span optimization and ongoing work on new solver, which is not fully enabled, yet. |
| 4 | + |
| 5 | +Triage done by **@panstromek**. |
| 6 | +Revision range: [239e8b1b..ee361e8f](https://perf.rust-lang.org/?start=239e8b1b47b34120287ec36b33228c1e177f0c38&end=ee361e8fca1c30e13e7a31cc82b64c045339d3a8&absolute=false&stat=instructions%3Au) |
| 7 | + |
| 8 | +**Summary**: |
| 9 | + |
| 10 | +| (instructions:u) | mean | range | count | |
| 11 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 12 | +| Regressions ❌ <br /> (primary) | 3.7% | [0.3%, 34.5%] | 42 | |
| 13 | +| Regressions ❌ <br /> (secondary) | 2.3% | [0.0%, 53.3%] | 79 | |
| 14 | +| Improvements ✅ <br /> (primary) | -0.5% | [-0.7%, -0.3%] | 9 | |
| 15 | +| Improvements ✅ <br /> (secondary) | -0.9% | [-2.8%, -0.0%] | 30 | |
| 16 | +| All ❌✅ (primary) | 3.0% | [-0.7%, 34.5%] | 51 | |
| 17 | + |
| 18 | + |
| 19 | +5 Regressions, 1 Improvement, 7 Mixed; 6 of them in rollups |
| 20 | +38 artifact comparisons made in total |
| 21 | + |
| 22 | +#### Regressions |
| 23 | + |
| 24 | +Rollup of 19 pull requests [#145589](https://github.com/rust-lang/rust/pull/145589) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=b96868fa2ef174b0a5aeb3bf041b3a5b517f11f8&end=8365fcb2b840c95eeb0bc377af8bd498fad22245&stat=instructions:u) |
| 25 | + |
| 26 | +| (instructions:u) | mean | range | count | |
| 27 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 28 | +| Regressions ❌ <br /> (primary) | 6.2% | [0.2%, 33.1%] | 18 | |
| 29 | +| Regressions ❌ <br /> (secondary) | 3.4% | [0.3%, 50.8%] | 24 | |
| 30 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 31 | +| Improvements ✅ <br /> (secondary) | -0.0% | [-0.0%, -0.0%] | 1 | |
| 32 | +| All ❌✅ (primary) | 6.2% | [0.2%, 33.1%] | 18 | |
| 33 | + |
| 34 | +`doc` regressions were expected, but not as big. Pinged @zalathar, who investigated some of the regressions. |
| 35 | + |
| 36 | +Rollup of 15 pull requests [#145600](https://github.com/rust-lang/rust/pull/145600) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=16ad385579cebb6f7d53367c552661b6b51a4a02&end=05f5a58e84a9c3a68586d70bf3d7442c571e379e&stat=instructions:u) |
| 37 | + |
| 38 | +| (instructions:u) | mean | range | count | |
| 39 | +|:----------------------------------:|:----:|:------------:|:-----:| |
| 40 | +| Regressions ❌ <br /> (primary) | 4.6% | [4.6%, 4.6%] | 1 | |
| 41 | +| Regressions ❌ <br /> (secondary) | 4.4% | [4.4%, 4.4%] | 1 | |
| 42 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 43 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 44 | +| All ❌✅ (primary) | 4.6% | [4.6%, 4.6%] | 1 | |
| 45 | + |
| 46 | +Looks like noise, syn is just coming back from a spike from previous rollup. |
| 47 | + |
| 48 | +Split transmute check from HIR typeck [#145469](https://github.com/rust-lang/rust/pull/145469) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=6545b056388a727c2ac4a4e70fb01d60a11398b1&end=78b89ebb6b20cf50370335e14c5357a4388ac760&stat=instructions:u) |
| 49 | + |
| 50 | +| (instructions:u) | mean | range | count | |
| 51 | +|:----------------------------------:|:----:|:------------:|:-----:| |
| 52 | +| Regressions ❌ <br /> (primary) | 0.6% | [0.6%, 0.6%] | 1 | |
| 53 | +| Regressions ❌ <br /> (secondary) | 0.8% | [0.6%, 1.0%] | 6 | |
| 54 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 55 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 56 | +| All ❌✅ (primary) | 0.6% | [0.6%, 0.6%] | 1 | |
| 57 | + |
| 58 | +Regression looks real, but small and affect mostly secondary stress test. Asked on the PR whether that's justified. |
| 59 | + |
| 60 | +Rollup of 28 pull requests [#145773](https://github.com/rust-lang/rust/pull/145773) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=78b89ebb6b20cf50370335e14c5357a4388ac760&end=8df154bffddcb6bbb543ad69aff971795c5adbc2&stat=instructions:u) |
| 61 | + |
| 62 | +| (instructions:u) | mean | range | count | |
| 63 | +|:----------------------------------:|:----:|:------------:|:-----:| |
| 64 | +| Regressions ❌ <br /> (primary) | 0.5% | [0.5%, 0.5%] | 1 | |
| 65 | +| Regressions ❌ <br /> (secondary) | 2.1% | [0.1%, 4.2%] | 2 | |
| 66 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 67 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 68 | +| All ❌✅ (primary) | 0.5% | [0.5%, 0.5%] | 1 | |
| 69 | + |
| 70 | +`include-blob` regression looks like noise (similar bump we occasinaly see on it). Smaller doc regression was identified by @zalathar as [#145731](https://github.com/rust-lang/rust/pull/145731) and is somewhat expected as there's more work to do when generating search index. |
| 71 | + |
| 72 | +Add support for macro expansion in rustdoc source code pages [#137229](https://github.com/rust-lang/rust/pull/137229) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=3776358beb5747d938bdefaf47a1c76723e6a372&end=809200ec956983fce4ae178b87dada69f01d0820&stat=instructions:u) |
| 73 | + |
| 74 | +| (instructions:u) | mean | range | count | |
| 75 | +|:----------------------------------:|:----:|:-------------:|:-----:| |
| 76 | +| Regressions ❌ <br /> (primary) | 1.5% | [0.4%, 6.6%] | 16 | |
| 77 | +| Regressions ❌ <br /> (secondary) | 5.8% | [0.6%, 16.5%] | 10 | |
| 78 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 79 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 80 | +| All ❌✅ (primary) | 1.5% | [0.4%, 6.6%] | 16 | |
| 81 | + |
| 82 | +`doc` regression, triaged by @GuillaumeGomez: "Sadly the perf impact was to be expected since it adds more code." Some performance improvement is likely possible by future improvements based on another commment in the thread. |
| 83 | + |
| 84 | +#### Improvements |
| 85 | + |
| 86 | +Sometimes skip over tokens in `parse_token_tree`. [#145348](https://github.com/rust-lang/rust/pull/145348) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=22a86f8280becb12c34ee3efd952baf5cf086fa0&end=bec747418c9955de4c3fd0aac4acb99206f00aa2&stat=instructions:u) |
| 87 | + |
| 88 | +| (instructions:u) | mean | range | count | |
| 89 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 90 | +| Regressions ❌ <br /> (primary) | - | - | 0 | |
| 91 | +| Regressions ❌ <br /> (secondary) | - | - | 0 | |
| 92 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 93 | +| Improvements ✅ <br /> (secondary) | -1.0% | [-2.1%, -0.3%] | 16 | |
| 94 | +| All ❌✅ (primary) | - | - | 0 | |
| 95 | + |
| 96 | + |
| 97 | +#### Mixed |
| 98 | + |
| 99 | +Update cargo [#145478](https://github.com/rust-lang/rust/pull/145478) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=239e8b1b47b34120287ec36b33228c1e177f0c38&end=aaf87a6d289053246d19f94fbc9972582816e93d&stat=instructions:u) |
| 100 | + |
| 101 | +| (instructions:u) | mean | range | count | |
| 102 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 103 | +| Regressions ❌ <br /> (primary) | 1.1% | [1.0%, 1.2%] | 2 | |
| 104 | +| Regressions ❌ <br /> (secondary) | 1.1% | [1.1%, 1.1%] | 1 | |
| 105 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 106 | +| Improvements ✅ <br /> (secondary) | -0.3% | [-0.4%, -0.3%] | 7 | |
| 107 | +| All ❌✅ (primary) | 1.1% | [1.0%, 1.2%] | 2 | |
| 108 | + |
| 109 | +Regressions in `syn` look like noise, returning to previous state. Cargo update should have no effect on this. Already triaged by Mark. |
| 110 | + |
| 111 | +library: Migrate from `cfg_if` to `cfg_select` [#145489](https://github.com/rust-lang/rust/pull/145489) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=aaf87a6d289053246d19f94fbc9972582816e93d&end=9eb4a2652031ed5ba97c29ef21c79db1645f7883&stat=instructions:u) |
| 112 | + |
| 113 | +| (instructions:u) | mean | range | count | |
| 114 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 115 | +| Regressions ❌ <br /> (primary) | - | - | 0 | |
| 116 | +| Regressions ❌ <br /> (secondary) | 0.3% | [0.2%, 0.4%] | 9 | |
| 117 | +| Improvements ✅ <br /> (primary) | -1.2% | [-1.2%, -1.2%] | 1 | |
| 118 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 119 | +| All ❌✅ (primary) | -1.2% | [-1.2%, -1.2%] | 1 | |
| 120 | + |
| 121 | +`include-blob` regersion is noise (bimodality, returning to the default state). |
| 122 | + |
| 123 | +Rollup of 15 pull requests [#145599](https://github.com/rust-lang/rust/pull/145599) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=8c32e313cccf7df531e2d49ffb8227bb92304aee&end=16ad385579cebb6f7d53367c552661b6b51a4a02&stat=instructions:u) |
| 124 | + |
| 125 | +| (instructions:u) | mean | range | count | |
| 126 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 127 | +| Regressions ❌ <br /> (primary) | 0.2% | [0.2%, 0.2%] | 1 | |
| 128 | +| Regressions ❌ <br /> (secondary) | 0.2% | [0.1%, 0.5%] | 11 | |
| 129 | +| Improvements ✅ <br /> (primary) | -4.8% | [-4.8%, -4.8%] | 1 | |
| 130 | +| Improvements ✅ <br /> (secondary) | -4.6% | [-4.6%, -4.6%] | 1 | |
| 131 | +| All ❌✅ (primary) | -2.3% | [-4.8%, 0.2%] | 2 | |
| 132 | + |
| 133 | +Non doc results are noise. For `doc` regressions, seems like https://github.com/rust-lang/rust/pull/139345 is the most likely (based on [these results](https://github.com/rust-lang/rust/pull/145599#issuecomment-3208161337)? It seems plausible as it changes FxHashMap to FxIndexMap, which is bigger I believe. I'm inclined to say that it's ok, since that's a correctness change, too and the regressions are small (also seem a bit overshooting and slightly reduced in next PR). |
| 134 | + |
| 135 | +Tell LLVM about read-only captures [#145259](https://github.com/rust-lang/rust/pull/145259) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=040a98af70f0a7da03f3d5356531b28a2a7a77e4&end=125ff8a788c5d6a66917f499abdc00051afe6886&stat=instructions:u) |
| 136 | + |
| 137 | +| (instructions:u) | mean | range | count | |
| 138 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 139 | +| Regressions ❌ <br /> (primary) | 0.8% | [0.8%, 0.8%] | 1 | |
| 140 | +| Regressions ❌ <br /> (secondary) | 0.3% | [0.2%, 0.4%] | 7 | |
| 141 | +| Improvements ✅ <br /> (primary) | -0.2% | [-0.2%, -0.2%] | 1 | |
| 142 | +| Improvements ✅ <br /> (secondary) | -1.3% | [-1.7%, -0.2%] | 8 | |
| 143 | +| All ❌✅ (primary) | 0.3% | [-0.2%, 0.8%] | 2 | |
| 144 | + |
| 145 | +`include-blob` regressions are noise. `serde_derive` looks real but it's tiny (adding a println statement). Seems like the biggest query differences are in LLVM, that seems to match the PR area. |
| 146 | + |
| 147 | + |
| 148 | +Rollup of 16 pull requests [#145728](https://github.com/rust-lang/rust/pull/145728) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=6ba0ce40941eee1ca02e9ba49c791ada5158747a&end=8e3710ef31a0b2cdf5a1c2f3929b7735d1e28c20&stat=instructions:u) |
| 149 | + |
| 150 | +| (instructions:u) | mean | range | count | |
| 151 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 152 | +| Regressions ❌ <br /> (primary) | - | - | 0 | |
| 153 | +| Regressions ❌ <br /> (secondary) | 0.2% | [0.2%, 0.2%] | 1 | |
| 154 | +| Improvements ✅ <br /> (primary) | -0.8% | [-1.2%, -0.4%] | 5 | |
| 155 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 156 | +| All ❌✅ (primary) | -0.8% | [-1.2%, -0.4%] | 5 | |
| 157 | + |
| 158 | +Single regression is in new solver, which is not finished and not enabled by default. |
| 159 | + |
| 160 | +Only unpack span data once to compute end_point and next_point. [#145494](https://github.com/rust-lang/rust/pull/145494) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=46c219bd24862c0a87f0299570bb37f2d5ecf6ce&end=6545b056388a727c2ac4a4e70fb01d60a11398b1&stat=instructions:u) |
| 161 | + |
| 162 | +| (instructions:u) | mean | range | count | |
| 163 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 164 | +| Regressions ❌ <br /> (primary) | - | - | 0 | |
| 165 | +| Regressions ❌ <br /> (secondary) | 0.7% | [0.4%, 0.8%] | 6 | |
| 166 | +| Improvements ✅ <br /> (primary) | -0.3% | [-0.3%, -0.2%] | 2 | |
| 167 | +| Improvements ✅ <br /> (secondary) | -0.5% | [-0.6%, -0.4%] | 9 | |
| 168 | +| All ❌✅ (primary) | -0.3% | [-0.3%, -0.2%] | 2 | |
| 169 | + |
| 170 | +`tt-muncher` regression is noise (bimodality, returning back to previous state) |
| 171 | + |
| 172 | + |
| 173 | +Rollup of 14 pull requests [#145796](https://github.com/rust-lang/rust/pull/145796) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=69b76df90c7ea63b5350d1865f92902a0b27c9a2&end=f6d23413c399fb530be362ebcf25a4e788e16137&stat=instructions:u) |
| 174 | + |
| 175 | +| (instructions:u) | mean | range | count | |
| 176 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 177 | +| Regressions ❌ <br /> (primary) | 0.8% | [0.8%, 0.9%] | 2 | |
| 178 | +| Regressions ❌ <br /> (secondary) | 1.5% | [1.5%, 1.5%] | 1 | |
| 179 | +| Improvements ✅ <br /> (primary) | -0.4% | [-0.4%, -0.3%] | 2 | |
| 180 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 181 | +| All ❌✅ (primary) | 0.2% | [-0.4%, 0.9%] | 4 | |
| 182 | + |
| 183 | +`tt-muncher` regression is noise. The other two I'm not sure. They could also be noise because they have symetrical improvements from https://github.com/rust-lang/rust/pull/145728. All of this is in the backend, I don't see anything related in the PR list, so I guess it might be codegen unit shuffling? |
0 commit comments