All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Julian Anastasov <ja@ssi.bg>, Simon Horman <horms@verge.net.au>,
	Eric Dumazet <eric.dumazet@gmail.com>,
	Ingo Molnar <mingo@redhat.com>,
	lvs-devel@vger.kernel.org, netdev@vger.kernel.org,
	netfilter-devel@vger.kernel.org, linux-kernel@vger.kernel.org,
	Pablo Neira Ayuso <pablo@netfilter.org>,
	Dipankar Sarma <dipankar@in.ibm.com>
Subject: Re: [PATCH v2 1/2] sched: Add cond_resched_rcu_lock() helper
Date: Fri, 3 May 2013 10:34:44 -0700	[thread overview]
Message-ID: <20130503173444.GH3780@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130503170447.GB30733@dyad.programming.kicks-ass.net>

On Fri, May 03, 2013 at 07:04:47PM +0200, Peter Zijlstra wrote:
> > The key point is that I don't understand why we cannot get the effect
> > we are looking for with the following in sched.h (or wherever):
> > 
> > static inline int cond_resched_rcu(void)
> > {
> > #if defined(CONFIG_DEBUG_ATOMIC_SLEEP) || !defined(CONFIG_PREEMPT_RCU)
> > 	rcu_read_unlock();
> > 	cond_resched();
> > 	rcu_read_lock();
> > #endif
> > }
> > 
> > This adds absolutely no overhead in non-debug builds of CONFIG_PREEMPT_RCU,
> > does the checking in debug builds, and allows voluntary preemption in
> > !CONFIG_PREEMPT_RCU builds.  CONFIG_PROVE_RCU builds will check for an
> > (illegal) outer rcu_read_lock() in CONFIG_PREEMPT_RCU builds, and you
> > will get "scheduling while atomic" in response to an outer rcu_read_lock()
> > in !CONFIG_PREEMPT_RCU builds.
> > 
> > It also seems to me a lot simpler.
> > 
> > Does this work, or am I still missing something?
> 
> It can do quite a number of superfluous rcu_read_unlock()/lock() pairs for
> voluntary preemption kernels?

This happens in only two cases:

1.	CONFIG_PREEMPT_RCU=n kernels.  But in this case, rcu_read_unlock()
	and rcu_read_lock() are free, at least for CONFIG_PROVE_LOCKING=n
	kernels.  And if you have CONFIG_PROVE_LOCKING=y, any contribution
	from rcu_read_unlock() and rcu_read_lock() will be in the noise.

2.	CONFIG_DEBUG_ATOMIC_SLEEP=y kernels -- but in this case, you
	-want- the debugging.

So either the overhead is non-existent, or you explicitly asked for the
resulting debugging.

In particular, CONFIG_PREEMPT_RCU=y kernels have an empty static inline
function, which is free -- unless CONFIG_DEBUG_ATOMIC_SLEEP=y, in which
case you again explicitly asked for the debugging.

So I do not believe that the extra rcu_read_unlock()/lock() pairs are a
problem in any of the possible combinations of configurations.

							Thanx, Paul


  reply	other threads:[~2013-05-03 17:34 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-30  2:52 [PATCH v2 0/2] sched: Add cond_resched_rcu_lock() helper Simon Horman
2013-04-30  2:52 ` [PATCH v2 1/2] " Simon Horman
2013-04-30  7:12   ` Julian Anastasov
2013-04-30  7:29     ` Simon Horman
2013-04-30  7:52       ` Julian Anastasov
2013-05-01  9:10         ` Peter Zijlstra
2013-05-01 12:46           ` Paul E. McKenney
2013-05-01 14:32             ` Paul E. McKenney
2013-05-02  7:27               ` Peter Zijlstra
2013-05-01 15:17             ` Peter Zijlstra
2013-05-01 15:29               ` Eric Dumazet
2013-05-01 15:59                 ` Peter Zijlstra
2013-05-01 16:02                 ` Paul E. McKenney
2013-05-01 16:57                   ` Peter Zijlstra
2013-05-01 17:30                     ` Paul E. McKenney
2013-05-01 14:22           ` Julian Anastasov
2013-05-01 15:55             ` Peter Zijlstra
2013-05-01 18:22               ` Julian Anastasov
2013-05-01 19:04                 ` Paul E. McKenney
2013-05-02  7:26                 ` Peter Zijlstra
2013-05-02 10:06                   ` Julian Anastasov
2013-05-02 15:54                   ` Julian Anastasov
2013-05-02 17:32                     ` Paul E. McKenney
2013-05-02 17:32                       ` Paul E. McKenney
2013-05-02 18:55                       ` Julian Anastasov
2013-05-02 19:24                         ` Julian Anastasov
2013-05-02 19:34                         ` Paul E. McKenney
2013-05-02 20:19                           ` Julian Anastasov
2013-05-02 22:31                             ` Paul E. McKenney
2013-05-03  7:52                               ` Julian Anastasov
2013-05-03 16:30                                 ` Paul E. McKenney
2013-05-03 17:04                                   ` Peter Zijlstra
2013-05-03 17:34                                     ` Paul E. McKenney [this message]
2013-05-03 18:09                                       ` Peter Zijlstra
2013-05-03 17:47                                   ` Julian Anastasov
2013-05-04  7:23                                   ` Julian Anastasov
2013-05-04 18:03                                     ` Paul E. McKenney
2013-04-30  2:52 ` [PATCH v2 2/2] ipvs: Use cond_resched_rcu_lock() helper when dumping connections Simon Horman

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=20130503173444.GH3780@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=dipankar@in.ibm.com \
    --cc=eric.dumazet@gmail.com \
    --cc=horms@verge.net.au \
    --cc=ja@ssi.bg \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lvs-devel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=pablo@netfilter.org \
    --cc=peterz@infradead.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.