rcu.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Joel Fernandes <joel@joelfernandes.org>
To: Uladzislau Rezki <urezki@gmail.com>
Cc: "Paul E. McKenney" <paulmck@kernel.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Steven Rostedt <rostedt@goodmis.org>,
	rcu@vger.kernel.org, Josh Triplett <josh@joshtriplett.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Mike Galbraith <efault@gmx.de>
Subject: Re: [PATCH 1/3] rcu: Use static initializer for krc.lock
Date: Mon, 20 Apr 2020 13:57:50 -0400	[thread overview]
Message-ID: <20200420175750.GA229870@google.com> (raw)
In-Reply-To: <20200420174019.GB12196@pc636>

On Mon, Apr 20, 2020 at 07:40:19PM +0200, Uladzislau Rezki wrote:
> On Mon, Apr 20, 2020 at 10:21:26AM -0700, Paul E. McKenney wrote:
[...]
> > > > > > > > > <snip>
> > > > > > > > > /**
> > > > > > > > >  * queue_work_on - queue work on specific cpu
> > > > > > > > >  * @cpu: CPU number to execute work on
> > > > > > > > >  * @wq: workqueue to use
> > > > > > > > >  * @work: work to queue
> > > > > > > > >  *
> > > > > > > > >  * We queue the work to a specific CPU, the caller must ensure it
> > > > > > > > >  * can't go away.
> > > > > > > > >  *
> > > > > > > > >  * Return: %false if @work was already on a queue, %true otherwise.
> > > > > > > > >  */
> > > > > > > > > <snip>
> > > > > > > > > 
> > > > > > > > > It says, how i see it, we should ensure it can not go away. So, if
> > > > > > > > > we drop the lock we should do like:
> > > > > > > > > 
> > > > > > > > > get_online_cpus();
> > > > > > > > > check a CPU is onlen;
> > > > > > > > > queue_work_on();
> > > > > > > > > put_online_cpus();
> > > > > > > > > 
> > > > > > > > > but i suspect we do not want to do it :)
> > > > > > > > 
> > > > > > > > Indeed, it might impose a few restrictions and a bit of overhead that
> > > > > > > > might not be welcome at some point in the future.  ;-)
> > > > > > > > 
> > > > > > > > On top of this there are potential load-balancing concerns.  By specifying
> > > > > > > > the CPU, you are limiting workqueue's and scheduler's ability to adjust to
> > > > > > > > any sudden changes in load.  Maybe not enough to matter in most cases, but
> > > > > > > > might be an issue if there is a sudden flood of  kfree_rcu() invocations.
> > > > > > > > 
> > > > > > > Agree. Let's keep it as it is now :)
> > > > > > 
> > > > > > I am not sure which "as it is now" you are referring to, but I suspect
> > > > > > that the -rt guys prefer two short interrupts-disabled regions to one
> > > > > > longer interrupts-disabled region.
> > > > > 
> > > > > I mean to run schedule_delayed_work() under spinlock.
> > > > 
> > > > Which is an interrupt-disabled spinlock, correct?
> > > > 
> > > To do it under holding the lock, currently it is spinlock, but it is
> > > going to be(if you agree :)) raw ones, which keeps IRQs disabled. I
> > > saw Joel sent out patches.
> > 
> > Then please move the schedule_delayed_work() and friends out from
> > under the spinlock.  Unless Sebastian has some reason why extending
> > an interrupts-disabled critical section (and thus degrading real-time
> > latency) is somehow OK in this case.
> > 
> Paul, if move outside of the lock we may introduce unneeded migration
> issues, plus it can introduce higher memory footprint(i have not tested).
> I have described it in more detail earlier in this mail thread. I do not
> think that waking up the work is an issue for RT from latency point of
> view. But let's ask Sebastian to confirm.

I was also a bit concerned about migration. If we moved it outside of lock,
then even on !PREEMPT_RT, we could be migrated before the work is
scheduled. Then we'd lose the benefit of executing the work on the same CPU
where it is queued. There's no migrate_disable() in non-PREEMPT_RT when I
recently checked as well :-\ (PeterZ mentioned that migrate_disable() is hard
to achieve on !PREEMPT_RT).

> Sebastian, do you think that placing a work on current CPU is an issue?
> If we do it under raw spinlock?

Yes, I am also curious if calling schedule_delayed_work can cause long
delays at all. Considering that workqueue code uses raw spinlocks as Mike
mentioned, I was under the impression that this code should not be causing
such issues, and the fact that it is called in many places from IRQ-disabled
sections as well.

Let us definitely double-check and discuss it more to be sure.

