[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260108154738.00000e47@huawei.com>
Date: Thu, 8 Jan 2026 15:47:38 +0000
From: Jonathan Cameron <jonathan.cameron@...wei.com>
To: Akinobu Mita <akinobu.mita@...il.com>
CC: <linux-cxl@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
<linux-mm@...ck.org>, <akpm@...ux-foundation.org>,
<axelrasmussen@...gle.com>, <yuanchu@...gle.com>, <weixugc@...gle.com>,
<hannes@...xchg.org>, <david@...nel.org>, <mhocko@...nel.org>,
<zhengqi.arch@...edance.com>, <shakeel.butt@...ux.dev>,
<lorenzo.stoakes@...cle.com>, <Liam.Howlett@...cle.com>, <vbabka@...e.cz>,
<rppt@...nel.org>, <surenb@...gle.com>, <bingjiao@...gle.com>
Subject: Re: [PATCH v3 1/3] mm: memory-tiers, numa_emu: enable to create
memory tiers using fake numa nodes
On Thu, 8 Jan 2026 19:15:33 +0900
Akinobu Mita <akinobu.mita@...il.com> wrote:
> This makes it possible to create memory tiers using fake numa nodes
> generated by numa emulation.
>
> The "numa_emulation.adistance=" kernel cmdline option allows you to set
> the abstract distance for each NUMA node.
>
> For example, you can create two fake nodes, each in a different memory
> tier by booting with "numa=fake=2 numa_emulation.adistance=576,704".
> Here, the abstract distances of node0 and node1 are set to 576 and 706,
> respectively.
>
> Each memory tier covers an abstract distance chunk size of 128. Thus,
> nodes with abstract distances between 512 and 639 are classified into the
> same memory tier, and nodes with abstract distances between 640 and 767
> are classified into the next slower memory tier.
>
> The abstract distance of fake nodes not specified in the parameter will
> be the default DRAM abstract distance of 576.
>
> Signed-off-by: Akinobu Mita <akinobu.mita@...il.com>
> ---
> v2:
> - fix the explanation about cmdline parameter in the commit log
A couple of comments on includes, with those resolved LGTM.
Reviewed-by: Jonathan Cameron <jonathan.cameron@...wei.com>
>
> mm/numa_emulation.c | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> diff --git a/mm/numa_emulation.c b/mm/numa_emulation.c
> index 703c8fa05048..a4266da21344 100644
> --- a/mm/numa_emulation.c
> +++ b/mm/numa_emulation.c
> @@ -6,6 +6,9 @@
> #include <linux/errno.h>
> #include <linux/topology.h>
> #include <linux/memblock.h>
> +#include <linux/memory-tiers.h>
> +#include <linux/module.h>
> +#include <linux/node.h>
I can't immediately spot why the new code needs node.h
Should also include
linux/notifier.h for the notifier_block definition.
> #include <linux/numa_memblks.h>
> #include <asm/numa.h>
> #include <acpi/acpi_numa.h>
> @@ -344,6 +347,27 @@ static int __init setup_emu2phys_nid(int *dfl_phys_nid)
> return max_emu_nid;
> }
>
> +static int adistance[MAX_NUMNODES];
> +module_param_array(adistance, int, NULL, 0400);
> +MODULE_PARM_DESC(adistance, "Abstract distance values for each NUMA node");
> +
> +static int emu_calculate_adistance(struct notifier_block *self,
> + unsigned long nid, void *data)
> +{
> + if (adistance[nid]) {
> + int *adist = data;
> +
> + *adist = adistance[nid];
> + return NOTIFY_STOP;
> + }
> + return NOTIFY_OK;
> +}
> +
> +static struct notifier_block emu_adist_nb = {
> + .notifier_call = emu_calculate_adistance,
> + .priority = INT_MIN,
> +};
> +
> /**
> * numa_emulation - Emulate NUMA nodes
> * @numa_meminfo: NUMA configuration to massage
> @@ -532,6 +556,8 @@ void __init numa_emulation(struct numa_meminfo *numa_meminfo, int numa_dist_cnt)
> }
> }
>
> + register_mt_adistance_algorithm(&emu_adist_nb);
> +
> /* free the copied physical distance table */
> memblock_free(phys_dist, phys_size);
> return;
Powered by blists - more mailing lists