opnsense-src/sys/vm
Konstantin Belousov 174aad047e vm_fault: do not trigger OOM too early
Wakeup in vm_waitpfault() does not mean that the thread would get the
page on the next vm_page_alloc() call, other thread might steal the free
page we were waiting for. On the other hand, this wakeup might come much
earlier than just vm_pfault_oom_wait seconds, if the rate of the page
reclamation is high enough.

If wakeups come fast and we loose the allocation race enough times, OOM
could be undeservably triggered much earlier than vm_pfault_oom_attempts
x vm_pfault_oom_wait seconds.  Fix it by not counting the number of sleeps,
but measuring the time to th first allocation failure, and triggering OOM
when it was older than oom_attempts x oom_wait seconds.

Reviewed by:	markj
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	2 weeks
Differential revision:	https://reviews.freebsd.org/D32287
2021-10-08 12:24:46 +03:00
..
_vm_phys.h vm_phys: Try to clean up NUMA KPIs 2020-11-19 03:59:21 +00:00
_vm_radix.h
default_pager.c vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops 2021-05-13 20:10:35 +03:00
device_pager.c vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops 2021-05-13 20:10:35 +03:00
memguard.c vm: clean up empty lines in .c and .h files 2020-09-01 21:20:45 +00:00
memguard.h
phys_pager.c vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops 2021-05-13 20:10:35 +03:00
pmap.h Add pmap_enter(9) PMAP_ENTER_LARGEPAGE flag and implement it on amd64. 2020-09-09 21:50:24 +00:00
redzone.c redzone: Raise a compile error if KASAN is configured 2021-07-23 10:47:13 -04:00
redzone.h
sg_pager.c vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops 2021-05-13 20:10:35 +03:00
swap_pager.c Externalize nsw_cluster_max and initialize it early. 2021-09-28 11:23:52 -07:00
swap_pager.h Externalize nsw_cluster_max and initialize it early. 2021-09-28 11:23:52 -07:00
uma.h uma: Introduce per-domain reclamation functions 2021-04-14 13:03:34 -04:00
uma_core.c uma: Show the count of free slabs in each per-domain keg's sysctl tree 2021-09-17 14:19:05 -04:00
uma_dbg.c
uma_dbg.h
uma_int.h Improve UMA cache reclamation. 2021-05-02 19:45:23 -04:00
vm.h tmpfs: dynamically register tmpfs pager 2021-05-13 20:13:34 +03:00
vm_domainset.c Add interruptible variant of vm_wait(9), vm_wait_intr(9). 2020-09-08 23:28:09 +00:00
vm_domainset.h Add interruptible variant of vm_wait(9), vm_wait_intr(9). 2020-09-08 23:28:09 +00:00
vm_dumpset.h Avoid dump_avail[] redefinition. 2020-10-14 22:51:40 +00:00
vm_extern.h Add vnode_pager_purge_range(9) KPI 2021-08-05 22:52:26 +08:00
vm_fault.c vm_fault: do not trigger OOM too early 2021-10-08 12:24:46 +03:00
vm_glue.c uma: Add KMSAN hooks 2021-08-10 21:27:54 -04:00
vm_init.c Make MAXPHYS tunable. Bump MAXPHYS to 1M. 2020-11-28 12:12:51 +00:00
vm_kern.c uma: Introduce per-domain reclamation functions 2021-04-14 13:03:34 -04:00
vm_kern.h
vm_map.c fork: Suspend other threads if both RFPROC and RFMEM are not set 2021-05-13 08:33:23 -04:00
vm_map.h vm_map_protect: allow to set prot and max_prot in one go. 2021-01-13 01:35:22 +02:00
vm_meter.c Use atomic loads/stores when updating td->td_state 2021-02-18 14:02:48 +00:00
vm_mmap.c Add OBJT_SWAP_TMPFS pager 2021-05-07 17:08:03 +03:00
vm_object.c tmpfs: dynamically register tmpfs pager 2021-05-13 20:13:34 +03:00
vm_object.h vm: add another pager private flag 2021-05-15 20:47:29 +00:00
vm_page.c vm_page_startup: correct calculation of the starting page 2021-09-19 21:27:55 +03:00
vm_page.h Un-staticise vm_page_init_page() 2021-06-17 16:58:44 +03:00
vm_pageout.c Fix a few typos in source code comments 2021-08-14 09:06:09 +02:00
vm_pageout.h Add interruptible variant of vm_wait(9), vm_wait_intr(9). 2020-09-08 23:28:09 +00:00
vm_pagequeue.h vm_phys: Try to clean up NUMA KPIs 2020-11-19 03:59:21 +00:00
vm_pager.c amd64: Populate the KMSAN shadow maps and integrate with the VM 2021-08-10 21:27:53 -04:00
vm_pager.h vm: Add KPI to dynamically register pagers 2021-05-13 20:12:29 +03:00
vm_param.h
vm_phys.c minidump: De-duplicate is_dumpable() 2021-09-29 16:41:52 -03:00
vm_phys.h minidump: De-duplicate is_dumpable() 2021-09-29 16:41:52 -03:00
vm_radix.c vm: clean up empty lines in .c and .h files 2020-09-01 21:20:45 +00:00
vm_radix.h
vm_reserv.c vm_reserv: Fix list locking in vm_reserv_reclaim_contig() 2021-03-11 10:35:35 -05:00
vm_reserv.h
vm_swapout.c
vm_swapout_dummy.c
vm_unix.c Prepare to handle non-trivial errors from vm_map_delete(). 2020-09-09 21:34:31 +00:00
vnode_pager.c Add vnode_pager_purge_range(9) KPI 2021-08-05 22:52:26 +08:00
vnode_pager.h