All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joel Fernandes <joel@joelfernandes.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: linux-kernel@vger.kernel.org, Davidlohr Bueso <dave@stgolabs.net>,
	Ingo Molnar <mingo@redhat.com>,
	Josh Triplett <josh@joshtriplett.org>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	Marco Elver <elver@google.com>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	rcu@vger.kernel.org, Steven Rostedt <rostedt@goodmis.org>,
	"Uladzislau Rezki (Sony)" <urezki@gmail.com>
Subject: Re: [PATCH 6/7] rcutorture: Add support to get the number of wakeups of main GP kthread
Date: Thu, 18 Jun 2020 21:00:12 -0400	[thread overview]
Message-ID: <20200619010012.GG40119@google.com> (raw)
In-Reply-To: <20200619001244.GG2723@paulmck-ThinkPad-P72>

On Thu, Jun 18, 2020 at 05:12:44PM -0700, Paul E. McKenney wrote:
> On Thu, Jun 18, 2020 at 08:01:56PM -0400, Joel Fernandes wrote:
> > On Thu, Jun 18, 2020 at 03:40:58PM -0700, Paul E. McKenney wrote:
> > > On Thu, Jun 18, 2020 at 04:29:54PM -0400, Joel Fernandes (Google) wrote:
> > > > This is useful to check for any improvements or degradation related to
> > > > number of GP kthread wakeups during testing.
> > > > 
> > > > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
> > > 
> > > This was a good way to collect the data for your testing, but
> > > we can expect rcutorture to only do so much.  ;-)
> > 
> > np, I will push this one into a git tag for the next time I need it ;)
> 
> Sounds like a plan!

In case it is at all an option, I could put this as a statistic under
rcu_torture_stats_print(), that way it all is on the same line. But I take it
you are not too thrilled to have it for now.

thanks,

 - Joel



