netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vlad Yasevich <vladislav.yasevich@hp.com>
To: Ben Woodard <woodard@redhat.com>
Cc: David Miller <davem@davemloft.net>,
	netdev@vger.kernel.org, mgrondona@llnl.gov, behlendorf1@llnl.gov
Subject: Re: [PATCH] Customizable TCP backoff patch
Date: Wed, 11 Oct 2006 10:01:47 -0400	[thread overview]
Message-ID: <452CF94B.9000309@hp.com> (raw)
In-Reply-To: <452C4D12.9060102@redhat.com>

Ben Woodard wrote:
 ------------------------------------------------------------------------
> diff -ru linux-2.6.18/include/net/tcp.h linux-2.6.18.new/include/net/tcp.h
> --- linux-2.6.18/include/net/tcp.h	2006-09-19 20:42:06.000000000 -0700
> +++ linux-2.6.18.new/include/net/tcp.h	2006-10-10 18:42:00.000000000 -0700
> @@ -227,11 +227,23 @@
>  extern int sysctl_tcp_base_mss;
>  extern int sysctl_tcp_workaround_signed_windows;
>  extern int sysctl_tcp_slow_start_after_idle;
> +extern unsigned long sysctl_tcp_rto_max;
> +extern unsigned long sysctl_tcp_rto_init;
>  
>  extern atomic_t tcp_memory_allocated;
>  extern atomic_t tcp_sockets_allocated;
>  extern int tcp_memory_pressure;
>  
> +static inline unsigned long tcp_rto_max(struct tcp_sock *tp)
> +{
> +        return tp->rto_max ? tp->rto_max*HZ/1000 : sysctl_tcp_rto_max;
                                ^^^^^^^^^^^^^^^^^^^
That should probably be msecs_to_jiffies(tp->rto_max)

> +}
> +
> +static inline unsigned long tcp_rto_init(struct tcp_sock *tp)
> +{
> +        return tp->rto_init ? tp->rto_init*HZ/1000 : sysctl_tcp_rto_init;

Ditto.

> +}
> +
>  /*
>   * The next routines deal with comparing 32 bit unsigned ints
>   * and worry about wraparound (automatic with unsigned arithmetic).
> diff -ru linux-2.6.18/net/ipv4/sysctl_net_ipv4.c linux-2.6.18.new/net/ipv4/sysctl_net_ipv4.c
> --- linux-2.6.18/net/ipv4/sysctl_net_ipv4.c	2006-09-19 20:42:06.000000000 -0700
> +++ linux-2.6.18.new/net/ipv4/sysctl_net_ipv4.c	2006-10-10 16:32:08.000000000 -0700
> @@ -128,6 +128,8 @@
>  	return ret;
>  }
>  
> +static unsigned long tcp_rto_min=0;
> +static unsigned long tcp_rto_max=65535;
>  
>  ctl_table ipv4_table[] = {
>          {
> @@ -697,6 +699,26 @@
>  		.mode		= 0644,
>  		.proc_handler	= &proc_dointvec
>  	},
> +	{
> +	        .ctl_name       = NET_TCP_RTO_MAX,
> +		.procname       = "tcp_rto_max",
> +		.data           = &sysctl_tcp_rto_max,
> +		.maxlen         = sizeof(unsigned),
> +		.mode           = 0644,
> +		.proc_handler   = &proc_doulongvec_ms_jiffies,
> +		.extra1         = &tcp_rto_min_constant,
> +		.extra2         = &tcp_rto_max_constant,
> +	},
> +	{
> +	        .ctl_name       = NET_TCP_RTO_INIT,
> +		.procname       = "tcp_rto_init",
> +		.data           = &sysctl_tcp_rto_init,
> +		.maxlen         = sizeof(unsigned),
> +		.mode           = 0644,
> +		.proc_handler   = &proc_doulongvec_ms_jiffies,
> +		.extra1         = &tcp_rto_min_constant,
> +		.extra2         = &tcp_rto_max_constant,
> +	},
>  	{ .ctl_name = 0 }
>  };

Try as I might, I can't find proc_doulongvec_ms_jiffies() anywhere.  I think
you meant proc_doulongvec_ms_jiffies_minmax()?

Also, this function has a bug in that it doesn't do corrections for potentially different
HZ values.  Look at the msecs_to_jiffies...  When I've used proc_doulongvec_ms_jiffies_minmax()
before, I would seen rather interesting truncation errors such that sysctl input didn't match
sysctl output.

>  
> diff -ru linux-2.6.18/net/ipv4/tcp.c linux-2.6.18.new/net/ipv4/tcp.c
> --- linux-2.6.18/net/ipv4/tcp.c	2006-09-19 20:42:06.000000000 -0700
> +++ linux-2.6.18.new/net/ipv4/tcp.c	2006-10-10 18:37:40.000000000 -0700
> @@ -1764,6 +1764,8 @@
>  	return err;
>  }
>  
> +#define TCP_BACKOFF_MAXVAL 65535
> +
>  /*
>   *	Socket option code for TCP.
>   */
> @@ -1939,6 +1941,21 @@
>  		}
>  		break;
>  
> +        case TCP_BACKOFF_MAX:
> +                if (val < 1 || val > TCP_BACKOFF_MAXVAL)
> +                        err = -EINVAL;
> +                else
> +                        tp->rto_max = val;
> +                break;
> + 
> +        case TCP_BACKOFF_INIT:
> +                if (val < 1 || val > TCP_BACKOFF_MAXVAL)
> +                        err = -EINVAL;
> +                else
> +                        tp->rto_init = val;
> +                break;
> + 
> + 
>  	default:
>  		err = -ENOPROTOOPT;
>  		break;
> @@ -2110,6 +2127,12 @@
>  		if (copy_to_user(optval, icsk->icsk_ca_ops->name, len))
>  			return -EFAULT;
>  		return 0;
> +        case TCP_BACKOFF_MAX:
> +	        val = tcp_rto_max(tp)*1000/HZ;
> +                break;
> +        case TCP_BACKOFF_INIT:
> +	        val = tcp_rto_init(tp)*1000/HZ;

The two divisions above introduce truncation errors such the input doesn't
match the output.  Better to use jiffies_to_msecs().

Regards
-vlad

  parent reply	other threads:[~2006-10-11 14:01 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-27 18:52 [PATCH] Customizable TCP backoff patch Ben Woodard
2006-09-27 23:16 ` David Miller
2006-09-27 23:00   ` Stephen Hemminger
2006-09-28  2:06     ` David Miller
2006-10-03 18:14   ` Ben Woodard
2006-10-04  7:07     ` David Miller
2006-10-04  8:56       ` Ingo Oeser
2006-10-04  9:08         ` David Miller
2006-10-04 17:17       ` Stephen Hemminger
2006-10-11  1:46       ` Ben Woodard
2006-10-11  1:59         ` YOSHIFUJI Hideaki / 吉藤英明
2006-10-11  2:53         ` David Miller
2006-10-11  2:54         ` David Miller
2006-10-11 14:01         ` Vlad Yasevich [this message]
2006-10-12  0:51           ` Ben Woodard
2006-10-12  1:06             ` YOSHIFUJI Hideaki / 吉藤英明
2006-10-12 15:49               ` Ben Woodard

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=452CF94B.9000309@hp.com \
    --to=vladislav.yasevich@hp.com \
    --cc=behlendorf1@llnl.gov \
    --cc=davem@davemloft.net \
    --cc=mgrondona@llnl.gov \
    --cc=netdev@vger.kernel.org \
    --cc=woodard@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).