On Tue, Aug 06, 2013 at 12:08:38PM -0400, Johannes Weiner wrote: > On Fri, Aug 02, 2013 at 06:06:33PM +0200, Andrea Arcangeli wrote: > > Prevent the scaling down to reduce the watermarks too much. > > > > Signed-off-by: Andrea Arcangeli <aarcange@xxxxxxxxxx> > > --- > > mm/page_alloc.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 4401983..b32ecde 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -1665,7 +1665,8 @@ static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark, > > free_pages -= z->free_area[o].nr_free << o; > > > > /* Require fewer higher order pages to be free */ > > - min >>= 1; > > + if (o < (pageblock_order >> 2)) > > + min >>= 1; > > Okay, bear with me here: > > After an allocation, the watermark has to be met, all available pages > considered. That is reasonable because we don't want to deadlock and > order-0 pages can be served from any page block. > > Now say we have an order-2 allocation: in addition to the order-0 view > on the watermark, after the allocation a quarter of the watermark has > to be met with order-2 pages and up. Okay, maybe we always want a few > < PAGE_ALLOC_COSTLY_ORDER pages at our disposal, who knows. > > Then it kind of sizzles out towards higher order pages but it always > requires the remainder to be positive, i.e. at least one page at the > checked order available. Only the actually requested order is not > checked, so for an order-9 we only make sure that we could serve at > least one order-8 page, maybe more depending on the zone size. Argh, brainfart. It subtracts free order-8 and what's left is order-9 and up. So it makes sure there are watermark >> 9 worth of order-9 and up page blocks available after the allocation of an order-9 page. > You're proposing to check at least for > > (watermark - min_watermark) >> (pageblock_order >> 2) > > worth of order-8 pages instead. Wouldn't it be enough to meet watermarks from an order-0 perspective, maybe require *some* buffer up to PAGE_ALLOC_COSTLY_ORDER, and then be okay with a single order-n page? Why do we need more than one? Anyway, I think the changelog should be a bit more verbose about the motivation ;-) Thanks! -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>