Messages in this thread | | | Date | Fri, 25 May 2001 21:22:05 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: Linux-2.4.5 |
| |
On Sat, 26 May 2001, Andrea Arcangeli wrote: > > On Fri, May 25, 2001 at 10:49:38PM -0400, Ben LaHaise wrote: > > Highmem. 0 free pages in ZONE_NORMAL. Now try to allocate a buffer_head. > > That's a longstanding deadlock, it was there the first time I read > fs/buffer.c, nothing related to highmem, we have it in 2.2 too. Also > getblk is deadlock prone in a smiliar manner.
Indeed.
This is why we always leave a few pages free, exactly to allow nested page allocators to steal the reserved pages that we keep around. If that deadlocks, then that's a separate issue altogether.
If people are able to trigger the "we run out of reserved pages" behaviour under any load, that indicates that we either have too few reserved pages per zone, or that we have a real thinko somewhere that allows eating up the reserves we're supposed to have.
And yes, things like spraying the box really hard with network packets can temporarily eat up the reserves, but that's why kswapd and friends exist, to get them back. But I could easily imagine that there are more schedule points missing that could cause user mode to not get to run much. Andrea fixed one, I think.
If there are more situations like this, please get a stack trace on the deadlock (fairly easy these days with ctrl-scrolllock), and let's think about what make for the nasty pattern in the first place instead of trying to add more "reserved" pages.
For example, maybe we can use HIGHMEM pages more aggressively in some places, to avoid the case where we're only freeing HIGHMEM pages and making the non-HIGHMEM case just worse.
For example, we used to have logic in swapout_process to _not_ swap out zones that don't need it. We changed swapout to happen in "page_launder()", but that logic got lost. It's entirely possible that we should just say "don't bother writing out dirty pages that are in zones that have no memory pressure", so that we don't use up pages from the _precious_ zones to free pages in zones that don't need freeing.
So don't try to paper over this by making up new rules. We should think about WHY the problem happens in the first place, not about trying to fix it once it has happened (and see the above as an example of why it might be happening).
But sometimes the right solution is just to have more reserves.
Linus
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |