Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145972599
D8349.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D8349.id.diff
View Options
Index: head/sys/netinet/cc/cc_cdg.c
===================================================================
--- head/sys/netinet/cc/cc_cdg.c
+++ head/sys/netinet/cc/cc_cdg.c
@@ -474,7 +474,9 @@
ENTER_RECOVERY(CCV(ccv, t_flags));
break;
case CC_RTO:
- CCV(ccv, snd_ssthresh) = max(2*mss, cwin/2);
+ CCV(ccv, snd_ssthresh) =
+ max((CCV(ccv, snd_max) - CCV(ccv, snd_una)) / 2 / mss, 2)
+ * mss;
CCV(ccv, snd_cwnd) = mss;
break;
default:
Index: head/sys/netinet/cc/cc_chd.c
===================================================================
--- head/sys/netinet/cc/cc_chd.c
+++ head/sys/netinet/cc/cc_chd.c
@@ -330,13 +330,11 @@
struct ertt *e_t;
struct chd *chd_data;
int qdly;
- uint32_t cwin;
u_int mss;
e_t = khelp_get_osd(CCV(ccv, osd), ertt_id);
chd_data = ccv->cc_data;
qdly = imax(e_t->rtt, chd_data->maxrtt_in_rtt) - e_t->minrtt;
- cwin = CCV(ccv, snd_cwnd);
mss = CCV(ccv, t_maxseg);
switch(signal_type) {
@@ -378,7 +376,9 @@
ENTER_FASTRECOVERY(CCV(ccv, t_flags));
break;
case CC_RTO:
- CCV(ccv, snd_ssthresh) = max(2*mss, cwin/2);
+ CCV(ccv, snd_ssthresh) =
+ max((CCV(ccv, snd_max) - CCV(ccv, snd_una)) / 2 / mss, 2)
+ * mss;
CCV(ccv, snd_cwnd) = mss;
break;
Index: head/sys/netinet/cc/cc_dctcp.c
===================================================================
--- head/sys/netinet/cc/cc_dctcp.c
+++ head/sys/netinet/cc/cc_dctcp.c
@@ -230,19 +230,21 @@
dctcp_cong_signal(struct cc_var *ccv, uint32_t type)
{
struct dctcp *dctcp_data;
- uint32_t cwin;
+ uint32_t cwin, ssthresh_on_loss;
u_int mss;
dctcp_data = ccv->cc_data;
cwin = CCV(ccv, snd_cwnd);
mss = CCV(ccv, t_maxseg);
+ ssthresh_on_loss =
+ max((CCV(ccv, snd_max) - CCV(ccv, snd_una)) / 2 / mss, 2)
+ * mss;
switch (type) {
case CC_NDUPACK:
if (!IN_FASTRECOVERY(CCV(ccv, t_flags))) {
if (!IN_CONGRECOVERY(CCV(ccv, t_flags))) {
- CCV(ccv, snd_ssthresh) = mss *
- max(cwin / 2 / mss, 2);
+ CCV(ccv, snd_ssthresh) = ssthresh_on_loss;
dctcp_data->num_cong_events++;
} else {
/* cwnd has already updated as congestion
@@ -250,8 +252,7 @@
* snd_cwnd_prev and recalculate snd_ssthresh
*/
cwin = CCV(ccv, snd_cwnd_prev);
- CCV(ccv, snd_ssthresh) =
- max(cwin / 2 / mss, 2) * mss;
+ CCV(ccv, snd_ssthresh) = ssthresh_on_loss;
}
ENTER_RECOVERY(CCV(ccv, t_flags));
}
@@ -265,8 +266,7 @@
if (!IN_CONGRECOVERY(CCV(ccv, t_flags))) {
if (V_dctcp_slowstart &&
dctcp_data->num_cong_events++ == 0) {
- CCV(ccv, snd_ssthresh) =
- mss * max(cwin / 2 / mss, 2);
+ CCV(ccv, snd_ssthresh) = ssthresh_on_loss;
dctcp_data->alpha = MAX_ALPHA_VALUE;
dctcp_data->bytes_ecn = 0;
dctcp_data->bytes_total = 0;
@@ -285,7 +285,7 @@
dctcp_update_alpha(ccv);
dctcp_data->save_sndnxt += CCV(ccv, t_maxseg);
dctcp_data->num_cong_events++;
- CCV(ccv, snd_ssthresh) = max(2 * mss, cwin / 2);
+ CCV(ccv, snd_ssthresh) = ssthresh_on_loss;
CCV(ccv, snd_cwnd) = mss;
}
break;
Index: head/sys/netinet/cc/cc_htcp.c
===================================================================
--- head/sys/netinet/cc/cc_htcp.c
+++ head/sys/netinet/cc/cc_htcp.c
@@ -325,7 +325,9 @@
*/
if (CCV(ccv, t_rxtshift) >= 2)
htcp_data->t_last_cong = ticks;
- CCV(ccv, snd_ssthresh) = max(2 * mss, cwin / 2);
+ CCV(ccv, snd_ssthresh) =
+ max((CCV(ccv, snd_max) - CCV(ccv, snd_una)) / 2 / mss, 2)
+ * mss;
CCV(ccv, snd_cwnd) = mss;
break;
}
@@ -518,6 +520,10 @@
CCV(ccv, snd_ssthresh) = ((u_long)CCV(ccv, snd_cwnd) *
htcp_data->beta) >> HTCP_SHIFT;
}
+
+ /* Align ssthresh to MSS boundary */
+ CCV(ccv, snd_ssthresh) = (CCV(ccv, snd_ssthresh) / CCV(ccv, t_maxseg))
+ * CCV(ccv, t_maxseg);
}
Index: head/sys/netinet/cc/cc_newreno.c
===================================================================
--- head/sys/netinet/cc/cc_newreno.c
+++ head/sys/netinet/cc/cc_newreno.c
@@ -182,23 +182,26 @@
static void
newreno_cong_signal(struct cc_var *ccv, uint32_t type)
{
- uint32_t cwin;
+ uint32_t cwin, ssthresh_on_loss;
u_int mss;
cwin = CCV(ccv, snd_cwnd);
mss = CCV(ccv, t_maxseg);
+ ssthresh_on_loss =
+ max((CCV(ccv, snd_max) - CCV(ccv, snd_una)) / 2 / mss, 2)
+ * mss;
/* Catch algos which mistakenly leak private signal types. */
KASSERT((type & CC_SIGPRIVMASK) == 0,
("%s: congestion signal type 0x%08x is private\n", __func__, type));
- cwin = max(2*mss, cwin/2);
+ cwin = max(cwin / 2 / mss, 2) * mss;
switch (type) {
case CC_NDUPACK:
if (!IN_FASTRECOVERY(CCV(ccv, t_flags))) {
if (!IN_CONGRECOVERY(CCV(ccv, t_flags))) {
- CCV(ccv, snd_ssthresh) = cwin;
+ CCV(ccv, snd_ssthresh) = ssthresh_on_loss;
CCV(ccv, snd_cwnd) = cwin;
}
ENTER_RECOVERY(CCV(ccv, t_flags));
@@ -206,13 +209,13 @@
break;
case CC_ECN:
if (!IN_CONGRECOVERY(CCV(ccv, t_flags))) {
- CCV(ccv, snd_ssthresh) = cwin;
+ CCV(ccv, snd_ssthresh) = ssthresh_on_loss;
CCV(ccv, snd_cwnd) = cwin;
ENTER_CONGRECOVERY(CCV(ccv, t_flags));
}
break;
case CC_RTO:
- CCV(ccv, snd_ssthresh) = cwin;
+ CCV(ccv, snd_ssthresh) = ssthresh_on_loss;
CCV(ccv, snd_cwnd) = mss;
break;
}
Index: head/sys/netinet/tcp_input.c
===================================================================
--- head/sys/netinet/tcp_input.c
+++ head/sys/netinet/tcp_input.c
@@ -444,7 +444,8 @@
* ssthresh = max (FlightSize / 2, 2*SMSS) eq (4)
*/
tp->snd_ssthresh =
- max((tp->snd_max - tp->snd_una) / 2, 2 * maxseg);
+ max((tp->snd_max - tp->snd_una) / 2 / maxseg, 2)
+ * maxseg;
tp->snd_cwnd = maxseg;
}
break;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Feb 27, 4:05 PM (8 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29035184
Default Alt Text
D8349.id.diff (5 KB)
Attached To
Mode
D8349: Setting ssthresh more accurately on loss.
Attached
Detach File
Event Timeline
Log In to Comment