Skip to content

[DO NOT MERGE] Perf run for zoxc's rustc-hash #93651

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from

Conversation

lqd
Copy link
Member

@lqd lqd commented Feb 4, 2022

This is a perf run to try and reproduce zoxc's results on their version of 64b fxhash, from their rustc-hash PR .

I don't remember it being tried on perf.rlo (and it seems likely that it will not matter in practice) so let's check that.

r? @ghost

@rustbot rustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Feb 4, 2022
@lqd
Copy link
Member Author

lqd commented Feb 4, 2022

@bors try @rust-timer queue

@rust-timer
Copy link
Collaborator

Awaiting bors try build completion.

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

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Feb 4, 2022
@bors
Copy link
Collaborator

bors commented Feb 4, 2022

⌛ Trying commit bafb03e with merge b02568378e684389e22a3d4af29678471872294b...

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-llvm-12 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
######################################################################## 100.0%
extracting /checkout/obj/build/cache/2022-01-28/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz
Building rustbuild
    Updating crates.io index
    Updating git repository `https://github.com/Zoxc/rustc-hash/`
---
   Compiling arrayvec v0.7.0
   Compiling opaque-debug v0.3.0
   Compiling cpuid-bool v0.1.2
   Compiling rustc_graphviz v0.0.0 (/checkout/compiler/rustc_graphviz)
   Compiling rustc-hash v1.0.1 (https://github.com/Zoxc/rustc-hash/?branch=new-hash#a5a1e17e)
   Compiling scoped-tls v1.0.0
   Compiling unic-common v0.9.0
   Compiling unic-char-range v0.9.0
   Compiling termcolor v1.1.2
---
   Compiling stable_deref_trait v1.2.0
   Compiling opaque-debug v0.3.0
   Compiling remove_dir_all v0.5.3
   Compiling arrayvec v0.7.0
   Compiling rustc-hash v1.0.1 (https://github.com/Zoxc/rustc-hash/?branch=new-hash#a5a1e17e)
   Compiling rustc_graphviz v0.0.0 (/checkout/compiler/rustc_graphviz)
   Compiling unicode-width v0.1.8
   Compiling unic-common v0.9.0
   Compiling unic-char-range v0.9.0
---
.................................................................................................... 1100/12589
.................................................................................................... 1200/12589
...................i................................................................................ 1300/12589
....................................................i............................................... 1400/12589
....................................................................F...........F................... 1500/12589
..............i..................................................................................... 1700/12589
.................................................................................................... 1800/12589
.............................i...................................................................... 1900/12589
.................................................................................................... 2000/12589
---

---- [ui] ui/closures/2229_closure_analysis/migrations/auto_traits.rs stdout ----
diff of stderr:

29 LL |     thread::spawn(move || unsafe {
31    |                   |
31    |                   |
-    |                   in Rust 2018, this closure implements `Sync` as `fptr` implements `Sync`, but in Rust 2021, this closure will no longer implement `Sync` because `fptr` is not fully captured and `fptr.0.0` does not implement `Sync`
33    |                   in Rust 2018, this closure implements `Send` as `fptr` implements `Send`, but in Rust 2021, this closure will no longer implement `Send` because `fptr` is not fully captured and `fptr.0.0` does not implement `Send`
+    |                   in Rust 2018, this closure implements `Sync` as `fptr` implements `Sync`, but in Rust 2021, this closure will no longer implement `Sync` because `fptr` is not fully captured and `fptr.0.0` does not implement `Sync`
34 ...
35 LL |         *fptr.0.0 = 20;
36    |         --------- in Rust 2018, this closure captures all of `fptr`, but in Rust 2021, it will only capture `fptr.0.0`

The actual stderr differed from the expected stderr.
Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/closures/2229_closure_analysis/migrations/auto_traits/auto_traits.stderr
To update references, rerun the tests and pass the `--bless` flag
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args closures/2229_closure_analysis/migrations/auto_traits.rs`

Some tests failed in compiletest suite=ui mode=ui host=x86_64-unknown-linux-gnu target=x86_64-unknown-linux-gnu
error: 1 errors occurred comparing output.
status: exit status: 1
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/closures/2229_closure_analysis/migrations/auto_traits.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/closures/2229_closure_analysis/migrations/auto_traits" "-A" "unused" "-Crpath" "-O" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/closures/2229_closure_analysis/migrations/auto_traits/auxiliary"
------------------------------------------

------------------------------------------
stderr:
stderr:
------------------------------------------
error: changes to closure capture in Rust 2021 will affect which traits the closure implements
   |
   |
LL |     thread::spawn(move || unsafe {
   |                   ^^^^^^^^^^^^^^ in Rust 2018, this closure implements `Send` as `fptr` implements `Send`, but in Rust 2021, this closure will no longer implement `Send` because `fptr` is not fully captured and `fptr.0` does not implement `Send`
...
LL |         *fptr.0 = 20;
   |         ------- in Rust 2018, this closure captures all of `fptr`, but in Rust 2021, it will only capture `fptr.0`
note: the lint level is defined here
  --> /checkout/src/test/ui/closures/2229_closure_analysis/migrations/auto_traits.rs:2:9
   |
LL | #![deny(rust_2021_incompatible_closure_captures)]
LL | #![deny(rust_2021_incompatible_closure_captures)]
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `fptr` to be fully captured
   |
LL ~     thread::spawn(move || { let _ = &fptr; unsafe {
LL |         //~^ ERROR: changes to closure capture
LL |         //~| NOTE: in Rust 2018, this closure implements `Send`
LL |         //~| NOTE: for more information, see
LL |         //~| HELP: add a dummy let to cause `fptr` to be fully captured
LL |         *fptr.0 = 20;


error: changes to closure capture in Rust 2021 will affect which traits the closure implements
   |
   |
LL |     thread::spawn(move || unsafe {
   |                   |
   |                   |
   |                   in Rust 2018, this closure implements `Send` as `fptr` implements `Send`, but in Rust 2021, this closure will no longer implement `Send` because `fptr` is not fully captured and `fptr.0.0` does not implement `Send`
   |                   in Rust 2018, this closure implements `Sync` as `fptr` implements `Sync`, but in Rust 2021, this closure will no longer implement `Sync` because `fptr` is not fully captured and `fptr.0.0` does not implement `Sync`
...
LL |         *fptr.0.0 = 20;
   |         --------- in Rust 2018, this closure captures all of `fptr`, but in Rust 2021, it will only capture `fptr.0.0`
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `fptr` to be fully captured
   |
LL ~     thread::spawn(move || { let _ = &fptr; unsafe {
LL |         //~^ ERROR: changes to closure capture
LL |         //~| NOTE: in Rust 2018, this closure implements `Sync`
LL |         //~| NOTE: in Rust 2018, this closure implements `Send`
LL |         //~| NOTE: for more information, see
LL |         //~| HELP: add a dummy let to cause `fptr` to be fully captured


error: changes to closure capture in Rust 2021 will affect drop order and which traits the closure implements
   |
LL |     let c = || {
LL |     let c = || {
   |             ^^ in Rust 2018, this closure implements `Clone` as `f` implements `Clone`, but in Rust 2021, this closure will no longer implement `Clone` because `f` is not fully captured and `f.1` does not implement `Clone`
...
LL |         let f_1 = f.1;
   |                   --- in Rust 2018, this closure captures all of `f`, but in Rust 2021, it will only capture `f.1`
LL | }
LL | }
   | - in Rust 2018, `f` is dropped here, but in Rust 2021, only `f.1` will be dropped here as part of the closure
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `f` to be fully captured
   |
LL ~     let c = || {
LL +         let _ = &f;

error: aborting due to 3 previous errors



------------------------------------------


---- [ui] ui/closures/2229_closure_analysis/migrations/multi_diagnostics.rs stdout ----
diff of stderr:

94 LL |     thread::spawn(move || unsafe {
96    |                   |
96    |                   |
-    |                   in Rust 2018, this closure implements `Sync` as `fptr1` implements `Sync`, but in Rust 2021, this closure will no longer implement `Sync` because `fptr1` is not fully captured and `fptr1.0.0` does not implement `Sync`
98    |                   in Rust 2018, this closure implements `Send` as `fptr1` implements `Send`, but in Rust 2021, this closure will no longer implement `Send` because `fptr1` is not fully captured and `fptr1.0.0` does not implement `Send`
+    |                   in Rust 2018, this closure implements `Sync` as `fptr1` implements `Sync`, but in Rust 2021, this closure will no longer implement `Sync` because `fptr1` is not fully captured and `fptr1.0.0` does not implement `Sync`
99    |                   in Rust 2018, this closure implements `Send` as `fptr2` implements `Send`, but in Rust 2021, this closure will no longer implement `Send` because `fptr2` is not fully captured and `fptr2.0` does not implement `Send`
100 ...
101 LL |         *fptr1.0.0 = 20;

The actual stderr differed from the expected stderr.
Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/closures/2229_closure_analysis/migrations/multi_diagnostics/multi_diagnostics.stderr
To update references, rerun the tests and pass the `--bless` flag
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args closures/2229_closure_analysis/migrations/multi_diagnostics.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/closures/2229_closure_analysis/migrations/multi_diagnostics.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/closures/2229_closure_analysis/migrations/multi_diagnostics" "-A" "unused" "-Crpath" "-O" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/closures/2229_closure_analysis/migrations/multi_diagnostics/auxiliary"
------------------------------------------

------------------------------------------
stderr:
stderr:
------------------------------------------
error: changes to closure capture in Rust 2021 will affect drop order and which traits the closure implements
   |
LL |     let c = || {
LL |     let c = || {
   |             ^^ in Rust 2018, this closure implements `Clone` as `f1` implements `Clone`, but in Rust 2021, this closure will no longer implement `Clone` because `f1` is not fully captured and `f1.0` does not implement `Clone`
...
LL |         let _f_1 = f1.0;
   |                    ---- in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.0`
LL |         //~^ NOTE: in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.0`
LL |         let _f_2 = f2.1;
   |                    ---- in Rust 2018, this closure captures all of `f2`, but in Rust 2021, it will only capture `f2.1`
LL | }
LL | }
   | - in Rust 2018, `f2` is dropped here, but in Rust 2021, only `f2.1` will be dropped here as part of the closure
note: the lint level is defined here
  --> /checkout/src/test/ui/closures/2229_closure_analysis/migrations/multi_diagnostics.rs:2:9
   |
LL | #![deny(rust_2021_incompatible_closure_captures)]
LL | #![deny(rust_2021_incompatible_closure_captures)]
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `f1`, `f2` to be fully captured
   |
LL ~     let c = || {
LL +         let _ = (&f1, &f2);


error: changes to closure capture in Rust 2021 will affect which traits the closure implements
   |
LL |     let c = || {
LL |     let c = || {
   |             ^^ in Rust 2018, this closure implements `Clone` as `f1` implements `Clone`, but in Rust 2021, this closure will no longer implement `Clone` because `f1` is not fully captured and `f1.0` does not implement `Clone`
...
LL |         let _f_1 = f1.0;
   |                    ---- in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.0`
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `f1` to be fully captured
   |
LL ~     let c = || {
LL +         let _ = &f1;


error: changes to closure capture in Rust 2021 will affect which traits the closure implements
   |
LL |     let c = || {
   |             ^^
   |             |
   |             |
   |             in Rust 2018, this closure implements `Clone` as `f1` implements `Clone`, but in Rust 2021, this closure will no longer implement `Clone` because `f1` is not fully captured and `f1.0` does not implement `Clone`
   |             in Rust 2018, this closure implements `Clone` as `f1` implements `Clone`, but in Rust 2021, this closure will no longer implement `Clone` because `f1` is not fully captured and `f1.2` does not implement `Clone`
...
LL |         let _f_0 = f1.0;
   |                    ---- in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.0`
LL |         //~^ NOTE: in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.0`
LL |         let _f_2 = f1.2;
   |                    ---- in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.2`
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `f1` to be fully captured
   |
LL ~     let c = || {
LL +         let _ = &f1;


error: changes to closure capture in Rust 2021 will affect drop order and which traits the closure implements
   |
LL |     let c = || {
LL |     let c = || {
   |             ^^ in Rust 2018, this closure implements `Clone` as `f1` implements `Clone`, but in Rust 2021, this closure will no longer implement `Clone` because `f1` is not fully captured and `f1.0` does not implement `Clone`
...
LL |         let _f_0 = f1.0;
   |                    ---- in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.0`
LL |         //~^ NOTE: in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.0`
LL |         let _f_1 = f1.1;
   |                    ---- in Rust 2018, this closure captures all of `f1`, but in Rust 2021, it will only capture `f1.1`
LL | }
   | -
   | |
   | |
   | in Rust 2018, `f1` is dropped here, but in Rust 2021, only `f1.0` will be dropped here as part of the closure
   | in Rust 2018, `f1` is dropped here, but in Rust 2021, only `f1.1` will be dropped here as part of the closure
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `f1` to be fully captured
   |
LL ~     let c = || {
LL +         let _ = &f1;


error: changes to closure capture in Rust 2021 will affect which traits the closure implements
   |
   |
LL |     thread::spawn(move || unsafe {
   |                   |
   |                   |
   |                   in Rust 2018, this closure implements `Send` as `fptr1` implements `Send`, but in Rust 2021, this closure will no longer implement `Send` because `fptr1` is not fully captured and `fptr1.0.0` does not implement `Send`
   |                   in Rust 2018, this closure implements `Sync` as `fptr1` implements `Sync`, but in Rust 2021, this closure will no longer implement `Sync` because `fptr1` is not fully captured and `fptr1.0.0` does not implement `Sync`
   |                   in Rust 2018, this closure implements `Send` as `fptr2` implements `Send`, but in Rust 2021, this closure will no longer implement `Send` because `fptr2` is not fully captured and `fptr2.0` does not implement `Send`
...
LL |         *fptr1.0.0 = 20;
   |         ---------- in Rust 2018, this closure captures all of `fptr1`, but in Rust 2021, it will only capture `fptr1.0.0`
LL |         //~^ NOTE: in Rust 2018, this closure captures all of `fptr1`, but in Rust 2021, it will only capture `fptr1.0.0`
LL |         *fptr2.0 = 20;
   |         -------- in Rust 2018, this closure captures all of `fptr2`, but in Rust 2021, it will only capture `fptr2.0`
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
   = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
help: add a dummy let to cause `fptr1`, `fptr2` to be fully captured
   |
LL ~     thread::spawn(move || { let _ = (&fptr1, &fptr2); unsafe {
LL |         //~^ ERROR: changes to closure capture in Rust 2021
LL |         //~| NOTE: in Rust 2018, this closure implements `Sync` as `fptr1` implements `Sync`
LL |         //~| NOTE: in Rust 2018, this closure implements `Send` as `fptr1` implements `Send`
LL |         //~| NOTE: in Rust 2018, this closure implements `Send` as `fptr2` implements `Send`
LL |         //~| NOTE: for more information, see

error: aborting due to 5 previous errors


@bors
Copy link
Collaborator

bors commented Feb 4, 2022

☀️ Try build successful - checks-actions
Build commit: b02568378e684389e22a3d4af29678471872294b (b02568378e684389e22a3d4af29678471872294b)

@rust-timer
Copy link
Collaborator

Queued b02568378e684389e22a3d4af29678471872294b with parent 4e8fb74, future comparison URL.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (b02568378e684389e22a3d4af29678471872294b): comparison url.

Summary: This benchmark run shows 11 relevant improvements 🎉 but 3 relevant regressions 😿 to instruction counts.

  • Average relevant regression: 0.4%
  • Average relevant improvement: -0.5%
  • Largest improvement in instruction counts: -0.6% on incr-patched: println builds of html5ever check
  • Largest regression in instruction counts: 0.6% on full builds of webrender-wrench doc

If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf.

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 led to changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please fix the regressions and do another perf run. If the next run shows neutral or positive results, the label will be automatically removed.

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

@rustbot rustbot added perf-regression Performance regression. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Feb 4, 2022
@lqd lqd closed this Feb 4, 2022
@lqd lqd deleted the zoxc-hash branch February 4, 2022 22:37
@nnethercote
Copy link
Contributor

The instruction count results were a non-event, but the others (cycles, wall-times, cpu-clock) look really good! I think this is worth pursuing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
perf-regression Performance regression. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants