rust icon indicating copy to clipboard operation
rust copied to clipboard

[experimental] Make witnesses more eager

Open compiler-errors opened this issue 5 months ago • 23 comments
trafficstars

r? lcnr

compiler-errors avatar May 30 '25 11:05 compiler-errors

@bors try @rust-timer queue

compiler-errors avatar May 30 '25 11:05 compiler-errors

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

rust-timer avatar May 30 '25 11:05 rust-timer

:hourglass: Trying commit 7bff9fb0f0b175281cc4ef4d34e0683b8851e1cc with merge aa7f5f1743a191388f6b130b1ea65bcfa321c198...

bors avatar May 30 '25 11:05 bors

:sunny: Try build successful - checks-actions Build commit: aa7f5f1743a191388f6b130b1ea65bcfa321c198 (aa7f5f1743a191388f6b130b1ea65bcfa321c198)

bors avatar May 30 '25 13:05 bors

Queued aa7f5f1743a191388f6b130b1ea65bcfa321c198 with parent 6de3a733122a82d9b3c3427c7ee16a1e1a022718, future comparison URL. There are currently 2 preceding artifacts in the queue. It will probably take at least ~3.4 hours until the benchmark run finishes.

rust-timer avatar May 30 '25 13:05 rust-timer

Finished benchmarking commit (aa7f5f1743a191388f6b130b1ea65bcfa321c198): comparison URL.

Overall result: ✅ improvements - no action needed

Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.

@bors rollup=never @rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.2% [-0.2%, -0.2%] 2
Improvements ✅
(secondary)
-0.4% [-0.6%, -0.2%] 5
All ❌✅ (primary) -0.2% [-0.2%, -0.2%] 2

Max RSS (memory usage)

