Re: [PATCH 0/5] make slab gfp fair

Matt Mackall
2007-05-14T20:02:51Z

On Mon, May 14, 2007 at 12:44:51PM -0700, Andrew Morton wrote:
> On Mon, 14 May 2007 11:12:24 -0500
> Matt Mackall <mpm@selenic.com> wrote:
>
> > If I understand this correctly:
> >
> > privileged thread unprivileged greedy process
> > kmem_cache_alloc(...)
> > adds new slab page from lowmem pool
> > do_io()
> > kmem_cache_alloc(...)
> > kmem_cache_alloc(...)
> > kmem_cache_alloc(...)
> > kmem_cache_alloc(...)
> > kmem_cache_alloc(...)
> > ...
> > eats it all
> > kmem_cache_alloc(...) -> ENOMEM
> > who ate my donuts?!
>
> Yes, that's my understanding also.
>
> I can see why it's a problem in theory, but I don't think Peter has yet
> revealed to us why it's a problem in practice. I got all excited when
> Christoph asked "I am not sure what the point of all of this is.", but
> Peter cunningly avoided answering that ;)
>
> What observed problem is being fixed here?

(From my recollection of looking at this problem a few years ago:)

There are various critical I/O paths that aren't protected by
mempools that need to dip into reserves when we approach OOM.

If, say, we need some number of SKBs in the critical I/O cleaning path
while something else is cheerfully sending non-I/O data, that second
stream can eat the SKBs that the first had budgeted for in its
reserve.

I think the simplest thing to do is to make everyone either fail or
sleep if they're not marked critical and a global memory crisis flag
is set.

To make this not impact the fast path, we could pull some trick like
swapping out and hiding all the real slab caches when turning the crisis
flag on.

--
Mathematics is the supreme nostalgia of our time.