lkml.org 
[lkml]   [1997]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Signal 7 and "Couldn't get a free page..."

On Wed, 30 Apr 1997, Hubert Mantel wrote:

> On Tue, 29 Apr 1997, David S. Miller wrote:
>
> > > I'm getting "Couldn't get a free page..." even on machines with
> > > 32MB RAM and lots of unused swap. With 2.0.29 I never saw this on
> > > the affected machines...
> >
> > I'm suspecting the buffer cache changes to be the real problem.
> >
> > Yes this is known, quick easy fix for this is to increase magic
> > constant in free_area_init() initial comparison to 48, like so:
> >
> > /*
> > * select nr of pages we try to keep free for important stuff
> > * with a minimum of 48 pages. This is totally arbitrary
> > */
> > i = (end_mem - PAGE_OFFSET) >> (PAGE_SHIFT+7);
> > if (i < 48)
> > i = 48;
> >
> > This is what Linus and myself have in our trees.
>
> This patch only helps a little with small machines. With 32MB RAM, you
> have already 64 96 128, so this patch does nothing at all. And one gets
> "Couldn't get a free page..." even on machines with 32MB RAM, so this
> seems not to be a solution for the real problem. Increasing these values
> only makes the problem come up not so often, but it doesn't disappear.
>
> Ingo Molnar sent me the attached patch for testing purposes. My test
> machine did run the whole night compiling kernels. The problem (failure of
> __get_free_page) was triggered about once per hour. But apparently,
> calling schedule() did solve the problem, as the count never went below
> 100. This is probably not the correct solution, but it might show the
> right way where to look...

> The syslog:
> -------------------------------------------------------------------------
> Apr 29 21:24:37 Celsius kernel: Ingo's Patch was triggered with count = 100
> Apr 29 21:44:21 Celsius kernel: Ingo's Patch was triggered with count = 100
> Apr 29 21:49:13 Celsius kernel: Ingo's Patch was triggered with count = 100
> Apr 29 22:21:57 Celsius kernel: Ingo's Patch was triggered with count = 100

ok, this is what i kindof suspected, it's most probably bursts of
interrupts stealing pages.

as we should _really_ not fail to map in a page when we have heaps of
memory around, IMHO we should use two versions of get_free_page(). The
fast and insecure one, and another, which is a bit slower, but prevents
the page being allocated by interrupts?

to "own" pages is not the right solution (as we cannot distinct between
really low memory and irq page thief situations), but IMHO it's clean to
exclude interrupts from stealing certain pages?

Ingo


\
 
 \ /
  Last update: 2005-03-22 13:39    [W:0.984 / U:1.180 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site