diff options
author | Nicolas Saenz Julienne <nsaenzju@redhat.com> | 2021-08-25 12:54:15 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2021-08-25 06:51:51 -1000 |
commit | 9f72daf7edfa8f7e86ce8940d52266b5e931dcb0 (patch) | |
tree | 49bc69fcaf77100c04c256ddbece2120b87a6c2f /kernel/cgroup/cpuset.c | |
parent | ee9707e8593dfb9a375cf4793c3fd03d4142b463 (diff) | |
download | lwn-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.c | 5 |
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; |