Skip to content

net: speedup netns create/delete time

Eric Dumazet netdev 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest7 patches 13 repliesIn review
  2. v17 patches 3 repliesSuperseded

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7kobject: add kobject_uevent_net_broadcast()lib/kobject_uevent.c+53 -430 replies
2/7kobject: copy env blob in one golib/kobject_uevent.c+1 -70 replies
3/7kobject: factorize skb setup in kobject_uevent_net_broadcast()lib/kobject_uevent.c+19 -150 replies
4/7ipv6: addrlabel: per netns listinclude/net/netns/ipv6.h net/ipv6/addrlabel.c+35 -510 replies
5/7tcp: batch tcp_net_metrics_exitnet/ipv4/tcp_metrics.c+9 -50 replies
6/7ipv6: speedup ipv6 tunnels dismantlenet/ipv6/ip6_gre.c net/ipv6/ip6_tunnel.c net/ipv6/ip6_vti.c +1 more+36 -240 replies
7/7ipv4: speedup ipv6 tunnels dismantleinclude/net/ip_tunnels.h net/ipv4/ip_gre.c net/ipv4/ip_tunnel.c +2 more+26 -250 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH v2 net-next 0/7] net: speedup netns create/delete time

When rate of netns creation/deletion is high enough, we observe softlockups in cleanup_net() caused by huge list of netns and way too many rcu_barrier() calls.

This patch series does some optimizations in kobject, and add batching to tunnels so that netns dismantles are less costly.

IPv6 addrlabels also get a per netns list, and tcp_metrics also benefit from batch flushing.

This gives me one order of magnitude gain. (~50 ms -> ~5 ms for one netns create/delete pair)

Tested:

for i in seq 1 40
do
(for j in seq 1 100 ; do unshare -n /bin/true >/dev/null ; done) &
done
wait ; grep net_namespace /proc/slabinfo

Before patch series :

$ time ./add_del_unshare.sh
net_namespace        116    258   5504    1    2 : tunables    8    4    0 : slabdata    116    258      0

real 3m24.910s
user 0m0.747s
sys 0m43.162s

After :

$ time ./add_del_unshare.sh
net_namespace        135    291   5504    1    2 : tunables    8    4    0 : slabdata    135    291      0

real 0m22.117s
user 0m0.728s
sys 0m35.328s

Eric Dumazet (7):
kobject: add kobject_uevent_net_broadcast()
kobject: copy env blob in one go
kobject: factorize skb setup in kobject_uevent_net_broadcast()
ipv6: addrlabel: per netns list
tcp: batch tcp_net_metrics_exit
ipv6: speedup ipv6 tunnels dismantle
ipv4: speedup ipv6 tunnels dismantle

 include/net/ip_tunnels.h |  3 +-
 include/net/netns/ipv6.h |  5 +++
 lib/kobject_uevent.c     | 94 ++++++++++++++++++++++++++----------------------
 net/ipv4/ip_gre.c        | 22 +++++-------
 net/ipv4/ip_tunnel.c     | 12 +++++--
 net/ipv4/ip_vti.c        |  7 ++--
 net/ipv4/ipip.c          |  7 ++--
 net/ipv4/tcp_metrics.c   | 14 +++++---
 net/ipv6/addrlabel.c     | 81 ++++++++++++++++-------------------------
 net/ipv6/ip6_gre.c       |  8 +++--
 net/ipv6/ip6_tunnel.c    | 20 ++++++-----
 net/ipv6/ip6_vti.c       | 23 +++++++-----
 net/ipv6/sit.c           |  9 +++--
 13 files changed, 157 insertions(+), 148 deletions(-)
Signature · 1 line
2.14.1.690.gbb1197296e-goog