git: dcdfe44901ec - main - tcp: add sysctl to allow/disallow TSO during SACK loss recovery
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 08 May 2024 12:55:22 UTC
The branch main has been updated by rscheff:
URL: https://cgit.FreeBSD.org/src/commit/?id=dcdfe44901eca56254ac41b11b6c7b730a276935
commit dcdfe44901eca56254ac41b11b6c7b730a276935
Author: Richard Scheffenegger <rscheff@FreeBSD.org>
AuthorDate: 2024-05-08 12:33:12 +0000
Commit: Richard Scheffenegger <rscheff@FreeBSD.org>
CommitDate: 2024-05-08 12:33:20 +0000
tcp: add sysctl to allow/disallow TSO during SACK loss recovery
Introduce net.inet.tcp.sack.tso for future use when TSO is ready
to be used during loss recovery.
Reviewed By: tuexen, #transport
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D45068
---
sys/netinet/tcp_output.c | 2 +-
sys/netinet/tcp_sack.c | 5 +++++
sys/netinet/tcp_var.h | 2 ++
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index 2bbc9414197c..e64b7701c453 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -560,7 +560,7 @@ after_sack_rexmit:
if ((tp->t_flags & TF_TSO) && V_tcp_do_tso && len > tp->t_maxseg &&
(tp->t_port == 0) &&
((tp->t_flags & TF_SIGNATURE) == 0) &&
- tp->rcv_numsacks == 0 && sack_rxmit == 0 &&
+ tp->rcv_numsacks == 0 && ((sack_rxmit == 0) || V_tcp_sack_tso) &&
ipoptlen == 0 && !(flags & TH_SYN))
tso = 1;
diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c
index a8cc84397d34..53a181703fe9 100644
--- a/sys/netinet/tcp_sack.c
+++ b/sys/netinet/tcp_sack.c
@@ -137,6 +137,11 @@ SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, lrd, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_do_lrd), 1,
"Perform Lost Retransmission Detection");
+VNET_DEFINE(int, tcp_sack_tso) = 0;
+SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, tso, CTLFLAG_VNET | CTLFLAG_RW,
+ &VNET_NAME(tcp_sack_tso), 0,
+ "Allow TSO during SACK loss recovery");
+
VNET_DEFINE(int, tcp_sack_maxholes) = 128;
SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, maxholes, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_sack_maxholes), 0,
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
index f0a034bd1ea7..6d60c21e64e9 100644
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -1291,6 +1291,7 @@ VNET_DECLARE(int, tcp_retries);
VNET_DECLARE(int, tcp_sack_globalholes);
VNET_DECLARE(int, tcp_sack_globalmaxholes);
VNET_DECLARE(int, tcp_sack_maxholes);
+VNET_DECLARE(int, tcp_sack_tso);
VNET_DECLARE(int, tcp_sc_rst_sock_fail);
VNET_DECLARE(int, tcp_sendspace);
VNET_DECLARE(int, tcp_udp_tunneling_overhead);
@@ -1337,6 +1338,7 @@ VNET_DECLARE(struct inpcbinfo, tcbinfo);
#define V_tcp_sack_globalholes VNET(tcp_sack_globalholes)
#define V_tcp_sack_globalmaxholes VNET(tcp_sack_globalmaxholes)
#define V_tcp_sack_maxholes VNET(tcp_sack_maxholes)
+#define V_tcp_sack_tso VNET(tcp_sack_tso)
#define V_tcp_sc_rst_sock_fail VNET(tcp_sc_rst_sock_fail)
#define V_tcp_sendspace VNET(tcp_sendspace)
#define V_tcp_udp_tunneling_overhead VNET(tcp_udp_tunneling_overhead)