HomeFreeBSD

vm_fault: do not trigger OOM too early

Description

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

Details

Provenance
kibAuthored on Oct 4 2021, 6:36 AM
Reviewer
markj
Differential Revision
D32287: vm_fault: do not trigger OOM too early
Parents
rG7e64580b5f47: routing: Use the same index space for both nexthop and nexthop groups.
Branches
Unknown
Tags
Unknown