From: "Emil Tsalapatis" <emil@etsalapatis.com>
To: "Chia-Yu Chang (Nokia)" <chia-yu.chang@nokia-bell-labs.com>,
"horms@kernel.org" <horms@kernel.org>,
"dsahern@kernel.org" <dsahern@kernel.org>,
"bpf@vger.kernel.org" <bpf@vger.kernel.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"pabeni@redhat.com" <pabeni@redhat.com>,
"jhs@mojatatu.com" <jhs@mojatatu.com>,
"kuba@kernel.org" <kuba@kernel.org>,
"stephen@networkplumber.org" <stephen@networkplumber.org>,
"davem@davemloft.net" <davem@davemloft.net>,
"edumazet@google.com" <edumazet@google.com>,
"andrew+netdev@lunn.ch" <andrew+netdev@lunn.ch>,
"donald.hunter@gmail.com" <donald.hunter@gmail.com>,
"kuniyu@google.com" <kuniyu@google.com>,
"ij@kernel.org" <ij@kernel.org>,
"ncardwell@google.com" <ncardwell@google.com>,
"Koen De Schepper (Nokia)" <koen.de_schepper@nokia-bell-labs.com>,
"g.white@cablelabs.com" <g.white@cablelabs.com>,
"ingemar.s.johansson@ericsson.com"
<ingemar.s.johansson@ericsson.com>,
"mirja.kuehlewind@ericsson.com" <mirja.kuehlewind@ericsson.com>,
"cheshire@apple.com" <cheshire@apple.com>,
"rs.ietf@gmx.at" <rs.ietf@gmx.at>,
"Jason_Livingood@comcast.com" <Jason_Livingood@comcast.com>,
"vidhi_goel@apple.com" <vidhi_goel@apple.com>
Subject: Re: [PATCH v4 net-next 1/1] tcp: allow congestion controls to override TSO autosizing
Date: Mon, 27 Jul 2026 19:19:51 -0400 [thread overview]
Message-ID: <DK9QLHKY1WSN.24XILC0RTLJZM@etsalapatis.com> (raw)
In-Reply-To: <PAXPR07MB79842FC5D44F3964BFEDA505A3CC2@PAXPR07MB7984.eurprd07.prod.outlook.com>
On Mon Jul 27, 2026 at 4:02 AM EDT, Chia-Yu Chang (Nokia) wrote:
>> -----Original Message-----
>> From: Chia-Yu Chang (Nokia) <chia-yu.chang@nokia-bell-labs.com>
>> Sent: Sunday, July 26, 2026 9:38 PM
>> To: horms@kernel.org; dsahern@kernel.org; bpf@vger.kernel.org; netdev@vger.kernel.org; pabeni@redhat.com; jhs@mojatatu.com; kuba@kernel.org; stephen@networkplumber.org; davem@davemloft.net; edumazet@google.com; andrew+netdev@lunn.ch; donald.hunter@gmail.com; kuniyu@google.com; ij@kernel.org; ncardwell@google.com; Koen De Schepper (Nokia) <koen.de_schepper@nokia-bell-labs.com>; g.white@cablelabs.com; ingemar.s.johansson@ericsson.com; mirja.kuehlewind@ericsson.com; cheshire@apple.com; rs.ietf@gmx.at; Jason_Livingood@comcast.com; vidhi_goel@apple.com
>> Cc: Chia-Yu Chang (Nokia) <chia-yu.chang@nokia-bell-labs.com>
>> Subject: [PATCH v4 net-next 1/1] tcp: allow congestion controls to override TSO autosizing
>>
>> From: Chia-Yu Chang <chia-yu.chang@nokia-bell-labs.com>
>>
Hi Chia-Yu,
Sorry for the late reply. From the BPF side we had a discussion and
concluded that going ahead with the original change to the struct_ops
without adding a union is fine. AFAIU this is the main delta between v3
and v4, in which case we can go ahead with v3.
>> Today, congestion control algorithms influence TSO sizing through the
>> min_tso_segs() callback, which provides the minimum number of segments used by tcp_tso_autosize(). However, Prague congestion control requires finer control and needs to determine the final TSO segment count directly rather than only providing a minimum bound.
>>
>> This patch introduces TCP_CONG_EXACT_TSO_SEGS flag and extends tcp_congestion_ops with an alternative tso_segs() callback. When the flag is set, the congestion control algorithm supplies the final TSO segment count directly and bypasses tcp_tso_autosize(). Otherwise, the existing min_tso_segs() callback continues to provide the minimum segment count used by tcp_tso_autosize().
>>
>> This preserves the existing behavior of current congestion control algorithms without introducing additional callbacks while enabling future algorithms to implement custom TSO sizing policies.
>>
>> Signed-off-by: Ilpo Järvinen <ij@kernel.org>
>> Signed-off-by: Chia-Yu Chang <chia-yu.chang@nokia-bell-labs.com>
>> ---
>> include/net/tcp.h | 16 +++++++++++++---
>> net/ipv4/tcp_output.c | 17 +++++++++++++----
>> 2 files changed, 26 insertions(+), 7 deletions(-)
>>
>> diff --git a/include/net/tcp.h b/include/net/tcp.h index 2c5b889530b5..82cd82a19ff9 100644
>> --- a/include/net/tcp.h
>> +++ b/include/net/tcp.h
>> @@ -1283,9 +1283,11 @@ enum tcp_ca_ack_event_flags {
>> #define TCP_CONG_ECT_1_NEGOTIATION BIT(3)
>> /* Cannot fallback to RFC3168 during AccECN negotiation */
>> #define TCP_CONG_NO_FALLBACK_RFC3168 BIT(4)
>> +/* Congestion cotnrol provides the exact TSO segment numbers */
>> +#define TCP_CONG_EXACT_TSO_SEGS BIT(5)
>> #define TCP_CONG_MASK (TCP_CONG_NON_RESTRICTED | TCP_CONG_NEEDS_ECN | \
>> TCP_CONG_NEEDS_ACCECN | TCP_CONG_ECT_1_NEGOTIATION | \
>> - TCP_CONG_NO_FALLBACK_RFC3168)
>> + TCP_CONG_NO_FALLBACK_RFC3168 | TCP_CONG_EXACT_TSO_SEGS)
>>
>> union tcp_cc_info;
>>
>> @@ -1361,8 +1363,16 @@ struct tcp_congestion_ops {
>> /* hook for packet ack accounting (optional) */
>> void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
>>
>> - /* override sysctl_tcp_min_tso_segs (optional) */
>> - u32 (*min_tso_segs)(struct sock *sk);
>> + union {
>> + /* Used when TCP_CONG_EXACT_TSO_SEGS is not set,
>> + * override sysctl_tcp_min_tso_segs (optional)
>> + */
>> + u32 (*min_tso_segs)(struct sock *sk);
>> + /* Used when TCP_CONG_EXACT_TSO_SEGS is set,
>> + * override tcp_tso_autosize (optional)
>> + */
>> + u32 (*tso_segs)(struct sock *sk, u32 mss_now);
>> + };
>>
>> /* new value of cwnd after loss (required) */
>> u32 (*undo_cwnd)(struct sock *sk);
>> diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index d7c1444b5e30..0de27a87c39e 100644
>> --- a/net/ipv4/tcp_output.c
>> +++ b/net/ipv4/tcp_output.c
>> @@ -2278,11 +2278,20 @@ static u32 tcp_tso_segs(struct sock *sk, unsigned int mss_now)
>> const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
>> u32 min_tso, tso_segs;
>>
>> - min_tso = ca_ops->min_tso_segs ?
>> - ca_ops->min_tso_segs(sk) :
>> - READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_min_tso_segs);
>> + min_tso = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_min_tso_segs);
>> +
>> + if (ca_ops->flags & TCP_CONG_EXACT_TSO_SEGS) {
>> + if (WARN_ON_ONCE(!ca_ops->tso_segs))
>> + tso_segs = tcp_tso_autosize(sk, mss_now, min_tso);
>> + else
>> + tso_segs = ca_ops->tso_segs(sk, mss_now);
>> + } else {
>> + if (ca_ops->min_tso_segs)
>> + min_tso = ca_ops->min_tso_segs(sk);
>> +
>> + tso_segs = tcp_tso_autosize(sk, mss_now, min_tso);
>> + }
>>
>> - tso_segs = tcp_tso_autosize(sk, mss_now, min_tso);
>> return min_t(u32, tso_segs, sk->sk_gso_max_segs); }
>
> Hello,
>
> I see this commit is marked as Changes Requested; however, I do not see any request yet.
>
> Could anyone let me know which specific request it is?
>
> This commit updated our previously submitted v3 https://lore.kernel.org/all/20260630120145.286497-1-chia-yu.chang@nokia-bell-labs.com/ to have no impact on BPF.
>
> Thanks!
> Chia-Yu
next prev parent reply other threads:[~2026-07-27 23:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-26 19:38 [PATCH v4 net-next 1/1] tcp: allow congestion controls to override TSO autosizing chia-yu.chang
2026-07-27 8:02 ` Chia-Yu Chang (Nokia)
2026-07-27 23:08 ` Jakub Kicinski
2026-07-27 23:19 ` Emil Tsalapatis [this message]
2026-07-27 19:38 ` sashiko-bot
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=DK9QLHKY1WSN.24XILC0RTLJZM@etsalapatis.com \
--to=emil@etsalapatis.com \
--cc=Jason_Livingood@comcast.com \
--cc=andrew+netdev@lunn.ch \
--cc=bpf@vger.kernel.org \
--cc=cheshire@apple.com \
--cc=chia-yu.chang@nokia-bell-labs.com \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=g.white@cablelabs.com \
--cc=horms@kernel.org \
--cc=ij@kernel.org \
--cc=ingemar.s.johansson@ericsson.com \
--cc=jhs@mojatatu.com \
--cc=koen.de_schepper@nokia-bell-labs.com \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=mirja.kuehlewind@ericsson.com \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rs.ietf@gmx.at \
--cc=stephen@networkplumber.org \
--cc=vidhi_goel@apple.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.