public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/7] lib/group_cpus: rework grp_spread_init_one() and make it O(1)
@ 2023-12-12  4:21 Yury Norov
  2023-12-12  4:21 ` [PATCH v3 1/7] cpumask: introduce for_each_cpu_and_from() Yury Norov
                   ` (6 more replies)
  0 siblings, 7 replies; 21+ messages in thread
From: Yury Norov @ 2023-12-12  4:21 UTC (permalink / raw)
  To: Andrew Morton, Thomas Gleixner, Ming Lei, linux-kernel
  Cc: Yury Norov, Andy Shevchenko, Rasmus Villemoes

grp_spread_init_one() implementation is sub-optimal because it
traverses bitmaps from the beginning, instead of picking from the
previous iteration.

Fix it and use find_bit API where appropriate. While here, optimize
cpumasks allocation and drop unneeded cpumask_empty() call.

---
v1: https://lore.kernel.org/all/ZW5MI3rKQueLM0Bz@yury-ThinkPad/T/
v2: https://lore.kernel.org/lkml/ZXKNVRu3AfvjaFhK@fedora/T/
v3:
 - swap patches #2 and #3 @ Ming Lei;
 - add patch #7, which simplifies the function further.


Yury Norov (7):
  cpumask: introduce for_each_cpu_and_from()
  lib/group_cpus: optimize inner loop in grp_spread_init_one()
  lib/group_cpus: relax atomicity requirement in grp_spread_init_one()
  lib/group_cpus: optimize outer loop in grp_spread_init_one()
  lib/cgroup_cpus.c: don't zero cpumasks in group_cpus_evenly() on
    allocation
  lib/group_cpus.c: drop unneeded cpumask_empty() call in
    __group_cpus_evenly()
  lib/group_cpus: simplify grp_spread_init_one() for more

 include/linux/cpumask.h | 11 ++++++++++
 include/linux/find.h    |  3 +++
 lib/group_cpus.c        | 47 +++++++++++++++++------------------------
 3 files changed, 33 insertions(+), 28 deletions(-)

-- 
2.40.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2023-12-25 18:03 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-12  4:21 [PATCH v3 0/7] lib/group_cpus: rework grp_spread_init_one() and make it O(1) Yury Norov
2023-12-12  4:21 ` [PATCH v3 1/7] cpumask: introduce for_each_cpu_and_from() Yury Norov
2023-12-12  4:21 ` [PATCH v3 2/7] lib/group_cpus: optimize inner loop in grp_spread_init_one() Yury Norov
2023-12-12  9:46   ` Ming Lei
2023-12-12 17:04     ` Yury Norov
2023-12-13  0:06       ` Ming Lei
2023-12-25 17:38         ` Yury Norov
2023-12-12  4:21 ` [PATCH v3 3/7] lib/group_cpus: relax atomicity requirement " Yury Norov
2023-12-12  9:50   ` Ming Lei
2023-12-12 16:52     ` Yury Norov
2023-12-13  0:14       ` Ming Lei
2023-12-13 17:03         ` Yury Norov
2023-12-14  0:43           ` Ming Lei
2023-12-12  4:21 ` [PATCH v3 4/7] lib/group_cpus: optimize outer loop " Yury Norov
2023-12-12  4:21 ` [PATCH v3 5/7] lib/cgroup_cpus: don't zero cpumasks in group_cpus_evenly() on allocation Yury Norov
2023-12-13  0:56   ` Ming Lei
2023-12-12  4:21 ` [PATCH v3 6/7] lib/group_cpus: drop unneeded cpumask_empty() call in __group_cpus_evenly() Yury Norov
2023-12-13  0:59   ` Ming Lei
2023-12-12  4:21 ` [PATCH v3 7/7] lib/group_cpus: simplify grp_spread_init_one() for more Yury Norov
2023-12-13  1:06   ` Ming Lei
2023-12-25 18:03     ` Yury Norov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox