mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
mm/migrate: add sysfs interface to enable reclaim migration
Some method is obviously needed to enable reclaim-based migration. Just like traditional autonuma, there will be some workloads that will benefit like workloads with more "static" configurations where hot pages stay hot and cold pages stay cold. If pages come and go from the hot and cold sets, the benefits of this approach will be more limited. The benefits are truly workload-based and *not* hardware-based. We do not believe that there is a viable threshold where certain hardware configurations should have this mechanism enabled while others do not. To be conservative, earlier work defaulted to disable reclaim- based migration and did not include a mechanism to enable it. This proposes add a new sysfs file /sys/kernel/mm/numa/demotion_enabled as a method to enable it. We are open to any alternative that allows end users to enable this mechanism or disable it if workload harm is detected (just like traditional autonuma). Once this is enabled page demotion may move data to a NUMA node that does not fall into the cpuset of the allocating process. This could be construed to violate the guarantees of cpusets. However, since this is an opt-in mechanism, the assumption is that anyone enabling it is content to relax the guarantees. Link: https://lkml.kernel.org/r/20210721063926.3024591-9-ying.huang@intel.com Link: https://lkml.kernel.org/r/20210715055145.195411-10-ying.huang@intel.com Signed-off-by: Huang Ying <ying.huang@intel.com> Originally-by: Dave Hansen <dave.hansen@linux.intel.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Wei Xu <weixugc@google.com> Cc: Yang Shi <yang.shi@linux.alibaba.com> Cc: Zi Yan <ziy@nvidia.com> Cc: David Rientjes <rientjes@google.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: Greg Thelen <gthelen@google.com> Cc: Keith Busch <kbusch@kernel.org> Cc: Oscar Salvador <osalvador@suse.de> Cc: Yang Shi <shy828301@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3a235693d3
commit
20b51af15e
4 changed files with 92 additions and 2 deletions
|
@ -3021,3 +3021,64 @@ void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
|
|||
p += scnprintf(p, buffer + maxlen - p, ":%*pbl",
|
||||
nodemask_pr_args(&nodes));
|
||||
}
|
||||
|
||||
bool numa_demotion_enabled = false;
|
||||
|
||||
#ifdef CONFIG_SYSFS
|
||||
static ssize_t numa_demotion_enabled_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n",
|
||||
numa_demotion_enabled? "true" : "false");
|
||||
}
|
||||
|
||||
static ssize_t numa_demotion_enabled_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
if (!strncmp(buf, "true", 4) || !strncmp(buf, "1", 1))
|
||||
numa_demotion_enabled = true;
|
||||
else if (!strncmp(buf, "false", 5) || !strncmp(buf, "0", 1))
|
||||
numa_demotion_enabled = false;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static struct kobj_attribute numa_demotion_enabled_attr =
|
||||
__ATTR(demotion_enabled, 0644, numa_demotion_enabled_show,
|
||||
numa_demotion_enabled_store);
|
||||
|
||||
static struct attribute *numa_attrs[] = {
|
||||
&numa_demotion_enabled_attr.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct attribute_group numa_attr_group = {
|
||||
.attrs = numa_attrs,
|
||||
};
|
||||
|
||||
static int __init numa_init_sysfs(void)
|
||||
{
|
||||
int err;
|
||||
struct kobject *numa_kobj;
|
||||
|
||||
numa_kobj = kobject_create_and_add("numa", mm_kobj);
|
||||
if (!numa_kobj) {
|
||||
pr_err("failed to create numa kobject\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
err = sysfs_create_group(numa_kobj, &numa_attr_group);
|
||||
if (err) {
|
||||
pr_err("failed to register numa group\n");
|
||||
goto delete_obj;
|
||||
}
|
||||
return 0;
|
||||
|
||||
delete_obj:
|
||||
kobject_put(numa_kobj);
|
||||
return err;
|
||||
}
|
||||
subsys_initcall(numa_init_sysfs);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue