xref: /freebsd/share/man/man4/tcp_rack.4 (revision e29be07861173f87b2dd46db1d0c7cbcf72d4ad0)
1.\" SPDX-License-Identifier: BSD-2-Clause
2.\"
3.\" Copyright (c) 2022, Gordon Bergling <gbe@FreeBSD.org>
4.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\"
14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
18.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24.\" SUCH DAMAGE.
25.\"
26.Dd March 18, 2024
27.Dt TCP_RACK 4
28.Os
29.Sh NAME
30.Nm tcp_rack
31.Nd TCP RACK-TLP Loss Detection Algorithm for TCP
32.Sh SYNOPSIS
33To load the TCP stack as a module at boot time, place the following line in
34.Xr loader.conf 5 :
35.Bd -literal -offset indent
36tcp_rack_load="YES"
37.Ed
38.Pp
39To enable the TCP stack, place the following line in the
40.Xr sysctl.conf 5 :
41.Bd -literal -offset indent
42net.inet.tcp.functions_default=rack
43.Ed
44.Sh DESCRIPTION
45RACK-TLP uses per-segment transmit timestamps and selective
46acknowledgments (SACKs) and has two parts.
47Recent Acknowledgment (RACK) starts fast recovery quickly
48using time-based inferences derived from acknowledgment (ACK)
49feedback, and Tail Loss Probe (TLP) leverages RACK
50and sends a probe packet to trigger ACK feedback to avoid
51retransmission timeout (RTO) events.
52.Pp
53Compared to the widely used duplicate acknowledgment (DupAck)
54threshold approach, RACK-TLP detects losses more efficiently
55when there are application-limited flights of data, lost
56retransmissions, or data packet reordering events.
57.Pp
58It is intended to be an alternative to the
59DupAck threshold approach.
60.Sh MIB Variables
61The algorithm exposes the following scopes in the
62.Va net.inet.tcp.rack
63branch of the
64.Xr sysctl 3
65MIB:
66.Bl -tag -width indent
67.It Va net.inet.tcp.rack.misc
68Misc related controls
69.It Va net.inet.tcp.rack.features
70Feature controls
71.It Va net.inet.tcp.rack.measure
72Measure related controls
73.It Va net.inet.tcp.rack.timers
74Timer related controls
75.It Va net.inet.tcp.rack.tlp
76TLP and Rack related Controls
77.It Va net.inet.tcp.rack.timely
78Rack Timely RTT Controls
79.It Va net.inet.tcp.rack.hdwr_pacing
80Pacing related Controls
81.It Va net.inet.tcp.rack.pacing
82Pacing related Controls
83.It Va net.inet.tcp.rack.tp
84Rack tracepoint facility
85.It Va net.inet.tcp.rack.probertt
86ProbeRTT related Controls
87.It Va net.inet.tcp.rack.stats
88Rack Counters
89.It Va net.inet.tcp.rack.sack_attack
90Rack Sack Attack Counters and Controls
91.El
92.Pp
93Besides the variables within the above scopes the following
94variables are also exposed in the
95.Va net.inet.tcp.rack
96branch:
97.Bl -tag -width indent
98.It Va net.inet.tcp.rack.clear
99Clear counters
100.It Va net.inet.tcp.rack.opts
101RACK Option Stats
102.It Va net.inet.tcp.rack.outsize
103MSS send sizes
104.It Va net.inet.tcp.rack.req_measure_cnt
105If doing dynamic pacing, how many measurements
106must be in before we start pacing?
107.It Va net.inet.tcp.rack.use_pacing
108If set we use pacing, if clear we use only the original burst mitigation
109.It Va net.inet.tcp.rack.rate_sample_method
110What method should we use for rate sampling 0=high, 1=low
111.El
112.Sh SEE ALSO
113.Xr cc_chd 4 ,
114.Xr cc_cubic 4 ,
115.Xr cc_hd 4 ,
116.Xr cc_htcp 4 ,
117.Xr cc_newreno 4 ,
118.Xr cc_vegas 4 ,
119.Xr h_ertt 4 ,
120.Xr mod_cc 4 ,
121.Xr tcp 4 ,
122.Xr tcp_bbr 4 ,
123.Xr mod_cc 9
124.Rs
125.%A "Neal Cardwell"
126.%A "Yuchung Cheng"
127.%A "Nandita Dukkipati"
128.%A "Priyaranjan Jha"
129.%T "The RACK-TLP Loss Detection Algorithm for TCP"
130.%O "RFC 8985"
131.%D "February 2021"
132.Re
133.Rs
134.%A "M. Allman"
135.%A "V. Paxson"
136.%A "E. Blanton"
137.%T "TCP Congestion Control"
138.%O "RFC 5681"
139.%D "September 2009"
140.Re
141.Rs
142.%A "M. Mathis"
143.%A "Nandita Dukkipati"
144.%A "Yuchung Cheng"
145.%T "Proportional Rate Reduction for TCP"
146.%O "RFC 6937"
147.%D "May 2013"
148.Re
149.Sh HISTORY
150The
151.Nm
152congestion control module first appeared in
153.Fx 13.0 .
154.Sh AUTHORS
155.An -nosplit
156The
157.Nm
158congestion control module was written by
159.An Randall Stewart Aq Mt rrs@FreeBSD.org
160and sponsored by Netflix, Inc.
161This manual page was written by
162.An Gordon Bergling Aq Mt gbe@FreeBSD.org .
163