Appropriate Byte Counting during Congestion Avoidance
Liang Tian
l.tian.email at gmail.com
Wed Aug 19 04:51:56 UTC 2020
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
More information about the freebsd-net
mailing list