svn commit: r300465 - user/alc/PQ_LAUNDRY/sys/vm
Mark Johnston
markj at FreeBSD.org
Mon May 23 05:28:04 UTC 2016
Author: markj
Date: Mon May 23 05:28:03 2016
New Revision: 300465
URL: https://svnweb.freebsd.org/changeset/base/300465
Log:
Address over-eager OOM kills.
Prior to this change, vm_page_free_wakeup() and thus vm_page_free() would
clear vm_pages_needed when the free page count is above v_free_min. If the
pagedaemon is starved for pages to reclaim because of a runaway process or
because all inactive pages are dirty, but other threads are occasionally
freeing pages, and v_free_min <= v_free_count <= vm_pageout_wakeup_thresh,
concurrent vm_page_free() and vm_page_alloc() calls will respectively clear
and set vm_pages_needed, waking up the pagedaemon in the process. This can
cause the domain's oom_seq value to increment very quickly, leading to a
spurious OOM kill when the pagedaemon cannot find clean pages to reclaim in
the time that it takes for some pages to be laundered.
This can be triggered during multiple consecutive sysbench runs when it
writes mmap'ed files that are larger than system memory.
Fix the problem by modifying vm_page_free_wakeup() to only clear
vm_pages_needed once v_free_count has risen above vm_pageout_wakeup_thresh.
Reviewed by: alc
Modified:
user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/vm/vm_page.c Mon May 23 05:28:02 2016 (r300464)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_page.c Mon May 23 05:28:03 2016 (r300465)
@@ -2910,7 +2910,8 @@ vm_page_free_wakeup(void)
* lots of memory. this process will swapin processes.
*/
if (vm_pages_needed && !vm_page_count_min()) {
- vm_pages_needed = 0;
+ if (!vm_paging_needed())
+ vm_pages_needed = 0;
wakeup(&vm_cnt.v_free_count);
}
}
More information about the svn-src-user
mailing list