public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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.

  parent reply	other threads:[~2001-03-25 14:43 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 ` [PATCH] Prevent OOM from killing init 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
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  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-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-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 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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox