From: "Li,Rongqing" <lirongqing@baidu.com>
To: Valentin Schneider <vschneid@redhat.com>,
"mingo@redhat.com" <mingo@redhat.com>,
"peterz@infradead.org" <peterz@infradead.org>,
"juri.lelli@redhat.com" <juri.lelli@redhat.com>,
"vincent.guittot@linaro.org" <vincent.guittot@linaro.org>,
"dietmar.eggemann@arm.com" <dietmar.eggemann@arm.com>,
"rostedt@goodmis.org" <rostedt@goodmis.org>,
"bsegall@google.com" <bsegall@google.com>,
"mgorman@suse.de" <mgorman@suse.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: Re: [PATCH] sched/fair: Optimize CPU iteration using for_each_cpu_and[not]
Date: Thu, 21 Aug 2025 12:19:04 +0000 [thread overview]
Message-ID: <d8da7d88bf91470cb1bc90630d6a7aff@baidu.com> (raw)
> On 15/08/25 09:15, lirongqing wrote:
> > From: Li RongQing <lirongqing@baidu.com>
> >
> > Replace open-coded CPU iteration patterns with more efficient
> > for_each_cpu_and() and for_each_cpu_andnot() macros in three locations.
> >
> > This change both simplifies the code and provides minor performance
> > improvements by using the more specialized iteration macros.
> >
>
> TBF I'm not sure it does improve anything for the SMT cases considering we
> don't see much more than SMT8.
>
I did the blow simple test on 128 cpu, smt 2 machine, and result shows for_each_cpu_andnot is better :
for_each_cpu + if() vs for_each_cpu_andnot()
5026373 vs 3398283
4034229 vs 2711302
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/cpumask.h>
#include <linux/sched/clock.h>
static int test_init(void)
{
int cpu, sibling;
int i = 0;
int loop = 1000;
u64 now;
now = local_clock();
while (loop--) {
for (cpu = 0; cpu < 128; cpu++) {
for_each_cpu(sibling, cpu_smt_mask(cpu)) {
if (cpu == sibling)
continue;
i++;
}
}
}
printk("%lld %d", local_clock() - now);
i =0;
loop = 1000;
now = local_clock();
while (loop--) {
for (cpu = 0; cpu < 128; cpu++) {
for_each_cpu_andnot(sibling, cpu_smt_mask(cpu), cpumask_of(cpu)) {
i++;
}
}
}
printk("%lld %d", local_clock() - now);
return -1;
}
module_init(livepatch_init);
MODULE_LICENSE("GPL");
MODULE_INFO(livepatch, "Y");
Thanks
-Li
> The task_numa_find_cpu() one I do agree makes things better.
>
> > Signed-off-by: Li RongQing <lirongqing@baidu.com>
>
> Reviewed-by: Valentin Schneider <vschneid@redhat.com>
reply other threads:[~2025-08-21 12:19 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d8da7d88bf91470cb1bc90630d6a7aff@baidu.com \
--to=lirongqing@baidu.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®