thanks,

 - Joel


  reply	other threads:[~2020-04-20 17:57 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-15 16:00 [PATCH 0/3] rcu: Static initializer + misc Sebastian Andrzej Siewior
2020-04-15 16:00 ` [PATCH 1/3] rcu: Use static initializer for krc.lock Sebastian Andrzej Siewior
2020-04-16 14:42   ` Joel Fernandes
2020-04-16 15:01     ` Uladzislau Rezki
2020-04-16 15:20       ` Sebastian Andrzej Siewior
2020-04-16 15:38         ` Uladzislau Rezki
2020-04-16 15:46           ` Sebastian Andrzej Siewior
2020-04-16 16:01             ` Uladzislau Rezki
2020-04-16 16:11               ` Sebastian Andrzej Siewior
2020-04-16 16:18                 ` Uladzislau Rezki
2020-04-16 16:33                   ` Sebastian Andrzej Siewior
2020-04-16 17:29                     ` Paul E. McKenney
2020-04-16 18:23                       ` Sebastian Andrzej Siewior
2020-04-16 18:29                         ` Paul E. McKenney
2020-04-16 18:43                           ` Joel Fernandes
2020-04-16 20:56                             ` Sebastian Andrzej Siewior
2020-04-16 21:04                               ` Joel Fernandes
2020-04-16 21:07                                 ` Sebastian Andrzej Siewior
2020-04-16 18:40                     ` Steven Rostedt
2020-04-16 18:53                       ` Joel Fernandes
2020-04-16 19:24                         ` Steven Rostedt
2020-04-16 20:41                           ` Joel Fernandes
2020-04-16 21:05                       ` Sebastian Andrzej Siewior
2020-04-16 17:28         ` Paul E. McKenney
2020-04-16 15:18     ` Sebastian Andrzej Siewior
2020-04-16 18:41       ` Joel Fernandes
2020-04-16 18:59         ` Joel Fernandes
2020-04-16 19:26           ` Steven Rostedt
2020-04-16 19:53             ` Paul E. McKenney
2020-04-16 20:05               ` Uladzislau Rezki
2020-04-16 20:25                 ` Paul E. McKenney
2020-04-16 21:02                   ` Joel Fernandes
2020-04-16 21:18                   ` Uladzislau Rezki
2020-04-16 21:26                     ` Uladzislau Rezki
2020-04-16 21:28                   ` Sebastian Andrzej Siewior
2020-04-16 20:36             ` Joel Fernandes
2020-04-16 21:00               ` Paul E. McKenney
2020-04-16 21:34                 ` Sebastian Andrzej Siewior
2020-04-17  3:05                   ` Joel Fernandes
2020-04-17  8:47                     ` Uladzislau Rezki
2020-04-17 15:04                     ` Sebastian Andrzej Siewior
2020-04-17 18:26                       ` Joel Fernandes
2020-04-17 18:54                         ` Paul E. McKenney
2020-04-18 12:37                           ` Uladzislau Rezki
2020-04-19 14:58                             ` Paul E. McKenney
2020-04-20  0:27                               ` Joel Fernandes
2020-04-20  1:17                                 ` Joel Fernandes
2020-04-20  1:44                                   ` Paul E. McKenney
2020-04-20 12:13                                     ` Uladzislau Rezki
2020-04-20 12:36                                       ` joel
2020-04-20 13:00                                         ` Uladzislau Rezki
2020-04-20 13:26                                           ` Paul E. McKenney
2020-04-20 16:08                                             ` Uladzislau Rezki
2020-04-20 16:25                                               ` Paul E. McKenney
2020-04-20 16:29                                                 ` Uladzislau Rezki
2020-04-20 16:46                                                   ` Paul E. McKenney
2020-04-20 16:59                                                     ` Uladzislau Rezki
2020-04-20 17:21                                                       ` Paul E. McKenney
2020-04-20 17:40                                                         ` Uladzislau Rezki
2020-04-20 17:57                                                           ` Joel Fernandes [this message]
2020-04-20 18:13                                                             ` Paul E. McKenney
2020-04-20 17:59                                                           ` Paul E. McKenney
2020-04-20 19:06                                                             ` Uladzislau Rezki
2020-04-20 20:17                                                               ` Uladzislau Rezki
2020-04-20 22:16                                                                 ` Paul E. McKenney
2020-04-21  1:22                                                                 ` Steven Rostedt
2020-04-21  5:18                                                                   ` Uladzislau Rezki
2020-04-21 13:30                                                                     ` Steven Rostedt
2020-04-21 13:45                                                                       ` Uladzislau Rezki
2020-04-21 13:39                                                           ` Sebastian Andrzej Siewior
2020-04-21 15:41                                                             ` Paul E. McKenney
2020-04-21 17:05                                                               ` Sebastian Andrzej Siewior
2020-04-21 18:09                                                                 ` Paul E. McKenney
2020-04-22 11:13                                                                   ` Sebastian Andrzej Siewior
2020-04-22 13:33                                                                     ` Paul E. McKenney
2020-04-22 15:46                                                                       ` Sebastian Andrzej Siewior
2020-04-22 16:19                                                                         ` Paul E. McKenney
2020-04-22 16:35                                                                           ` Paul E. McKenney
2020-04-20  3:02                                   ` Mike Galbraith
2020-04-20 12:30                                     ` joel
2020-04-17 16:11                     ` Uladzislau Rezki
2020-04-19 12:15                     ` Uladzislau Rezki
2020-04-15 16:00 ` [PATCH 2/3] rcu: Use consistent locking around kfree_rcu_drain_unlock() Sebastian Andrzej Siewior
2020-04-15 16:00 ` [PATCH 3/3] rcu: Avoid using xchg() in kfree_call_rcu_add_ptr_to_bulk() Sebastian Andrzej Siewior
2020-04-20 15:23   ` 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=20200420175750.GA229870@google.com \
    --to=joel@joelfernandes.org \
    --cc=bigeasy@linutronix.de \
    --cc=efault@gmx.de \
    --cc=jiangshanlai@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=paulmck@kernel.org \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).