Skip to content
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

Manually compact GC before fork #2093

Merged
merged 1 commit into from Dec 18, 2019
Merged

Manually compact GC before fork #2093

merged 1 commit into from Dec 18, 2019

Commits on Dec 18, 2019

  1. Manually compact GC before fork

    Rub 2.7.0 introduced `GC.compact` which allows manual compaction of Ruby slots. A good time to do this is before forking so that memory fragmentation can be reduced.
    
    - https://www.ruby-lang.org/en/news/2019/12/17/ruby-2-7-0-rc1-released/
    - https://www.youtube.com/watch?v=1F3gXYhQsAY
    
    One issue with memory fragmentation when forking is that while a page in memory might have only one free slot, as that slot is written to after fork, the entire page is written so the benefit of CoW optimizations are greatly reduced. Manually compacting GC reduces the number of pages with empty slots.
    
    This PR manually compacts memory right before Puma forks and after other `before_fork` hooks are called.
    schneems committed Dec 18, 2019
    Copy the full SHA
    abd3f35 View commit details
    Browse the repository at this point in the history