Forum Discussion

Sandeep_81274's avatar
Icon for Nimbostratus rankNimbostratus
May 05, 2014

connection initialization...tuning initcwnd



I've been reading several posts by Jason Rahm. I'm wondering if you can help me or anyone with experience setting tcp settings on F5. I have some questions around tcp initialization costs. When F5 acts as the server...and I'm asking for lots of data over a new connection....Is there an initial congestion window size I can set? When it's acting as a client and I'm sending lots of there a receive window I can set?


If I'm using oneconnect to multiplex connections on back-end of F5...will the initial congestion window have memory of previous settings..or will it go through slow start again?


I see these settings for 11+


Initial Congestion Window Size Initial Receive Window Size


3 Replies

  • It's always hard to make recommendations without having an understanding of the bandwidth and reliability of the networks involved.


    You seemed to have answered your first two questions yourself but don't forget to disable Slow Start. You may also want to use High Speed for Congestion Control.


    Regarding ICWS & IRWS, a value of 10 would be appropriate on high b/w, reliable networks.


    Regarding OneConnect I would expect (but cannot confirm) the connection metrics to be dynamic and based on current and historic conditions, not start from scratch, that would make no sense at all.


  • You're welcome.


    What about the client side network, is that reliable?


    Also, what OS are the internal servers running? Because of this post I've been reading up on ICWS and IRWS settings for those and may be able to offer some advice there too if they are Linux based.


    A 404 doesn't mean a persistent connection is closed and a new one established. The browser will close connections if it doesn't need them - I'm not sure if this can be controlled. The server (the F5 in this case) will also close unused connections after the relevant idle timeout period has expired. There's no specific HTTP related timeout so whatever the TCP idle-timeout value (default 300s/5mins) is will be used in most cases. There are exceptions depending on your configuration.


  • OK, so server side, if you are using Linux kernel 2.6.38 or later the default initcwnd and initrwnd increases from 3 to 10. If you are using this version or later, set your settings in the TCP profile assigned server side to 10 to match this. If you're not using this version or later, upgrade. If you really can't just google on how to change these settings manually. You'll also need to disable slow start.


    Upgrade to kernel 3.2 or higher if you can, there are lots of good, worthwhile performance improvements.


    If none of the above are possible, on any version, use: sysctl –w tcp_slow_start_after_idle=0 to stop slow start messing with long lived connections.


    That's it where you've reliable networks really.