HP-UX TCP/IP Performance White Paper, March 2008

26
avoids additional unnecessary retransmissions and accelerates the recovery of the cwnd that is shrunk to
one segment by the timeout.
F-RTO is disabled by default. To enable F-RTO, the following ndd tunable is provided:
tcp_frto_enable
The valid values for tcp_frto_enable are:
0 The local system does not use F-RTO. This is the default value.
1 The local system uses the F-RTO algorithm for detecting and responding to spurious
timeout.
2 The local system uses the F-RTO algorithm for detecting spurious timeouts. The response
algorithm is based on TCP Congestion Window Validation.
When a retransmission timeout (spurious or not) occurs, the cwnd is shrunk to one segment, and the
ssthresh is also shrunk to one-half of the amount of unacknowledged data in the network, i.e to one-half
of the flight size.
After the F-RTO detects a spurious timeout, both the option 1 and the option 2 avoid unnecessary
retransmissions. Additionally, they accelerate the recovery of the cwnd to its previous value.
Option 1, the original F-RTO response algorithm, restores the cwnd to one-half of the previous flight size,
i.e. the flight size before the timeout. Therefore, the recovery is faster than the conventional RTO recovery
that starts with the cwnd set to one.
Option 2, an algorithm based on Congestion Window Validation (RFC 2681) restores both the ssthresh
and the cwnd. The congestion window validation algorithm updates the ssthresh and the cwnd by:
ssthresh = max(ssthresh, 3*cwnd/4)
win = min(cwnd, receiver's declared max window)
cwnd = max(win/2, MSS)
The option 2 deploys the same approach, and it restores the ssthresh to the maximum of the previous
ssthresh or 3/4 of the previous flight size, and restores the cwnd to one-half of the previous flight size.
This is more aggressive in recovery than option 1 because the ssthresh is also restored back close to the
previous level, but it is still conservative because it does not restore the cwnd to the full flight size. Instead it
reduces the ssthresh and the cwnd as if the congestion window validation were exercised.