Patch "tcp: increase the default TCP scaling ratio" has been added to the 6.8-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    tcp: increase the default TCP scaling ratio

to the 6.8-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     tcp-increase-the-default-tcp-scaling-ratio.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 8024941b574f20c908380c13481b56aee8107499
Author: Hechao Li <hli@xxxxxxxxxxx>
Date:   Tue Apr 9 09:43:55 2024 -0700

    tcp: increase the default TCP scaling ratio
    
    [ Upstream commit 697a6c8cec03c2299f850fa50322641a8bf6b915 ]
    
    After commit dfa2f0483360 ("tcp: get rid of sysctl_tcp_adv_win_scale"),
    we noticed an application-level timeout due to reduced throughput.
    
    Before the commit, for a client that sets SO_RCVBUF to 65k, it takes
    around 22 seconds to transfer 10M data. After the commit, it takes 40
    seconds. Because our application has a 30-second timeout, this
    regression broke the application.
    
    The reason that it takes longer to transfer data is that
    tp->scaling_ratio is initialized to a value that results in ~0.25 of
    rcvbuf. In our case, SO_RCVBUF is set to 65536 by the application, which
    translates to 2 * 65536 = 131,072 bytes in rcvbuf and hence a ~28k
    initial receive window.
    
    Later, even though the scaling_ratio is updated to a more accurate
    skb->len/skb->truesize, which is ~0.66 in our environment, the window
    stays at ~0.25 * rcvbuf. This is because tp->window_clamp does not
    change together with the tp->scaling_ratio update when autotuning is
    disabled due to SO_RCVBUF. As a result, the window size is capped at the
    initial window_clamp, which is also ~0.25 * rcvbuf, and never grows
    bigger.
    
    Most modern applications let the kernel do autotuning, and benefit from
    the increased scaling_ratio. But there are applications such as kafka
    that has a default setting of SO_RCVBUF=64k.
    
    This patch increases the initial scaling_ratio from ~25% to 50% in order
    to make it backward compatible with the original default
    sysctl_tcp_adv_win_scale for applications setting SO_RCVBUF.
    
    Fixes: dfa2f0483360 ("tcp: get rid of sysctl_tcp_adv_win_scale")
    Signed-off-by: Hechao Li <hli@xxxxxxxxxxx>
    Reviewed-by: Tycho Andersen <tycho@tycho.pizza>
    Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Link: https://lore.kernel.org/netdev/20240402215405.432863-1-hli@xxxxxxxxxxx/
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/include/net/tcp.h b/include/net/tcp.h
index f6eba9652d010..ab62e53f187c5 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1494,11 +1494,10 @@ static inline int tcp_space_from_win(const struct sock *sk, int win)
 	return __tcp_space_from_win(tcp_sk(sk)->scaling_ratio, win);
 }
 
-/* Assume a conservative default of 1200 bytes of payload per 4K page.
+/* Assume a 50% default for skb->len/skb->truesize ratio.
  * This may be adjusted later in tcp_measure_rcv_mss().
  */
-#define TCP_DEFAULT_SCALING_RATIO ((1200 << TCP_RMEM_TO_WIN_SCALE) / \
-				   SKB_TRUESIZE(4096))
+#define TCP_DEFAULT_SCALING_RATIO (1 << (TCP_RMEM_TO_WIN_SCALE - 1))
 
 static inline void tcp_scaling_ratio_init(struct sock *sk)
 {




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux