Re: [PATCH][1/2] adjust dirty threshold for lowmem-only mappings

Sami Farin
2004-12-20T17:59:51Z

On Mon, Dec 20, 2004 at 10:46:48AM -0600, Robert_Hentosh@Dell.com wrote:
>
>
> > On Mon, 20 Dec 2004, Rik van Riel wrote:
> >
> >> Simply running "dd if=/dev/zero of=/dev/hd<one you can miss>"
> >> will result in OOM kills, with the dirty pagecache
> >> completely filling up lowmem. This patch is part 1 to
> >> fixing that problem.
> >
> > What I forgot to say is that in order to trigger this OOM
> > Kill the dirty_limit of 40% needs to be more memory than
> > what fits in low memory. So this will work on x86 with
> > 4GB RAM, since the dirty_limit is 1.6GB, but the block
> > device cache cannot grow that big because it is restricted
> > to low memory.
> >
> > This has the effect of all low memory being tied up in
> > Dirty page cache and userspace try_to_free_pages() skipping
> > the writeout of these pages because the block device is
> > congested.
>
> I am just confirming that this is a real problem. The problem
> more frequently shows up with block sizes above 4k on the
> dd and also showed up on some platforms with just a mke2fs
> on a slower device such as a USB hard drive.
>
> Rik's patch has solved the issue and has been running under
> stress (via ctcs) over the weekend without failure.

Rik's patch was broken (word-wrap by pine), but I patched
manually. However, I have tglx-oom-final patch which moved
out_of_memory call from vmscan.c:try_to_free_pages()
to page_alloc.c:__alloc_pages().

Basically, (sc.nr_congested < SWAP_CLUSTER_MAX) check is missing.
So, what's the best way to combine these two patches?

If you use mutt, the patch can be found with command
/~i 1102697553.3306.91.camel@tglx.tec.linutronix.de
from your LKML mailbox.

--