Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU (v3)

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Eric Dumazet <dada1@...>
Cc: David Miller <davem@...>, <shemminger@...>, <kaber@...>, <jeff.chua.linux@...>, <paulus@...>, <mingo@...>, <torvalds@...>, <laijs@...>, <jengelh@...>, <r000n@...>, <linux-kernel@...>, <netfilter-devel@...>, <netdev@...>, <benh@...>
Date: Thursday, April 16, 2009 - 10:33 am

On Thu, Apr 16, 2009 at 08:26:58AM +0200, Eric Dumazet wrote:

To be honest, the per-CPU-locking approach looks pretty good to me for
this particular case.  That said, the problem you mention above does
have some straightforward solutions.

One solution to consider would be to do the call_rcu(), but to keep a
counter of the number of calls, perhaps something like the following:

	call_rcu(...);
	if (++count > 50) {
		synchronize_rcu();
		count = 0;
	}

Of course, you might (or might not) need to atomically increment count,
and you of course would want to replace the "50" with some symbolic
constant, or perhaps even a variable whose value might be determined by
the size of the object and/or the amount of memory available.

Would this help?


Again, the per-CPU-locking approach looks good to me, as well.

But if it turns out that we really do need an RCU implementation with
really short grace periods (tens of microseconds typical latency on
mid-range multiprocessors, those with SGI Altix systems would suffer
a bit more), then it can be done.  It would need to be yet another
implementation of RCU for the following reasons:

