From: Martin Dalecki <dalecki@evision-ventures.com>
To: Jonathan Morton <chromi@cyberspace.org>
Cc: Doug Ledford <dledford@redhat.com>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Prevent OOM from killing init
Date: Sun, 25 Mar 2001 16:30:29 +0200 [thread overview]
Message-ID: <3ABE0105.4155F5CD@evision-ventures.com> (raw)
In-Reply-To: <3ABCE547.DD5E78B9@redhat.com> <Pine.LNX.4.33.0103241039590.2310-100000@mikeg.weiden.de> <l0313031ab6e2b9537342@[192.168.239.101]>
Jonathan Morton wrote:
>
> >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;
Ahh this will make the oom killer robust against misbalanced
MM. I will assimiliate this idea.
next prev parent reply other threads:[~2001-03-25 14:43 UTC|newest]
Thread overview: 235+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4605B269DB001E4299157DD1569079D2809930@EXCHANGE03.plaza.ds.adp.com>
2001-03-22 16:29 ` [PATCH] Prevent OOM from killing init Rik van Riel
2001-03-22 16:29 ` Rik van Riel
2001-03-22 18:32 ` Christian Bodmer
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
2001-03-24 22:11 ` Rik van Riel
2001-03-24 23:36 ` Jonathan Morton
2001-03-25 14:30 ` Martin Dalecki [this message]
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 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-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 22:54 ` Patrick O'Rourke
2001-03-21 23:11 ` Eli Carter
2001-03-21 23:11 ` Eli Carter
2001-03-21 23:40 ` Patrick O'Rourke
2001-03-21 23:40 ` Patrick O'Rourke
2001-03-21 23:48 ` Rik van Riel
2001-03-21 23:48 ` Rik van Riel
2001-03-22 8:14 ` Eric W. Biederman
2001-03-22 8:14 ` Eric W. Biederman
2001-03-22 9:24 ` Rik van Riel
2001-03-22 9:24 ` Rik van Riel
2001-03-22 19:29 ` Philipp Rumpf
2001-03-22 19:29 ` Philipp Rumpf
2001-03-22 11:47 ` Guest section DW
2001-03-22 11:47 ` Guest section DW
2001-03-22 15:01 ` Rik van Riel
2001-03-22 15:01 ` Rik van Riel
2001-03-22 19:04 ` Guest section DW
2001-03-22 19:04 ` Guest section DW
2001-03-22 23:10 ` Jordi Polo
2001-03-22 16:41 ` Eric W. Biederman
2001-03-22 16:41 ` Eric W. Biederman
2001-03-22 20:28 ` Stephen Clouse
2001-03-22 20:28 ` Stephen Clouse
2001-03-22 21:01 ` Ingo Oeser
2001-03-22 21:01 ` Ingo Oeser
2001-03-22 21:23 ` Alan Cox
2001-03-22 21:23 ` Alan Cox
2001-03-22 22:00 ` Guest section DW
2001-03-22 22:00 ` Guest section DW
2001-03-22 22:12 ` Ed Tomlinson
2001-03-22 22:12 ` Ed Tomlinson
2001-03-22 22:52 ` Alan Cox
2001-03-22 22:52 ` Alan Cox
2001-03-22 23:27 ` Guest section DW
2001-03-22 23:27 ` Guest section DW
2001-03-22 23:37 ` Rik van Riel
2001-03-22 23:37 ` Rik van Riel
2001-03-26 19:04 ` James Antill
2001-03-26 19:04 ` James Antill
2001-03-26 20:05 ` Rik van Riel
2001-03-26 20:05 ` Rik van Riel
2001-03-22 23:40 ` Alan Cox
2001-03-22 23:40 ` Alan Cox
2001-03-23 20:09 ` Szabolcs Szakacsits
2001-03-23 20:09 ` Szabolcs Szakacsits
2001-03-23 22:21 ` Alan Cox
2001-03-23 22:21 ` Alan Cox
2001-03-23 22:37 ` Szabolcs Szakacsits
2001-03-23 22:37 ` Szabolcs Szakacsits
2001-03-23 19:57 ` Szabolcs Szakacsits
2001-03-23 19:57 ` Szabolcs Szakacsits
2001-03-22 22:10 ` Doug Ledford
2001-03-22 22:10 ` Doug Ledford
2001-03-22 22:53 ` Alan Cox
2001-03-22 22:53 ` Alan Cox
2001-03-22 23:30 ` Doug Ledford
2001-03-22 23:30 ` Doug Ledford
2001-03-22 23:40 ` Alan Cox
2001-03-22 23:40 ` Alan Cox
2001-03-22 23:43 ` Stephen Clouse
2001-03-22 23:43 ` Stephen Clouse
2001-03-23 19:26 ` Szabolcs Szakacsits
2001-03-23 19:26 ` Szabolcs Szakacsits
2001-03-23 20:41 ` Paul Jakma
2001-03-23 20:41 ` Paul Jakma
2001-03-23 21:58 ` george anzinger
2001-03-23 21:58 ` george anzinger
2001-03-24 5:55 ` Rik van Riel
2001-03-24 5:55 ` Rik van Riel
2001-03-24 8:04 ` Mike Galbraith
2001-03-27 14:05 ` Scott F. Kaplan
2001-03-28 0:00 ` Rik van Riel
2001-03-30 3:18 ` Scott F. Kaplan
2001-03-30 23:03 ` Rik van Riel
2001-03-23 22:18 ` Szabolcs Szakacsits
2001-03-23 22:18 ` Szabolcs Szakacsits
2001-03-24 2:08 ` Paul Jakma
2001-03-24 2:08 ` Paul Jakma
2001-03-23 1:31 ` Michael Peddemors
2001-03-23 1:31 ` Michael Peddemors
2001-03-23 7:04 ` Rik van Riel
2001-03-23 7:04 ` Rik van Riel
2001-03-23 11:28 ` Guest section DW
2001-03-23 11:28 ` Guest section DW
2001-03-23 14:50 ` Eric W. Biederman
2001-03-23 14:50 ` Eric W. Biederman
2001-03-23 17:21 ` Guest section DW
2001-03-23 17:21 ` Guest section DW
2001-03-23 20:18 ` Paul Jakma
2001-03-23 20:18 ` Paul Jakma
2001-03-24 20:19 ` Jesse Pollard
2001-03-24 20:19 ` Jesse Pollard
2001-03-23 23:48 ` Eric W. Biederman
2001-03-23 23:48 ` Eric W. Biederman
2001-03-23 21:11 ` José Luis Domingo López
2001-03-27 15:05 ` Anthony de Boer - USEnet
2002-03-23 0:33 ` Martin Dalecki
2002-03-23 0:33 ` Martin Dalecki
2001-03-22 23:53 ` Rik van Riel
2001-03-22 23:53 ` Rik van Riel
2002-03-23 1:21 ` Martin Dalecki
2002-03-23 1:21 ` Martin Dalecki
2001-03-23 0:20 ` Stephen Clouse
2001-03-23 0:20 ` Stephen Clouse
2002-03-23 1:30 ` Martin Dalecki
2002-03-23 1:30 ` Martin Dalecki
2001-03-23 1:37 ` Rik van Riel
2001-03-23 1:37 ` Rik van Riel
2001-03-23 10:48 ` Martin Dalecki
2001-03-23 10:48 ` Martin Dalecki
2001-03-23 14:56 ` Rik van Riel
2001-03-23 14:56 ` Rik van Riel
2001-03-23 16:43 ` Guest section DW
2001-03-23 16:43 ` Guest section DW
2001-03-24 5:57 ` Rik van Riel
2001-03-24 5:57 ` Rik van Riel
2001-03-25 16:35 ` Guest section DW
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 17:26 ` James A. Sutherland
2001-03-23 17:26 ` James A. Sutherland
2001-03-23 17:32 ` Alan Cox
2001-03-23 17:32 ` Alan Cox
2001-03-23 18:58 ` Martin Dalecki
2001-03-23 18:58 ` Martin Dalecki
2001-03-23 19:45 ` Jonathan Morton
2001-03-23 19:45 ` Jonathan Morton
2001-03-23 23:26 ` Eric W. Biederman
2001-03-23 23:26 ` Eric W. Biederman
2001-03-25 15:30 ` Martin Dalecki
2001-03-25 15:30 ` Martin Dalecki
2001-03-25 20:47 ` Stephen Satchell
2001-03-25 20:47 ` Stephen Satchell
2001-03-23 20:16 ` Jordi Polo
2001-03-24 0:03 ` Guest section DW
2001-03-24 0:03 ` Guest section DW
2001-03-24 7:52 ` Doug Ledford
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 14:53 ` Patrick O'Rourke
2001-03-22 19:24 ` Philipp Rumpf
2001-03-22 19:24 ` Philipp Rumpf
2001-03-22 22:20 ` James A. Sutherland
2001-03-22 22:20 ` James A. Sutherland
2001-03-23 17:31 ` Szabolcs Szakacsits
2001-03-23 17:31 ` Szabolcs Szakacsits
2001-03-24 5:54 ` Rik van Riel
2001-03-24 5:54 ` Rik van Riel
2001-03-24 6:55 ` Juha Saarinen
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=3ABE0105.4155F5CD@evision-ventures.com \
--to=dalecki@evision-ventures.com \
--cc=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.