Messages in this thread | | | Date | Tue, 21 Apr 2009 09:41:24 +0100 | From | Mel Gorman <> | Subject | Re: [PATCH 11/25] Calculate the cold parameter for allocation only once |
| |
On Tue, Apr 21, 2009 at 10:43:25AM +0300, Pekka Enberg wrote: > On Mon, 2009-04-20 at 23:19 +0100, Mel Gorman wrote: > > GFP mask is checked for __GFP_COLD has been specified when deciding which > > end of the PCP lists to use. However, it is happening multiple times per > > allocation, at least once per zone traversed. Calculate it once. > > > > Signed-off-by: Mel Gorman <mel@csn.ul.ie> > > --- > > mm/page_alloc.c | 35 ++++++++++++++++++----------------- > > 1 files changed, 18 insertions(+), 17 deletions(-) > > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 1506cd5..51e1ded 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -1066,11 +1066,10 @@ void split_page(struct page *page, unsigned int order) > > */ > > static struct page *buffered_rmqueue(struct zone *preferred_zone, > > struct zone *zone, int order, gfp_t gfp_flags, > > - int migratetype) > > + int migratetype, int cold) > > { > > unsigned long flags; > > struct page *page; > > - int cold = !!(gfp_flags & __GFP_COLD); > > int cpu; > > > > again: > > Is this a measurable win? And does gcc inline all this nicely or does > this change actually increase kernel text size? >
It gets inlined later so it shouldn't affect code size as part of the overall patchset although it probably adds a small bit here. It showed up on profiles as a place where cache misses were hitting hard although it's probable that the misses are being incurred anyway but not as obvious due to sampling.
The win overall is small but it's the same mask that is applied to gfp_mask over and over again and could be considered a loop invariant in a weird sort of way.
-- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab
| |