o	High update-side overhead (broadcast IPIs via
	smp_call_function().  This is not a problem in this case,
	but would be a showstopper for (say) dcache.  I don't know
	of any way of fixing this.

o	Defeats power-conservation measures by waking up every CPU
	at every grace period.	(Might be fixable, for example, by using
	the same dyntick tricks used by preemptable and hierarchical RCU.
	But not recommended for first implementation.)

o	Poor update-side scalability.  (Definitely fixable, but the
	fix should be to the underlying smp_call_function() primitives.)

o	No ability to share grace periods among concurrent
	synchronize_rcu() primitves.  (Definitely fixable, but not
	recommended until needed.  Unlikely to be needed -- after all,
	if your grace period completes in 10 microseconds, just how many
	concurrent updates do you expect there to be???)

o	No call_rcu() style primtive.  (Definitely fixable, but not
	recommended until needed.  Besides, if the grace period only
	takes a few tens of microseconds, why exactly do you need an
	asynchronous interface?

If this is needed, one good starting point would be Mathieu Desnoyers's
user-level RCU primitive.  The main change would be replacing the POSIX
signals with smp_call_function().

Yet again, I don't see a real problem with the per-CPU locking approach
in this case, but anything to prevent Dave Miller from having to suffer
the pain of hashed locks!  (Can't say that I have ever used hashed locks
myself, but I could imagine that they might impose cache-thrashing and
deadlock issues.)

							Thanx, Paul
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: iptables very slow after commit 784544739a25c30637397ace..., Paul E. McKenney, (Sat Apr 11, 12:15 am)
Re: iptables very slow after commit 784544739a25c30637397ace..., Stephen Hemminger, (Sun Apr 12, 12:06 pm)
Re: iptables very slow after commit 784544739a25c30637397ace..., Stephen Hemminger, (Sat Apr 11, 11:50 am)
Re: iptables very slow after commit 784544739a25c30637397ace..., Paul E. McKenney, (Mon Apr 13, 12:04 am)
[PATCH] netfilter: use per-cpu spinlock rather than RCU, Stephen Hemminger, (Mon Apr 13, 12:53 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU, Patrick McHardy, (Tue Apr 14, 8:27 am)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU, Stephen Hemminger, (Tue Apr 14, 10:45 am)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU, Stephen Hemminger, (Tue Apr 14, 1:19 pm)
[PATCH] netfilter: use per-cpu spinlock rather than RCU (v2), Stephen Hemminger, (Tue Apr 14, 2:17 pm)
[PATCH] netfilter: use per-cpu spinlock rather than RCU (v3), Stephen Hemminger, (Tue Apr 14, 5:13 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Stephen Hemminger, (Wed Apr 15, 4:55 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Paul E. McKenney, (Thu Apr 16, 10:33 am)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Stephen Hemminger, (Wed Apr 15, 8:01 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Paul E. McKenney, (Sat Apr 18, 10:14 am)
[PATCH] netfilter: use per-cpu recursive lock (v10), Stephen Hemminger, (Mon Apr 20, 1:34 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Eric Dumazet, (Mon Apr 20, 2:25 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Paul Mackerras, (Mon Apr 20, 5:23 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Paul E. McKenney, (Mon Apr 20, 5:58 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Paul Mackerras, (Mon Apr 20, 6:41 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Paul E. McKenney, (Mon Apr 20, 7:44 pm)
[PATCH] netfilter: use per-cpu recursive lock (v11), Stephen Hemminger, (Mon Apr 20, 7:01 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Linus Torvalds, (Tue Apr 21, 12:13 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Paul E. McKenney, (Tue Apr 21, 2:34 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Linus Torvalds, (Tue Apr 21, 4:14 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Stephen Hemminger, (Tue Apr 21, 2:15 pm)
[PATCH] netfilter: use per-cpu recursive lock (v13), Stephen Hemminger, (Tue Apr 21, 5:39 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v13), Linus Torvalds, (Wed Apr 22, 11:32 am)
[PATCH] netfilter: use per-CPU recursive lock {XIV}, Stephen Hemminger, (Fri Apr 24, 12:09 am)
Re: [PATCH] netfilter: use per-CPU recursive lock {XIV}, Eric Dumazet, (Fri Apr 24, 12:58 am)
Re: [PATCH] netfilter: use per-CPU recursive lock {XIV}, Stephen Hemminger, (Fri Apr 24, 12:18 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XIV}, Jarek Poplawski, (Fri Apr 24, 4:43 pm)
[PATCH] netfilter: iptables no lockdep is needed.., Stephen Hemminger, (Sat Apr 25, 4:30 pm)
[PATCH] netfilter: use per-CPU recursive lock {XV}, Eric Dumazet, (Sun Apr 26, 2:24 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XV}, Mathieu Desnoyers, (Sun Apr 26, 3:31 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XV}, Eric Dumazet, (Sun Apr 26, 4:55 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XV}, Mathieu Desnoyers, (Sun Apr 26, 5:39 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XV}, Mathieu Desnoyers, (Sun Apr 26, 2:56 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XV}, Stephen Hemminger, (Sun Apr 26, 5:57 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XV}, Peter Zijlstra, (Mon Apr 27, 1:44 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Stephen Hemminger, (Mon Apr 27, 2:30 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Ingo Molnar, (Mon Apr 27, 2:54 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Stephen Hemminger, (Mon Apr 27, 3:06 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Mon Apr 27, 3:46 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Jan Engelhardt, (Tue Apr 28, 3:42 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Evgeniy Polyakov, (Mon Apr 27, 4:36 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Mon Apr 27, 4:58 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Stephen Hemminger, (Mon Apr 27, 5:40 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Mon Apr 27, 6:24 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Mon Apr 27, 7:01 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Mon Apr 27, 7:32 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Peter Zijlstra, (Tue Apr 28, 3:41 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Paul E. McKenney, (Tue Apr 28, 10:22 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Mon Apr 27, 7:03 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Eric Dumazet, (Tue Apr 28, 2:58 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Tue Apr 28, 11:09 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, David Miller, (Tue Apr 28, 7:53 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Ingo Molnar, (Tue Apr 28, 8:40 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, David Miller, (Tue Apr 28, 9:43 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Paul E. McKenney, (Tue Apr 28, 11:42 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Christoph Lameter, (Tue Apr 28, 1:35 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Mathieu Desnoyers, (Tue Apr 28, 9:52 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, David Miller, (Tue Apr 28, 10:37 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Mathieu Desnoyers, (Tue Apr 28, 10:49 am)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, David Miller, (Tue Apr 28, 11:00 am)
[PATCH] netfilter: revised locking for x_tables, Stephen Hemminger, (Tue Apr 28, 12:24 pm)
Re: [PATCH] netfilter: revised locking for x_tables, Linus Torvalds, (Tue Apr 28, 12:50 pm)
Re: [PATCH] netfilter: revised locking for x_tables, Linus Torvalds, (Tue Apr 28, 12:55 pm)
Re: [PATCH] netfilter: revised locking for x_tables, David Miller, (Wed Apr 29, 1:37 am)
[PATCH] netfilter: use likely() in xt_info_rdlock_bh(), Eric Dumazet, (Fri May 1, 4:38 am)
Re: [PATCH] netfilter: revised locking for x_tables, Jeff Chua, (Wed Apr 29, 11:26 pm)
Re: [PATCH] netfilter: revised locking for x_tables, David Miller, (Wed Apr 29, 11:31 pm)
Re: [PATCH] netfilter: use per-CPU r**ursive lock {XV}, Linus Torvalds, (Mon Apr 27, 3:48 pm)
Re: [PATCH] netfilter: use per-CPU recursive lock {XV}, Mathieu Desnoyers, (Sun Apr 26, 6:32 pm)
Re: [PATCH] netfilter: iptables no lockdep is needed.., Jarek Poplawski, (Sun Apr 26, 4:18 am)
Re: [PATCH] netfilter: use per-CPU recursive lock {XIV}, Patrick McHardy, (Fri Apr 24, 11:33 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v13), Eric Dumazet, (Wed Apr 22, 10:57 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v13), Paul E. McKenney, (Wed Apr 22, 12:17 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Stephen Hemminger, (Tue Apr 21, 5:04 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Eric Dumazet, (Tue Apr 21, 3:46 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Eric Dumazet, (Wed Apr 22, 4:53 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Linus Torvalds, (Wed Apr 22, 11:19 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Eric Dumazet, (Wed Apr 22, 12:57 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Linus Torvalds, (Wed Apr 22, 1:18 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Jarek Poplawski, (Wed Apr 22, 4:46 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Jarek Poplawski, (Wed Apr 22, 6:13 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Jarek Poplawski, (Wed Apr 22, 7:39 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Stephen Hemminger, (Tue Apr 21, 12:43 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Linus Torvalds, (Tue Apr 21, 12:50 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Lai Jiangshan, (Tue Apr 21, 1:46 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Eric Dumazet, (Tue Apr 21, 12:59 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Paul E. McKenney, (Tue Apr 21, 12:37 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Lai Jiangshan, (Mon Apr 20, 11:41 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Eric Dumazet, (Mon Apr 20, 11:56 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Lai Jiangshan, (Tue Apr 21, 1:34 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Lai Jiangshan, (Tue Apr 21, 1:22 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Stephen Hemminger, (Tue Apr 21, 1:45 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Lai Jiangshan, (Tue Apr 21, 2:52 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Evgeniy Polyakov, (Tue Apr 21, 4:16 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Eric Dumazet, (Tue Apr 21, 4:55 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Lai Jiangshan, (Tue Apr 21, 5:34 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Evgeniy Polyakov, (Tue Apr 21, 5:22 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Lai Jiangshan, (Tue Apr 21, 4:42 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), David Miller, (Tue Apr 21, 4:49 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v11), Stephen Hemminger, (Tue Apr 21, 12:15 am)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Stephen Hemminger, (Mon Apr 20, 4:42 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Paul E. McKenney, (Mon Apr 20, 5:05 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Stephen Hemminger, (Mon Apr 20, 4:32 pm)
Re: [PATCH] netfilter: use per-cpu recursive lock (v10), Paul E. McKenney, (Mon Apr 20, 2:21 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Paul E. McKenney, (Fri Apr 17, 12:33 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Stephen Hemminger, (Fri Apr 17, 12:50 am)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Paul E. McKenney, (Fri Apr 17, 11:00 am)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Mathieu Desnoyers, (Thu Apr 16, 10:19 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Mathieu Desnoyers, (Fri Apr 17, 1:44 am)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Paul E. McKenney, (Fri Apr 17, 10:51 am)
[PATCH] netfilter: per-cpu spin-lock with recursion (v0.8), Stephen Hemminger, (Thu Apr 16, 7:52 pm)
[PATCH] netfilter: use per-cpu spinlock and RCU (v5), Stephen Hemminger, (Wed Apr 15, 8:45 pm)
Re: [PATCH] netfilter: use per-cpu spinlock and RCU (v5), Patrick McHardy, (Thu Apr 16, 9:53 am)
Re: [PATCH] netfilter: use per-cpu spinlock and RCU (v5), Paul E. McKenney, (Thu Apr 16, 10:47 am)
[PATCH] netfilter: use per-cpu recursive spinlock (v6), Eric Dumazet, (Thu Apr 16, 12:10 pm)
Re: [PATCH] netfilter: use per-cpu recursive spinlock (v6), Paul E. McKenney, (Thu Apr 16, 1:58 pm)
Re: [PATCH] netfilter: use per-cpu recursive spinlock (v6), Paul E. McKenney, (Thu Apr 16, 8:13 pm)
[PATCH[] netfilter: use per-cpu reader-writer lock (v0.7), Stephen Hemminger, (Thu Apr 16, 4:49 pm)
Re: [PATCH] netfilter: use per-cpu recursive spinlock (v6), Linus Torvalds, (Thu Apr 16, 12:37 pm)
Re: [PATCH] netfilter: use per-cpu recursive spinlock (v6), Patrick McHardy, (Thu Apr 16, 12:59 pm)
[PATCH] netfilter: use per-cpu rwlock rather than RCU (v4), Stephen Hemminger, (Wed Apr 15, 5:57 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Stephen Hemminger, (Wed Apr 15, 12:31 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU ..., Stephen Hemminger, (Tue Apr 14, 5:11 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU, Stephen Hemminger, (Mon Apr 13, 7:20 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU, Martin Josefsson, (Mon Apr 13, 3:06 pm)
Re: [PATCH] netfilter: use per-cpu spinlock rather than RCU, Stephen Hemminger, (Mon Apr 13, 2:11 pm)
Re: iptables very slow after commit 784544739a25c30637397ace..., Stephen Hemminger, (Sat Apr 11, 11:05 am)
Re: iptables very slow after commit 784544739a25c30637397ace..., Stephen Hemminger, (Sat Apr 11, 11:07 am)
Re: iptables very slow after commit 784544739a25c30637397ace..., Arkadiusz Miskiewicz, (Sat Apr 11, 2:32 pm)