All of lore.kernel.org
 help / color / mirror / Atom feed
From: Uladzislau Rezki <urezki@gmail.com>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Uladzislau Rezki <urezki@gmail.com>,
	Joel Fernandes <joel@joelfernandes.org>,
	"Zhang, Qiang1" <qiang1.zhang@intel.com>,
	"Zhuo, Qiuxu" <qiuxu.zhuo@intel.com>, RCU <rcu@vger.kernel.org>,
	quic_neeraju@quicinc.com, Boqun Feng <boqun.feng@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Oleksiy Avramchenko <oleksiy.avramchenko@sony.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Frederic Weisbecker <frederic@kernel.org>
Subject: Re: [PATCH 1/1] Reduce synchronize_rcu() waiting time
Date: Thu, 30 Mar 2023 21:18:44 +0200	[thread overview]
Message-ID: <ZCXglNnT9EpeBf4t@pc636> (raw)
In-Reply-To: <f529af35-557a-4a19-b14d-295e88aace9c@paulmck-laptop>

On Thu, Mar 30, 2023 at 11:58:41AM -0700, Paul E. McKenney wrote:
> On Thu, Mar 30, 2023 at 05:43:15PM +0200, Uladzislau Rezki wrote:
> > On Thu, Mar 30, 2023 at 03:09:33PM +0000, Joel Fernandes wrote:
> > > On Tue, Mar 28, 2023 at 08:26:13AM -0700, Paul E. McKenney wrote:
> > > > On Mon, Mar 27, 2023 at 10:29:31PM -0400, Joel Fernandes wrote:
> > > > > Hello,
> > > > > 
> > > > > > On Mar 27, 2023, at 9:06 PM, Paul E. McKenney <paulmck@kernel.org> wrote:
> > > > > > 
> > > > > > On Mon, Mar 27, 2023 at 11:21:23AM +0000, Zhang, Qiang1 wrote:
> > > > > >>>> From: Uladzislau Rezki (Sony) <urezki@gmail.com>
> > > > > >>>> Sent: Tuesday, March 21, 2023 6:28 PM
> > > > > >>>> [...]
> > > > > >>>> Subject: [PATCH 1/1] Reduce synchronize_rcu() waiting time
> > > > > >>>> 
> > > > > >>>> A call to a synchronize_rcu() can be expensive from time point of view.
> > > > > >>>> Different workloads can be affected by this especially the ones which use this
> > > > > >>>> API in its time critical sections.
> > > > > >>>> 
> > > > > >>> 
> > > > > >>> This is interesting and meaningful research. ;-)
> > > > > >>> 
> > > > > >>>> For example in case of NOCB scenario the wakeme_after_rcu() callback
> > > > > >>>> invocation depends on where in a nocb-list it is located. Below is an example
> > > > > >>>> when it was the last out of ~3600 callbacks:
> > > > > >>> 
> > > > > >> 
> > > > > >> 
> > > > > >> 
> > > > > >> Can it be implemented separately as follows?  it seems that the code is simpler
> > > > > >> (only personal opinion)  😊.
> > > > > >> 
> > > > > >> But I didn't test whether this reduce synchronize_rcu() waiting time
> > > > > >> 
> > > > > >> +static void rcu_poll_wait_gp(struct rcu_tasks *rtp)
> > > > > >> +{
> > > > > >> +       unsigned long gp_snap;
> > > > > >> +
> > > > > >> +       gp_snap = start_poll_synchronize_rcu();
> > > > > >> +       while (!poll_state_synchronize_rcu(gp_snap))
> > > > > >> +               schedule_timeout_idle(1);
> > > > > > 
> > > > > > I could be wrong, but my guess is that the guys working with
> > > > > > battery-powered devices are not going to be very happy with this loop.
> > > > > > 
> > > > > > All those wakeups by all tasks waiting for a grace period end up
> > > > > > consuming a surprisingly large amount of energy.
> > > > > 
> > > > > Is that really the common case? On the general topic of wake-ups:
> > > > > Most of the time there should be only one
> > > > > task waiting synchronously on a GP to end. If that is
> > > > > true, then it feels like waking
> > > > > up nocb Kthreads which indirectly wake other threads is doing more work than usual?
> > > > 
> > > > A good question, and the number of outstanding synchronize_rcu()
> > > > calls will of course be limited by the number of tasks in the system.
> > > > But I myself have raised the ire of battery-powered embedded folks with
> > > > a rather small number of wakeups, so...
> > > 
> > > But unless I am missing something, even if there is single synchronize_rcu(),
> > > you have a flurry of potential wakeups right now, instead of the bare minimum
> > > I think. I have not measured how many wake ups, but I'd love to when I get
> > > time. Maybe Vlad has some numbers.
> > > 
> > I will measure and have a look at wake-ups. But, what we have for now is
> > if there are two callers of synchronize_rcu() on different CPUs, i guess
> > two nocb-kthreads have to handle it, thus two nocb-kthreads have to be
> > awaken to do the work. This patch needs only one wake-up to serve all
> > users.
> 
> One wakeup per synchronize_rcu(), right?
> 
The gp-kthread wake-ups only one work, in its turn a worker wake-ups all
registered users of synchronize_rcu() for which a gp was passed. How many
users of synchonize_rcu() awaken by one worker depends on how many were
registered before initiating a new GP by the gp-kthread.

> > Anyway, i will provide some data and analysis of it.
> 
> Looking forward to seeing it!
> 
Good. I will switch fully on it soon. I need to sort out some perf.
issues at work.

--
Uladzislau Rezki

  reply	other threads:[~2023-03-30 19:19 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-21 10:27 [PATCH 1/1] Reduce synchronize_rcu() waiting time Uladzislau Rezki (Sony)
2023-03-21 14:03 ` Zhuo, Qiuxu
2023-03-21 15:15   ` Uladzislau Rezki
2023-03-22  1:49     ` Zhuo, Qiuxu
2023-03-22  6:50       ` Uladzislau Rezki
2023-03-22 11:21         ` Zhuo, Qiuxu
2023-03-27 11:21     ` Zhang, Qiang1
2023-03-27 17:47       ` Uladzislau Rezki
2023-03-28  0:14         ` Zhang, Qiang1
2023-03-27 21:23       ` Joel Fernandes
2023-03-28  0:12         ` Zhang, Qiang1
2023-03-28  1:06       ` Paul E. McKenney
2023-03-28  1:32         ` Zhang, Qiang1
2023-03-28  1:59           ` Paul E. McKenney
2023-03-28  2:29         ` Joel Fernandes
2023-03-28 15:26           ` Paul E. McKenney
2023-03-28 22:14             ` Paul E. McKenney
2023-03-30 15:11               ` Joel Fernandes
2023-03-30 19:01                 ` Paul E. McKenney
2023-03-30 15:09             ` Joel Fernandes
2023-03-30 15:43               ` Uladzislau Rezki
2023-03-30 18:58                 ` Paul E. McKenney
2023-03-30 19:18                   ` Uladzislau Rezki [this message]
2023-03-30 21:16                     ` Paul E. McKenney
2023-03-31 10:55                       ` Uladzislau Rezki
2023-03-31 18:39                         ` Paul E. McKenney
2023-03-30 18:57               ` Paul E. McKenney
2023-03-27 21:48     ` Steven Rostedt
2023-03-27 21:50       ` Steven Rostedt
2023-03-28  1:28         ` Zhuo, Qiuxu

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=ZCXglNnT9EpeBf4t@pc636 \
    --to=urezki@gmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=frederic@kernel.org \
    --cc=joel@joelfernandes.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleksiy.avramchenko@sony.com \
    --cc=paulmck@kernel.org \
    --cc=qiang1.zhang@intel.com \
    --cc=qiuxu.zhuo@intel.com \
    --cc=quic_neeraju@quicinc.com \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    /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.