Protecting processes from the OOM killer

Dan Kegel
2003-02-28T01:01:57Z

For a while now, I've been trying to figure out how
to make the oom killer not kill important processes.

How about rewarding processes that have an
RSS limit if they stay well below it?
The operator can then mark processes that are important
by using 'ulimit -m'.
(This is orthogonal to Rik's recent patch.)

--- oom_kill.c.orig 2002-09-26 17:31:12.000000000 -0700
+++ oom_kill.c 2003-02-27 16:59:46.000000000 -0800
@@ -86,6 +90,18 @@
points *= 2;

/*
+ * Processes which *have* an RSS limit, but which are under half of it,
+ * are behaving well, so halve their badness points.
+ * Do it again if they're under a quarter of their RSS limit.
+ */
+ if (p->rlim[RLIMIT_RSS].rlim_max != ULONG_MAX) {
+ if (p->mm->rss < (p->rlim[RLIMIT_RSS].rlim_max >> (PAGE_SHIFT+1)))
+ points /= 2;
+ if (p->mm->rss < (p->rlim[RLIMIT_RSS].rlim_max >> (PAGE_SHIFT+2)))
+ points /= 2;
+ }
+
+ /*
* Superuser processes are usually more important, so we make it
* less likely that we kill those.
*/

--
Dan Kegel