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
next prev parent 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 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.