Skip to content

Commit 0ceaacc

Browse files
Nick PigginLinus Torvalds
authored andcommitted
[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 <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 9a40525 commit 0ceaacc

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

mm/page_alloc.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1772,16 +1772,16 @@ static int __devinit zone_batchsize(struct zone *zone)
17721772
batch = 1;
17731773

17741774
/*
1775-
* We will be trying to allcoate bigger chunks of contiguous
1776-
* memory of the order of fls(batch). This should result in
1777-
* better cache coloring.
1775+
* Clamp the batch to a 2^n - 1 value. Having a power
1776+
* of 2 value was found to be more likely to have
1777+
* suboptimal cache aliasing properties in some cases.
17781778
*
1779-
* A sanity check also to ensure that batch is still in limits.
1779+
* For example if 2 tasks are alternately allocating
1780+
* batches of pages, one task can end up with a lot
1781+
* of pages of one half of the possible page colors
1782+
* and the other with pages of the other colors.
17801783
*/
1781-
batch = (1 << fls(batch + batch/2));
1782-
1783-
if (fls(batch) >= (PAGE_SHIFT + MAX_ORDER - 2))
1784-
batch = PAGE_SHIFT + ((MAX_ORDER - 1 - PAGE_SHIFT)/2);
1784+
batch = (1 << (fls(batch + batch/2)-1)) - 1;
17851785

17861786
return batch;
17871787
}

0 commit comments

Comments
 (0)