Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Aug 2020 00:51:40 -0400
From:      Liang Tian <l.tian.email@gmail.com>
To:        freebsd-net <freebsd-net@freebsd.org>
Subject:   Appropriate Byte Counting during Congestion Avoidance
Message-ID:  <CAJhigrgajo%2BXAfY7PQA5zPr_HWOqTjfThnGkX9St2NqbgiTprg@mail.gmail.com>

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

We noticed CWND is growing much slower than expected during congestion
avoidance with new reno, and we came to this piece of code in
cc_ack_received() at tcp_input.c:353

if (type == CC_ACK) {
....
        if (tp->snd_cwnd > tp->snd_ssthresh) {
            tp->t_bytes_acked += min(tp->ccv->bytes_this_ack,
                 nsegs * V_tcp_abc_l_var * tcp_maxseg(tp));
            if (tp->t_bytes_acked >= tp->snd_cwnd) {
                tp->t_bytes_acked -= tp->snd_cwnd;
                tp->ccv->flags |= CCF_ABC_SENTAWND;
            }
The increment of t_bytes_acked is capped at 2*maxseg.
The description of the sysctl variable tcp_abc_l_var(default value 2) is
"Cap the max cwnd increment during slow-start to this number of segments"
After reading RFC3465, it doesn't look like this cap should be applied
here since this is clearly not during slow-start.
We've seen in some cases the receiver is ACKing every 16 packets, and
CWND is growing at 1/8 of the expected rate because of this.

I would appreciate your opinion on this. Thanks a lot.

Regards,
Liang



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJhigrgajo%2BXAfY7PQA5zPr_HWOqTjfThnGkX9St2NqbgiTprg>