diff options
Diffstat (limited to 'net/ipv4/tcp_cubic.c')
-rw-r--r-- | net/ipv4/tcp_cubic.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c index a9bd8a4828a9..20de0118c98e 100644 --- a/net/ipv4/tcp_cubic.c +++ b/net/ipv4/tcp_cubic.c | |||
@@ -82,12 +82,13 @@ MODULE_PARM_DESC(hystart_ack_delta, "spacing between ack's indicating train (mse | |||
82 | /* BIC TCP Parameters */ | 82 | /* BIC TCP Parameters */ |
83 | struct bictcp { | 83 | struct bictcp { |
84 | u32 cnt; /* increase cwnd by 1 after ACKs */ | 84 | u32 cnt; /* increase cwnd by 1 after ACKs */ |
85 | u32 last_max_cwnd; /* last maximum snd_cwnd */ | 85 | u32 last_max_cwnd; /* last maximum snd_cwnd */ |
86 | u32 loss_cwnd; /* congestion window at last loss */ | 86 | u32 loss_cwnd; /* congestion window at last loss */ |
87 | u32 last_cwnd; /* the last snd_cwnd */ | 87 | u32 last_cwnd; /* the last snd_cwnd */ |
88 | u32 last_time; /* time when updated last_cwnd */ | 88 | u32 last_time; /* time when updated last_cwnd */ |
89 | u32 bic_origin_point;/* origin point of bic function */ | 89 | u32 bic_origin_point;/* origin point of bic function */ |
90 | u32 bic_K; /* time to origin point from the beginning of the current epoch */ | 90 | u32 bic_K; /* time to origin point |
91 | from the beginning of the current epoch */ | ||
91 | u32 delay_min; /* min delay (msec << 3) */ | 92 | u32 delay_min; /* min delay (msec << 3) */ |
92 | u32 epoch_start; /* beginning of an epoch */ | 93 | u32 epoch_start; /* beginning of an epoch */ |
93 | u32 ack_cnt; /* number of acks */ | 94 | u32 ack_cnt; /* number of acks */ |
@@ -219,7 +220,7 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd) | |||
219 | ca->last_time = tcp_time_stamp; | 220 | ca->last_time = tcp_time_stamp; |
220 | 221 | ||
221 | if (ca->epoch_start == 0) { | 222 | if (ca->epoch_start == 0) { |
222 | ca->epoch_start = tcp_time_stamp; /* record the beginning of an epoch */ | 223 | ca->epoch_start = tcp_time_stamp; /* record beginning */ |
223 | ca->ack_cnt = 1; /* start counting */ | 224 | ca->ack_cnt = 1; /* start counting */ |
224 | ca->tcp_cwnd = cwnd; /* syn with cubic */ | 225 | ca->tcp_cwnd = cwnd; /* syn with cubic */ |
225 | 226 | ||
@@ -263,9 +264,9 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd) | |||
263 | 264 | ||
264 | /* c/rtt * (t-K)^3 */ | 265 | /* c/rtt * (t-K)^3 */ |
265 | delta = (cube_rtt_scale * offs * offs * offs) >> (10+3*BICTCP_HZ); | 266 | delta = (cube_rtt_scale * offs * offs * offs) >> (10+3*BICTCP_HZ); |
266 | if (t < ca->bic_K) /* below origin*/ | 267 | if (t < ca->bic_K) /* below origin*/ |
267 | bic_target = ca->bic_origin_point - delta; | 268 | bic_target = ca->bic_origin_point - delta; |
268 | else /* above origin*/ | 269 | else /* above origin*/ |
269 | bic_target = ca->bic_origin_point + delta; | 270 | bic_target = ca->bic_origin_point + delta; |
270 | 271 | ||
271 | /* cubic function - calc bictcp_cnt*/ | 272 | /* cubic function - calc bictcp_cnt*/ |
@@ -285,13 +286,14 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd) | |||
285 | /* TCP Friendly */ | 286 | /* TCP Friendly */ |
286 | if (tcp_friendliness) { | 287 | if (tcp_friendliness) { |
287 | u32 scale = beta_scale; | 288 | u32 scale = beta_scale; |
289 | |||
288 | delta = (cwnd * scale) >> 3; | 290 | delta = (cwnd * scale) >> 3; |
289 | while (ca->ack_cnt > delta) { /* update tcp cwnd */ | 291 | while (ca->ack_cnt > delta) { /* update tcp cwnd */ |
290 | ca->ack_cnt -= delta; | 292 | ca->ack_cnt -= delta; |
291 | ca->tcp_cwnd++; | 293 | ca->tcp_cwnd++; |
292 | } | 294 | } |
293 | 295 | ||
294 | if (ca->tcp_cwnd > cwnd){ /* if bic is slower than tcp */ | 296 | if (ca->tcp_cwnd > cwnd) { /* if bic is slower than tcp */ |
295 | delta = ca->tcp_cwnd - cwnd; | 297 | delta = ca->tcp_cwnd - cwnd; |
296 | max_cnt = cwnd / delta; | 298 | max_cnt = cwnd / delta; |
297 | if (ca->cnt > max_cnt) | 299 | if (ca->cnt > max_cnt) |
@@ -320,7 +322,6 @@ static void bictcp_cong_avoid(struct sock *sk, u32 ack, u32 acked) | |||
320 | bictcp_update(ca, tp->snd_cwnd); | 322 | bictcp_update(ca, tp->snd_cwnd); |
321 | tcp_cong_avoid_ai(tp, ca->cnt); | 323 | tcp_cong_avoid_ai(tp, ca->cnt); |
322 | } | 324 | } |
323 | |||
324 | } | 325 | } |
325 | 326 | ||
326 | static u32 bictcp_recalc_ssthresh(struct sock *sk) | 327 | static u32 bictcp_recalc_ssthresh(struct sock *sk) |
@@ -452,7 +453,8 @@ static int __init cubictcp_register(void) | |||
452 | * based on SRTT of 100ms | 453 | * based on SRTT of 100ms |
453 | */ | 454 | */ |
454 | 455 | ||
455 | beta_scale = 8*(BICTCP_BETA_SCALE+beta)/ 3 / (BICTCP_BETA_SCALE - beta); | 456 | beta_scale = 8*(BICTCP_BETA_SCALE+beta) / 3 |
457 | / (BICTCP_BETA_SCALE - beta); | ||
456 | 458 | ||
457 | cube_rtt_scale = (bic_scale * 10); /* 1024*c/rtt */ | 459 | cube_rtt_scale = (bic_scale * 10); /* 1024*c/rtt */ |
458 | 460 | ||