Date: Thu, 14 Mar 2013 18:32:17 +0530 From: Bejoy Thomas <bejoygthomas@yahoo.com> To: freebsd-net@freebsd.org Subject: Question regarding FreeBSD Congestion control Message-ID: <EE7BE1B3-8CD1-4899-AF80-B6ECEABD33B8@yahoo.com>
next in thread | raw e-mail | index | archive | help
I have been looking at the FreeBSD congestion control code and had some = questions on the SACK enabled code flow . =20 With SACK the congestion window is retained as 1 MSS when the Fast = Retransmit is exited and Fast Recovery is entered,so cwnd growth seems = to be much slower than slow start, as we we are re transmitting drops = from the sack hole or new data. But in non-SACK case the congestion = window is restored to cwnd/2 +(dupacks-snd_limited)*MSS when Fast = retransmit is exited as per RFC3782. Could some one familiar with the = code please throw some light on why we fall back to a cwnd of 1MSS as we = enter fast recovery with SACK enabled. /*Congestion signal before ack. = */ cc_cong_signal(tp, th, = CC_NDUPACK); cc_ack_received(tp, th, = CC_DUPACK); tcp_timer_activate(tp, TT_REXMT, = 0); tp->t_rtttime =3D 0; if (tp->t_flags & = TF_SACK_PERMIT) { TCPSTAT_INC( = tcps_sack_recovery_episode); tp->sack_newdata =3D = tp->snd_nxt; tp->snd_cwnd =3D = tp->t_maxseg; <<<<<<<<< (void) tcp_output(tp); goto drop; = <<<<<<<<<< } tp->snd_nxt =3D th->th_ack; tp->snd_cwnd =3D tp->t_maxseg; (void) tcp_output(tp); KASSERT(tp->snd_limited <=3D 2, ("%s: tp->snd_limited too = big", __func__)); tp->snd_cwnd =3D = tp->snd_ssthresh + tp->t_maxseg * (tp->t_dupacks - = tp->snd_limited); <<<<<<<<< Bejoy Thomas=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?EE7BE1B3-8CD1-4899-AF80-B6ECEABD33B8>