Welcome! Log In Create A New Profile

Advanced

HAProxy and Initial Congestion Window (initcwnd)

Posted by Kyle Brandt 
Kyle Brandt
HAProxy and Initial Congestion Window (initcwnd)
February 29, 2012 06:10PM
Hi All,

I am trying to experiment with increasing the size of the initial
congestion window to speed up higher latency connections. I tried setting
this via route on one of my load balancers with Kernel version 2.6.32 (It
seems the ability to adjust the initial receive window is in later
versions, but I believe 2.6.32 should support the initial send window
size ):

<clientIP> via <gateway-ip> dev eth0 proto static initcwnd 10

Comparing packet captures, the SYN/ACK packet has the "Calculated Window
Size" (according to wireshark) at 5792 both before and after the route
change -- so this doesn't seem to effect the initial window size.

1) Am I looking in the right place to see if this working (Window Size in
the SYN/ACK Packet sent by the load balancer?)
2) If I am looking in the right place, any ideas why this isn't working? I
saw a mention of initcwnd in the 1.6 ROADMAP in git, so maybe HAProxy
wouldn't take advantage of this by default in 1.5?

Thanks!
Kyle
Willy Tarreau
Re: HAProxy and Initial Congestion Window (initcwnd)
March 10, 2012 09:30AM
Hi Kyle,

On Wed, Feb 29, 2012 at 12:02:59PM -0500, Kyle Brandt wrote:
> Hi All,
>
> I am trying to experiment with increasing the size of the initial
> congestion window to speed up higher latency connections. I tried setting
> this via route on one of my load balancers with Kernel version 2.6.32 (It
> seems the ability to adjust the initial receive window is in later
> versions, but I believe 2.6.32 should support the initial send window
> size ):
>
> <clientIP> via <gateway-ip> dev eth0 proto static initcwnd 10
>
> Comparing packet captures, the SYN/ACK packet has the "Calculated Window
> Size" (according to wireshark) at 5792 both before and after the route
> change -- so this doesn't seem to effect the initial window size.
>
> 1) Am I looking in the right place to see if this working (Window Size in
> the SYN/ACK Packet sent by the load balancer?)

You won't see it here, what you observe in the SYN/ACK is the receive window
size, which is directly dependent on the default tcp_rmem. The initcwnd is
used for sending only and is not advertised in TCP, it's just an internal
parameter used by the congestion control algorithm. The only way to see if
your change takes effect is to take a network capture and to see if you
observe more segments sent at once without waiting for an ACK from the
client.

> 2) If I am looking in the right place, any ideas why this isn't working? I
> saw a mention of initcwnd in the 1.6 ROADMAP in git, so maybe HAProxy
> wouldn't take advantage of this by default in 1.5?

There is a mention of it because a kernel patch was posted to make it
possible for an application to set it using a setsockopt(). I thought
it was already merged but it's not. So it's pointless to have the
feature if the kernel does not support it. I have the patch somewhere,
I even had updated the doc before seeing it was not supported :-)

Regards,
Willy
Sorry, only registered users may post in this forum.

Click here to login