Re: W/RTT verification, linux tcp buffers behaviour

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



John Heffner wrote:
> Al Boldi wrote:
> > David S. Miller wrote:
> >> The tcp_adv_win_scale determines how much of the "socket buffer
> >> space" we advertise in the actual TCP window.  It's mean to
> >> approximate the amount of structure and header overhead is
> >> assosciated with each packet.
> >>
> >> But again, it's an approximation and there are cases where it
> >> is suboptimal.
> >
> > Ok, so is this suboptimal approximation the reason why the kernel does
> > not reach full bandwidth?
>
> Not really.
>
> There are a few reasons why concurrent connections can get better
> performance than a single one.  Each socket buffer has a per-connection
> size limit.  If this size is too small to fill the bandwidth-delay
> product of your path, then using multiple connections will give you
> better performance up to n connections, where n = ceiling(BDP /
> (buffer_size * fudge_factor)).  The fudge factor is determined by the
> overhead.  Recent kernels do automatic tuning of the TCP buffers, so if
> your system limits (in /proc/sys/net/ipv4/tcp_{wr}mem) are set high
> enough, then this shouldn't be an issue.  The 2.6.17 release will have
> significantly higher maximums by default -- 4 MB, up from ~100k.

Ok, but increasing them only has minimal impact.

> The other way concurrent connections can give you better performance is
> if congestion control is your limiting factor.  Standard TCP uses an
> AIMD controller with an additive increase value a=1*MSS and a backoff
> factor of b=0.5.  With n connections, you actually end up with an
> aggregate a=n*MSS, so it's more aggressive.  If you're competing against
> other flows, your aggregate will get a higher fair share of the
> bottleneck.  If you are not competing against any traffic, but you have
> a small bottleneck queue and unsynchronized losses, this can give you
> higher utilization.  If congestion control is the issue, there are
> better alternatives than concurrent connections.  Linux now has the
> ability to select from a variety of experimental congestion control
> algorithms loaded as modules.

Which module would you suggest for a non-congested network?

Or is there a module that allows for a=(n+x)*MSS where x is tunable?

> If you are actually CPU limited, on an SMP system you can also get
> better performance with multiple connections, since they can be handled
> concurrently by multiple CPU's.

It seems that CPU cycles are related to latency, which is related to 
bandwidth-delay.  So a faster CPU should yield higher thruput, which it 
does, but this would mean, that thruput is dependent on system load as that 
affects latency.

Is there a module that takes this fluctuation into account, to yield a 
constant flow?

Thanks for your detailed response!

--
Al

-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux