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>
