From: Jonathan Morton <chromi@cyberspace.org>
To: Doug Ledford <dledford@redhat.com>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Prevent OOM from killing init
Date: Sat, 24 Mar 2001 20:59:10 +0000 [thread overview]
Message-ID: <l0313031ab6e2b9537342@[192.168.239.101]> (raw)
In-Reply-To: <l03130319b6e29896c21e@[192.168.239.101]>
In-Reply-To: <3ABCE547.DD5E78B9@redhat.com> <Pine.LNX.4.33.0103241039590.2310-100000@mikeg.weiden.de>
>Right now my best approximation is to make the OOM test be as optimistic as
>it is safe to be, and the vm_enough_memory() test as pessimistic as
>sensible. Expect a test patch to appear on this list soon.
...and here it is!
This fixes a number of small but linked problems:
- malloc() never returned 0 when the system ran out of memory, instead the OOM killer was triggered. Now, malloc() will return 0 if the calling process is more than 4 times the size of the amount of free memory. As a speedup, available swap space is not considered unless physical memory is not sufficient to contain the process. Note that if overcommit_memory is switched on, malloc() will never return 0 anyway.
- OOM killer was triggered too early - now takes account of buffer and cache memory, which can be cannibalised before the system has completely run out.
- OOM killer badness() factors readjusted in favour of Oracle-like processes (consuming 10's of MB of RAM but up for 3 days or so and with a low-order UID? Now less likely to be killed...)
--- begin oom-patch.diff ---
diff -u linux-2.4.1.orig/mm/mmap.c linux/mm/mmap.c
--- linux-2.4.1.orig/mm/mmap.c Mon Jan 29 16:10:41 2001
+++ linux/mm/mmap.c Sat Mar 24 19:29:51 2001
@@ -54,6 +54,7 @@
*/
long free;
+ struct sysinfo swp_info;
/* Sometimes we want to use more memory than we have. */
if (sysctl_overcommit_memory)
@@ -62,8 +63,32 @@
free = atomic_read(&buffermem_pages);
free += atomic_read(&page_cache_size);
free += nr_free_pages();
- free += nr_swap_pages;
- return free > pages;
+
+ /* Attempt to curtail memory allocations before hard OOM occurs.
+ * Based on current process size, which is hopefully a good and fast heuristic.
+ * Also fix bug where the real OOM limit of (free == freepages.min) is not taken into account.
+ * In fact, we use freepages.high as the threshold to make sure there's still room for buffers+cache.
+ *
+ * -- Jonathan "Chromatix" Morton, 24th March 2001
+ */
+
+ if(current && current->mm)
+ free -= (current->mm->total_vm / 4);
+
+ free -= freepages.high;
+
+ /* Since getting swap info is expensive, see if our allocation can happen in physical RAM */
+ if(free > pages)
+ return 1;
+
+ /* Use the number of FREE swap pages, not the total */
+ si_swapinfo(&swp_info);
+ free += swp_info.freeswap;
+
+ if(free > pages)
+ return 1;
+
+ return 0;
}
/* Remove one vm structure from the inode's i_mapping address space. */
Only in linux/mm/: mmap.c~
diff -u linux-2.4.1.orig/mm/oom_kill.c linux/mm/oom_kill.c
--- linux-2.4.1.orig/mm/oom_kill.c Tue Nov 14 18:56:46 2000
+++ linux/mm/oom_kill.c Sat Mar 24 20:35:20 2001
@@ -76,7 +76,9 @@
run_time = (jiffies - p->start_time) >> (SHIFT_HZ + 10);
points /= int_sqrt(cpu_time);
- points /= int_sqrt(int_sqrt(run_time));
+
+ /* Long-running processes are *very* important, so don't take the 4th root */
+ points /= run_time;
/*
* Niced processes are most likely less important, so double
@@ -93,6 +95,10 @@
p->uid == 0 || p->euid == 0)
points /= 4;
+ /* Much the same goes for processes with low UIDs */
+ if(p->uid < 100 || p->euid < 100)
+ points /= 2;
+
/*
* We don't want to kill a process with direct hardware access.
* Not only could that mess up the hardware, but usually users
@@ -192,12 +198,20 @@
int out_of_memory(void)
{
struct sysinfo swp_info;
+ long free;
/* Enough free memory? Not OOM. */
- if (nr_free_pages() > freepages.min)
+ free = nr_free_pages();
+ if (free > freepages.min)
+ return 0;
+
+ if (free + nr_inactive_clean_pages() > freepages.low)
return 0;
- if (nr_free_pages() + nr_inactive_clean_pages() > freepages.low)
+ /* Buffers and caches can be freed up (Jonathan "Chromatix" Morton) */
+ free += atomic_read(&buffermem_pages);
+ free += atomic_read(&page_cache_size);
+ if (free > freepages.low)
return 0;
/* Enough swap space left? Not OOM. */
Only in linux/mm/: oom_kill.c~
--- end oom-patch.diff ---
--------------------------------------------------------------
from: Jonathan "Chromatix" Morton
mail: chromi@cyberspace.org (not for attachments)
big-mail: chromatix@penguinpowered.com
uni-mail: j.d.morton@lancaster.ac.uk
The key to knowledge is not to rely on people to teach you it.
Get VNC Server for Macintosh from http://www.chromatix.uklinux.net/vnc/
-----BEGIN GEEK CODE BLOCK-----
Version 3.12
GCS$/E/S dpu(!) s:- a20 C+++ UL++ P L+++ E W+ N- o? K? w--- O-- M++$ V? PS PE- Y+ PGP++ t- 5- X- R !tv b++ DI+++ D G e+ h+ r++ y+(*)
-----END GEEK CODE BLOCK-----
next prev parent reply other threads:[~2001-03-24 21:00 UTC|newest]
Thread overview: 153+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4605B269DB001E4299157DD1569079D2809930@EXCHANGE03.plaza.ds.adp.com>
2001-03-22 16:29 ` Rik van Riel
2001-03-22 18:32 ` Christian Bodmer
2001-03-23 15:08 ` Horst von Brand
2001-03-24 7:48 ` Doug Ledford
2001-03-24 10:21 ` Mike Galbraith
2001-03-24 18:19 ` Doug Ledford
2001-03-24 22:47 ` Mike Galbraith
2001-03-24 23:35 ` Jonathan Morton
2001-03-25 18:35 ` Jonathan Morton
2001-03-26 4:40 ` Horst von Brand
2001-03-26 8:36 ` Mike Galbraith
2001-03-26 10:01 ` Jonathan Morton
2001-03-26 14:48 ` Rik van Riel
2001-03-25 19:07 ` Mike Galbraith
2001-03-24 20:04 ` Jonathan Morton
2001-03-24 20:59 ` Jonathan Morton [this message]
2001-03-24 22:11 ` Rik van Riel
2001-03-24 23:36 ` Jonathan Morton
2001-03-25 14:30 ` Martin Dalecki
2001-03-25 14:13 ` Martin Dalecki
2001-03-24 12:42 ` Jonathan Morton
2001-03-24 15:06 ` Mike Galbraith
2001-03-25 14:10 ` Martin Dalecki
[not found] <Pine.LNX.4.30.0103251549100.13864-100000@fs131-224.f-secure.com>
[not found] ` <l03130315b6e242006a4b@[192.168.239.101]>
2001-03-25 15:47 ` Jonathan Morton
2001-03-24 23:41 Benoit Garnier
2001-03-25 5:45 ` Stephen Satchell
2001-03-25 6:58 ` Stephen Clouse
2001-03-25 14:37 ` Martin Dalecki
2001-03-25 14:32 ` Martin Dalecki
-- strict thread matches above, loose matches on Subject: below --
2001-03-24 10:18 Andries.Brouwer
2001-03-24 2:30 Andreas Franck
2001-03-24 1:38 Jonathan Morton
2001-03-24 1:11 Andries.Brouwer
2001-03-23 23:15 Andries.Brouwer
2001-03-23 23:17 ` Martin Dalecki
2001-03-24 0:13 ` Jonathan Morton
2001-03-24 6:58 ` Rik van Riel
2001-03-24 12:38 ` Jonathan Morton
2001-03-24 13:12 ` Jonathan Morton
2001-03-24 1:59 ` Paul Jakma
2001-03-23 19:33 Stephen Satchell
2001-03-23 18:29 Andries.Brouwer
2001-03-23 18:38 ` Alan Cox
2001-03-24 0:46 ` Tim Wright
2001-03-24 16:48 ` Jesse Pollard
2001-03-25 16:12 ` Szabolcs Szakacsits
2001-03-25 16:39 ` Jonathan Morton
2001-03-23 18:43 ` nick
2001-03-23 19:01 ` Martin Dalecki
2001-03-23 19:23 ` nick
2001-03-23 22:12 ` Alan Cox
2001-03-23 23:23 ` Stephen E. Clark
2001-03-24 10:40 ` Gérard Roudier
2001-03-23 21:14 ` Jonathan Morton
2001-03-25 14:56 ` Marco Colombo
2001-03-23 9:48 Only 10 MB/sec with via 82c686b - FIXED Alan Cox
2001-03-23 17:00 ` [PATCH] Prevent OOM from killing init SodaPop
2001-03-23 18:42 ` Martin Dalecki
2001-03-23 20:25 ` SodaPop
2001-03-23 20:33 ` Martin Dalecki
2001-03-23 19:19 ` Jonathan Morton
2001-03-23 9:28 Heusden, Folkert van
2001-03-23 0:09 Mikael Pettersson
2001-03-23 0:27 ` Andrew Morton
2001-03-23 12:29 ` Mikael Pettersson
2001-03-23 16:24 ` Horst von Brand
2001-03-23 16:49 ` Guest section DW
2001-03-23 17:04 ` Alan Cox
2001-03-22 23:35 Mikael Pettersson
2001-03-22 23:43 ` Alan Cox
2001-03-27 7:58 ` Helge Hafting
2001-03-22 11:08 Heusden, Folkert van
2001-03-21 23:41 Leif Sawyer
2001-03-22 0:32 ` Kevin Buhr
2001-03-21 22:54 Patrick O'Rourke
2001-03-21 23:11 ` Eli Carter
2001-03-21 23:40 ` Patrick O'Rourke
2001-03-21 23:48 ` Rik van Riel
2001-03-22 8:14 ` Eric W. Biederman
2001-03-22 9:24 ` Rik van Riel
2001-03-22 19:29 ` Philipp Rumpf
2001-03-22 11:47 ` Guest section DW
2001-03-22 15:01 ` Rik van Riel
2001-03-22 19:04 ` Guest section DW
2001-03-22 16:41 ` Eric W. Biederman
2001-03-22 20:28 ` Stephen Clouse
2001-03-22 21:01 ` Ingo Oeser
2001-03-22 21:23 ` Alan Cox
2001-03-22 22:00 ` Guest section DW
2001-03-22 22:12 ` Ed Tomlinson
2001-03-22 22:52 ` Alan Cox
2001-03-22 23:27 ` Guest section DW
2001-03-22 23:37 ` Rik van Riel
2001-03-26 19:04 ` James Antill
2001-03-26 20:05 ` Rik van Riel
2001-03-22 23:40 ` Alan Cox
2001-03-23 20:09 ` Szabolcs Szakacsits
2001-03-23 22:21 ` Alan Cox
2001-03-23 22:37 ` Szabolcs Szakacsits
2001-03-23 19:57 ` Szabolcs Szakacsits
2001-03-22 22:10 ` Doug Ledford
2001-03-22 22:53 ` Alan Cox
2001-03-22 23:30 ` Doug Ledford
2001-03-22 23:40 ` Alan Cox
2001-03-22 23:43 ` Stephen Clouse
2001-03-23 19:26 ` Szabolcs Szakacsits
2001-03-23 20:41 ` Paul Jakma
2001-03-23 21:58 ` george anzinger
2001-03-24 5:55 ` Rik van Riel
2001-03-23 22:18 ` Szabolcs Szakacsits
2001-03-24 2:08 ` Paul Jakma
2001-03-27 15:05 ` Anthony de Boer - USEnet
2002-03-23 0:33 ` Martin Dalecki
2001-03-22 23:53 ` Rik van Riel
2002-03-23 1:21 ` Martin Dalecki
2001-03-23 0:20 ` Stephen Clouse
2002-03-23 1:30 ` Martin Dalecki
2001-03-23 1:37 ` Rik van Riel
2001-03-23 10:48 ` Martin Dalecki
2001-03-23 14:56 ` Rik van Riel
2001-03-23 16:43 ` Guest section DW
2001-03-24 5:57 ` Rik van Riel
2001-03-25 16:35 ` Guest section DW
2001-03-23 20:20 ` Tom Diehl
2001-03-23 23:56 ` Tim Wright
2001-03-24 0:21 ` Tom Diehl
2001-03-23 1:31 ` Michael Peddemors
2001-03-23 7:04 ` Rik van Riel
2001-03-23 11:28 ` Guest section DW
2001-03-23 14:50 ` Eric W. Biederman
2001-03-23 17:21 ` Guest section DW
2001-03-23 20:18 ` Paul Jakma
2001-03-24 20:19 ` Jesse Pollard
2001-03-23 23:48 ` Eric W. Biederman
2001-03-23 21:11 ` José Luis Domingo López
2001-03-23 17:26 ` James A. Sutherland
2001-03-23 17:32 ` Alan Cox
2001-03-23 18:58 ` Martin Dalecki
2001-03-23 19:45 ` Jonathan Morton
2001-03-23 23:26 ` Eric W. Biederman
2001-03-25 15:30 ` Martin Dalecki
2001-03-25 20:47 ` Stephen Satchell
2001-03-24 0:03 ` Guest section DW
2001-03-24 7:52 ` Doug Ledford
2001-03-25 0:32 ` Kurt Garloff
2001-03-25 15:02 ` Sandy Harris
2001-03-25 18:07 ` Guest section DW
2001-03-22 14:53 ` Patrick O'Rourke
2001-03-22 19:24 ` Philipp Rumpf
2001-03-22 22:20 ` James A. Sutherland
2001-03-23 17:31 ` Szabolcs Szakacsits
2001-03-24 5:54 ` Rik van Riel
2001-03-24 6:55 ` Juha Saarinen
2001-03-27 8:31 ` Roger Gammans
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='l0313031ab6e2b9537342@[192.168.239.101]' \
--to=chromi@cyberspace.org \
--cc=dledford@redhat.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®