Hi Prateek.

I ran the series on 320 CPU power11 system today.
hackbench shows high regression across the different number of groups and
it is more severe at lower number of groups. I haven't run anything else yet.

I haven't taken a look at the patches yet. Post your talk today will try to
go through and see if i can spot something.

On 10/2/26 12:58 AM, K Prateek Nayak wrote:
Subsequent commits will add arch/ hooks to configure the sparsebitmask
(sbm) topology - number of sbm instance and the maximum CPUs that a
single instance can represent.

Introduce sbm_set_topology() that helps architectures configure the sbm
topology. Also add arch_sbm_cpu_instance_id() which will be used to map
CPUs to the sbm instances during init to keep CPUs on the same instance
on the same sbm leaf.

Individual arch/ users will be added one at a time in the subsequent
commits.

Signed-off-by: K Prateek Nayak <[email protected]>
---
  include/linux/sbm.h |  8 ++++++++
  lib/Makefile        |  2 +-
  lib/sbm.c           | 27 +++++++++++++++++++++++++++
  3 files changed, 36 insertions(+), 1 deletion(-)
  create mode 100644 include/linux/sbm.h
  create mode 100644 lib/sbm.c

diff --git a/include/linux/sbm.h b/include/linux/sbm.h
new file mode 100644
index 000000000000..adac12ed233a
--- /dev/null
+++ b/include/linux/sbm.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_SBM_H
+#define _LINUX_SBM_H
+
+int arch_sbm_cpu_instance_id(int cpu);
+void sbm_set_topology(int num_instances, int max_threads_per_instance);
+
+#endif /* _LINUX_SBM_H */
diff --git a/lib/Makefile b/lib/Makefile
index dfab958327c5..7776330f5b25 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -40,7 +40,7 @@ lib-y := ctype.o string.o vsprintf.o cmdline.o \
         is_single_threaded.o plist.o decompress.o kobject_uevent.o \
         earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
         nmi_backtrace.o win_minmax.o memcat_p.o \
-        buildid.o objpool.o iomem_copy.o sys_info.o
+        buildid.o objpool.o iomem_copy.o sys_info.o sbm.o
lib-$(CONFIG_UNION_FIND) += union_find.o
  lib-$(CONFIG_PRINTK) += dump_stack.o
diff --git a/lib/sbm.c b/lib/sbm.c
new file mode 100644
index 000000000000..82280e3306de
--- /dev/null
+++ b/lib/sbm.c
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <linux/sbm.h>
+#include <linux/init.h>
+#include <linux/printk.h>
+
+static int sbm_max_threads_per_instance = -1;
+static int sbm_num_instance = -1;
+
+/*
+ * In absence of an arch definition, consider all CPUs to
+ * belong to the same sbm instance.
+ */
+int __weak arch_sbm_cpu_instance_id(int cpu)
+{
+       return 0;
+}
+
+void __init sbm_set_topology(int num_instances, int max_threads_per_instance)
+{
+       sbm_max_threads_per_instance = max_threads_per_instance;
+       sbm_num_instance = num_instances;
+
+       pr_info("sbm topology set to %d instance(s) with a maximum of %d thread(s) 
per instance\n",
+               sbm_num_instance,
+               sbm_max_threads_per_instance);
+}

nit: Stray empty line at the end.

+



Reply via email to