Repository navigation
Speed up cold cache digest computation - #2771
Merged
Merged
Conversation
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.
What are you trying to accomplish?
Reduce repeated filesystem work during cold cache digest computation.
Three paired runs, 15 passes per run, Ruby 4.0.7 / Rails 8.1.4. The cold-digest ratio improves 83.6%; rendering ratios stay within about 1%. The small boot difference is within noise.
What approach did you choose and why?
Reuse the existing boot-time directory and source-file caches while building a digest tree. Make nested cache scopes preserve the outer cache, and memoize Ruby-file discovery and file hashes within one digest computation. Nothing persists across computations or reloads.
Anything you want to highlight for special attention from reviewers?
Cold-digest allocations increase from 69,544 to 77,783 (about 12%) in exchange for fewer filesystem operations. Regression coverage checks nested cache cleanup, shared scans and hashes, unchanged digest values, and invalidation.
Benchmark reproduction
Uses the unchanged
performance/measure.rbandperformance/compare.rbscripts on this branch, with a separate checkout of the base revision:The comparison pools individual scenario/reference ratios across processes; the absolute times above are medians of the three run medians.