mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
[PATCH] mm: page_alloc: increase size of per-cpu-pages
Increase the page allocator's per-cpu magazines from 1/4MB to 1/2MB. Over 100+ runs for a workload, the difference in mean is about 2%. The best results for both are almost same. Though the max variation in results with 1/2MB is only 2.2%, whereas with 1/4MB it is 12%. Signed-off-by: Rohit Seth <rohit.seth@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
fcdae29aa7
commit
ba56e91c94
@ -1721,29 +1721,29 @@ static int __devinit zone_batchsize(struct zone *zone)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* The per-cpu-pages pools are set to around 1000th of the
|
* The per-cpu-pages pools are set to around 1000th of the
|
||||||
* size of the zone. But no more than 1/4 of a meg - there's
|
* size of the zone. But no more than 1/2 of a meg.
|
||||||
* no point in going beyond the size of L2 cache.
|
|
||||||
*
|
*
|
||||||
* OK, so we don't know how big the cache is. So guess.
|
* OK, so we don't know how big the cache is. So guess.
|
||||||
*/
|
*/
|
||||||
batch = zone->present_pages / 1024;
|
batch = zone->present_pages / 1024;
|
||||||
if (batch * PAGE_SIZE > 256 * 1024)
|
if (batch * PAGE_SIZE > 512 * 1024)
|
||||||
batch = (256 * 1024) / PAGE_SIZE;
|
batch = (512 * 1024) / PAGE_SIZE;
|
||||||
batch /= 4; /* We effectively *= 4 below */
|
batch /= 4; /* We effectively *= 4 below */
|
||||||
if (batch < 1)
|
if (batch < 1)
|
||||||
batch = 1;
|
batch = 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clamp the batch to a 2^n - 1 value. Having a power
|
* We will be trying to allcoate bigger chunks of contiguous
|
||||||
* of 2 value was found to be more likely to have
|
* memory of the order of fls(batch). This should result in
|
||||||
* suboptimal cache aliasing properties in some cases.
|
* better cache coloring.
|
||||||
*
|
*
|
||||||
* For example if 2 tasks are alternately allocating
|
* A sanity check also to ensure that batch is still in limits.
|
||||||
* 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)) - 1;
|
batch = (1 << fls(batch + batch/2));
|
||||||
|
|
||||||
|
if (fls(batch) >= (PAGE_SHIFT + MAX_ORDER - 2))
|
||||||
|
batch = PAGE_SHIFT + ((MAX_ORDER - 1 - PAGE_SHIFT)/2);
|
||||||
|
|
||||||
return batch;
|
return batch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user