rcu.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Uladzislau Rezki <urezki@gmail.com>,
	joel@joelfernandes.org, 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: Tue, 21 Apr 2020 19:05:56 +0200	[thread overview]
Message-ID: <20200421170556.lvgb6gtjivjbr7gl@linutronix.de> (raw)
In-Reply-To: <20200421154101.GN17661@paulmck-ThinkPad-P72>

On 2020-04-21 08:41:01 [-0700], Paul E. McKenney wrote:
> > Invoking queue_work() is not a problem locking wise. It does however
> > extend the length of the critical section (which is not yet needed).
> 
> I am guessing that by "which is not yet needed" you were meaning that
> it is not absolutely necessary to extend the length of the critical
> section.  Please correct me if my guess is wrong.

By changing the lock type you extend the atomic section from "only"
queue_work() (if invoked) to everything kfree_rcu() does plus
queue_work().

> In the meantime, plunging ahead...
> 
> One approach might be to move queue_work() and friends out of the critical
> section, but only enable interrupts between the two critical sections
> under CONFIG_PREEMPT_RT_FULL.  Would that be a reasonable approach?

Yes but why do we do this raw_spinlock_t here? It is not yet needed on
v5.6-RT as I *did* check. It also complicates the code for !RT but
nobody responded to that part but…

That said: the current memory allocation is the problem here. The
remaining part is fine. The part under the lock is small enough so it
should not cause the trouble if it invokes queue_work() which will
"only" enqueue the timer. 

Side question: Is there any real-life workloads that benefits from this?
I'm asking because rcuperf allocates the kfree_rcu() the pointer right
away. The chances are high that the pointer are fed from the same page.
SLUB's build_detached_freelist() scans the page of RCU's pointers to
ensure that they are in the same page and then slab_free() them in one
go. There is lookahead = 3 so it finds three different pages it stops
further scanning and does slab_free() with what it found so far.

Which means if your kfree_rcu() collects random pointer from the system,
they may belong to different pages (especially if they are part of
different "types").

> 							Thanx, Paul

Sebastian

  reply	other threads:[~2020-04-21 17:06 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
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 [this message]
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=20200421170556.lvgb6gtjivjbr7gl@linutronix.de \
    --to=bigeasy@linutronix.de \
    --cc=efault@gmx.de \
    --cc=jiangshanlai@gmail.com \
    --cc=joel@joelfernandes.org \
    --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).