From: Eric Dumazet <eric.dumazet@gmail.com>
To: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: netdev <netdev@vger.kernel.org>,
Soheil Hassas Yeganeh <soheil@google.com>,
Wei Wang <weiwan@google.com>, Shakeel Butt <shakeelb@google.com>,
Neal Cardwell <ncardwell@google.com>,
Eric Dumazet <edumazet@google.com>,
Eric Dumazet <eric.dumazet@gmail.com>
Subject: [PATCH net-next 0/7] net: reduce tcp_memory_allocated inflation
Date: Wed, 8 Jun 2022 23:34:05 -0700 [thread overview]
Message-ID: <20220609063412.2205738-1-eric.dumazet@gmail.com> (raw)
From: Eric Dumazet <edumazet@google.com>
Hosts with a lot of sockets tend to hit so called TCP memory pressure,
leading to very bad TCP performance and/or OOM.
The problem is that some TCP sockets can hold up to 2MB of 'forward
allocations' in their per-socket cache (sk->sk_forward_alloc),
and there is no mechanism to make them relinquish their share
under mem pressure.
Only under some potentially rare events their share is reclaimed,
one socket at a time.
In this series, I implemented a per-cpu cache instead of a per-socket one.
Each CPU has a +1/-1 MB (256 pages on x86) forward alloc cache, in order
to not dirty tcp_memory_allocated shared cache line too often.
We keep sk->sk_forward_alloc values as small as possible, to meet
memcg page granularity constraint.
Note that memcg already has a per-cpu cache, although MEMCG_CHARGE_BATCH
is defined to 32 pages, which seems a bit small.
Note that while this cover letter mentions TCP, this work is generic
and supports TCP, UDP, DECNET, SCTP.
Eric Dumazet (7):
Revert "net: set SK_MEM_QUANTUM to 4096"
net: remove SK_MEM_QUANTUM and SK_MEM_QUANTUM_SHIFT
net: add per_cpu_fw_alloc field to struct proto
net: implement per-cpu reserves for memory_allocated
net: fix sk_wmem_schedule() and sk_rmem_schedule() errors
net: keep sk->sk_forward_alloc as small as possible
net: unexport __sk_mem_{raise|reduce}_allocated
include/net/sock.h | 100 +++++++++++++++--------------------
include/net/tcp.h | 2 +
include/net/udp.h | 1 +
net/core/datagram.c | 3 --
net/core/sock.c | 22 ++++----
net/decnet/af_decnet.c | 4 ++
net/ipv4/tcp.c | 13 ++---
net/ipv4/tcp_input.c | 6 +--
net/ipv4/tcp_ipv4.c | 3 ++
net/ipv4/tcp_output.c | 2 +-
net/ipv4/tcp_timer.c | 19 ++-----
net/ipv4/udp.c | 14 +++--
net/ipv4/udplite.c | 3 ++
net/ipv6/tcp_ipv6.c | 3 ++
net/ipv6/udp.c | 3 ++
net/ipv6/udplite.c | 3 ++
net/iucv/af_iucv.c | 2 -
net/mptcp/protocol.c | 13 +++--
net/sctp/protocol.c | 4 +-
net/sctp/sm_statefuns.c | 2 -
net/sctp/socket.c | 12 +++--
net/sctp/stream_interleave.c | 2 -
net/sctp/ulpqueue.c | 4 --
23 files changed, 114 insertions(+), 126 deletions(-)
--
2.36.1.255.ge46751e96f-goog
next reply other threads:[~2022-06-09 6:34 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-09 6:34 Eric Dumazet [this message]
2022-06-09 6:34 ` [PATCH net-next 1/7] Revert "net: set SK_MEM_QUANTUM to 4096" Eric Dumazet
2022-06-09 15:08 ` Shakeel Butt
2022-06-09 6:34 ` [PATCH net-next 2/7] net: remove SK_MEM_QUANTUM and SK_MEM_QUANTUM_SHIFT Eric Dumazet
2022-06-09 15:09 ` Shakeel Butt
2022-06-09 6:34 ` [PATCH net-next 3/7] net: add per_cpu_fw_alloc field to struct proto Eric Dumazet
2022-06-09 15:11 ` Shakeel Butt
2022-06-09 6:34 ` [PATCH net-next 4/7] net: implement per-cpu reserves for memory_allocated Eric Dumazet
2022-06-09 13:33 ` Soheil Hassas Yeganeh
2022-06-09 13:47 ` Eric Dumazet
2022-06-09 13:48 ` Soheil Hassas Yeganeh
2022-06-09 14:46 ` Neal Cardwell
2022-06-09 15:07 ` Shakeel Butt
2022-06-09 15:09 ` Neal Cardwell
2022-06-09 15:43 ` Eric Dumazet
2022-06-09 15:12 ` Shakeel Butt
2022-06-09 6:34 ` [PATCH net-next 5/7] net: fix sk_wmem_schedule() and sk_rmem_schedule() errors Eric Dumazet
2022-06-09 15:18 ` Shakeel Butt
2022-06-09 6:34 ` [PATCH net-next 6/7] net: keep sk->sk_forward_alloc as small as possible Eric Dumazet
2022-06-09 16:38 ` Shakeel Butt
2022-06-10 23:00 ` Mat Martineau
2022-10-13 13:15 ` K Prateek Nayak
2022-10-13 14:35 ` Eric Dumazet
2022-10-13 15:52 ` Shakeel Butt
2022-10-14 8:32 ` K Prateek Nayak
2022-10-14 8:30 ` K Prateek Nayak
2022-10-15 20:19 ` Eric Dumazet
2022-10-17 4:04 ` K Prateek Nayak
2022-06-09 6:34 ` [PATCH net-next 7/7] net: unexport __sk_mem_{raise|reduce}_allocated Eric Dumazet
2022-06-09 16:38 ` Shakeel Butt
2022-06-09 13:33 ` [PATCH net-next 0/7] net: reduce tcp_memory_allocated inflation Soheil Hassas Yeganeh
2022-06-11 0:10 ` patchwork-bot+netdevbpf
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=20220609063412.2205738-1-eric.dumazet@gmail.com \
--to=eric.dumazet@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=shakeelb@google.com \
--cc=soheil@google.com \
--cc=weiwan@google.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.