diff options
author | Cody Peter Mello <cody.mello@joyent.com> | 2019-08-09 18:01:00 +0000 |
---|---|---|
committer | Trent Mick <trentm@gmail.com> | 2019-08-09 18:01:00 +0000 |
commit | 7082a0f667de533cf2e8c7617faa75388daf3448 (patch) | |
tree | 292faa09753bcbc4c9afd1950a4f7a78d583ebed | |
parent | 1ed9823d08fd2b08c4d4f0d9a57075899d36b295 (diff) | |
download | illumos-joyent-7082a0f667de533cf2e8c7617faa75388daf3448.tar.gz |
OS-7687 The RTO is too damn highcr6866-OS-7687
-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; |