Re: oom killer in 2.4.23

From: Kristian Peters
Date: Sat Dec 06 2003 - 04:36:35 EST


Andrea Arcangeli <andrea@xxxxxxx> schrieb:
> what you're complaining is the 'selection of the task to be killed'.
> That's not solvable. the kernel can't read your brain period. Only if
> the kernel could read the brain of the adminstrator then you would be
> happy, there is no way the kernel can know which is the task you really
> want to have killed first.

I agree. On a server the most likely application to be killed would be the service with the most pages in memory. And those services tend to be the important ones.

However, for a simple desktop-linux that statistical approach seems to be wrong. Your vm has even killed /sbin/getty sometimes, so that I can't login via a simple console.

Re-enabling the oom-killer gives a good result for me:

Dec 6 09:46:19 adlib kernel: Out of Memory: Killed process 643 (khexedit).
Dec 6 09:48:42 adlib kernel: Out of Memory: Killed process 645 (khexedit).

What I complain is that your vm kills some processes without mentioning in the logs. How can I determine what processes the kernel has killed ?


I hope that fairly simple patch does things right for all people that want the old behaviour. It's already a year ago I last hacked on the kernel.

diff -rauN linux-2.4.23/include/linux/sched.h linux-2.4.23-kp1/include/linux/sched.h
--- linux-2.4.23/include/linux/sched.h Fri Nov 28 19:26:21 2003
+++ linux-2.4.23-kp1/include/linux/sched.h Sat Dec 6 09:57:04 2003
@@ -429,6 +429,7 @@
#define PF_DUMPCORE 0x00000200 /* dumped core */
#define PF_SIGNALED 0x00000400 /* killed by a signal */
#define PF_MEMALLOC 0x00000800 /* Allocating memory */
+#define PF_MEMDIE 0x00001000 /* Killed for out-of-memory */
#define PF_FREE_PAGES 0x00002000 /* per process page freeing */
#define PF_NOIO 0x00004000 /* avoid generating further I/O */

diff -rauN linux-2.4.23/mm/oom_kill.c linux-2.4.23-kp1/mm/oom_kill.c
--- linux-2.4.23/mm/oom_kill.c Fri Nov 28 19:26:21 2003
+++ linux-2.4.23-kp1/mm/oom_kill.c Fri Dec 5 20:31:39 2003
@@ -21,8 +21,6 @@
#include <linux/swapctl.h>
#include <linux/timex.h>

-#if 0 /* Nothing in this file is used */
-
/* #define DEBUG */

/**
@@ -257,5 +255,3 @@
first = now;
count = 0;
}
-
-#endif /* Unused file */
diff -rauN linux-2.4.23/mm/vmscan.c linux-2.4.23-kp1/mm/vmscan.c
--- linux-2.4.23/mm/vmscan.c Fri Nov 28 19:26:21 2003
+++ linux-2.4.23-kp1/mm/vmscan.c Sat Dec 6 10:21:55 2003
@@ -649,13 +649,7 @@
failed_swapout = !swap_out(classzone);
} while (--tries);

- if (likely(current->pid != 1))
- break;
- if (!check_classzone_need_balance(classzone))
- break;
-
- __set_current_state(TASK_RUNNING);
- yield();
+ out_of_memory();
}

return 0;



*Kristian

_o)
/\\
_\_V
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/