All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Angelo P. Castellani" <angelo.castellani@gmail.com>
To: netdev@vger.kernel.org
Cc: Andrea Baiocchi <andrea.baiocchi@uniroma1.it>,
	Francesco Vacirca <francesco@net.infocom.uniroma1.it>
Subject: Re: [PATCH 2/2][TCP] YeAH-TCP: limited slow start exported function
Date: Mon, 19 Feb 2007 11:36:57 +0100	[thread overview]
Message-ID: <45D97DC9.1030305@gmail.com> (raw)
In-Reply-To: <45D97D5D.9040101@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1012 bytes --]

Forgot the patch..

Angelo P. Castellani ha scritto:
> From: Angelo P. Castellani <angelo.castellani@gmail.con>
>
> RFC3742: limited slow start
>
> See http://www.ietf.org/rfc/rfc3742.txt
>
> Signed-off-by: Angelo P. Castellani <angelo.castellani@gmail.con>
> ---
>
> To allow code reutilization I've added the limited slow start 
> procedure as an exported symbol of linux tcp congestion control.
>
> On large BDP networks canonical slow start should be avoided because 
> it requires large packet losses to converge, whereas at lower BDPs 
> slow start and limited slow start are identical. Large BDP is defined 
> through the max_ssthresh variable.
>
> I think limited slow start could safely replace the canonical slow 
> start procedure in Linux.
>
> Regards,
> Angelo P. Castellani
>
> p.s.: in the attached patch is added an exported function currently 
> used only by YeAH TCP
>
> include/net/tcp.h   |    1 +
> net/ipv4/tcp_cong.c |   23 +++++++++++++++++++++++
> 2 files changed, 24 insertions(+)
>
>


[-- Attachment #2: tcp_yeah-2of2.diff --]
[-- Type: text/x-patch, Size: 1662 bytes --]

diff -uprN linux-2.6.20-a/include/net/tcp.h linux-2.6.20-c/include/net/tcp.h
--- linux-2.6.20-a/include/net/tcp.h	2007-02-04 19:44:54.000000000 +0100
+++ linux-2.6.20-c/include/net/tcp.h	2007-02-19 10:54:10.000000000 +0100
@@ -669,6 +669,7 @@ extern void tcp_get_allowed_congestion_c
 extern int tcp_set_allowed_congestion_control(char *allowed);
 extern int tcp_set_congestion_control(struct sock *sk, const char *name);
 extern void tcp_slow_start(struct tcp_sock *tp);
+extern void tcp_limited_slow_start(struct tcp_sock *tp);
 
 extern struct tcp_congestion_ops tcp_init_congestion_ops;
 extern u32 tcp_reno_ssthresh(struct sock *sk);
diff -uprN linux-2.6.20-a/net/ipv4/tcp_cong.c linux-2.6.20-c/net/ipv4/tcp_cong.c
--- linux-2.6.20-a/net/ipv4/tcp_cong.c	2007-02-04 19:44:54.000000000 +0100
+++ linux-2.6.20-c/net/ipv4/tcp_cong.c	2007-02-19 10:54:10.000000000 +0100
@@ -297,6 +297,29 @@ void tcp_slow_start(struct tcp_sock *tp)
 }
 EXPORT_SYMBOL_GPL(tcp_slow_start);
 
+void tcp_limited_slow_start(struct tcp_sock *tp)
+{
+	/* RFC3742: limited slow start
+	 * the window is increased by 1/K MSS for each arriving ACK,
+	 * for K = int(cwnd/(0.5 max_ssthresh))
+	 */
+
+	const int max_ssthresh = 100;
+
+	if (max_ssthresh > 0 && tp->snd_cwnd > max_ssthresh) {
+		u32 k = max(tp->snd_cwnd / (max_ssthresh >> 1), 1U);
+		if (++tp->snd_cwnd_cnt >= k) {
+			if (tp->snd_cwnd < tp->snd_cwnd_clamp)
+				tp->snd_cwnd++;
+			tp->snd_cwnd_cnt = 0;
+		}
+	} else {
+		if (tp->snd_cwnd < tp->snd_cwnd_clamp)
+			tp->snd_cwnd++;
+	}
+}
+EXPORT_SYMBOL_GPL(tcp_limited_slow_start);
+
 /*
  * TCP Reno congestion control
  * This is special case used for fallback as well.

  reply	other threads:[~2007-02-19 10:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-19 10:35 [PATCH 2/2][TCP] YeAH-TCP: limited slow start exported function Angelo P. Castellani
2007-02-19 10:36 ` Angelo P. Castellani [this message]
2007-02-19 21:00   ` John Heffner
2007-02-19 23:50     ` Angelo P. Castellani
2007-02-20  4:32       ` John Heffner
2007-02-20  9:20         ` Angelo P. Castellani
2007-02-22  8:27     ` David Miller
2007-02-22  8:32       ` David Miller
2007-02-22 14:25         ` John Heffner
2007-02-22 14:37           ` David Miller
2007-02-22  8:21 ` David Miller
2007-02-22 16:08   ` Angelo P. Castellani

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45D97DC9.1030305@gmail.com \
    --to=angelo.castellani@gmail.com \
    --cc=andrea.baiocchi@uniroma1.it \
    --cc=francesco@net.infocom.uniroma1.it \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.