Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Sep 2020 09:09:44 +0000 (UTC)
From:      Richard Scheffenegger <rscheff@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r365295 - stable/12/sys/netinet/cc
Message-ID:  <202009030909.08399ikC056862@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rscheff
Date: Thu Sep  3 09:09:44 2020
New Revision: 365295
URL: https://svnweb.freebsd.org/changeset/base/365295

Log:
  MFC r364354: TCP Cubic: recalculate cwnd for every ACK.
  
  Since cubic calculates cwnd based on absolute
  time, retaining RFC3465 (ABC) once-per-window updates
  can lead to dramatic changes of cwnd in the convex
  region. Updating cwnd for each incoming ack minimizes
  this delta, preventing unintentional line-rate bursts.
  
  Reviewed by:	chengc_netapp.com, tuexen (mentor)
  MFC after:	2 weeks
  Sponsored by:	NetApp, Inc.
  Differential Revision:	https://reviews.freebsd.org/D26060

Modified:
  stable/12/sys/netinet/cc/cc_cubic.c

Modified: stable/12/sys/netinet/cc/cc_cubic.c
==============================================================================
--- stable/12/sys/netinet/cc/cc_cubic.c	Thu Sep  3 08:45:21 2020	(r365294)
+++ stable/12/sys/netinet/cc/cc_cubic.c	Thu Sep  3 09:09:44 2020	(r365295)
@@ -131,16 +131,11 @@ cubic_ack_received(struct cc_var *ccv, uint16_t type)
 	cubic_record_rtt(ccv);
 
 	/*
-	 * Regular ACK and we're not in cong/fast recovery and we're cwnd
-	 * limited and we're either not doing ABC or are just coming out
-	 * from slow-start or were application limited or are slow starting
-	 * or are doing ABC and we've sent a cwnd's worth of bytes.
+	 * For a regular ACK and we're not in cong/fast recovery and
+	 * we're cwnd limited, always recalculate cwnd.
 	 */
 	if (type == CC_ACK && !IN_RECOVERY(CCV(ccv, t_flags)) &&
-	    (ccv->flags & CCF_CWND_LIMITED) && (!V_tcp_do_rfc3465 ||
-	    (cubic_data->flags & (CUBICFLAG_IN_SLOWSTART | CUBICFLAG_IN_APPLIMIT)) ||
-	    CCV(ccv, snd_cwnd) <= CCV(ccv, snd_ssthresh) ||
-	    (V_tcp_do_rfc3465 && (ccv->flags & CCF_ABC_SENTAWND)))) {
+	    (ccv->flags & CCF_CWND_LIMITED)) {
 		 /* Use the logic in NewReno ack_received() for slow start. */
 		if (CCV(ccv, snd_cwnd) <= CCV(ccv, snd_ssthresh) ||
 		    cubic_data->min_rtt_ticks == TCPTV_SRTTBASE) {
@@ -193,15 +188,8 @@ cubic_ack_received(struct cc_var *ccv, uint16_t type)
 				 * cwnd growth.
 				 * Only update snd_cwnd, if it doesn't shrink.
 				 */
-				if (V_tcp_do_rfc3465)
-					CCV(ccv, snd_cwnd) = ulmin(w_cubic_next,
-					    INT_MAX);
-				else
-					CCV(ccv, snd_cwnd) += ulmax(1,
-					    ((ulmin(w_cubic_next, INT_MAX) -
-					    CCV(ccv, snd_cwnd)) *
-					    CCV(ccv, t_maxseg)) /
-					    CCV(ccv, snd_cwnd));
+				CCV(ccv, snd_cwnd) = ulmin(w_cubic_next,
+				    INT_MAX);
 			}
 
 			/*



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