Skip to content

Re-observe stale hugepage-backed trackers during the background treatment pass. - #1776

Draft
copybara-service[bot] wants to merge 1 commit into
masterfrom
test_1009361372
Draft

copybara-service[bot] wants to merge 1 commit into
masterfrom
test_1009361372

Conversation

@copybara-service

Copy link
Copy Markdown

Re-observe stale hugepage-backed trackers during the background treatment pass.

Previously, HugePageUnbackedTrackerTreatment skipped every tracker whose cached residency state reported that it was hugepage-backed, so a first observation or a successful collapse stood until a page release cleared the bit. A hugepage that the kernel later split through compaction or swap was neither recorded as split nor reconsidered for collapse.

Each pass now also selects up to 512 trackers whose hugepage-backed records are older than the five-minute record interval, ordered oldest record first so passes round-robin across large heaps instead of starving the tail. Candidate selection buffers up to twice that limit and compacts the buffer with std::nth_element when full, raising a timestamp cutoff so selection remains amortized constant time per tracker while holding the pageheap lock.

After dropping the lock, the pass queries pageflags for the selected trackers. Trackers that remain hugepage-backed get a fresh record timestamp, while up to 128 trackers found split per pass have their full residency bitmaps recorded and are treated for collapse and subrelease alongside regular candidates.

Re-observation is gated by Parameters::reobserve_hugepage_backed() and is disabled by default.

Co-authored-by: Chris Kennelly ckennelly@google.com

@google-cla

google-cla Bot commented Oct 29, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@copybara-service
copybara-service Bot force-pushed the test_1009361372 branch 3 times, most recently from 2424b18 to 828ed47 Compare October 30, 2026 04:49
…ment pass.

Previously, `HugePageUnbackedTrackerTreatment` skipped every tracker whose cached residency state reported that it was hugepage-backed, so a first observation or a successful collapse stood until a page release cleared the bit. A hugepage that the kernel later split through compaction or swap was neither recorded as split nor reconsidered for collapse.

Each pass now also selects up to 512 trackers whose hugepage-backed records are older than the five-minute record interval, ordered oldest record first so passes round-robin across large heaps instead of starving the tail. Candidate selection buffers up to twice that limit and compacts the buffer with `std::nth_element` when full, raising a timestamp cutoff so selection remains amortized constant time per tracker while holding the pageheap lock.

After dropping the lock, the pass queries pageflags for the selected trackers. Trackers that remain hugepage-backed get a fresh record timestamp, while up to 128 trackers found split per pass have their full residency bitmaps recorded and are treated for collapse and subrelease alongside regular candidates.

Re-observation is gated by `Parameters::reobserve_hugepage_backed()` and is disabled by default.

Co-authored-by: Chris Kennelly <ckennelly@google.com>
PiperOrigin-RevId: 1009361372

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants