summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_subr.c
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2002-07-18 19:06:12 +0000
committerdillon <dillon@FreeBSD.org>2002-07-18 19:06:12 +0000
commit66e9d99f6c46c9edc7c7f30ae1a88510c54c0ce5 (patch)
tree6ed05b94d68adec4b5de208d69b849084f9e5c07 /sys/netinet/tcp_subr.c
parent0ffeeffe3e5a03f38ce2b97a6418df9cd2eb8eb2 (diff)
downloadFreeBSD-src-66e9d99f6c46c9edc7c7f30ae1a88510c54c0ce5.zip
FreeBSD-src-66e9d99f6c46c9edc7c7f30ae1a88510c54c0ce5.tar.gz
Introduce two new sysctl's:
net.inet.tcp.rexmit_min (default 3 ticks equiv) This sysctl is the retransmit timer RTO minimum, specified in milliseconds. This value is designed for algorithmic stability only. net.inet.tcp.rexmit_slop (default 200ms) This sysctl is the retransmit timer RTO slop which is added to every retransmit timeout and is designed to handle protocol stack overheads and delayed ack issues. Note that the *original* code applied a 1-second RTO minimum but never applied real slop to the RTO calculation, so any RTO calculation over one second would have no slop and thus not account for protocol stack overheads (TCP timestamps are not a measure of protocol turnaround!). Essentially, the original code made the RTO calculation almost completely irrelevant. Please note that the 200ms slop is debateable. This commit is not meant to be a line in the sand, and if the community winds up deciding that increasing it is the correct solution then it's easy to do. Note that larger values will destroy performance on lossy networks while smaller values may result in a greater number of unnecessary retransmits.
Diffstat (limited to 'sys/netinet/tcp_subr.c')
-rw-r--r--sys/netinet/tcp_subr.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index 9dab996..c2799d5 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -196,6 +196,8 @@ tcp_init()
tcp_keepintvl = TCPTV_KEEPINTVL;
tcp_maxpersistidle = TCPTV_KEEP_IDLE;
tcp_msl = TCPTV_MSL;
+ tcp_rexmit_min = TCPTV_MIN;
+ tcp_rexmit_slop = TCPTV_CPU_VAR;
INP_INFO_LOCK_INIT(&tcbinfo, "tcp");
LIST_INIT(&tcb);
@@ -542,7 +544,7 @@ tcp_newtcpcb(inp)
*/
tp->t_srtt = TCPTV_SRTTBASE;
tp->t_rttvar = ((TCPTV_RTOBASE - TCPTV_SRTTBASE) << TCP_RTTVAR_SHIFT) / 4;
- tp->t_rttmin = TCPTV_MIN;
+ tp->t_rttmin = tcp_rexmit_min;
tp->t_rxtcur = TCPTV_RTOBASE;
tp->snd_cwnd = TCP_MAXWIN << TCP_MAX_WINSHIFT;
tp->snd_ssthresh = TCP_MAXWIN << TCP_MAX_WINSHIFT;
OpenPOWER on IntegriCloud