From: Fan Du fan.du@intel.com
euleros inclusion category: feature feature: etmem bugzilla: https://gitee.com/openeuler/kernel/issues/I4OODH?from=project-issue CVE: NA
-------------------------------------------------
User space migration daemon could check /sys/bus/node/devices/nodeX/type for node type.
Software can interrogate node type for node memory type and distance to get desirable target node in migration.
grep -r . /sys/devices/system/node/*/type /sys/devices/system/node/node0/type:dram /sys/devices/system/node/node1/type:dram /sys/devices/system/node/node2/type:pmem /sys/devices/system/node/node3/type:pmem
Along with next patch which export `peer_node`, migration daemon could easily find the memory type of current node, and the target node in case of migration.
grep -r . /sys/devices/system/node/*/peer_node /sys/devices/system/node/node0/peer_node:2 /sys/devices/system/node/node1/peer_node:3 /sys/devices/system/node/node2/peer_node:0 /sys/devices/system/node/node3/peer_node:1
Signed-off-by: Fan Du fan.du@intel.com Signed-off-by: Fengguang Wu fengguang.wu@intel.com Signed-off-by: Kemeng Shi shikemeng@huawei.com Reviewed-by: louhongxiang louhongxiang@huawei.com Reviewed-by: Kefeng Wang wangkefeng.wang@huawei.com Signed-off-by: Zheng Zengkai zhengzengkai@huawei.com --- drivers/base/node.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/drivers/base/node.c b/drivers/base/node.c index fecfac25cf16..35c61165292a 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -549,6 +549,30 @@ static ssize_t node_read_distance(struct device *dev, } static DEVICE_ATTR(distance, 0444, node_read_distance, NULL);
+static ssize_t type_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int nid = dev->id; + char *type_str; + enum node_type type; + + type = get_node_type(nid); + switch (type) { + case NODE_TYPE_DRAM: + type_str = "dram\n"; + break; + case NODE_TYPE_PMEM: + type_str = "pmem\n"; + break; + default: + type_str = "unknown\n"; + break; + } + + return sprintf(buf, type_str); +} +static DEVICE_ATTR_RO(type); + static struct attribute *node_dev_attrs[] = { &dev_attr_cpumap.attr, &dev_attr_cpulist.attr, @@ -556,6 +580,7 @@ static struct attribute *node_dev_attrs[] = { &dev_attr_numastat.attr, &dev_attr_distance.attr, &dev_attr_vmstat.attr, + &dev_attr_type.attr, NULL }; ATTRIBUTE_GROUPS(node_dev);