[RFC 8/8] Optimize mempolicies for a single zone

Christoph Lameter
2006-07-08T00:06:01Z

Use SINGLE_ZONE to remove the highest zone determination

Siged-off-by: Christoph Lameter <clameter@sgi.com>

Index: linux-2.6.17-mm6/mm/mempolicy.c
===================================================================
--- linux-2.6.17-mm6.orig/mm/mempolicy.c 2006-07-07 16:50:18.790221361 -0700
+++ linux-2.6.17-mm6/mm/mempolicy.c 2006-07-07 16:53:46.057679926 -0700
@@ -103,9 +103,11 @@ static struct kmem_cache *sn_cache;

#define PDprintk(fmt...)

+#ifndef SINGLE_ZONE
/* Highest zone. An specific allocation for a zone below that is not
policied. */
int policy_zone = 0;
+#endif

struct mempolicy default_policy = {
.refcnt = ATOMIC_INIT(1), /* never free it */
Index: linux-2.6.17-mm6/include/linux/mempolicy.h
===================================================================
--- linux-2.6.17-mm6.orig/include/linux/mempolicy.h 2006-07-03 13:47:21.727467854 -0700
+++ linux-2.6.17-mm6/include/linux/mempolicy.h 2006-07-07 16:53:46.057679926 -0700
@@ -162,12 +162,18 @@ extern struct zonelist *huge_zonelist(st
unsigned long addr);
extern unsigned slab_node(struct mempolicy *policy);

+#ifndef SINGLE_ZONE
+#define policy_zone ZONE_NORMAL
+#else
extern int policy_zone;
+#endif

static inline void check_highest_zone(int k)
{
+#ifndef SINGLE_ZONE
if (k > policy_zone)
policy_zone = k;
+#endif
}

int do_migrate_pages(struct mm_struct *mm,