diff options
author | Nick Piggin <nickpiggin@yahoo.com.au> | 2005-12-04 13:55:25 +1100 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-12-03 20:46:40 -0800 |
commit | 0ceaacc9785fedc500e19b024d606a82a23f5372 (patch) | |
tree | ad178c7daa6ec7eaaae4e57d5ac8e20a8e806282 | |
parent | 9a40525788a1b692ee0fc780a8cdb2ac808de1b0 (diff) |
[PATCH] Fix up per-cpu page batch sizes
The code to clamp batch sizes to 2^n - 1 went missing and an extra
check got added, which must have been a hunk of the "higer order pcp
batch refills" work sneaking in.
Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | mm/page_alloc.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b257720edfc8..3b21a13d841c 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1772,16 +1772,16 @@ static int __devinit zone_batchsize(struct zone *zone) batch = 1; /* - * We will be trying to allcoate bigger chunks of contiguous - * memory of the order of fls(batch). This should result in - * better cache coloring. + * Clamp the batch to a 2^n - 1 value. Having a power + * of 2 value was found to be more likely to have + * suboptimal cache aliasing properties in some cases. * - * A sanity check also to ensure that batch is still in limits. + * For example if 2 tasks are alternately allocating + * batches of pages, one task can end up with a lot + * of pages of one half of the possible page colors + * and the other with pages of the other colors. */ - batch = (1 << fls(batch + batch/2)); - - if (fls(batch) >= (PAGE_SHIFT + MAX_ORDER - 2)) - batch = PAGE_SHIFT + ((MAX_ORDER - 1 - PAGE_SHIFT)/2); + batch = (1 << (fls(batch + batch/2)-1)) - 1; return batch; } |