freebsd-nq/sys/vm
Alexander Motin 3b2f2cb8e9 Allow UMA hash tables to expand faster then 2x in 20 seconds.
ZFS ABD allocates tons of 4KB chunks via UMA, requiring huge hash tables.
With initial hash table size of only 32 elements it takes ~20 expansions
or ~400 seconds to adapt to handling 220GB ZFS ARC.  During that time not
only the hash table is highly inefficient, but also each of those expan-
sions takes significant time with the lock held, blocking operation.

On my test system with 256GB of RAM and ZFS pool of 28 HDDs this change
reduces time needed to first time read 240GB from ~300-400s, during which
system is quite busy and unresponsive, to only ~150s with light CPU load
and just 5 sub-second CPU spikes to expand the hash table.

MFC after:	2 weeks
Sponsored by:	iXsystems, Inc.
2019-06-06 23:57:28 +00:00
..
_vm_radix.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
default_pager.c SPDX: wrong license. 2017-11-30 15:45:42 +00:00
device_pager.c Change the vm_ooffset_t type to unsigned. 2018-12-02 13:16:46 +00:00
memguard.c Add a vm_page_wired() predicate. 2019-06-02 01:00:17 +00:00
memguard.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
phys_pager.c sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
pmap.h Add pmap_is_valid_memattr(9). 2018-08-01 18:45:51 +00:00
redzone.c sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
redzone.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
sg_pager.c Change the vm_ooffset_t type to unsigned. 2018-12-02 13:16:46 +00:00
swap_pager.c Remove dead store. 2019-06-03 15:19:11 +00:00
swap_pager.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
uma_core.c Allow UMA hash tables to expand faster then 2x in 20 seconds. 2019-06-06 23:57:28 +00:00
uma_dbg.c Fix compilation failures on different arches that have vm_machdep.c not 2019-01-15 19:33:47 +00:00
uma_dbg.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
uma_int.h UMA: unsign some variables related to allocation in hash_alloc(). 2019-02-12 04:33:05 +00:00
uma.h o Move zone limit from keg level up to zone level. This means that now 2019-01-15 00:02:06 +00:00
vm_domainset.c Add a !NUMA definition for vm_domainset_iter_policy_ref_init(). 2018-10-24 17:09:20 +00:00
vm_domainset.h Refactor domainset iterators for use by malloc(9) and UMA. 2018-10-23 16:35:58 +00:00
vm_extern.h Add malloc_domainset(9) and _domainset variants to other allocator KPIs. 2018-10-30 18:26:34 +00:00
vm_fault.c Add a vm_page_wired() predicate. 2019-06-02 01:00:17 +00:00
vm_glue.c Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
vm_init.c Do not reserve KVA for paging bufs in vm_ksubmap_init(), since now 2019-01-16 20:14:16 +00:00
vm_kern.c Eliminate adj_free field from vm_map_entry. 2019-03-29 16:53:46 +00:00
vm_kern.h Do not reserve KVA for paging bufs in vm_ksubmap_init(), since now 2019-01-16 20:14:16 +00:00
vm_map.c In vm_map_entry_set_vnode_text(), tolerate tmpfs mappings for which 2019-06-05 20:21:17 +00:00
vm_map.h Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
vm_meter.c Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
vm_mmap.c Restore the pre-r347532 behaviour of ignoring wiring failures in mmap(). 2019-05-13 18:40:01 +00:00
vm_object.c Add a vm_page_wired() predicate. 2019-06-02 01:00:17 +00:00
vm_object.h Change the vm_ooffset_t type to unsigned. 2018-12-02 13:16:46 +00:00
vm_page.c Remove an outdated header comment for vm_page.c. 2019-06-04 18:38:27 +00:00
vm_page.h Add a vm_page_wired() predicate. 2019-06-02 01:00:17 +00:00
vm_pageout.c Add a vm_page_wired() predicate. 2019-06-02 01:00:17 +00:00
vm_pageout.h Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
vm_pagequeue.h Allow empty NUMA memory domains to support Threadripper2 2018-10-01 14:14:21 +00:00
vm_pager.c Do not reserve KVA for paging bufs in vm_ksubmap_init(), since now 2019-01-16 20:14:16 +00:00
vm_pager.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
vm_param.h SPDX: Consider code from Carnegie-Mellon University. 2017-11-30 15:48:35 +00:00
vm_phys.c The function vm_phys_free_contig invokes vm_phys_free_pages for every 2019-05-31 21:02:42 +00:00
vm_phys.h The function vm_phys_free_contig invokes vm_phys_free_pages for every 2019-05-31 21:02:42 +00:00
vm_radix.c vm: stop passing M_ZERO when allocating radix nodes 2018-06-24 13:08:05 +00:00
vm_radix.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
vm_reserv.c The means of finding ranges of free pages was changed for 2019-06-06 16:28:34 +00:00
vm_reserv.h Retire vm_reserv_extend_{contig,page}(). These functions were introduced 2019-06-03 05:15:36 +00:00
vm_swapout_dummy.c SPDX: Consider code from Carnegie-Mellon University. 2017-11-30 15:48:35 +00:00
vm_swapout.c linuxkpi: Use pageproc instead of vmproc 2018-11-21 04:34:18 +00:00
vm_unix.c Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
vm.h Move vm_ndomains to vm.h where it can be used with a single header include 2018-03-27 03:27:02 +00:00
vnode_pager.c Include ktr.h in more compilation units 2019-05-21 20:38:48 +00:00
vnode_pager.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00