HomeFreeBSD

Fix boot_pages exhaustion on machines with many domains and cores, where

Description

Fix boot_pages exhaustion on machines with many domains and cores, where
size of UMA zone allocation is greater than page size. In this case zone
of zones can not use UMA_MD_SMALL_ALLOC, and we need to postpone switch
off of this zone from startup_alloc() until full launch of VM.

o Always supply number of VM zones to uma_startup_count(). On machines

with UMA_MD_SMALL_ALLOC ignore it completely, unless zsize goes over
a page. In the latter case account VM zones for number of allocations
from the zone of zones.

o Rewrite startup_alloc() so that it will immediately switch off from

itself any zone that is already capable of running real alloc.
In worst case scenario we may leak a single page here. See comment
in uma_startup_count().

o Hardcode call to uma_startup2() into vm_mem_init(). Otherwise some

extra SYSINITs, e.g. vm_page_init() may sneak in before.

o While here, remove uma_boot_pages_mtx. With recent changes to boot

pages calculation, we are guaranteed to use all of the boot_pages
in the early single threaded stage.

Reported & tested by: mav

Details

Provenance
glebiusAuthored on
Parents
rS329057: MFC r328611: Try to preallocate receive memory early.
Branches
Unknown
Tags
Unknown