From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Linux Kernel Mailing List <Linux-Kernel@vger.kernel.org>
Subject: [patch 12/14] mm: variable pcp size
Date: Sun, 06 Nov 2005 19:27:10 +1100 [thread overview]
Message-ID: <436DBE5E.2060509@yahoo.com.au> (raw)
In-Reply-To: <436DBE43.1080405@yahoo.com.au>
[-- Attachment #1: Type: text/plain, Size: 35 bytes --]
12/14
--
SUSE Labs, Novell Inc.
[-- Attachment #2: mm-variable-pcp-size.patch --]
[-- Type: text/plain, Size: 1973 bytes --]
The previous increase in pcp list size will probably be too much for
huge NUMA machines, despite advances in keeping remote pagesets in check.
Make pcp sizes for remote zones much smaller (slightly smaller than before
the increase), and take advantage of this to increase local pcp list size
again.
Index: linux-2.6/mm/page_alloc.c
===================================================================
--- linux-2.6.orig/mm/page_alloc.c
+++ linux-2.6/mm/page_alloc.c
@@ -1779,13 +1779,14 @@ static int __devinit zone_batchsize(stru
return batch;
}
-inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
+static inline void setup_pageset(struct per_cpu_pageset *p,
+ unsigned long size, unsigned long batch)
{
memset(p, 0, sizeof(*p));
p->count = 0;
p->cold_count = 0;
- p->high = 16 * batch;
- p->batch = max(1UL, 1 * batch);
+ p->high = max(1UL, size);
+ p->batch = max(1UL, batch);
INIT_LIST_HEAD(&p->list);
}
@@ -1819,13 +1820,19 @@ static int __devinit process_zones(int c
struct zone *zone, *dzone;
for_each_zone(zone) {
+ unsigned long size, batch;
zone->pageset[cpu] = kmalloc_node(sizeof(struct per_cpu_pageset),
GFP_KERNEL, cpu_to_node(cpu));
if (!zone->pageset[cpu])
goto bad;
- setup_pageset(zone->pageset[cpu], zone_batchsize(zone));
+ batch = zone_batchsize(zone);
+ if (cpu_to_node(cpu) == zone->zone_pgdat->node_id)
+ size = batch * 32;
+ else
+ size = batch * 4;
+ setup_pageset(zone->pageset[cpu], size, batch);
}
return 0;
@@ -1923,9 +1930,9 @@ static __devinit void zone_pcp_init(stru
#ifdef CONFIG_NUMA
/* Early boot. Slab allocator not functional yet */
zone->pageset[cpu] = &boot_pageset[cpu];
- setup_pageset(&boot_pageset[cpu],0);
+ setup_pageset(&boot_pageset[cpu], 0, 0);
#else
- setup_pageset(zone_pcp(zone,cpu), batch);
+ setup_pageset(zone_pcp(zone, cpu), batch * 32, batch);
#endif
}
printk(KERN_DEBUG " %s zone: %lu pages, LIFO batch:%lu\n",
next prev parent reply other threads:[~2005-11-06 8:25 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-06 8:11 [rfc][patch 0/14] mm: performance improvements Nick Piggin
2005-11-06 8:20 ` [patch 1/14] mm: opt rmqueue Nick Piggin
2005-11-06 8:20 ` [patch 2/14] mm: Nick Piggin
2005-11-06 8:20 ` [patch 2/14] mm: pte prefetch Nick Piggin
2005-11-06 8:21 ` [patch 3/14] mm: release opt Nick Piggin
2005-11-06 8:22 ` [patch 4/14] mm: rmap opt Nick Piggin
2005-11-06 8:23 ` [patch 5/14] mm: set_page_refs opt Nick Piggin
2005-11-06 8:24 ` [patch 6/14] mm: microopt conditions Nick Piggin
2005-11-06 8:24 ` [patch 7/14] mm: remove bad_range Nick Piggin
2005-11-06 8:25 ` [patch 8/14] mm: remove pcp_low Nick Piggin
2005-11-06 8:25 ` [patch 9/14] mm: page_state opt Nick Piggin
2005-11-06 8:26 ` [patch 10/14] mm: single pcp list Nick Piggin
2005-11-06 8:26 ` [patch 11/14] mm: increase pcp size Nick Piggin
2005-11-06 8:27 ` Nick Piggin [this message]
2005-11-06 8:27 ` [patch 13/14] mm: cleanup zone_pcp Nick Piggin
2005-11-06 8:28 ` [patch 14/14] mm: page_alloc cleanups Nick Piggin
2005-11-13 2:38 ` [patch 9/14] mm: page_state opt Andi Kleen
2005-11-06 17:37 ` [patch 7/14] mm: remove bad_range Bob Picco
2005-11-07 0:58 ` Nick Piggin
2005-11-07 3:00 ` Bob Picco
2005-11-07 3:05 ` Nick Piggin
2005-11-07 1:40 ` [patch 5/14] mm: set_page_refs opt Christoph Hellwig
2005-11-07 1:45 ` Nick Piggin
2005-11-06 8:35 ` [patch 2/14] mm: pte prefetch Arjan van de Ven
2005-11-06 8:51 ` Nick Piggin
2005-11-06 17:37 ` [patch 1/14] mm: opt rmqueue Andi Kleen
2005-11-07 1:06 ` Nick Piggin
2005-11-07 3:23 ` Andi Kleen
2005-11-07 3:43 ` Nick Piggin
2005-11-07 1:39 ` [rfc][patch 0/14] mm: performance improvements Christoph Hellwig
2005-11-07 1:51 ` Nick Piggin
2005-11-07 3:57 ` Paul Jackson
2005-11-07 4:51 ` Nick Piggin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=436DBE5E.2060509@yahoo.com.au \
--to=nickpiggin@yahoo.com.au \
--cc=Linux-Kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox