-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
perf(libstore/derivation-builder): pre-compute outputGraph for linear complexity #14540
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
perf(libstore/derivation-builder): pre-compute outputGraph for linear complexity #14540
Conversation
ebc1008 to
7b7e555
Compare
7b7e555 to
4b5a1ca
Compare
Ericson2314
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK let me know what you think @lovesegfault. The original code from @Ma27 unnecessarily made its own data structures when we already had a graph data structure on hand. If you go commit-by-commit and disable whitespace, it should be fairly easy to read.
|
Nice, thanks @Ericson2314! This looks good to me :) |
e533c4c to
5308f10
Compare
|
@xokdvium how is it now, with the first commit ensuring that making things by reference actually gives us value? |
- No `std::function` overhead - Don't copy if not necessary Co-authored-by: Sergei Zimmerman <[email protected]>
… complexity Build the inverse of `scratchOuputs` before running topoSort, avoiding quadratic complexity when determining which outputs reference each other. This fixes the FIXME comment about building the inverted map up front. Inspired by Lix commit 10c04ce84 / Change Id Ibdd46e7b2e895bfeeebc173046d1297b41998181, but ended up being completely different code. Co-Authored-By: Maximilian Bosch <[email protected]> Co-Authored-By: Bernardo Meurer Costa <[email protected]>
We can precompute the exact information we need for topo sorting and store it in `PerhapsNeedToRegister`. Depending on how `topoSort` works, this is easy a performance improvement or just completely harmless. Co-Authored-By: Bernardo Meurer Costa <[email protected]>
4810718 to
c33b2c5
Compare
Motivation
Build the output reference graph and inverse output map before running
topoSort, avoiding quadratic complexity when determining which outputs
reference each other. This fixes the FIXME comment about building the
inverted map up front.
The outputGraph (StorePath → StorePathSet) maps each output to its
references, and will be reused in future commits to generate detailed
cycle error messages showing which files contain problematic references.
Adapted from Lix commit 10c04ce84.
Change-Id: Ibdd46e7b2e895bfeeebc173046d1297b41998181
Co-Authored-By: Maximilian Bosch [email protected]
Context
Add 👍 to pull requests you find important.
The Nix maintainer team uses a GitHub project board to schedule and track reviews.