[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <45DA0FD6.9020404@psc.edu>
Date: Mon, 19 Feb 2007 16:00:06 -0500
From: John Heffner <jheffner@....edu>
To: "Angelo P. Castellani" <angelo.castellani@...il.com>
CC: netdev@...r.kernel.org,
Andrea Baiocchi <andrea.baiocchi@...roma1.it>,
Francesco Vacirca <francesco@....infocom.uniroma1.it>,
David Miller <davem@...emloft.net>
Subject: Re: [PATCH 2/2][TCP] YeAH-TCP: limited slow start exported function
I'd prefer to make it apply automatically across all congestion controls
that do slow-start, and also make the max_ssthresh parameter
controllable via sysctl. This patch (attached) should implement this.
Note the default value for sysctl_tcp_max_ssthresh = 0, which disables
limited slow-start. This should make ABC apply during LSS as well.
Note the patch is compile-tested only! I can do some real testing if
you'd like to apply this Dave.
Thanks,
-John
Angelo P. Castellani wrote:
> Forgot the patch..
>
> Angelo P. Castellani ha scritto:
>> From: Angelo P. Castellani <angelo.castellani@...il.con>
>>
>> RFC3742: limited slow start
>>
>> See http://www.ietf.org/rfc/rfc3742.txt
>>
>> Signed-off-by: Angelo P. Castellani <angelo.castellani@...il.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(+)
>>
>>
>
>
> ------------------------------------------------------------------------
>
> 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.
View attachment "lss.patch" of type "text/plain" (3590 bytes)
Powered by blists - more mailing lists