From: ebiederm@xmission.com (Eric W. Biederman)
To: Julian Anastasov <ja@ssi.bg>
Cc: Simon Kirby <sim@hostway.ca>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
Florian Westphal <fw@strlen.de>,
Pablo Neira Ayuso <pablo@netfilter.org>
Subject: Re: net_ns cleanup / RCU overhead
Date: Fri, 29 Aug 2014 16:57:09 -0500 [thread overview]
Message-ID: <87ppfjj6x6.fsf@x220.int.ebiederm.org> (raw)
In-Reply-To: <alpine.LFD.2.11.1408290635530.1520@ja.home.ssi.bg> (Julian Anastasov's message of "Fri, 29 Aug 2014 06:57:55 +0300 (EEST)")
Julian Anastasov <ja@ssi.bg> writes:
> Hello,
>
> On Thu, 28 Aug 2014, Simon Kirby wrote:
>
>> I noticed that [kworker/u16:0]'s stack is often:
>>
>> [<ffffffff810942a6>] wait_rcu_gp+0x46/0x50
>> [<ffffffff8109607e>] synchronize_sched+0x2e/0x50
>> [<ffffffffa00385ac>] nf_nat_net_exit+0x2c/0x50 [nf_nat]
>
> I guess the problem is in nf_nat_net_exit,
> may be other nf exit handlers too. pernet-exit handlers
> should avoid synchronize_rcu and rcu_barrier.
> A RCU callback and rcu_barrier in module-exit is the way
> to go. cleanup_net includes rcu_barrier, so pernet-exit
> does not need such calls.
In principle I agree, however in this particular case it looks a bit
tricky because a separate hash table to track nat state per network
namespace.
At the same time all of the packets should be drained before
we get to nf_nat_net_exit so it doesn't look the synchronize_rcu
in nf_nat_exit is actually protecting anything.
Further calling a rcu delay function in net_exit methods largely
destroys the batched cleanup of network namespaces, so it is very
unpleasant.
Could someone who knows nf_nat_core.c better than I do look and
see if we can just remove the synchronize_rcu in nf_nat_exit?
>> [<ffffffff81720339>] ops_exit_list.isra.4+0x39/0x60
>> [<ffffffff817209e0>] cleanup_net+0xf0/0x1a0
>> [<ffffffff81062997>] process_one_work+0x157/0x440
>> [<ffffffff81063303>] worker_thread+0x63/0x520
>> [<ffffffff81068b96>] kthread+0xd6/0xf0
>> [<ffffffff818d412c>] ret_from_fork+0x7c/0xb0
>> [<ffffffffffffffff>] 0xffffffffffffffff
Eric
next prev parent reply other threads:[~2014-08-29 21:57 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-20 5:58 Simon Kirby
2014-08-28 19:24 ` Paul E. McKenney
2014-08-28 19:44 ` Simon Kirby
2014-08-28 20:33 ` Eric W. Biederman
2014-08-28 20:46 ` Paul E. McKenney
2014-08-29 0:40 ` Simon Kirby
2014-08-29 3:57 ` Julian Anastasov
2014-08-29 21:57 ` Eric W. Biederman [this message]
2014-08-29 23:52 ` Florian Westphal
2014-08-30 2:56 ` Paul E. McKenney
2014-08-30 8:20 ` Julian Anastasov
2014-08-30 2:52 ` Paul E. McKenney
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=87ppfjj6x6.fsf@x220.int.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=fw@strlen.de \
--cc=ja@ssi.bg \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=sim@hostway.ca \
/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
Powered by JetHome