Messages in this thread | | | Date | Tue, 24 Feb 2009 17:53:00 +0000 | From | Mel Gorman <> | Subject | Re: [PATCH 10/19] Calculate the preferred zone for allocation only once |
| |
On Tue, Feb 24, 2009 at 12:31:41PM -0500, Christoph Lameter wrote: > On Tue, 24 Feb 2009, Mel Gorman wrote: > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 6f26944..074f9a6 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -1399,24 +1399,19 @@ static void zlc_mark_zone_full(struct zonelist *zonelist, struct zoneref *z) > > */ > > static struct page * > > get_page_from_freelist(gfp_t gfp_mask, nodemask_t *nodemask, unsigned int order, > > - struct zonelist *zonelist, int high_zoneidx, int alloc_flags) > > + struct zonelist *zonelist, int high_zoneidx, int alloc_flags, > > + struct zone *preferred_zone) > > { > > This gets into a quite a number of parameters now. Pass a structure like in > vmscan.c?
I considered it, but thought that multiple offsets into structures might exceed the cost of pushing the parameters onto the stack. I never actually looked at the generated assembly though to make a proper assessment.
> Or simplify things to be able to run get_page_from_freelist with > less parameters? The number of parameters seem to be too high for a > fastpath function. >
Which is why I ended up inlining get_page_from_freelist() in V1. It's a rock and a hard place basically. Passing parameters is expensive, but calculating the information multiple times is too.
-- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab
| |