RCU Archive on lore.kernel.org
 help / color / Atom feed
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: joel@joelfernandes.org, rcu@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel-team@fb.com,
	mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	fweisbec@gmail.com, oleg@redhat.com,
	Uladzislau Rezki <urezki@gmail.com>
Subject: Re: [PATCH tip/core/rcu 03/17] rcu/tree: Skip entry into the page allocator for PREEMPT_RT
Date: Mon, 6 Jul 2020 14:06:45 -0700
Message-ID: <20200706210645.GJ9247@paulmck-ThinkPad-P72> (raw)
In-Reply-To: <20200702201908.jfiacgvion6a4nmj@linutronix.de>

On Thu, Jul 02, 2020 at 10:19:08PM +0200, Sebastian Andrzej Siewior wrote:
> On 2020-07-02 09:48:26 [-0700], Paul E. McKenney wrote:
> > On Thu, Jul 02, 2020 at 04:12:16PM +0200, Sebastian Andrzej Siewior wrote:
> > > On 2020-06-30 11:35:34 [-0700], Paul E. McKenney wrote:
> > > > > This is not going to work together with the "wait context validator"
> > > > > (CONFIG_PROVE_RAW_LOCK_NESTING). As of -rc3 it should complain about
> > > > > printk() which is why it is still disabled by default.
> > > > 
> > > > Fixing that should be "interesting".  In particular, RCU CPU stall
> > > > warnings rely on the raw spin lock to reduce false positives due
> > > > to race conditions.  Some thought will be required here.
> > > 
> > > I don't get this part. Can you explain/give me an example where to look
> > > at?
> > 
> > Starting from the scheduler-clock interrupt's call into RCU,
> > we have rcu_sched_clock_irq() which calls rcu_pending() which
> > calls check_cpu_stall() which calls either print_cpu_stall() or
> > print_other_cpu_stall(), depending on whether the stall is happening on
> > the current CPU or on some other CPU, respectively.
> > 
> > Both of these last functions acquire the rcu_node structure's raw ->lock
> > and expect to do printk()s while holding it.
> 
> …
> > Thoughts?
> 
> Okay. So in the RT queue there is a printk() rewrite which fixes this
> kind of things. Upstream the printk() interface is still broken in this
> regard and therefore CONFIG_PROVE_RAW_LOCK_NESTING is disabled.
> [Earlier the workqueue would also trigger a warning but this has been
> fixed as of v5.8-rc1.]
> This was just me explaining why this bad, what debug function would
> report it and why it is not enabled by default.

Whew!!!  ;-)

> > > > > So assume that this is fixed and enabled then on !PREEMPT_RT it will
> > > > > complain that you have a raw_spinlock_t acquired (the one from patch
> > > > > 02/17) and attempt to acquire a spinlock_t in the memory allocator.
> > > > 
> > > > Given that the slab allocator doesn't acquire any locks until it gets
> > > > a fair way in, wouldn't it make sense to allow a "shallow" allocation
> > > > while a raw spinlock is held?  This would require yet another GFP_ flag,
> > > > but that won't make all that much of a difference in the total.  ;-)
> > > 
> > > That would be one way of dealing with. But we could go back to
> > > spinlock_t and keep the memory allocation even for RT as is. I don't see
> > > a downside of this. And we would worry about kfree_rcu() from real
> > > IRQ-off region once we get to it.
> > 
> > Once we get to it, your thought would be to do per-CPU queuing of
> > memory from IRQ-off kfree_rcu(), and have IRQ work or some such clean
> > up after it?  Or did you have some other trick in mind?
> 
> So for now I would very much like to revert the raw_spinlock_t back to
> the spinlock_t and add a migrate_disable() just avoid the tiny
> possible migration between obtaining the CPU-ptr and acquiring the lock
> (I think Joel was afraid of performance hit).

Performance is indeed a concern here.

> Should we get to a *real* use case where someone must invoke kfree_rcu()
> from a hard-IRQ-off region then we can think what makes sense. per-CPU
> queues and IRQ-work would be one way of dealing with it.

It looks like workqueues can also be used, at least in their current
form.  And timers.

Vlad, Joel, thoughts?

							Thanx, Paul

  reply index

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-24 20:12 [PATCH tip/core/rcu 0/17] kfree_rcu updates for v5.9 Paul E. McKenney
2020-06-24 20:12 ` [PATCH tip/core/rcu 01/17] rcu: Fix a kernel-doc warnings for "count" paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 02/17] rcu/tree: Keep kfree_rcu() awake during lock contention paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 03/17] rcu/tree: Skip entry into the page allocator for PREEMPT_RT paulmck
2020-06-30 16:45   ` Sebastian Andrzej Siewior
2020-06-30 18:35     ` Paul E. McKenney
2020-07-02 14:12       ` Sebastian Andrzej Siewior
2020-07-02 16:48         ` Paul E. McKenney
2020-07-02 20:19           ` Sebastian Andrzej Siewior
2020-07-06 21:06             ` Paul E. McKenney [this message]
2020-07-07 17:34               ` Uladzislau Rezki
2020-07-07 18:45                 ` Joel Fernandes
2020-07-08 18:48                   ` Uladzislau Rezki
2020-07-02 19:45         ` Uladzislau Rezki
2020-07-06 19:42           ` Joel Fernandes
2020-07-06 19:55             ` Uladzislau Rezki
2020-07-06 20:29               ` Joel Fernandes
2020-07-07  9:27                 ` Sebastian Andrzej Siewior
2020-07-15 13:38     ` Uladzislau Rezki
2020-07-15 14:16       ` Sebastian Andrzej Siewior
2020-07-15 14:20         ` Uladzislau Rezki
2020-06-24 20:12 ` [PATCH tip/core/rcu 04/17] rcu/tree: Repeat the monitor if any free channel is busy paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 05/17] rcu/tree: Make debug_objects logic independent of rcu_head paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 06/17] rcu/tree: Simplify KFREE_BULK_MAX_ENTR macro paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 07/17] rcu/tree: Move kfree_rcu_cpu locking/unlocking to separate functions paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 08/17] rcu/tree: Use static initializer for krc.lock paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 09/17] rcu/tree: cache specified number of objects paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 10/17] rcu/tree: Maintain separate array for vmalloc ptrs paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 11/17] rcu/tiny: support vmalloc in tiny-RCU paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 12/17] rcu: Rename *_kfree_callback/*_kfree_rcu_offset/kfree_call_* paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 13/17] mm/list_lru.c: Rename kvfree_rcu() to local variant paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 14/17] rcu: Introduce 2 arg kvfree_rcu() interface paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 15/17] rcu: Support reclaim for head-less object paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 16/17] rcu: Introduce single argument kvfree_rcu() interface paulmck
2020-06-24 20:12 ` [PATCH tip/core/rcu 17/17] lib/test_vmalloc.c: Add test cases for kvfree_rcu() paulmck

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=20200706210645.GJ9247@paulmck-ThinkPad-P72 \
    --to=paulmck@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=bigeasy@linutronix.de \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jiangshanlai@gmail.com \
    --cc=joel@joelfernandes.org \
    --cc=josh@joshtriplett.org \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.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

RCU Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/rcu/0 rcu/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 rcu rcu/ https://lore.kernel.org/rcu \
		rcu@vger.kernel.org
	public-inbox-index rcu

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.rcu


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git