lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