From: Ming Lei <ming.lei@redhat.com>
To: Yury Norov <yury.norov@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Breno Leitao <leitao@debian.org>,
Nathan Chancellor <nathan@kernel.org>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Zi Yan <ziy@nvidia.com>,
ming.lei@redhat.com
Subject: Re: [PATCH 1/9] cpumask: introduce for_each_cpu_and_from()
Date: Mon, 22 Jan 2024 10:41:26 +0800 [thread overview]
Message-ID: <Za3V1pFXM+4UnoIM@fedora> (raw)
In-Reply-To: <Za11asdkTrKzrL8e@yury-ThinkPad>
On Sun, Jan 21, 2024 at 11:50:02AM -0800, Yury Norov wrote:
> On Sat, Jan 20, 2024 at 11:03:37AM +0800, Ming Lei wrote:
> > On Fri, Jan 19, 2024 at 06:50:45PM -0800, Yury Norov wrote:
> > > Similarly to for_each_cpu_and(), introduce a for_each_cpu_and_from(),
> > > which is handy when it's needed to traverse 2 cpumasks or bitmaps,
> > > starting from a given position.
> >
> > The new helper is useless, see
> >
> > https://lore.kernel.org/lkml/ZZNgDb6bzOscrNmk@fedora/
>
> Let's consider the following configuration.
> Step-by-step:
...
>
> # loop cpu match siblmsk nmsk irqmsk
> 0 outer 0 yes 1110 0001
> 1 inner 1 yes 0011 1100 0011
> 2 inner 2 no 0011 1100 0011
> 3 inner 3 no 0011 1100 0011
> 4 outer 2 yes 1000 0111
> 5 inner 3 yes 1100 0000 1111
>
> Your code works worse because it's a Schlemiel the Painter's algorithm.
> I mentioned it twice in the commit messages and at least 3 times in
> replies to your comments.
Does it really matter here in reality? Which kind of user visible improvements
can be observed?
I have mentioned several times, for control/management code path, we care
more on maintainability, correctness instead of efficiency.
You are _wasting_ resources in wrong place, if you are really interested in
optimization, please do in fast code path, such as, related and not not limited,
irq handling, io handling, memory allocation, ....
Unfortunately, your V5 still have obvious bug, and as you mentioned,
the patchset title is wrong too.
>
> Here I'll stop and will not reply to your emails, including the rest of
> that Friday's night mailbombing, unless you at least admit you're wrong
> in this case and for_each_cpu_and_from() is useful here.
It is easy to get same result without adding for_each_cpu_and_from(), see the
patch I sent:
https://lore.kernel.org/lkml/20240120065543.739203-1-ming.lei@redhat.com/
in which we needn't to update iterator variable inside loop, and fix
the bug in your patch 4 of v5, and it is still O(N). Meantime it is
simpler and easier to get proved.
Here your use of for_each_cpu_and_from() is tricky too, cause the
loop condition variable(part of iterator variable) of cpu mask is being updated
inside the loop. And we can get same result by cpumask_next_and()
without playing the trick.
>
> I'd also recommend you to learn more about atomic operations basics and
> revoke your NAK from the patch #3.
If you think my comment on the NAK is wrong, please reply on the comment
directly.
>
> Thanks,
> Yury
>
> PS: There's a typo in the series name, I meant that the series makes the
> function O(N) of course. But even that is overly optimistic. It's O(N*S),
> where S is the number of sibling groups. A couple more patches needed to
> make it a true O(N). Still, much better.
Either O(1) or O(N) isn't one big deal here, cause it is oneshot
slow code path, and nr_cpu_ids is not big enough in reality.
Even you can't make real O(N) because your patch 4 has logic
mistake, see my comment:
https://lore.kernel.org/lkml/ZatlggW%2F8SH6od9O@fedora/
Thanks,
Ming
next prev parent reply other threads:[~2024-01-22 2:41 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-20 2:50 [PATCH v5 0/9] lib/group_cpus: rework grp_spread_init_one() and make it O(1) Yury Norov
2024-01-20 2:50 ` [PATCH 1/9] cpumask: introduce for_each_cpu_and_from() Yury Norov
2024-01-20 3:03 ` Ming Lei
2024-01-21 19:50 ` Yury Norov
2024-01-22 2:41 ` Ming Lei [this message]
2024-01-20 2:50 ` [PATCH 2/9] lib/group_cpus: optimize inner loop in grp_spread_init_one() Yury Norov
2024-01-20 3:17 ` Ming Lei
2024-01-20 7:03 ` Ming Lei
2024-01-20 2:50 ` [PATCH 3/9] lib/group_cpus: relax atomicity requirement " Yury Norov
2024-01-20 2:50 ` [PATCH 4/9] lib/group_cpus: optimize outer loop " Yury Norov
2024-01-20 3:51 ` Ming Lei
2024-01-20 6:17 ` Ming Lei
2024-01-20 2:50 ` [PATCH 5/9] lib/group_cpus: don't zero cpumasks in group_cpus_evenly() on allocation Yury Norov
2024-01-20 2:50 ` [PATCH 6/9] lib/group_cpus: drop unneeded cpumask_empty() call in __group_cpus_evenly() Yury Norov
2024-01-20 2:50 ` [PATCH 7/9] cpumask: define cleanup function for cpumasks Yury Norov
2024-01-20 2:50 ` [PATCH 8/9] lib/group_cpus: rework group_cpus_evenly() Yury Norov
2024-01-20 2:50 ` [PATCH 9/9] lib/group_cpus: simplify group_cpus_evenly() for more Yury Norov
-- strict thread matches above, loose matches on Subject: below --
2023-12-28 20:09 [PATCH v4 0/9] lib/group_cpus: rework grp_spread_init_one() and make it O(1) Yury Norov
2023-12-28 20:09 ` [PATCH 1/9] cpumask: introduce for_each_cpu_and_from() Yury Norov
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=Za3V1pFXM+4UnoIM@fedora \
--to=ming.lei@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=leitao@debian.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=nathan@kernel.org \
--cc=tglx@linutronix.de \
--cc=yury.norov@gmail.com \
--cc=ziy@nvidia.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