Re: [PATCH 2/3] page allocator: Do not allow interrupts to use ALLOC_HARDER

David Rientjes
2009-10-31T21:20:00Z

On Sat, 31 Oct 2009, Pavel Machek wrote:

> > Um, no, it's a matter of the kernel implementation. We allow such tasks
> > to allocate deeper into reserves to avoid the page allocator from
> > incurring a significant penalty when direct reclaim is required.
> > Background reclaim has already commenced at this point in the
> > slowpath.
>
> But we can't guarantee that enough memory will be ready in the
> reserves. So if realtime task relies on it, it is broken, and will
> fail to meet its deadlines from time to time.

This is truly a bizarre tangent to take, I don't quite understand the
point you're trying to make. Memory reserves exist to prevent blocking
when we need memory the most (oom killed task or direct reclaim) and to
allocate from when we can't (GFP_ATOMIC) or shouldn't (rt tasks) utilize
direct reclaim. The idea is to kick background reclaim first in the
slowpath so we're only below the low watermark for a short period and
allow the allocation to succeed. If direct reclaim actually can't free
any memory, the oom killer will free it for us.

So the realtime[*] tasks aren't relying on it at all, the ALLOC_HARDER
exemption for them in the page allocator are a convenience to return
memory faster than otherwise when the fastpath fails. I don't see much
point in arguing against that.

[*] This is the current mainline definition of "realtime," which actually
includes a large range of different priorities. For strict realtime,
you'd need to check out the -rt tree.