summaryrefslogtreecommitdiff
path: root/kernel/cgroup/cpuset.c
diff options
context:
space:
mode:
authorNicolas Saenz Julienne <nsaenzju@redhat.com>2021-08-25 12:54:15 +0200
committerTejun Heo <tj@kernel.org>2021-08-25 06:51:51 -1000
commit9f72daf7edfa8f7e86ce8940d52266b5e931dcb0 (patch)
tree49bc69fcaf77100c04c256ddbece2120b87a6c2f /kernel/cgroup/cpuset.c
parentee9707e8593dfb9a375cf4793c3fd03d4142b463 (diff)
downloadlwn-9f72daf7edfa8f7e86ce8940d52266b5e931dcb0.tar.gz
lwn-9f72daf7edfa8f7e86ce8940d52266b5e931dcb0.zip
cgroup/cpuset: Avoid memory migration when nodemasks match
With the introduction of ee9707e8593d ("cgroup/cpuset: Enable memory migration for cpuset v2") attaching a process to a different cgroup will trigger a memory migration regardless of whether it's really needed. Memory migration is an expensive operation, so bypass it if the nodemasks passed to cpuset_migrate_mm() are equal. Note that we're not only avoiding the migration work itself, but also a call to lru_cache_disable(), which triggers and flushes an LRU drain work on every online CPU. Signed-off-by: Nicolas Saenz Julienne <nsaenzju@redhat.com> Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/cgroup/cpuset.c')
-rw-r--r--kernel/cgroup/cpuset.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index 44d234b0df5e..d497a65c4f04 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -1634,6 +1634,11 @@ static void cpuset_migrate_mm(struct mm_struct *mm, const nodemask_t *from,
{
struct cpuset_migrate_mm_work *mwork;
+ if (nodes_equal(*from, *to)) {
+ mmput(mm);
+ return;
+ }
+
mwork = kzalloc(sizeof(*mwork), GFP_KERNEL);
if (mwork) {
mwork->mm = mm;