Messages in this thread | | | Date | Mon, 16 Mar 2009 16:42:39 +0000 | From | Mel Gorman <> | Subject | Re: [PATCH 23/35] Update NR_FREE_PAGES only as necessary |
| |
On Mon, Mar 16, 2009 at 12:17:15PM -0400, Christoph Lameter wrote: > On Mon, 16 Mar 2009, Mel Gorman wrote: > > > When pages are being freed to the buddy allocator, the zone > > NR_FREE_PAGES counter must be updated. In the case of bulk per-cpu page > > freeing, it's updated once per page. This retouches cache lines more > > than necessary. Update the counters one per per-cpu bulk free. > > Not sure about the reasoning here since the individual updates are batched
Each update take places between lots of other work with different cache lines. With enough buddy merging, I believed the line holding the counters could at least get pushed out of L1 although probably not L2 cache.
> and you are touching the same cacheline as the pcp you are operating on > and have to touch anyways. > > But if its frequent that __rmqueue_smallest() and free_pages_bulk() are > called with multiple pages then its always a win. >
It's frequent enough that it showed up in profiles
> Reviewed-by: Christoph Lameter <cl@linux-foundation.org> > > > + __mod_zone_page_state(zone, NR_FREE_PAGES, -(1UL << order) * i); > > A multiplication? Okay with contemporary cpus I guess. >
Replaced with
__mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
-- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab
| |