Re: NUMA emulation x86_64: numa=fake parameter for custom nodesdistance

From: Petr Holasek
Date: Fri Nov 18 2011 - 19:31:33 EST


On Fri, 18 Nov 2011, Andrew Morton wrote:

> Date: Fri, 18 Nov 2011 11:53:36 -0800
> From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> To: Petr Holasek <pholasek@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>,
> "H. Peter Anvin" <hpa@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx,
> x86@xxxxxxxxxx, Anton Arapov <anton@xxxxxxxxxx>
> Subject: Re: [PATCH 1/2] NUMA emulation x86_64: numa=fake parameter for
> custom nodes distance
>
> On Fri, 18 Nov 2011 12:55:07 +0100
> Petr Holasek <pholasek@xxxxxxxxxx> wrote:
>
> > As default, when numa emulation is turned on, node distance table
> > uses physical distance, so for 4 nodes emulated on 1 physical table is
> >
> > node 0 1 2 3
> > 0: 10 10 10 10
> > 1: 10 10 10 10
> > 2: 10 10 10 10
> > 3: 10 10 10 10
> >
> > This patch adds new [distance] argument to
> >
> > numa=fake=<number/size of nodes>[,distance]
> >
> > When distance argument is used, it sets linear distance between nodes
> > like that:
> >
> > __distance__
> > ___|___ ____|___ ________ ________
> > | | | | | | | |
> > | node1 |---| node 2 |---| node 3 |---| node 4 |
> > |_______| |________| |________| |________|
> > | | |
> > | | |
> > |____distance * 2________| |
> > | |
> > |____________distance * 3______________|
> >
> > This feature might be useful for testing some numa awareness features in
> > both user and kernel spaces.
> >
>
> "might" is a red flag. We don't merge things which might be useful!
>
> *Is* it useful? If so then please tell us why and explain how it might
> be useful to others.

A lot of developers still have no access to large NUMA machines and
possibility of NUMA emulation could involve more of them to thinking
about NUMA awareness of their apps/kernel code.

>
> > @@ -404,6 +406,17 @@ void __init numa_emulation(struct numa_meminfo *numa_meminfo, int numa_dist_cnt)
> > if (emu_nid_to_phys[i] == NUMA_NO_NODE)
> > emu_nid_to_phys[i] = dfl_phys_nid;
> >
> > + /* load distance level parameter */
> > + dist_level = -1;
> > + c = strchr(emu_cmdline, ',');
> > + if (c) {
> > + c++;
> > + ret = kstrtoul(c, 10, &dist_level);
> > + if (ret < 0 || dist_level < LOCAL_DISTANCE ||
> > + dist_level * max_emu_nid > ULONG_MAX)
> > + dist_level = -1;
>
> If this happens, the user goofed and we should tell them, with a printk.
>
>
> [patch 2/2] adds the documentation for the feature and should be
> included in the same patch as the implementation.

Apologize, I'll send v2 of patch with printk() and documentation all-in-one
if it is necessary.

thanks,
Petr H

>
--
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/