> 							Thanx, Paul
> 
> > thanks,
> > 
> >  - Joel
> > 
> > 
> > > 							Thanx, Paul
> > > 
> > > > ---
> > > >  kernel/rcu/Kconfig.debug |  1 +
> > > >  kernel/rcu/rcu.h         |  2 ++
> > > >  kernel/rcu/rcutorture.c  | 23 ++++++++++++++++++++++-
> > > >  kernel/rcu/tree.c        |  7 +++++++
> > > >  4 files changed, 32 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/kernel/rcu/Kconfig.debug b/kernel/rcu/Kconfig.debug
> > > > index 3cf6132a4bb9f..3323e3378af5a 100644
> > > > --- a/kernel/rcu/Kconfig.debug
> > > > +++ b/kernel/rcu/Kconfig.debug
> > > > @@ -50,6 +50,7 @@ config RCU_TORTURE_TEST
> > > >  	select TASKS_RCU
> > > >  	select TASKS_RUDE_RCU
> > > >  	select TASKS_TRACE_RCU
> > > > +	select SCHEDSTATS
> > > >  	default n
> > > >  	help
> > > >  	  This option provides a kernel module that runs torture tests
> > > > diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h
> > > > index cf66a3ccd7573..7e867e81d9738 100644
> > > > --- a/kernel/rcu/rcu.h
> > > > +++ b/kernel/rcu/rcu.h
> > > > @@ -511,6 +511,7 @@ srcu_batches_completed(struct srcu_struct *sp) { return 0; }
> > > >  static inline void rcu_force_quiescent_state(void) { }
> > > >  static inline void show_rcu_gp_kthreads(void) { }
> > > >  static inline int rcu_get_gp_kthreads_prio(void) { return 0; }
> > > > +static inline struct task_struct *rcu_get_main_gp_kthread(void) { return 0; }
> > > >  static inline void rcu_fwd_progress_check(unsigned long j) { }
> > > >  #else /* #ifdef CONFIG_TINY_RCU */
> > > >  bool rcu_dynticks_zero_in_eqs(int cpu, int *vp);
> > > > @@ -519,6 +520,7 @@ unsigned long rcu_exp_batches_completed(void);
> > > >  unsigned long srcu_batches_completed(struct srcu_struct *sp);
> > > >  void show_rcu_gp_kthreads(void);
> > > >  int rcu_get_gp_kthreads_prio(void);
> > > > +struct task_struct *rcu_get_main_gp_kthread(void);
> > > >  void rcu_fwd_progress_check(unsigned long j);
> > > >  void rcu_force_quiescent_state(void);
> > > >  extern struct workqueue_struct *rcu_gp_wq;
> > > > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > > > index d0d265304d147..959a1f84d6904 100644
> > > > --- a/kernel/rcu/rcutorture.c
> > > > +++ b/kernel/rcu/rcutorture.c
> > > > @@ -23,6 +23,7 @@
> > > >  #include <linux/rcupdate_wait.h>
> > > >  #include <linux/interrupt.h>
> > > >  #include <linux/sched/signal.h>
> > > > +#include <linux/sched/stat.h>
> > > >  #include <uapi/linux/sched/types.h>
> > > >  #include <linux/atomic.h>
> > > >  #include <linux/bitops.h>
> > > > @@ -460,9 +461,29 @@ static void rcu_sync_torture_init(void)
> > > >  	INIT_LIST_HEAD(&rcu_torture_removed);
> > > >  }
> > > >  
> > > > +unsigned long rcu_gp_nr_wakeups;
> > > > +
> > > > +static void rcu_flavor_init(void)
> > > > +{
> > > > +	rcu_sync_torture_init();
> > > > +
> > > > +	/* Make sure schedstat is enabled for GP thread wakeup count. */
> > > > +	force_schedstat_enabled();
> > > > +	rcu_gp_nr_wakeups = rcu_get_main_gp_kthread()->se.statistics.nr_wakeups;
> > > > +}
> > > > +
> > > > +static void rcu_flavor_cleanup(void)
> > > > +{
> > > > +	unsigned long now_nr = rcu_get_main_gp_kthread()->se.statistics.nr_wakeups;
> > > > +
> > > > +	pr_alert("End-test: Cleanup: Total GP-kthread wakeups: %lu\n",
> > > > +		now_nr - rcu_gp_nr_wakeups);
> > > > +}
> > > > +
> > > >  static struct rcu_torture_ops rcu_ops = {
> > > >  	.ttype		= RCU_FLAVOR,
> > > > -	.init		= rcu_sync_torture_init,
> > > > +	.init		= rcu_flavor_init,
> > > > +	.cleanup	= rcu_flavor_cleanup,
> > > >  	.readlock	= rcu_torture_read_lock,
> > > >  	.read_delay	= rcu_read_delay,
> > > >  	.readunlock	= rcu_torture_read_unlock,
> > > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> > > > index c3bae7a83d792..a3a175feb310a 100644
> > > > --- a/kernel/rcu/tree.c
> > > > +++ b/kernel/rcu/tree.c
> > > > @@ -175,6 +175,13 @@ int rcu_get_gp_kthreads_prio(void)
> > > >  }
> > > >  EXPORT_SYMBOL_GPL(rcu_get_gp_kthreads_prio);
> > > >  
> > > > +/* Retrieve RCU's main GP kthread task_struct */
> > > > +struct task_struct *rcu_get_main_gp_kthread(void)
> > > > +{
> > > > +	return rcu_state.gp_kthread;
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(rcu_get_main_gp_kthread);
> > > > +
> > > >  /*
> > > >   * Number of grace periods between delays, normalized by the duration of
> > > >   * the delay.  The longer the delay, the more the grace periods between
> > > > -- 
> > > > 2.27.0.111.gc72c7da667-goog
> > > > 

  reply	other threads:[~2020-06-19  1:00 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-18 20:29 [PATCH 1/7] rcu/segcblist: Prevent useless GP start if no CBs to accelerate Joel Fernandes (Google)
2020-06-18 20:29 ` [PATCH 2/7] rcu/trace: Add tracing for how segcb list changes Joel Fernandes (Google)
2020-06-18 22:16   ` Paul E. McKenney
2020-06-18 23:52     ` Joel Fernandes
2020-06-18 20:29 ` [PATCH 3/7] rcu/trace: Add name of the source for gp_seq Joel Fernandes (Google)
2020-06-18 22:19   ` Paul E. McKenney
2020-06-18 23:51     ` Joel Fernandes
2020-06-19  0:12       ` Paul E. McKenney
2020-06-19  0:56         ` Joel Fernandes
2020-06-19  1:08         ` Joel Fernandes
2020-06-19  0:01     ` Steven Rostedt
2020-06-19  1:01       ` Joel Fernandes
2020-06-18 20:29 ` [PATCH 4/7] rcu/trace: Print negative GP numbers correctly Joel Fernandes (Google)
2020-06-18 22:30   ` Paul E. McKenney
2020-06-18 20:29 ` [PATCH 5/7] rcu/trace: Use rsp's gp_seq in acceleration's rcu_grace_period tracepoint Joel Fernandes (Google)
2020-06-18 22:27   ` Paul E. McKenney
2020-06-18 23:54     ` Joel Fernandes
2020-06-18 20:29 ` [PATCH 6/7] rcutorture: Add support to get the number of wakeups of main GP kthread Joel Fernandes (Google)
2020-06-18 22:40   ` Paul E. McKenney
2020-06-19  0:01     ` Joel Fernandes
2020-06-19  0:12       ` Paul E. McKenney
2020-06-19  1:00         ` Joel Fernandes [this message]
2020-06-19  3:23           ` Paul E. McKenney
2020-06-18 20:29 ` [PATCH 7/7] rcutorture: Add number of GP information to reports Joel Fernandes (Google)
2020-06-18 23:27   ` Paul E. McKenney
2020-06-18 22:11 ` [PATCH 1/7] rcu/segcblist: Prevent useless GP start if no CBs to accelerate Paul E. McKenney
2020-06-18 23:09   ` Paul E. McKenney
2020-06-19  0:04     ` Joel Fernandes

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=20200619010012.GG40119@google.com \
    --to=joel@joelfernandes.org \
    --cc=dave@stgolabs.net \
    --cc=elver@google.com \
    --cc=jiangshanlai@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=urezki@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.