Re: 2.6.12-rc5-mm2: "bic unavailable using TCP reno" messages

From: Stephen Hemminger
Date: Thu Jun 02 2005 - 12:42:42 EST


On Thu, 02 Jun 2005 14:58:17 +0100
Baruch Even <baruch@xxxxxxxxx> wrote:

> Adrian Bunk wrote:
> > On Wed, Jun 01, 2005 at 02:28:24AM -0700, Andrew Morton wrote:
> >
> >>...
> >>Changes since 2.6.12-rc5-mm1:
> >>...
> >>+tcp-tcp_infra.patch
> >>...
> >> Steve Hemminger's TCP enhancements.
> >>...
> >
> >
> > I said "no" to CONFIG_TCP_CONG_BIC, and now my syslog is full of messages
> > kernel: bic unavailable using TCP reno
> >
> > I have no problem with such a message being shown once - but once should
> > be enough.
>
> The best solution for this would be to check the available protocols at
> setup time and not at connection creation time. This would also provide
> a better feedback to the user, since he will either see that what he set
> was taken, or it wasn't.
>
> In the current mechanism you can set the protocol to 'foo' and it will
> show back as 'foo'. You'll get complaints only once a connection is
> attempted with this protocol.
>
> It does mean some extra work in the sysctl stage, but it's better IMO to
> do it there rather than at connection setup time.
>
> Baruch

Your right, the sysctl handler should be smarter, but that is not the problem here.
The problem is that the default value is set to be BIC to be compatible with earlier kernels.
Since 75% of the world isn't smart enough to figure out how to use sysctl, there is a
question of what the default should be, and what to do if that is missing.

One version had a messy ifdef chain to try and avoid the warning:

char sysctl_tcp_congestion_control[] =
#if defined(CONFIG_TCP_BIC)
"bic"
#elif defined(CONFIG_TCP_HTCP)
"htcp"
#else
"reno"
#endif
;

but that was ugly.

Another possibility is putting it in as yet another config value at kernel build time.

To suppress the warning repeating, probably the best solution would be rewrite the string
if we have to revert to reno. But carefully to avoid SMP issues. This also implies a smarter
sysctl string handler for this value as well.

P.s: saw your comparison paper, after a little more corroboration I would like to make
H-TCP the default.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/