Re: [PATCH] Mark the correct zone as full when scanning zonelists

From: Mel Gorman
Date: Fri Sep 12 2008 - 16:38:10 EST


On (12/09/08 10:10), KAMEZAWA Hiroyuki didst pronounce:
> On Thu, 11 Sep 2008 14:41:55 -0700
> Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> > On Thu, 11 Sep 2008 22:25:51 +0100
> > Mel Gorman <mel@xxxxxxxxx> wrote:
> >
> > > The for_each_zone_zonelist() uses a struct zoneref *z cursor when scanning
> > > zonelists to keep track of where in the zonelist it is. The zoneref that
> > > is returned corresponds to the the next zone that is to be scanned, not
> > > the current one as it originally thought of as an opaque list.
> > >
> > > When the page allocator is scanning a zonelist, it marks zones that it
> > > temporarily full zones to eliminate near-future scanning attempts.
> >
> > That sentence needs help.
> >
> Hmm, should we rename
>
> next_zone_zonelist() => get_appropriate_zone_from_list()
>
> or some better name ?
>

Maybe as a separate patch, but to be honest the name still makes sense
to me but I'm biased.

> > > It uses
> > > the zoneref for the marking and consequently the incorrect zone gets marked
> > > full. This leads to a suitable zone being skipped in the mistaken belief
> > > it is full. This patch corrects the problem by changing zoneref to be the
> > > current zone being scanned instead of the next one.
> >
> > Applicable to 2.6.26 as well, yes?
> >
> Maybe yes. But it's better to show where this patch really fixes.
> Is this a fix for misunderstanding usage of zoneref in
> mm/page_alloc.c::get_page_from_freelist() ?
>
> == here ?==
> if (NUMA_BUILD)
> zlc_mark_zone_full(zonelist, z);
>

I spelled this out a bit better hopefully in the updated changelog.

Thanks

--
Mel Gorman
Part-time Phd Student Linux Technology Center
University of Limerick IBM Dublin Software Lab
--
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/