diff options
author | Waiman Long <longman@redhat.com> | 2024-06-03 21:38:22 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2024-06-03 21:47:11 +0200 |
commit | 1805c1729f52edaa021288473b09f9c7f74fb1ca (patch) | |
tree | 7b3572a78be0e3af4df570c58d36f67bbd0c2c75 /kernel/cgroup | |
parent | cgroup/cpuset: Reduce the lock protecting CS_SCHED_LOAD_BALANCE (diff) | |
download | linux-1805c1729f52edaa021288473b09f9c7f74fb1ca.tar.xz linux-1805c1729f52edaa021288473b09f9c7f74fb1ca.zip |
cgroup/cpuset: Optimize isolated partition only generate_sched_domains() calls
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>
Diffstat (limited to 'kernel/cgroup')
-rw-r--r-- | kernel/cgroup/cpuset.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index 315f8cbd6d35..f9b97f65e204 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; |