Results (primary -0.4%, secondary -1.3%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
1.6% [1.6%, 1.6%] 1
Regressions ❌
(secondary)
0.5% [0.4%, 0.5%] 3
Improvements ✅
(primary)
-1.4% [-1.6%, -1.3%] 2
Improvements ✅
(secondary)
-1.6% [-3.9%, -0.6%] 17
All ❌✅ (primary) -0.4% [-1.6%, 1.6%] 3

Cycles

Results (secondary -0.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
1.0% [0.4%, 2.4%] 9
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.4% [-3.7%, -0.5%] 8
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: missing data Artifact size: 370.26 MiB -> 370.23 MiB (-0.01%)

rust-timer avatar May 31 '25 01:05 rust-timer

@bors2 try @rust-timer queue

compiler-errors avatar Jun 09 '25 17:06 compiler-errors

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

rust-timer avatar Jun 09 '25 17:06 rust-timer

:hourglass: Trying commit 5862717e717f617e0eab59a13701059b81df9a43 with merge 9676755ffbe5307620202834502b4922a40c5024…

To cancel the try build, run the command @bors2 try cancel.

rust-bors[bot] avatar Jun 09 '25 17:06 rust-bors[bot]

The job mingw-check-2 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
[RUSTC-TIMING] rustc_monomorphize test:true 0.672
error[E0599]: no method named `has_coroutines` found for struct `rustc_middle::ty::Ty` in the current scope
   --> compiler/rustc_trait_selection/src/solve/fulfill.rs:346:22
    |
346 |         } else if ty.has_coroutines() {
    |                      ^^^^^^^^^^^^^^
    |
   ::: /checkout/compiler/rustc_type_ir/src/visit.rs:272:8
    |
272 |     fn has_coroutines(&self) -> bool {
---
1   + use rustc_middle::ty::TypeVisitableExt;
    |
help: there is a method `is_coroutine` with a similar name
    |
346 -         } else if ty.has_coroutines() {
346 +         } else if ty.is_coroutine() {
    |

For more information about this error, try `rustc --explain E0599`.
[RUSTC-TIMING] rustc_trait_selection test:false 6.754
error: could not compile `rustc_trait_selection` (lib) due to 1 previous error

rust-log-analyzer avatar Jun 09 '25 17:06 rust-log-analyzer

:broken_heart: Test failed

rust-bors[bot] avatar Jun 09 '25 17:06 rust-bors[bot]

@bors2 try @rust-timer queue

compiler-errors avatar Jun 09 '25 20:06 compiler-errors

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

rust-timer avatar Jun 09 '25 20:06 rust-timer

:hourglass: Trying commit ec8dc45375b0329a656518f785f9980a6f7992c5 with merge c5243c3809f813c22efa750866301fd67942ef25…

To cancel the try build, run the command @bors2 try cancel.

rust-bors[bot] avatar Jun 09 '25 20:06 rust-bors[bot]

:sunny: Try build successful (CI) Build commit: c5243c3809f813c22efa750866301fd67942ef25 (c5243c3809f813c22efa750866301fd67942ef25)

rust-bors[bot] avatar Jun 09 '25 23:06 rust-bors[bot]

Queued c5243c3809f813c22efa750866301fd67942ef25 with parent 00b526212bbdd68872d6f964fcc9a14a66c36fd8, future comparison URL. There are currently 2 preceding artifacts in the queue. It will probably take at least ~3.9 hours until the benchmark run finishes.

rust-timer avatar Jun 09 '25 23:06 rust-timer

Finished benchmarking commit (c5243c3809f813c22efa750866301fd67942ef25): comparison URL.

Overall result: ❌ regressions - please read the text below

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please do so in sufficient writing along with @rustbot label: +perf-regression-triaged. If not, please fix the regressions and do another perf run. If its results are neutral or positive, the label will be automatically removed.

@bors rollup=never @rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
0.5% [0.4%, 0.6%] 8
Regressions ❌
(secondary)
0.8% [0.1%, 1.8%] 20
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.8% [-0.9%, -0.6%] 3
All ❌✅ (primary) 0.5% [0.4%, 0.6%] 8

Max RSS (memory usage)

Results (secondary 1.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
1.9% [1.2%, 3.5%] 5
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.2% [-2.2%, -2.2%] 1
All ❌✅ (primary) - - 0

Cycles

This benchmark run did not return any relevant results for this metric.

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 754.885s -> 753.548s (-0.18%) Artifact size: 372.30 MiB -> 372.33 MiB (0.01%)

rust-timer avatar Jun 10 '25 01:06 rust-timer

I think filtering out the opaques from the typing env (for pseudo-canonical inputs) is pretty expensive. Let's see how perf is when using the old strategy to compare.

Maybe we could optimize the "filter out opaques" step, but the global caching may really just not be worth it.

@bors2 try @rust-timer queue

compiler-errors avatar Jun 10 '25 02:06 compiler-errors

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

rust-timer avatar Jun 10 '25 02:06 rust-timer

:hourglass: Trying commit 5f09e4fbe27cc494f7ec8cb16b081ef692c34b80 with merge 1d115c1f1702fc6a1d322f845583581dd636f0a4…

To cancel the try build, run the command @bors2 try cancel.

rust-bors[bot] avatar Jun 10 '25 02:06 rust-bors[bot]

:sunny: Try build successful (CI) Build commit: 1d115c1f1702fc6a1d322f845583581dd636f0a4 (1d115c1f1702fc6a1d322f845583581dd636f0a4)

rust-bors[bot] avatar Jun 10 '25 04:06 rust-bors[bot]

Queued 1d115c1f1702fc6a1d322f845583581dd636f0a4 with parent c6768de2d63de7a41124a0fb8fc78f9e26111c01, future comparison URL. There are currently 5 preceding artifacts in the queue. It will probably take at least ~7.6 hours until the benchmark run finishes.

rust-timer avatar Jun 10 '25 04:06 rust-timer

Finished benchmarking commit (1d115c1f1702fc6a1d322f845583581dd636f0a4): comparison URL.

Overall result: ✅ improvements - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never @rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.6% [-0.6%, -0.6%] 2
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (primary -0.7%, secondary 1.6%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
1.1% [1.1%, 1.1%] 1
Regressions ❌
(secondary)
1.6% [1.0%, 2.8%] 5
Improvements ✅
(primary)
-1.6% [-1.7%, -1.5%] 2
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -0.7% [-1.7%, 1.1%] 3

Cycles

Results (secondary -1.6%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.6% [-1.6%, -1.6%] 1
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 755.17s -> 754.366s (-0.11%) Artifact size: 372.30 MiB -> 372.28 MiB (-0.00%)

rust-timer avatar Jun 10 '25 07:06 rust-timer

I think I'd like to land this in the state it is, and then later putting up a PR to remove coroutine witnesses altogether. It's worth checking crater, too.

@craterbot check

compiler-errors avatar Jun 13 '25 18:06 compiler-errors

:ok_hand: Experiment pr-141762 created and queued. :robot: Automatically detected try build 1d115c1f1702fc6a1d322f845583581dd636f0a4 :mag: You can check out the queue and this experiment's details.

:information_source: Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

craterbot avatar Jun 13 '25 18:06 craterbot

:construction: Experiment pr-141762 is now running

:information_source: Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

craterbot avatar Jun 13 '25 18:06 craterbot

:tada: Experiment pr-141762 is completed! :bar_chart: 3 regressed and 7 fixed (647393 total) :newspaper: Open the full report.

:warning: If you notice any spurious failure please add them to the denylist! :information_source: Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

craterbot avatar Jun 14 '25 23:06 craterbot

Some changes occurred to the core trait solver

cc @rust-lang/initiative-trait-system-refactor

rustbot avatar Jun 25 '25 15:06 rustbot

:warning: Warning :warning:

rustbot avatar Jun 25 '25 15:06 rustbot

Crater regressions are spurious. I think this is ready to review more. I'll open a tracking issue for "removing CoroutineWitness" because I think this is just the first step in that process.

compiler-errors avatar Jun 25 '25 15:06 compiler-errors