From: Eric Dumazet <edumazet@google.com>
To: "David S . Miller" <davem@davemloft.net>
Cc: netdev <netdev@vger.kernel.org>, Florian Westphal <fw@strlen.de>,
Herbert Xu <herbert@gondor.apana.org.au>,
Thomas Graf <tgraf@suug.ch>,
Jesper Dangaard Brouer <brouer@redhat.com>,
Alexander Aring <alex.aring@gmail.com>,
Stefan Schmidt <stefan@osg.samsung.com>,
Kirill Tkhai <ktkhai@virtuozzo.com>,
Eric Dumazet <edumazet@google.com>,
Eric Dumazet <eric.dumazet@gmail.com>
Subject: [PATCH v2 net-next 00/12] inet: frags: bring rhashtables to IP defrag
Date: Fri, 30 Mar 2018 13:42:24 -0700 [thread overview]
Message-ID: <20180330204236.43675-1-edumazet@google.com> (raw)
IP defrag processing is one of the remaining problematic layer in linux.
It uses static hash tables of 1024 buckets, and up to 128 items per bucket.
A work queue is supposed to garbage collect items when host is under memory
pressure, and doing a hash rebuild, changing seed used in hash computations.
This work queue blocks softirqs for up to 25 ms when doing a hash rebuild,
occurring every 5 seconds if host is under fire.
Then there is the problem of sharing this hash table for all netns.
It is time to switch to rhashtables, and allocate one of them per netns
to speedup netns dismantle, since this is a critical metric these days.
Lookup is now using RCU, and 64bit hosts can now provision whatever amount
of memory needed to handle the expected workloads.
v2: Addressed Herbert and Kirill feedbacks
Eric Dumazet (12):
ipv6: frag: remove unused field
inet: frags: change inet_frags_init_net() return value
inet: frags: add a pointer to struct netns_frags
inet: frags: refactor ipv6_frag_init()
inet: frags: refactor lowpan_net_frag_init()
inet: frags: refactor ipfrag_init()
rhashtable: add schedule points
inet: frags: use rhashtables for reassembly units
inet: frags: remove some helpers
inet: frags: get rif of inet_frag_evicting()
inet: frags: remove inet_frag_maybe_warn_overflow()
inet: frags: break the 2GB limit for frags storage
Documentation/networking/ip-sysctl.txt | 11 +-
include/net/inet_frag.h | 123 ++++----
include/net/ip.h | 1 -
include/net/ipv6.h | 27 +-
lib/rhashtable.c | 2 +
net/ieee802154/6lowpan/6lowpan_i.h | 26 +-
net/ieee802154/6lowpan/reassembly.c | 150 +++++-----
net/ipv4/inet_fragment.c | 362 +++++-------------------
net/ipv4/ip_fragment.c | 214 +++++++-------
net/ipv4/proc.c | 6 +-
net/ipv6/netfilter/nf_conntrack_reasm.c | 90 +++---
net/ipv6/proc.c | 5 +-
net/ipv6/reassembly.c | 181 ++++++------
13 files changed, 441 insertions(+), 757 deletions(-)
--
2.17.0.rc1.321.gba9d0f2565-goog
next reply other threads:[~2018-03-30 20:42 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-30 20:42 Eric Dumazet [this message]
2018-03-30 20:42 ` [PATCH v2 net-next 01/12] ipv6: frag: remove unused field Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 02/12] inet: frags: change inet_frags_init_net() return value Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 03/12] inet: frags: add a pointer to struct netns_frags Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 04/12] inet: frags: refactor ipv6_frag_init() Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 05/12] inet: frags: refactor lowpan_net_frag_init() Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 06/12] inet: frags: refactor ipfrag_init() Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 07/12] rhashtable: add schedule points Eric Dumazet
2018-03-31 4:19 ` Herbert Xu
2018-03-30 20:42 ` [PATCH v2 net-next 08/12] inet: frags: use rhashtables for reassembly units Eric Dumazet
2018-03-30 22:43 ` Eric Dumazet
2018-03-30 22:44 ` Kirill Tkhai
2018-03-30 22:54 ` Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 09/12] inet: frags: remove some helpers Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 10/12] inet: frags: get rif of inet_frag_evicting() Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 11/12] inet: frags: remove inet_frag_maybe_warn_overflow() Eric Dumazet
2018-03-30 20:42 ` [PATCH v2 net-next 12/12] inet: frags: break the 2GB limit for frags storage Eric Dumazet
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=20180330204236.43675-1-edumazet@google.com \
--to=edumazet@google.com \
--cc=alex.aring@gmail.com \
--cc=brouer@redhat.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=fw@strlen.de \
--cc=herbert@gondor.apana.org.au \
--cc=ktkhai@virtuozzo.com \
--cc=netdev@vger.kernel.org \
--cc=stefan@osg.samsung.com \
--cc=tgraf@suug.ch \
/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;
as well as URLs for NNTP newsgroup(s).