|
| 1 | +# 2023-12-11 Triage Log |
| 2 | + |
| 3 | +A quiet week overall. A few smaller crate (e.g., helloworld) benchmarks saw |
| 4 | +significant improvements in |
| 5 | +[#118568](https://github.com/rust-lang/rust/pull/118568), but this merely |
| 6 | +restores performance regressed earlier. |
| 7 | + |
| 8 | +Triage done by **@simulacrum**. |
| 9 | +Revision range: [9358642..5701093](https://perf.rust-lang.org/?start=9358642e3b8560eee89e6f40aa996c8394a3db31&end=57010939ed1d00076b4af0ed06a81ec69ea5e4a8&absolute=false&stat=instructions%3Au) |
| 10 | + |
| 11 | +**Summary**: |
| 12 | + |
| 13 | +| (instructions:u) | mean | range | count | |
| 14 | +|:----------------------------------:|:-----:|:---------------:|:-----:| |
| 15 | +| Regressions ❌ <br /> (primary) | 0.5% | [0.2%, 1.3%] | 111 | |
| 16 | +| Regressions ❌ <br /> (secondary) | 0.7% | [0.1%, 1.5%] | 34 | |
| 17 | +| Improvements ✅ <br /> (primary) | -5.2% | [-11.1%, -0.5%] | 18 | |
| 18 | +| Improvements ✅ <br /> (secondary) | -4.6% | [-10.5%, -0.4%] | 72 | |
| 19 | +| All ❌✅ (primary) | -0.3% | [-11.1%, 1.3%] | 129 | |
| 20 | + |
| 21 | +5 Regressions, 2 Improvements, 3 Mixed; 2 of them in rollups |
| 22 | +69 artifact comparisons made in total |
| 23 | + |
| 24 | +#### Regressions |
| 25 | + |
| 26 | +compile-time evaluation: detect writes through immutable pointers [#118324](https://github.com/rust-lang/rust/pull/118324) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=f16c81fa79940da0c3e4cedd7b064ecdee2278bf&end=0e7f91b75e7484a713e2f644212cfc1aa7478a28&stat=instructions:u) |
| 27 | + |
| 28 | +| (instructions:u) | mean | range | count | |
| 29 | +|:----------------------------------:|:----:|:------------:|:-----:| |
| 30 | +| Regressions ❌ <br /> (primary) | - | - | 0 | |
| 31 | +| Regressions ❌ <br /> (secondary) | 0.9% | [0.3%, 1.4%] | 12 | |
| 32 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 33 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 34 | +| All ❌✅ (primary) | - | - | 0 | |
| 35 | + |
| 36 | +> I feel like the remaining regression is small enough to be acceptable. We're doing more checks in const-eval, and there are no regressions in the builds of real crates. |
| 37 | +
|
| 38 | +(https://github.com/rust-lang/rust/pull/118324#issuecomment-1832836626) |
| 39 | + |
| 40 | +Introduce support for `async gen` blocks [#118420](https://github.com/rust-lang/rust/pull/118420) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=2b399b52753eac351067e73f4ff0de829443b9a7&end=f967532a47eb728ada44473a5c4c2eca1a45fe30&stat=instructions:u) |
| 41 | + |
| 42 | +| (instructions:u) | mean | range | count | |
| 43 | +|:----------------------------------:|:----:|:------------:|:-----:| |
| 44 | +| Regressions ❌ <br /> (primary) | 0.2% | [0.1%, 0.3%] | 23 | |
| 45 | +| Regressions ❌ <br /> (secondary) | 0.4% | [0.2%, 0.7%] | 3 | |
| 46 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 47 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 48 | +| All ❌✅ (primary) | 0.2% | [0.1%, 0.3%] | 23 | |
| 49 | + |
| 50 | +New functionality costs some additional time across some benchmarks. |
| 51 | + |
| 52 | +Rollup of 6 pull requests [#118763](https://github.com/rust-lang/rust/pull/118763) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=2d2f1b2099a9cf10d4300042f5ea15a65a203dae&end=dc3a3539d595272c6a578c35f5eb6a85b867aca8&stat=instructions:u) |
| 53 | + |
| 54 | +| (instructions:u) | mean | range | count | |
| 55 | +|:----------------------------------:|:----:|:------------:|:-----:| |
| 56 | +| Regressions ❌ <br /> (primary) | 0.4% | [0.2%, 0.5%] | 18 | |
| 57 | +| Regressions ❌ <br /> (secondary) | - | - | 0 | |
| 58 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 59 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 60 | +| All ❌✅ (primary) | 0.4% | [0.2%, 0.5%] | 18 | |
| 61 | + |
| 62 | +> We do a little bit more work after that PR because the reachable set is |
| 63 | +> slightly bigger and that in turn means more MIR gets encoded and things like |
| 64 | +> that. |
| 65 | +
|
| 66 | +(https://github.com/rust-lang/rust/pull/118763#issuecomment-1850073772) |
| 67 | + |
| 68 | +Don't warn an empty pattern unreachable if we're not sure the data is valid [#118308](https://github.com/rust-lang/rust/pull/118308) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=c722d5191c26bbeea77dee2c06d814075ae785f2&end=06e02d5b259c1e88cbf0c74366d9e0a4c7cfd6d9&stat=instructions:u) |
| 69 | + |
| 70 | +| (instructions:u) | mean | range | count | |
| 71 | +|:----------------------------------:|:----:|:------------:|:-----:| |
| 72 | +| Regressions ❌ <br /> (primary) | 0.6% | [0.2%, 0.9%] | 4 | |
| 73 | +| Regressions ❌ <br /> (secondary) | 1.0% | [1.0%, 1.0%] | 6 | |
| 74 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 75 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 76 | +| All ❌✅ (primary) | 0.6% | [0.2%, 0.9%] | 4 | |
| 77 | + |
| 78 | +> Yeah I expected a perf regression because of the validity tracking. It adds |
| 79 | +> an extra step for every constructor we try, and match-stress has an enum with |
| 80 | +> 8000 of these. I don't think there's a way around it, I need to know the |
| 81 | +> validity of every inspected place. |
| 82 | +
|
| 83 | +(https://github.com/rust-lang/rust/pull/118308#issuecomment-1831103831) |
| 84 | + |
| 85 | +This adds costs particularly to crates with lots or large matches, seen across |
| 86 | +a few primary workloads and within rustc bootstrap. This is a diagnostic |
| 87 | +correctness fix, so some cost is acceptable. |
| 88 | + |
| 89 | +Restore `const PartialEq` [#118661](https://github.com/rust-lang/rust/pull/118661) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=8b1ba11cb1176cd7b8a0f4b55d1c97ee9fd3662d&end=6f40082313d8374bdf962aba943a712d5322fae6&stat=instructions:u) |
| 90 | + |
| 91 | +| (instructions:u) | mean | range | count | |
| 92 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 93 | +| Regressions ❌ <br /> (primary) | 0.3% | [0.2%, 0.4%] | 9 | |
| 94 | +| Regressions ❌ <br /> (secondary) | 0.3% | [0.2%, 0.6%] | 11 | |
| 95 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 96 | +| Improvements ✅ <br /> (secondary) | -0.8% | [-0.8%, -0.8%] | 1 | |
| 97 | +| All ❌✅ (primary) | 0.3% | [0.2%, 0.4%] | 9 | |
| 98 | + |
| 99 | +Feature addition carrying likely unavoidable cost in some benchmarks. |
| 100 | + |
| 101 | +#### Improvements |
| 102 | + |
| 103 | +Avoid adding builtin functions to `symbols.o` [#118568](https://github.com/rust-lang/rust/pull/118568) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=0e7f91b75e7484a713e2f644212cfc1aa7478a28&end=503e129328080e924c0ddfca6abf4c2812580102&stat=instructions:u) |
| 104 | + |
| 105 | +| (instructions:u) | mean | range | count | |
| 106 | +|:----------------------------------:|:-----:|:---------------:|:-----:| |
| 107 | +| Regressions ❌ <br /> (primary) | - | - | 0 | |
| 108 | +| Regressions ❌ <br /> (secondary) | - | - | 0 | |
| 109 | +| Improvements ✅ <br /> (primary) | -6.6% | [-11.0%, -0.7%] | 14 | |
| 110 | +| Improvements ✅ <br /> (secondary) | -5.0% | [-10.7%, -0.3%] | 66 | |
| 111 | +| All ❌✅ (primary) | -6.6% | [-11.0%, -0.7%] | 14 | |
| 112 | + |
| 113 | +Smaller benchmarks show significant improvements, recovering a past performance |
| 114 | +regression. See PR description for details. |
| 115 | + |
| 116 | +Rollup of 8 pull requests [#118838](https://github.com/rust-lang/rust/pull/118838) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=57010939ed1d00076b4af0ed06a81ec69ea5e4a8&end=21cce21d8c012f14cf74d5afddd795d324600dac&stat=instructions:u) |
| 117 | + |
| 118 | +| (instructions:u) | mean | range | count | |
| 119 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 120 | +| Regressions ❌ <br /> (primary) | - | - | 0 | |
| 121 | +| Regressions ❌ <br /> (secondary) | - | - | 0 | |
| 122 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 123 | +| Improvements ✅ <br /> (secondary) | -0.9% | [-1.0%, -0.9%] | 6 | |
| 124 | +| All ❌✅ (primary) | - | - | 0 | |
| 125 | + |
| 126 | +https://github.com/rust-lang/rust/pull/118822 is the likely cause, but not |
| 127 | +worth digging deeper on this improvement. |
| 128 | + |
| 129 | +#### Mixed |
| 130 | + |
| 131 | +split `NormalizesTo` out of `Projection` 3 [#118725](https://github.com/rust-lang/rust/pull/118725) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=d6fa38a9b2426487e010a6c16862132f89755e41&end=21982a4383a92ec00ec11204584b86f3f17c92ef&stat=instructions:u) |
| 132 | + |
| 133 | +| (instructions:u) | mean | range | count | |
| 134 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 135 | +| Regressions ❌ <br /> (primary) | 0.4% | [0.2%, 0.9%] | 17 | |
| 136 | +| Regressions ❌ <br /> (secondary) | 0.3% | [0.2%, 0.3%] | 3 | |
| 137 | +| Improvements ✅ <br /> (primary) | -2.6% | [-2.6%, -2.6%] | 1 | |
| 138 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 139 | +| All ❌✅ (primary) | 0.3% | [-2.6%, 0.9%] | 18 | |
| 140 | + |
| 141 | +Moving code around in hot area, with slightly different work being done. Seems to add some cost to a few primary benchmarks. |
| 142 | + |
| 143 | +See details in https://github.com/rust-lang/rust/pull/118725#issuecomment-1847121861 |
| 144 | + |
| 145 | +never_patterns: Parse match arms with no body [#118527](https://github.com/rust-lang/rust/pull/118527) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=ae612bedcbfc7098d1711eb35bc7ca994eb17a4c&end=2b399b52753eac351067e73f4ff0de829443b9a7&stat=instructions:u) |
| 146 | + |
| 147 | +| (instructions:u) | mean | range | count | |
| 148 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 149 | +| Regressions ❌ <br /> (primary) | 0.1% | [0.1%, 0.1%] | 1 | |
| 150 | +| Regressions ❌ <br /> (secondary) | - | - | 0 | |
| 151 | +| Improvements ✅ <br /> (primary) | -0.9% | [-1.0%, -0.8%] | 2 | |
| 152 | +| Improvements ✅ <br /> (secondary) | - | - | 0 | |
| 153 | +| All ❌✅ (primary) | -0.5% | [-1.0%, 0.1%] | 3 | |
| 154 | + |
| 155 | +Regression is justified by the extra work for this new feature. |
| 156 | + |
| 157 | +Improve `print_tts` [#114571](https://github.com/rust-lang/rust/pull/114571) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=d86d65bbc19b928387f68427fcc3a0da498d8a19&end=a9cb8ee82132b6ef0f8db3e3bc25f98dfae08c04&stat=instructions:u) |
| 158 | + |
| 159 | +| (instructions:u) | mean | range | count | |
| 160 | +|:----------------------------------:|:-----:|:--------------:|:-----:| |
| 161 | +| Regressions ❌ <br /> (primary) | 0.2% | [0.2%, 0.2%] | 1 | |
| 162 | +| Regressions ❌ <br /> (secondary) | 0.8% | [0.5%, 1.0%] | 8 | |
| 163 | +| Improvements ✅ <br /> (primary) | - | - | 0 | |
| 164 | +| Improvements ✅ <br /> (secondary) | -0.2% | [-0.3%, -0.2%] | 2 | |
| 165 | +| All ❌✅ (primary) | 0.2% | [0.2%, 0.2%] | 1 | |
| 166 | + |
| 167 | +Regressions mostly limited to secondary benchmarks. Single primary regression is in incr-unchanged and is relatively small. |
0 commit comments