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