Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[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>

authored by

Nick Piggin and committed by
Linus Torvalds
0ceaacc9 9a405257

+8 -8
+8 -8
mm/page_alloc.c
··· 1772 1772 batch = 1; 1773 1773 1774 1774 /* 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. 1778 1778 * 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. 1780 1783 */ 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; 1785 1785 1786 1786 return batch; 1787 1787 }