Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F160252099
D41672.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D41672.diff
View Options
diff --git a/sys/netinet/cc/cc_cubic.c b/sys/netinet/cc/cc_cubic.c
--- a/sys/netinet/cc/cc_cubic.c
+++ b/sys/netinet/cc/cc_cubic.c
@@ -88,6 +88,7 @@
static void cubic_newround(struct cc_var *ccv, uint32_t round_cnt);
static void cubic_rttsample(struct cc_var *ccv, uint32_t usec_rtt,
uint32_t rxtcnt, uint32_t fas);
+static unsigned long cubic_compute_pipe(struct cc_var *ccv);
struct cc_algo cubic_cc_algo = {
.name = "cubic",
@@ -424,6 +425,7 @@
static void
cubic_cong_signal(struct cc_var *ccv, uint32_t type)
{
+ unsigned long pipe;
struct cubic *cubic_data;
u_int mss;
@@ -456,10 +458,12 @@
cubic_log_hystart_event(ccv, cubic_data, 9, CCV(ccv, snd_ssthresh));
}
if (!IN_CONGRECOVERY(CCV(ccv, t_flags))) {
+ pipe = cubic_compute_pipe(ccv);
cubic_ssthresh_update(ccv, mss);
+ CCV(ccv, snd_cwnd) = ulmax((pipe * CUBIC_BETA) >> CUBIC_SHIFT,
+ CCV(ccv, snd_ssthresh));
cubic_data->num_cong_events++;
cubic_data->t_epoch = 0; /* This will recalculate K */
- CCV(ccv, snd_cwnd) = CCV(ccv, snd_ssthresh);
ENTER_CONGRECOVERY(CCV(ccv, t_flags));
}
break;
@@ -529,7 +533,7 @@
cubic_post_recovery(struct cc_var *ccv)
{
struct cubic *cubic_data;
- int pipe;
+ unsigned long pipe;
cubic_data = ccv->cc_data;
pipe = 0;
@@ -542,10 +546,7 @@
*
* XXXLAS: Find a way to do this without needing curack
*/
- if (V_tcp_do_newsack)
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
- else
- pipe = CCV(ccv, snd_max) - ccv->curack;
+ pipe = cubic_compute_pipe(ccv);
if (pipe < CCV(ccv, snd_ssthresh))
/*
@@ -627,11 +628,16 @@
struct cubic *cubic_data;
uint32_t ssthresh;
uint32_t cwnd;
+ unsigned long pipe;
cubic_data = ccv->cc_data;
cwnd = CCV(ccv, snd_cwnd);
+ cubic_data->cwnd_prior = cwnd;
- /* Fast convergence heuristic. */
+ /*
+ * draft-ietf-tcpm-rfc8312bis-15 Section 4.7:
+ * Fast convergence heuristic
+ */
if (cwnd < cubic_data->W_max) {
cwnd = ((uint64_t)cwnd * CUBIC_FC_FACTOR) >> CUBIC_SHIFT;
}
@@ -639,19 +645,11 @@
cubic_data->W_max = cwnd;
/*
- * On the first congestion event, set ssthresh to cwnd * 0.5
- * and reduce W_max to cwnd * beta. This aligns the cubic concave
- * region appropriately. On subsequent congestion events, set
- * ssthresh to cwnd * beta.
+ * draft-ietf-tcpm-rfc8312bis-15 Section 4.6:
+ * Calculate the ssthresh using the outstanding unacknowledged data
*/
- if ((cubic_data->flags & CUBICFLAG_CONG_EVENT) == 0) {
- ssthresh = cwnd >> 1;
- cubic_data->W_max = ((uint64_t)cwnd *
- CUBIC_BETA) >> CUBIC_SHIFT;
- } else {
- ssthresh = ((uint64_t)cwnd *
- CUBIC_BETA) >> CUBIC_SHIFT;
- }
+ pipe = cubic_compute_pipe(ccv);
+ ssthresh = (pipe * CUBIC_BETA) >> CUBIC_SHIFT;
CCV(ccv, snd_ssthresh) = max(ssthresh, 2 * maxseg);
}
@@ -730,5 +728,17 @@
cubic_log_hystart_event(ccv, cubicd, 4, round_cnt);
}
+static unsigned long
+cubic_compute_pipe(struct cc_var *ccv)
+{
+ unsigned long pipe;
+
+ if (V_tcp_do_newsack)
+ pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ else
+ pipe = CCV(ccv, snd_max) - ccv->curack;
+ return pipe;
+}
+
DECLARE_CC_MODULE(cubic, &cubic_cc_algo);
MODULE_VERSION(cubic, 2);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Jun 23, 2:10 PM (9 m, 6 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34203472
Default Alt Text
D41672.diff (3 KB)
Attached To
Mode
D41672: tcp: add cubic_compute_pipe
Attached
Detach File
Event Timeline
Log In to Comment