From ff3881079f8200d7a5cbe4d908777fc368e26f82 Mon Sep 17 00:00:00 2001 From: "Seth, Rohit" Date: Sat, 29 Oct 2005 18:15:47 -0700 Subject: [PATCH] --- yaml --- r: 11319 b: refs/heads/master c: ba56e91c940146e99ac694c4c7cd7f2b4aaa565d h: refs/heads/master i: 11317: c35e044e332caa80f956a2bfda59bf65d473352b 11315: 6343f85af2ca19862ed10c4fbf31ab7bb5e4a29f 11311: ff3e0f9bef0f3a6c6f7c0c1282e91c78b599aeff v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index 5a56534a94ee..64a9d9f43e96 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fcdae29aa7a5c79f245110f6680afdc1858d3626 +refs/heads/master: ba56e91c940146e99ac694c4c7cd7f2b4aaa565d diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index 94c864eac9c4..f799217dc2f3 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/mm/page_alloc.c @@ -1721,29 +1721,29 @@ static int __devinit zone_batchsize(struct zone *zone) /* * 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 - * no point in going beyond the size of L2 cache. + * size of the zone. But no more than 1/2 of a meg. * * OK, so we don't know how big the cache is. So guess. */ batch = zone->present_pages / 1024; - if (batch * PAGE_SIZE > 256 * 1024) - batch = (256 * 1024) / PAGE_SIZE; + if (batch * PAGE_SIZE > 512 * 1024) + batch = (512 * 1024) / PAGE_SIZE; batch /= 4; /* We effectively *= 4 below */ if (batch < 1) batch = 1; /* - * 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. + * We will be trying to allcoate bigger chunks of contiguous + * memory of the order of fls(batch). This should result in + * better cache coloring. * - * 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. + * A sanity check also to ensure that batch is still in limits. */ - 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; }