tcp_rack4
Tcp rack-tlp loss detection algorithm for tcp
Usage
To load the TCP stack as a module at boot time, place the following line in loader.conf(5):
tcp_rack_load="YES"
To enable the TCP stack, place the following line in the sysctl.conf(5):
net.inet.tcp.functions_default=rack
Overview
RACK-TLP uses per-segment transmit timestamps and selective acknowledgments (SACKs) and has two parts. Recent Acknowledgment (RACK) starts fast recovery quickly using time-based inferences derived from acknowledgment (ACK) feedback, and Tail Loss Probe (TLP) leverages RACK and sends a probe packet to trigger ACK feedback to avoid retransmission timeout (RTO) events.
Compared to the widely used duplicate acknowledgment (DupAck) threshold approach, RACK-TLP detects losses more efficiently when there are application-limited flights of data, lost retransmissions, or data packet reordering events.
It is intended to be an alternative to the DupAck threshold approach.
MIB Variables
The algorithm exposes the following scopes in the net.inet.tcp.rack branch of the sysctl(3) MIB:
- net.inet.tcp.rack.misc
-
Misc related controls
- net.inet.tcp.rack.features
-
Feature controls
- net.inet.tcp.rack.measure
-
Measure related controls
- net.inet.tcp.rack.timers
-
Timer related controls
- net.inet.tcp.rack.tlp
-
TLP and Rack related Controls
- net.inet.tcp.rack.timely
-
Rack Timely RTT Controls
- net.inet.tcp.rack.hdwr_pacing
-
Pacing related Controls
- net.inet.tcp.rack.pacing
-
Pacing related Controls
- net.inet.tcp.rack.tp
-
Rack tracepoint facility
- net.inet.tcp.rack.probertt
-
ProbeRTT related Controls
- net.inet.tcp.rack.stats
-
Rack Counters
- net.inet.tcp.rack.sack_attack
-
Rack Sack Attack Counters and Controls
Besides the variables within the above scopes the following variables are also exposed in the net.inet.tcp.rack branch:
- net.inet.tcp.rack.clear
-
Clear counters
- net.inet.tcp.rack.opts
-
RACK Option Stats
- net.inet.tcp.rack.outsize
-
MSS send sizes
- net.inet.tcp.rack.req_measure_cnt
-
If doing dynamic pacing, how many measurements must be in before we start pacing?
- net.inet.tcp.rack.use_pacing
-
If set we use pacing, if clear we use only the original burst mitigation
- net.inet.tcp.rack.rate_sample_method
-
What method should we use for rate sampling 0=high, 1=low
Releases
13 releases since FreeBSD 13.2-RELEASE; the text changed 4 times.