All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <eric.dumazet@gmail.com>
To: Kirill Tkhai <ktkhai@virtuozzo.com>,
	davem@davemloft.net, yoshfuji@linux-ipv6.org,
	netdev@vger.kernel.org
Cc: Yuval Mintz <yuvalm@mellanox.com>
Subject: Re: [PATCH RESEND net-next] net: Do synchronize_rcu() in ip6mr_sk_done() only if this is needed
Date: Tue, 06 Mar 2018 08:50:21 -0800	[thread overview]
Message-ID: <1520355021.109662.22.camel@gmail.com> (raw)
In-Reply-To: <152035343583.28894.2225634076957704200.stgit@localhost.localdomain>

On Tue, 2018-03-06 at 19:24 +0300, Kirill Tkhai wrote:
> After unshare test kworker hangs for ages:
> 
>     $ while :; do unshare -n true; done &
> 
>     $ perf report <kworker>
>     -   88,82%     0,00%  kworker/u16:0  [kernel.vmlinux]  [k]
> cleanup_net
>          cleanup_net
>        - ops_exit_list.isra.9
>           - 85,68% igmp6_net_exit
>              - 53,31% sock_release
>                 - inet_release
>                    - 25,33% rawv6_close
>                       - ip6mr_sk_done
>                          + 23,38% synchronize_rcu
> 
> Keep in mind, this perf report shows the time a function was
> executing, and
> it does not show the time, it was sleeping. But it's easy to imagine,
> how
> much it is sleeping, if synchronize_rcu() execution takes the most
> time.
> Top shows the kworker R time is less then 1%.
> 
> This happen, because of in ip6mr_sk_done() we do too many
> synchronize_rcu(),
> even for the sockets, that are not referenced in mr_table, and which
> are not
> need it. So, the progress of kworker becomes very slow.
> 
> The patch introduces apparent solution, and it makes ip6mr_sk_done()
> to skip
> synchronize_rcu() for sockets, that are not need that. After the
> patch,
> kworker becomes able to warm the cpu up as expected.
> 
> Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
> ---
>  net/ipv6/ip6mr.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
> index 2a38f9de45d3..290a8d0d5eac 100644
> --- a/net/ipv6/ip6mr.c
> +++ b/net/ipv6/ip6mr.c
> @@ -1485,7 +1485,9 @@ int ip6mr_sk_done(struct sock *sk)
>  		}
>  	}
>  	rtnl_unlock();
> -	synchronize_rcu();
> +
> +	if (!err)
> +		synchronize_rcu();
>  


But... what is this synchronize_rcu() doing exactly ?

This was added in 8571ab479a6e1ef46ead5ebee567e128a422767c

("ip6mr: Make mroute_sk rcu-based")

Typically on a delete, the synchronize_rcu() would be needed before
freeing the deleted object.

But nowadays we have better way : SOCK_RCU_FREE

  reply	other threads:[~2018-03-06 16:50 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-06 16:24 [PATCH RESEND net-next] net: Do synchronize_rcu() in ip6mr_sk_done() only if this is needed Kirill Tkhai
2018-03-06 16:50 ` Eric Dumazet [this message]
2018-03-06 16:58   ` Eric Dumazet
2018-03-06 17:20     ` Eric Dumazet
2018-03-07  9:22   ` Kirill Tkhai
2018-03-07  9:32     ` Kirill Tkhai
2018-03-07 13:51       ` Yuval Mintz
2018-03-07 14:22         ` Eric Dumazet
2018-03-07 16:43           ` [PATCH net-next] ip6mr: remove synchronize_rcu() in favor of SOCK_RCU_FREE Eric Dumazet
2018-03-07 22:11             ` Kirill Tkhai
2018-03-07 23:14             ` David Miller

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=1520355021.109662.22.camel@gmail.com \
    --to=eric.dumazet@gmail.com \
    --cc=davem@davemloft.net \
    --cc=ktkhai@virtuozzo.com \
    --cc=netdev@vger.kernel.org \
    --cc=yoshfuji@linux-ipv6.org \
    --cc=yuvalm@mellanox.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
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.