Re: RFC for 2.6: avoid OOM at bounce buffer storm

From: Andrew Morton
Date: Tue Jun 07 2005 - 14:09:55 EST


Martin Wilck <martin.wilck@xxxxxxxxxxxxxxxxxxx> wrote:
>
> > It might be neater to do this at the mempool level: that way we're adding
> > general-purpose infrastructure and then just using it, rather than
> > special-casing the bounce code.
> >
> > See below a (n untested) patch against the latest devel tree. It won't be
> > stunningly scalable on big SMP, but the overhead of bouncing will probably
> > hide that.
>
> I don't quite understand your patch. You introduce a "limit" field but
> you never actually use it. You also don't count the allocated pages.
> Are you using the semaphore for slowing things down on purpose?

The semaphore is initialised with the limit level, so once it has been
down()ed more than `limit' times, processes will block until someone does
up().

> (Note that the problem is not in the mempool allocation itself but in
> the "normal" allocation path (page_pool_alloc() -> alloc_page()))

yup. The semaphore will prevent more than `limit' pages being allocated at
any point in time.

> Anyway, I think could figure out your patch but with 2.6.12-rc5-mm2 I
> couldn't reproduce the problem any more.

Oh bugger.

> It appears to run much more
> smoothly now, perhaps because wakeup_bdflush() isn't called any more.
> Are you still interested in more data?

Perhaps the newer kernel has writeback thresholding fixes so it's not
possible to dirty as much memory with write().

You can probably trigger the same problem if the memory is instead dirtied
with mmap(MAP_SHARED).
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/