From: Eric Dumazet <edumazet@google.com>
To: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>
Cc: Simon Horman <horms@kernel.org>,
Neal Cardwell <ncardwell@google.com>,
Kuniyuki Iwashima <kuniyu@google.com>,
Willem de Bruijn <willemb@google.com>,
netdev@vger.kernel.org, eric.dumazet@gmail.com,
Eric Dumazet <edumazet@google.com>
Subject: [PATCH net-next 0/9] tcp: avoid struct socket cache line miss in tcp_check_space()
Date: Tue, 22 Sep 2026 12:27:11 +0000 [thread overview]
Message-ID: <20260922122721.3568295-1-edumazet@google.com> (raw)
tcp_check_space() is called on every incoming ACK and every transmitted
packet, and tests SOCK_NOSPACE in sk->sk_socket->flags. Because struct
socket lives in its own cache line and the TCP fast paths do not touch
it for anything else, that test pulls in an extra cache line that is
cold when the working set of active sockets is large.
This series mirrors SOCK_NOSPACE into a new u8 field, tp->tcp_nospace,
placed in the tcp_sock_write_txrx cache line group (fitting in an
existing 4-byte hole after pred_flags, so sizeof(struct tcp_sock) is
unchanged). Both the transmit and receive fast paths already dirty
that cache line, making the fast-path test in tcp_check_space() free of
extra cache misses while keeping __tcp_check_space() authoritative on
SOCK_NOSPACE.
To maintain the invariant (SOCK_NOSPACE set => tp->tcp_nospace set) from
a single choke point:
- Patch 1 fixes a long-standing bug in dlm where SOCKWQ_ASYNC_NOSPACE
was tested and cleared on con->sock->flags instead of SOCK_NOSPACE.
- Patch 2 introduces sk_set_nospace() and sk_clear_nospace() and
converts the core networking callers.
- Patches 3-8 convert the remaining in-kernel callers (sunrpc, rds,
dlm, drbd, nvme-tcp, libceph) so that no open-coded set_bit() or
clear_bit() of SOCK_NOSPACE remains in the tree.
- Patch 9 adds tp->tcp_nospace, wires it into sk_set_nospace() and
sk_clear_nospace(), and switches tcp_check_space() to test it.
Eric Dumazet (9):
dlm: fix send buffer backpressure handling
net: add sk_set_nospace() and sk_clear_nospace()
sunrpc: use sk_set_nospace() and sk_clear_nospace()
rds: use sk_set_nospace()
dlm: use sk_set_nospace() and sk_clear_nospace()
drbd: use sk_set_nospace()
nvme-tcp: use sk_clear_nospace()
libceph: use sk_clear_nospace()
tcp: add tp->tcp_nospace
.../networking/net_cachelines/tcp_sock.rst | 1 +
drivers/block/drbd/drbd_worker.c | 3 +-
drivers/nvme/host/tcp.c | 2 +-
drivers/nvme/target/tcp.c | 2 +-
fs/dlm/lowcomms.c | 10 ++--
include/linux/tcp.h | 4 ++
include/net/sock.h | 2 +
include/net/tcp.h | 23 ++++++++-
net/ceph/messenger.c | 2 +-
net/core/sock.c | 47 ++++++++++++++++++-
net/core/stream.c | 6 +--
net/ipv4/tcp.c | 5 +-
net/ipv4/tcp_bpf.c | 2 +-
net/ipv4/tcp_input.c | 8 +++-
net/kcm/kcmsock.c | 4 +-
net/mptcp/protocol.c | 4 +-
net/mptcp/subflow.c | 5 ++
net/rds/tcp_send.c | 5 +-
net/smc/af_smc.c | 2 +-
net/smc/smc_tx.c | 6 +--
net/sunrpc/svcsock.c | 4 +-
net/sunrpc/xprtsock.c | 4 +-
net/tls/tls_sw.c | 2 +-
23 files changed, 116 insertions(+), 37 deletions(-)
--
2.55.0.1082.g2b9226bbc0-goog
next reply other threads:[~2026-09-22 12:27 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 12:27 Eric Dumazet [this message]
2026-09-22 12:27 ` [PATCH net-next 1/9] dlm: fix send buffer backpressure handling Eric Dumazet
2026-09-22 13:13 ` Alexander Aring
2026-09-23 21:46 ` Kuniyuki Iwashima
2026-09-24 0:27 ` netdev-bot+sashiko
2026-09-24 0:37 ` Eric Dumazet
2026-09-22 12:27 ` [PATCH net-next 2/9] net: add sk_set_nospace() and sk_clear_nospace() Eric Dumazet
2026-09-23 21:54 ` Kuniyuki Iwashima
2026-09-24 0:27 ` netdev-bot+sashiko
2026-09-22 12:27 ` [PATCH net-next 3/9] sunrpc: use " Eric Dumazet
2026-09-23 21:54 ` Kuniyuki Iwashima
2026-09-22 12:27 ` [PATCH net-next 4/9] rds: use sk_set_nospace() Eric Dumazet
2026-09-23 21:55 ` Kuniyuki Iwashima
2026-09-22 12:27 ` [PATCH net-next 5/9] dlm: use sk_set_nospace() and sk_clear_nospace() Eric Dumazet
2026-09-23 21:55 ` Kuniyuki Iwashima
2026-09-22 12:27 ` [PATCH net-next 6/9] drbd: use sk_set_nospace() Eric Dumazet
2026-09-23 21:55 ` Kuniyuki Iwashima
2026-09-22 12:27 ` [PATCH net-next 7/9] nvme-tcp: use sk_clear_nospace() Eric Dumazet
2026-09-23 21:56 ` Kuniyuki Iwashima
2026-09-22 12:27 ` [PATCH net-next 8/9] libceph: " Eric Dumazet
2026-09-23 21:56 ` Kuniyuki Iwashima
2026-09-22 12:27 ` [PATCH net-next 9/9] tcp: add tp->tcp_nospace Eric Dumazet
2026-09-23 22:01 ` Kuniyuki Iwashima
2026-09-24 0:27 ` netdev-bot+sashiko
2026-09-24 13:01 ` 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=20260922122721.3568295-1-edumazet@google.com \
--to=edumazet@google.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=willemb@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox