Skip to content
Permalink
Browse files
tcp_cubic: better follow cubic curve after idle period
Jana Iyengar found an interesting issue on CUBIC :

The epoch is only updated/reset initially and when experiencing losses.
The delta "t" of now - epoch_start can be arbitrary large after app idle
as well as the bic_target. Consequentially the slope (inverse of
ca->cnt) would be really large, and eventually ca->cnt would be
lower-bounded in the end to 2 to have delayed-ACK slow-start behavior.

This particularly shows up when slow_start_after_idle is disabled
as a dangerous cwnd inflation (1.5 x RTT) after few seconds of idle
time.

Jana initial fix was to reset epoch_start if app limited,
but Neal pointed out it would ask the CUBIC algorithm to recalculate the
curve so that we again start growing steeply upward from where cwnd is
now (as CUBIC does just after a loss). Ideally we'd want the cwnd growth
curve to be the same shape, just shifted later in time by the amount of
the idle period.

Reported-by: Jana Iyengar <jri@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: Sangtae Ha <sangtae.ha@gmail.com>
Cc: Lawrence Brakmo <lawrence@brakmo.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eric Dumazet authored and davem330 committed Sep 10, 2015
1 parent 05c5a46 commit 30927520dbae297182990bb21d08762bcc35ce1d
Showing 1 changed file with 16 additions and 0 deletions.
@@ -151,6 +151,21 @@ static void bictcp_init(struct sock *sk)
tcp_sk(sk)->snd_ssthresh = initial_ssthresh;
}

static void bictcp_cwnd_event(struct sock *sk, enum tcp_ca_event event)
{
if (event == CA_EVENT_TX_START) {
s32 delta = tcp_time_stamp - tcp_sk(sk)->lsndtime;
struct bictcp *ca = inet_csk_ca(sk);

/* We were application limited (idle) for a while.
* Shift epoch_start to keep cwnd growth to cubic curve.
*/
if (ca->epoch_start && delta > 0)
ca->epoch_start += delta;
return;
}
}

/* calculate the cubic root of x using a table lookup followed by one
* Newton-Raphson iteration.
* Avg err ~= 0.195%
@@ -450,6 +465,7 @@ static struct tcp_congestion_ops cubictcp __read_mostly = {
.cong_avoid = bictcp_cong_avoid,
.set_state = bictcp_state,
.undo_cwnd = bictcp_undo_cwnd,
.cwnd_event = bictcp_cwnd_event,
.pkts_acked = bictcp_acked,
.owner = THIS_MODULE,
.name = "cubic",

41 comments on commit 3092752

@zhouyongtao
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不明觉厉的样子

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what mean ?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what mean ?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what mean ?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what mean?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what mean?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what mean?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what mean?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean ?

@TapXWorld
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what man?

@vingc
Copy link

@vingc vingc commented on 3092752 Sep 28, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

膜拜,感谢贡献者

@douglarek
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's Cool, thanks

@anythink-wx
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

顶~

@openproject
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So good!

@Honghe
Copy link

@Honghe Honghe commented on 3092752 Sep 28, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

对 cubic algorithm 不知,因此看不懂此重要修复,可惜了

@xormplus
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good job

@teddysun
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Signed-off-by: Yuchung Cheng ycheng@google.com

I guess, this is a Chinese name.
Good job.

@lebiru
Copy link

@lebiru lebiru commented on 3092752 Sep 28, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

awesome 👍

@swaechter
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the return inside the if statement really needed?

@liuchangdong
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good job

@porscheyin
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yuchung Cheng is from Taiwan

@bli22ard
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我赵日天并不服

@kenmux
Copy link

@kenmux kenmux commented on 3092752 Sep 29, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why mention about this man specially? Why?
They're all from Google. Good jobs, guys!

@dhdone
Copy link

@dhdone dhdone commented on 3092752 Sep 29, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

感谢修复者

@zhenhua
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How much performance improvement could we have by applying this fix? Could anyone give us a hint?

@marctmiller
Copy link

@marctmiller marctmiller commented on 3092752 Sep 29, 2015 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hephaex
Copy link

@hephaex hephaex commented on 3092752 Sep 29, 2015 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@guhb
Copy link

@guhb guhb commented on 3092752 Sep 29, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

看不懂~先顶一个

@kbengine
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wow!

@rafavg77
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good Job!

@LINGQ1991
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不明觉厉!!!

@gbjtv
Copy link

@gbjtv gbjtv commented on 3092752 Oct 6, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will this make it into other lts kernels?

@theharveyz
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

awesome!

@dale76uk
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi,
I'm running linux mint 17.1, how do I apply this patch?
Thanks in advance

@marctmiller
Copy link

@marctmiller marctmiller commented on 3092752 Oct 25, 2015 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nkeck720
Copy link

@nkeck720 nkeck720 commented on 3092752 Oct 25, 2015 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dale76uk
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

marc, there is no need to be so rude! I'm not that naive.

@marctmiller
Copy link

@marctmiller marctmiller commented on 3092752 Oct 26, 2015 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@arjun024
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👏

@chandlerding
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well , we just need wait for redhat to backport this patch and roll up the new kernel updates...

@losywee
Copy link

@losywee losywee commented on 3092752 Mar 5, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks.

Please sign in to comment.