-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
forego caching cycles leads to a severe perf regression #60846
Comments
a 16x compile-time regression does sound pretty bad indeed. |
triage: P-high. Leaving nomination tag, as I would like to discuss strategies for addressing this at the meeting, if possible. |
@matklad also thinks this might have caused this failure in rust-analyzer: rust-lang/rust-analyzer#1283 |
"discussed" at T-compiler meeting. Assigning to self to investigate. Removing nomination tag. |
Well, it was known that this could cause problems in performance. I don't know that there is a simple fix. (I suspect the errors in rust-analyzer are legit, as well) |
But I was contemplating starting on a more complete re-write of the trait solver (kind of an intermediate step towards switching to chalk). I think that might be what is ultimately needed. (Note that chalk actually has a variant of this same bug...) |
I have a potential fix for this. UPDATE: But I may have just realized a flaw in the caching scheme I was planning on. |
OK, #61754 is up, though still doing final tests. 🤞 When I ran it locally, it seemed to resolve the perf slowdown. |
based on rust-lang#61754 (comment) I am adding `bootstrap` to the cfg-preconditions for the two manual `unsafe impls`'s of `Send` and `Sync` for `TokenTree`.
create a "provisional cache" to restore performance in the case of cycles Introduce a "provisional cache" that caches the results of auto trait resolutions but keeps them from entering the *main* cache until everything is ready. This turned out a bit more complex than I hoped, but I don't see another short term fix -- happy to take suggestions! In the meantime, it's very clear we need to rework the trait solver. This resolves the extreme performance slowdown experienced in #60846 -- I plan to add a perf.rust-lang.org regression test to track this. Caveat: I've not run `x.py test` in full yet. r? @pnkfelix cc @arielb1 Fixes #60846
…caching-perf-3, r=pnkfelix create a "provisional cache" to restore performance in the case of cycles Introduce a "provisional cache" that caches the results of auto trait resolutions but keeps them from entering the *main* cache until everything is ready. This turned out a bit more complex than I hoped, but I don't see another short term fix -- happy to take suggestions! In the meantime, it's very clear we need to rework the trait solver. This resolves the extreme performance slowdown experienced in rust-lang#60846 -- I plan to add a perf.rust-lang.org regression test to track this. Caveat: I've not run `x.py test` in full yet. r? @pnkfelix cc @arielb1 Fixes rust-lang#60846
#60444 has introduced a severe perf regression when building/testing the
conch-runtime
crate.Previously a test run would take ~5 mins, and with the latest nightly (
rustc 1.36.0-nightly (372be4f36 2019-05-14)
) it now takes ~82(!!) mins.Crate info
The crate offers the functionality to execute shell programs. Each piece of the grammar is represented as a node which can hold generic sub-nodes. The reasoning for this is so that the crate consumer could customize their AST with different/custom nodes, while reusing existing implementations.The shell grammar is deeply recursive. Basically each command can vary in complexity (compound commands such as
case
,for
, or simple commands likeecho foo
), but is ultimately made up of a list of shell words (literals, interpolations, etc.). Because each word can contain a command substitution, the AST type is recursive (aCommand<W>
has aWord<C>
type, which gives usCommand<Word<Command<...>>
).There are two "top-level" type definitions which seek to unify the entire AST tree concretely which are basically
TopLevelCommand(Command<TopLevelWord>)
TopLevelWord(Word<TopLevelCommand>)
.The crate also heavily uses generics and trait bounds (perhaps overly so), however, there's hopefully some low hanging fruits that can reduce the 16x slow down in performance.
cc @nikomatsakis @pnkfelix
The text was updated successfully, but these errors were encountered: