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"