tcp: for LRD move sysctl from tcp.do_lrd tp tcp.sack.lrd, remove sockopt

Moving lrd sysctl to the tcp.sack branch, since LRD only works with SACK.
Remove the sockopt to programmatically control LRD per session.

Reviewed By:           #transport, tuexen, rrs
Sponsored by:          NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D42851
This commit is contained in:
Richard Scheffenegger 2023-11-30 21:10:14 +01:00
parent 9daf6cd0f4
commit f42518ff12
5 changed files with 12 additions and 22 deletions

View file

@ -464,13 +464,6 @@ See
Maximum amount of time, in milliseconds, before a delayed ACK is sent.
.It Va delayed_ack
Delay ACK to try and piggyback it onto a data packet or another ACK.
.It Va do_lrd
Enable Lost Retransmission Detection for SACK-enabled sessions, enabled by
default.
Under severe congestion, a retransmission can be lost which then leads to a
mandatory Retransmission Timeout (RTO), followed by slow-start.
LRD will try to resend the repeatedly lost packet, preventing the time-consuming
RTO and performance reducing slow-start.
.It Va do_prr
Perform SACK loss recovery using the Proportional Rate Reduction (PRR) algorithm
described in RFC6937.
@ -901,6 +894,13 @@ Global number of TCP SACK holes currently allocated.
.It Va sack.globalmaxholes
Maximum number of SACK holes per system, across all connections.
Defaults to 65536.
.It Va sack.lrd
Enable Lost Retransmission Detection for SACK-enabled sessions, enabled by
default.
Under severe congestion, a retransmission can be lost which then leads to a
mandatory Retransmission Timeout (RTO), followed by slow-start.
LRD will try to resend the repeatedly lost packet, preventing the time-consuming
RTO and performance reducing slow-start or purge of the SACK scoreboard.
.It Va sack.maxholes
Maximum number of SACK holes per connection.
Defaults to 128.

View file

@ -200,7 +200,6 @@ struct tcphdr {
#define TCP_PROC_ACCOUNTING 76 /* Do accounting on tcp cpu usage and counts */
#define TCP_USE_CMP_ACKS 77 /* The transport can handle the Compressed mbuf acks */
#define TCP_PERF_INFO 78 /* retrieve accounting counters */
#define TCP_LRD 79 /* toggle Lost Retransmission Detection for A/B testing */
#define TCP_KEEPINIT 128 /* N, time to establish connection */
#define TCP_KEEPIDLE 256 /* L,N,X start keeplives after this period */
#define TCP_KEEPINTVL 512 /* L,N interval between keepalives */

View file

@ -162,11 +162,6 @@ SYSCTL_INT(_net_inet_tcp, OID_AUTO, do_prr, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_do_prr), 1,
"Enable Proportional Rate Reduction per RFC 6937");
VNET_DEFINE(int, tcp_do_lrd) = 1;
SYSCTL_INT(_net_inet_tcp, OID_AUTO, do_lrd, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_do_lrd), 1,
"Perform Lost Retransmission Detection");
VNET_DEFINE(int, tcp_do_newcwv) = 0;
SYSCTL_INT(_net_inet_tcp, OID_AUTO, newcwv, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_do_newcwv), 0,

View file

@ -132,6 +132,11 @@ SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, revised, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_do_newsack), 0,
"Use revised SACK loss recovery per RFC 6675");
VNET_DEFINE(int, tcp_do_lrd) = 1;
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_maxholes) = 128;
SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, maxholes, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_sack_maxholes), 0,

View file

@ -2118,7 +2118,6 @@ tcp_default_ctloutput(struct tcpcb *tp, struct sockopt *sopt)
case TCP_NODELAY:
case TCP_NOOPT:
case TCP_LRD:
INP_WUNLOCK(inp);
error = sooptcopyin(sopt, &optval, sizeof optval,
sizeof optval);
@ -2133,9 +2132,6 @@ tcp_default_ctloutput(struct tcpcb *tp, struct sockopt *sopt)
case TCP_NOOPT:
opt = TF_NOOPT;
break;
case TCP_LRD:
opt = TF_LRD;
break;
default:
opt = 0; /* dead code to fool gcc */
break;
@ -2657,11 +2653,6 @@ tcp_default_ctloutput(struct tcpcb *tp, struct sockopt *sopt)
sizeof(optval));
break;
#endif
case TCP_LRD:
optval = tp->t_flags & TF_LRD;
INP_WUNLOCK(inp);
error = sooptcopyout(sopt, &optval, sizeof optval);
break;
default:
INP_WUNLOCK(inp);
error = ENOPROTOOPT;