Re: [PATCH 2/2] mm: eliminate node 0 bias in MPOL_INTERLEAVE

From: Andi Kleen
Date: Thu Sep 23 2004 - 04:34:51 EST


On Wed, Sep 22, 2004 at 11:32:45PM -0500, Ray Bryant wrote:
> Each of these cases potentially breaks the (assumed) invariant of

I would prefer to keep the invariant.

> +++ linux-2.6.9-rc2-mm1/mm/mempolicy.c 2004-09-21 17:44:58.000000000 -0700
> @@ -435,7 +435,7 @@ asmlinkage long sys_set_mempolicy(int re
> default_policy[policy] = new;
> }
> if (new && new->policy == MPOL_INTERLEAVE)
> - current->il_next = find_first_bit(new->v.nodes, MAX_NUMNODES);
> + current->il_next = current->pid % MAX_NUMNODES;

Please do the find_next/find_first bit here in the slow path.

Another useful change may be to check if il_next points to a node
that is in the current interleaving mask. If yes don't change it.
This way skew when interleaving policy is set often could be avoided.

> return 0;
> }
>
> @@ -714,6 +714,11 @@ static unsigned interleave_nodes(struct
>
> nid = me->il_next;
> BUG_ON(nid >= MAX_NUMNODES);
> + if (!test_bit(nid, policy->v.nodes)) {
> + nid = find_next_bit(policy->v.nodes, MAX_NUMNODES, 1+nid);
> + if (nid >= MAX_NUMNODES)
> + nid = find_first_bit(policy->v.nodes, MAX_NUMNODES);
> + }

And remove it here.

> next = find_next_bit(policy->v.nodes, MAX_NUMNODES, 1+nid);
> if (next >= MAX_NUMNODES)
> next = find_first_bit(policy->v.nodes, MAX_NUMNODES);
> Index: linux-2.6.9-rc2-mm1/kernel/fork.c
> ===================================================================
> --- linux-2.6.9-rc2-mm1.orig/kernel/fork.c 2004-09-21 16:24:49.000000000 -0700
> +++ linux-2.6.9-rc2-mm1/kernel/fork.c 2004-09-21 17:41:12.000000000 -0700
> @@ -873,6 +873,8 @@ static task_t *copy_process(unsigned lon
> goto bad_fork_cleanup;
> }
> }
> + /* randomize placement of first page across nodes */
> + p->il_next = p->pid % MAX_NUMNODES;

Same here.

-Andi
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/