HomeFreeBSD

vm: improve kstack_object pindex calculation to avoid pindex holes

Description

vm: improve kstack_object pindex calculation to avoid pindex holes

This commit replaces the linear transformation of kernel virtual
addresses to kstack_object pindex values with a non-linear
scheme that circumvents physical memory fragmentation caused by
kernel stack guard pages. The new mapping scheme is used to
effectively "skip" guard pages and assign pindices for
non-guard pages in a contiguous fashion.

The new allocation scheme requires that all default-sized kstack KVAs
come from a separate, specially aligned region of the KVA space.
For this to work, this commited introduces a dedicated per-domain
kstack KVA arena used to allocate kernel stacks of default size.
The behaviour on 32-bit platforms remains unchanged due to a
significatly smaller KVA space.

Aside from fullfilling the requirements imposed by the new scheme, a
separate kstack KVA arena facilitates superpage promotion in the rest
of kernel and causes most kstacks to have guard pages at both ends.

Reviewed by: alc, kib, markj
Tested by: markj
Approved by: markj (mentor)
Differential Revision: https://reviews.freebsd.org/D38852

Details

Provenance
bnovkovAuthored on Tue, Apr 9, 7:02 PM
Reviewer
alc
Differential Revision
D38852: vm: improve kstack_object pindex calculation scheme to avoid pindex holes
Parents
rG014d7082a239: bhyve: Implement a PL031 RTC on arm64
Branches
Unknown
Tags
Unknown