Re: [PATCH] netfilter: use per-cpu recursive lock (v11)

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Eric Dumazet
Date: Wednesday, April 22, 2009 - 1:53 am

Ingo Molnar a écrit :

I agree with all this Ingo.



The netfilter case is real simple Ingo, (note I did not use "obvious" here ;) )

netfilter in 2.6.2[0-9] used :

CPU 1

sofirq handles one packet from a NIC

ipt_do_table() /* to handle INPUT table for example, or FORWARD */
read_lock_bh(&a_central_and_damn_rwlock)
... parse rules
    -> calling some netfilter sub-function
       re-entering network IP stack to send some packet (say a RST packet)
       ...
       ipt_do_table() /* to handle OUPUT table rules for example */
       read_lock_bh() ; /* WE RECURSE here, but once in a while (if ever) */


This is one of the case, but other can happens with virtual networks, tunnels, ...
and so on. (Stephen had some cases with KVM if I remember well)

If this could be done without recursion, I am pretty sure netfilter
and network guys would have done it. I found Linus reaction quite
shocking IMHO, considering hard work done by all people on this.

I was pleased by your locking schem, that was *very* interesting, even
if not yet ready.

1) We can discuss of how bad recursion is.

We know loopback_xmit() could be way faster if we could avoid queeing packet
to softirq handler.
(Remember you and I suggested this patch some months ago ? Please remember
David rejected this because of recursion and possibility to overflow stack)

So yes, people are aware of recursion problems.

2) We can discuss how bad rwlocks are

We did lot of work on last months to delete some of rwlocks we had in kernel.
UDP stack for example dont use them anymore.

We tried to delete them on x_tables, but we must take care of ipt_do_table() nesting,
that is legal on 2.6.30.
Maybe netfilter guys can work to avoid this nesting on 2.6.31, 
I dont know how hard it is, definitly not 2.6.30 material.

Solutions were discussed many times and Stephen provided 13 versions of the patch.
If this was that obvious, one or two iterations would have been OK.

3) About last patch (v13)
Stephen did not agreed with you (well... maybe after all ..),
he only submitted again a previous version.

With linux-2.6.2[0-9], "iptables -L" used to block all cpus from entering netfilter
because we did a write_lock_bh() on the central rwlock while folding counters.

On v13, we dont try to freeze whole x_table context, but cpu per cpu.
Thats a minor change against previous versions, and should not lead to strange
application behavior. Its so much scalable that we should accept this change.



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