diff options
-rw-r--r-- | usr/src/uts/common/inet/tcp_impl.h | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/usr/src/uts/common/inet/tcp_impl.h b/usr/src/uts/common/inet/tcp_impl.h index 61af05f749..b542ec6057 100644 --- a/usr/src/uts/common/inet/tcp_impl.h +++ b/usr/src/uts/common/inet/tcp_impl.h @@ -594,18 +594,12 @@ extern uint32_t tcp_early_abort; * * RTO = SRTT + 4 * RTTVAR * - * In practice, however, we make several additions to it. As we use a finer - * grained clock than BSD and update RTO for every ACK, we add in another 1/4 of - * RTT to the deviation of RTO to accommodate burstiness of 1/4 of window size: - * - * RTO = SRTT + (SRTT / 4) + 4 * RTTVAR - * * Since tcp_rtt_sa is 8 times the SRTT, and tcp_rtt_sd is 4 times the RTTVAR, * this becomes: * - * RTO = (tcp_rtt_sa / 8) + ((tcp_rtt_sa / 8) / 4) + tcp_rtt_sd - * RTO = (tcp_rtt_sa / 2^3) + (tcp_rtt_sa / 2^5) + tcp_rtt_sd - * RTO = (tcp_rtt_sa >> 3) + (tcp_rtt_sa >> 5) + tcp_rtt_sd + * RTO = (tcp_rtt_sa / 8) + tcp_rtt_sd + * RTO = (tcp_rtt_sa / 2^3) + tcp_rtt_sd + * RTO = (tcp_rtt_sa >> 3) + tcp_rtt_sd * * The "tcp_rexmit_interval_extra" and "tcp_conn_grace_period" tunables are * used to help account for extreme environments where the algorithm fails to @@ -613,7 +607,7 @@ extern uint32_t tcp_early_abort; * calculating the intial RTO, and so is optionally passed in as "extra".) We * add them here: * - * RTO = (tcp_rtt_sa >> 3) + (tcp_rtt_sa >> 5) + tcp_rtt_sd + + * RTO = (tcp_rtt_sa >> 3) + tcp_rtt_sd + * tcps_rexmit_interval_extra + tcps_conn_grace_period * * We then pin the RTO within our configured boundaries (sections 2.4 and 2.5 @@ -624,8 +618,8 @@ tcp_calculate_rto(tcp_t *tcp, tcp_stack_t *tcps, uint32_t extra) { clock_t rto; - rto = NSEC2MSEC((tcp->tcp_rtt_sa >> 3) + (tcp->tcp_rtt_sa >> 5) + - tcp->tcp_rtt_sd) + tcps->tcps_rexmit_interval_extra + extra; + rto = NSEC2MSEC((tcp->tcp_rtt_sa >> 3) + tcp->tcp_rtt_sd) + + tcps->tcps_rexmit_interval_extra + extra; if (rto < tcp->tcp_rto_min) { rto = tcp->tcp_rto_min; |