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 19, 2023 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 use this TCP stack, place the following line in the 34kernel configuration file: 35.Bd -ragged -offset indent 36.Cd "options TCPHPTS" 37.Ed 38.Pp 39To load the TCP stack as a module at boot time, place the following line in 40.Xr loader.conf 5 : 41.Bd -literal -offset indent 42tcp_rack_load="YES" 43.Ed 44.Pp 45To enable the TCP stack, place the following line in the 46.Xr sysctl.conf 5 : 47.Bd -literal -offset indent 48net.inet.tcp.functions_default=rack 49.Ed 50.Sh DESCRIPTION 51RACK-TLP uses per-segment transmit timestamps and selective 52acknowledgments (SACKs) and has two parts. 53Recent Acknowledgment (RACK) starts fast recovery quickly 54using time-based inferences derived from acknowledgment (ACK) 55feedback, and Tail Loss Probe (TLP) leverages RACK 56and sends a probe packet to trigger ACK feedback to avoid 57retransmission timeout (RTO) events. 58.Pp 59Compared to the widely used duplicate acknowledgment (DupAck) 60threshold approach, RACK-TLP detects losses more efficiently 61when there are application-limited flights of data, lost 62retransmissions, or data packet reordering events. 63.Pp 64It is intended to be an alternative to the 65DupAck threshold approach. 66.Sh MIB Variables 67The algorithm exposes the following scopes in the 68.Va net.inet.tcp.rack 69branch of the 70.Xr sysctl 3 71MIB: 72.Bl -tag -width indent 73.It Va net.inet.tcp.rack.misc 74Misc related controls 75.It Va net.inet.tcp.rack.features 76Feature controls 77.It Va net.inet.tcp.rack.measure 78Measure related controls 79.It Va net.inet.tcp.rack.timers 80Timer related controls 81.It Va net.inet.tcp.rack.tlp 82TLP and Rack related Controls 83.It Va net.inet.tcp.rack.timely 84Rack Timely RTT Controls 85.It Va net.inet.tcp.rack.hdwr_pacing 86Pacing related Controls 87.It Va net.inet.tcp.rack.pacing 88Pacing related Controls 89.It Va net.inet.tcp.rack.tp 90Rack tracepoint facility 91.It Va net.inet.tcp.rack.probertt 92ProbeRTT related Controls 93.It Va net.inet.tcp.rack.stats 94Rack Counters 95.It Va net.inet.tcp.rack.sack_attack 96Rack Sack Attack Counters and Controls 97.El 98.Pp 99Besides the variables within the above scopes the following 100variables are also exposed in the 101.Va net.inet.tcp.rack 102branch: 103.Bl -tag -width indent 104.It Va net.inet.tcp.rack.clear 105Clear counters 106.It Va net.inet.tcp.rack.opts 107RACK Option Stats 108.It Va net.inet.tcp.rack.outsize 109MSS send sizes 110.It Va net.inet.tcp.rack.req_measure_cnt 111If doing dynamic pacing, how many measurements 112must be in before we start pacing? 113.It Va net.inet.tcp.rack.use_pacing 114If set we use pacing, if clear we use only the original burst mitigation 115.It Va net.inet.tcp.rack.rate_sample_method 116What method should we use for rate sampling 0=high, 1=low 117.El 118.Sh SEE ALSO 119.Xr cc_chd 4 , 120.Xr cc_cubic 4 , 121.Xr cc_hd 4 , 122.Xr cc_htcp 4 , 123.Xr cc_newreno 4 , 124.Xr cc_vegas 4 , 125.Xr h_ertt 4 , 126.Xr mod_cc 4 , 127.Xr tcp 4 , 128.Xr tcp_bbr 4 , 129.Xr mod_cc 9 130.Rs 131.%A "Neal Cardwell" 132.%A "Yuchung Cheng" 133.%A "Nandita Dukkipat" 134.%A "Priyaranjan Jha" 135.%T "The RACK-TLP Loss Detection Algorithm for TCP" 136.%O "RFC 8985" 137.%D "February 2021" 138.Re 139.Rs 140.%A "Ahmed M. Abdelmoniem" 141.%A "Brahim Bensaou" 142.%T "T-RACKs: A Faster Recovery Mechanism for TCP in Data Center Networks" 143.%O "https://arxiv.org/abs/2102.07477" 144.%D "February 2021" 145.Re 146.Sh HISTORY 147The 148.Nm 149congestion control module first appeared in 150.Fx 13.0 . 151.Sh AUTHORS 152.An -nosplit 153The 154.Nm 155congestion control module was written by 156.An Randall Stewart Aq Mt rrs@FreeBSD.org 157and sponsored by Netflix, Inc. 158This manual page was written by 159.An Gordon Bergling Aq Mt gbe@FreeBSD.org . 160