[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250414060055.341516-4-boqun.feng@gmail.com>
Date: Sun, 13 Apr 2025 23:00:50 -0700
From: Boqun Feng <boqun.feng@...il.com>
To: Breno Leitao <leitao@...ian.org>,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Will Deacon <will@...nel.org>,
Waiman Long <longman@...hat.com>
Cc: aeh@...a.com,
linux-kernel@...r.kernel.org,
netdev@...r.kernel.org,
edumazet@...gle.com,
jhs@...atatu.com,
kernel-team@...a.com,
Erik Lundgren <elundgren@...a.com>,
"Paul E. McKenney" <paulmck@...nel.org>,
Frederic Weisbecker <frederic@...nel.org>,
Neeraj Upadhyay <neeraj.upadhyay@...nel.org>,
Joel Fernandes <joel@...lfernandes.org>,
Uladzislau Rezki <urezki@...il.com>,
rcu@...r.kernel.org,
Boqun Feng <boqun.feng@...il.com>
Subject: [RFC PATCH 3/8] shazptr: Add refscale test for wildcard
Add the refscale test for shazptr, which starts another shazptr critical
section inside an existing one to measure the reader side performance
when wildcard logic is triggered.
Signed-off-by: Boqun Feng <boqun.feng@...il.com>
---
kernel/rcu/refscale.c | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/kernel/rcu/refscale.c b/kernel/rcu/refscale.c
index 154520e4ee4c..fdbb4a2c91fe 100644
--- a/kernel/rcu/refscale.c
+++ b/kernel/rcu/refscale.c
@@ -928,6 +928,44 @@ static const struct ref_scale_ops shazptr_ops = {
.name = "shazptr"
};
+static void ref_shazptr_wc_read_section(const int nloops)
+{
+ int i;
+
+ for (i = nloops; i >= 0; i--) {
+ preempt_disable();
+ {
+ guard(shazptr)(ref_shazptr_read_section);
+ /* Trigger wildcard logic */
+ guard(shazptr)(ref_shazptr_wc_read_section);
+ }
+ preempt_enable();
+ }
+}
+
+static void ref_shazptr_wc_delay_section(const int nloops, const int udl, const int ndl)
+{
+ int i;
+
+ for (i = nloops; i >= 0; i--) {
+ preempt_disable();
+ {
+ guard(shazptr)(ref_shazptr_delay_section);
+ /* Trigger wildcard logic */
+ guard(shazptr)(ref_shazptr_wc_delay_section);
+ un_delay(udl, ndl);
+ }
+ preempt_enable();
+ }
+}
+
+static const struct ref_scale_ops shazptr_wildcard_ops = {
+ .init = ref_shazptr_init,
+ .readsection = ref_shazptr_wc_read_section,
+ .delaysection = ref_shazptr_wc_delay_section,
+ .name = "shazptr_wildcard"
+};
+
static void rcu_scale_one_reader(void)
{
if (readdelay <= 0)
@@ -1235,7 +1273,7 @@ ref_scale_init(void)
&refcnt_ops, &rwlock_ops, &rwsem_ops, &lock_ops, &lock_irq_ops,
&acqrel_ops, &sched_clock_ops, &clock_ops, &jiffies_ops,
&typesafe_ref_ops, &typesafe_lock_ops, &typesafe_seqlock_ops,
- &shazptr_ops,
+ &shazptr_ops, &shazptr_wildcard_ops,
};
if (!torture_init_begin(scale_type, verbose))
--
2.47.1
Powered by blists - more mailing lists