Page MenuHomeFreeBSD

vm_domainset: Add batch page allocation iterators
Needs ReviewPublic

Authored by bnovkov on Oct 10 2024, 9:39 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Jul 30, 8:07 PM
Unknown Object (File)
Tue, Jul 28, 8:40 AM
Unknown Object (File)
Sun, Jul 26, 10:42 AM
Unknown Object (File)
Sat, Jul 11, 5:25 PM
Unknown Object (File)
Jun 26 2026, 10:15 AM
Unknown Object (File)
Jun 23 2026, 11:36 AM
Unknown Object (File)
Jun 17 2026, 11:32 PM
Unknown Object (File)
Jun 16 2026, 11:01 AM
Subscribers

Details

Reviewers
markj
alc
kib
Summary

Each page allocation uses the vm_domainset iterators to determine
the allocation domain. However, the iterators have to be initialized
for every 0-order page, leading to unnecessary overhead when
allocating multiple pages.

This change addresses this issue by introducing a batch page allocation
iterator that divides an allocation request into smaller chunks
according to the active domainset(9) policy. Advancing the iterator
returns a number of pages to allocate from the target domain.

Assuming a request of "N" pages, the batch page iterator behaves
as follows:
FIRSTTOUCH and PREFER:

The first iteration will return "N" and will fall back to
ROUNDROBIN behavior on subsequent iterations.

INTERLEAVE:

Each iteration returns the difference between the current pindex and the
next 'domainset_stride'-aligned pindex.

ROUNDROBIN:

Each iteration returns "N / vm_ndomains"

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 59889
Build 56774: arc lint + arc unit