Commit 4a864f62 authored by Mark Johnston's avatar Mark Johnston
Browse files

vm_pageout: Print a more accurate message to the console before an OOM kill

Previously we'd always print "out of swap space."  This can be
misleading, as there are other reasons an OOM kill can be triggered.  In
particular, it's entirely possible to trigger an OOM kill on a system
with plenty of free swap space.

Reviewed by:	kib
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D33810
parent 39d4ccf8
......@@ -1902,6 +1902,7 @@ static struct mtx vm_oom_ratelim_mtx;
void
vm_pageout_oom(int shortage)
{
const char *reason;
struct proc *p, *bigproc;
vm_offset_t size, bigsize;
struct thread *td;
......@@ -2014,11 +2015,25 @@ vm_pageout_oom(int shortage)
}
}
sx_sunlock(&allproc_lock);
if (bigproc != NULL) {
switch (shortage) {
case VM_OOM_MEM:
reason = "failed to reclaim memory";
break;
case VM_OOM_MEM_PF:
reason = "a thread waited too long to allocate a page";
break;
case VM_OOM_SWAPZ:
reason = "out of swap space";
break;
default:
panic("unknown OOM reason %d", shortage);
}
if (vm_panic_on_oom != 0 && --vm_panic_on_oom == 0)
panic("out of swap space");
panic("%s", reason);
PROC_LOCK(bigproc);
killproc(bigproc, "out of swap space");
killproc(bigproc, reason);
sched_nice(bigproc, PRIO_MIN);
_PRELE(bigproc);
PROC_UNLOCK(bigproc);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment