mirror of
https://github.com/dynup/kpatch
synced 2024-12-24 06:02:05 +00:00
c95b2b16a6
examples/tcp_cubic-better-follow-cubic-curve-original.patch is the original patch, combined from two mainline commits (see the description in the patch). It cannot be used with Kpatch as it is because the change is in the initialization of a global structure. examples/tcp_cubic-better-follow-cubic-curve-converted.patch is a modification of the patch that Kpatch can process. Still, this modification has its issues, see the description there. Signed-off-by: Evgenii Shatokhin <eshatokhin@odin.com>
59 lines
1.7 KiB
Diff
59 lines
1.7 KiB
Diff
This patch is for 3.10.x.
|
|
It combines the following commits from the mainline:
|
|
|
|
commit 30927520dbae297182990bb21d08762bcc35ce1d
|
|
Author: Eric Dumazet <edumazet@google.com>
|
|
Date: Wed Sep 9 21:55:07 2015 -0700
|
|
|
|
tcp_cubic: better follow cubic curve after idle period
|
|
|
|
commit c2e7204d180f8efc80f27959ca9cf16fa17f67db
|
|
Author: Eric Dumazet <edumazet@google.com>
|
|
Date: Thu Sep 17 08:38:00 2015 -0700
|
|
|
|
tcp_cubic: do not set epoch_start in the future
|
|
|
|
References:
|
|
http://www.phoronix.com/scan.php?page=news_item&px=Google-Fixes-TCP-Linux
|
|
|
|
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c
|
|
index 894b7ce..872b3a0 100644
|
|
--- a/net/ipv4/tcp_cubic.c
|
|
+++ b/net/ipv4/tcp_cubic.c
|
|
@@ -153,6 +153,27 @@ 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) {
|
|
+ struct bictcp *ca = inet_csk_ca(sk);
|
|
+ u32 now = tcp_time_stamp;
|
|
+ s32 delta;
|
|
+
|
|
+ delta = now - tcp_sk(sk)->lsndtime;
|
|
+
|
|
+ /* 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;
|
|
+ if (after(ca->epoch_start, now))
|
|
+ ca->epoch_start = now;
|
|
+ }
|
|
+ return;
|
|
+ }
|
|
+}
|
|
+
|
|
/* calculate the cubic root of x using a table lookup followed by one
|
|
* Newton-Raphson iteration.
|
|
* Avg err ~= 0.195%
|
|
@@ -439,6 +460,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",
|