Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Aug 2020 18:13:51 -0400
From:      Liang Tian <l.tian.email@gmail.com>
To:        freebsd-net <freebsd-net@freebsd.org>
Subject:   Fast recovery ssthresh value
Message-ID:  <CAJhigrhbguXQzeYGfMtPRK03fp6KR65q8gjB9e9L-5tGGsuyzQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi all,

When 3 dupacks are received and TCP enter fast recovery, if SACK is
used, the CWND is set to maxseg:

2593                     if (tp->t_flags & TF_SACK_PERMIT) {
2594                         TCPSTAT_INC(
2595                             tcps_sack_recovery_episode);
2596                         tp->snd_recover = tp->snd_nxt;
2597                         tp->snd_cwnd = maxseg;
2598                         (void) tp->t_fb->tfb_tcp_output(tp);
2599                         goto drop;
2600                     }

Otherwise(SACK is not in use), CWND is set to maxseg before
tcp_output() and then set back to snd_ssthresh+inflation
2601                     tp->snd_nxt = th->th_ack;
2602                     tp->snd_cwnd = maxseg;
2603                     (void) tp->t_fb->tfb_tcp_output(tp);
2604                     KASSERT(tp->snd_limited <= 2,
2605                         ("%s: tp->snd_limited too big",
2606                         __func__));
2607                     tp->snd_cwnd = tp->snd_ssthresh +
2608                          maxseg *
2609                          (tp->t_dupacks - tp->snd_limited);
2610                     if (SEQ_GT(onxt, tp->snd_nxt))
2611                         tp->snd_nxt = onxt;
2612                     goto drop;

I'm wondering in the SACK case, should CWND be set back to
ssthresh(which has been slashed in cc_cong_signal() a few lines above)
before line 2599, like non-SACK case, instead of doing slow start from
maxseg?
I read rfc6675 and a few others, and it looks like that's the case. I
appreciate your opinion, again.

Thanks,
Liang



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJhigrhbguXQzeYGfMtPRK03fp6KR65q8gjB9e9L-5tGGsuyzQ>