| From 199b3b8134252a529fb72d7d0f9c5b7733bd008c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 3 Jun 2024 15:38:22 -0400 |
| Subject: cgroup/cpuset: Optimize isolated partition only |
| generate_sched_domains() calls |
| |
| From: Waiman Long <longman@redhat.com> |
| |
| [ Upstream commit 1805c1729f52edaa021288473b09f9c7f74fb1ca ] |
| |
| If only isolated partitions are being created underneath the cgroup root, |
| there will only be one sched domain with top_cpuset.effective_cpus. We can |
| skip the unnecessary sched domains scanning code and save some cycles. |
| |
| Signed-off-by: Waiman Long <longman@redhat.com> |
| Signed-off-by: Tejun Heo <tj@kernel.org> |
| Stable-dep-of: ccac8e8de99c ("cgroup/cpuset: Fix remote root partition creation problem") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/cgroup/cpuset.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c |
| index c12b9fdb22a4e..73ab45b04c000 100644 |
| --- a/kernel/cgroup/cpuset.c |
| +++ b/kernel/cgroup/cpuset.c |
| @@ -964,6 +964,7 @@ static int generate_sched_domains(cpumask_var_t **domains, |
| |
| /* Special case for the 99% of systems with one, full, sched domain */ |
| if (root_load_balance && !top_cpuset.nr_subparts) { |
| +single_root_domain: |
| ndoms = 1; |
| doms = alloc_sched_domains(ndoms); |
| if (!doms) |
| @@ -1022,6 +1023,13 @@ static int generate_sched_domains(cpumask_var_t **domains, |
| } |
| rcu_read_unlock(); |
| |
| + /* |
| + * If there are only isolated partitions underneath the cgroup root, |
| + * we can optimize out unneeded sched domains scanning. |
| + */ |
| + if (root_load_balance && (csn == 1)) |
| + goto single_root_domain; |
| + |
| for (i = 0; i < csn; i++) |
| csa[i]->pn = i; |
| ndoms = csn; |
| -- |
| 2.43.0 |
| |