Reduce parent stat-per-file to stat-per-dir#1839
Merged
kinnison merged 1 commit intorust-lang:masterfrom May 8, 2019
Merged
Conversation
This is an installation microoptimisation for ~ 3% performance during unpack performance: stat() calls are not free, involving path traversal, ACL checking and so forth. Before: 34s consistently to install rust-docs. After: 32s-33s to install rust-docs. A better still approach would be to handle creation errors by creating the containing directories just in time, but that requires replacing the tar extraction logic, which I haven't yet figured out how to layer in cleanly.
kinnison
approved these changes
May 8, 2019
Contributor
kinnison
left a comment
There was a problem hiding this comment.
Looks good to me, I'm not bothered about the concern, as you say it's unlikely to be a problem since tarballs are usually semi-sorted thanks to filesystem layout.
| Some(parent) => { | ||
| if !checked_parents.contains(parent) { | ||
| checked_parents.insert(parent.clone().to_owned()); | ||
| // It would be nice to optimise this stat out, but the tar could be like so: |
Contributor
There was a problem hiding this comment.
One moderately neat way to do that would be to re-use the components iterator from above, joining and checking as you go; but this is sufficient for now
Contributor
Author
There was a problem hiding this comment.
That would result in stating every element from the top down, which is more than stating from the bottom up.
Contributor
Author
There was a problem hiding this comment.
(Or I misunderstood :). Thanks for merging it!)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is an installation microoptimisation for ~ 3% performance during
unpack performance: stat() calls are not free, involving path traversal,
ACL checking and so forth.
Before: 34s consistently to install rust-docs.
After: 32s-33s to install rust-docs.
A better still approach would be to handle creation errors by creating
the containing directories just in time, but that requires replacing
the tar extraction logic, which I haven't yet figured out how to layer
in cleanly.