Google and Microsoft Cheat on Slow-Start. Should You?
blog.benstrong.com
blog.benstrong.com
Anyway, super easy to try on linux servers.
First double check your existing setting
sysctl -a | grep tcp_slow_start_after_idle
then sysctl -w net.ipv4.tcp_slow_start_after_idle=0
if you want to enhance to IW10 then first check the last line of ip route show
should be something like default via 1.2.3.4 dev eth0
then copy it to the middle of this ip route change default via 1.2.3.4 dev eth0 initcwnd 10
if you are using a VERY current linux kernel, you can also add initrwnd like so: ip route change default via 1.2.3.4 dev eth0 initcwnd 10 initrwnd 10
Note the ip route change is not permanent unless you add it to something like /etc/rc.localYou should be able to see the change before/after in wireshark if you look very very carefully at the milliseconds before the first real ack.
If I had time I would go dig it out but unfortunately I'm leaving for a midterm. Maybe someone else can find it; I think it had a good discussion with it.
Op Follow up http://blog.benstrong.com/2010/11/slow-start-follow-up.html
Also, HN search for previous submissions is hit or miss. A more reliable way is to search ddg or google for 'site:news.ycombinator.com [url you want to submit]'.
Somewhere in the early 2.6.3x, I think around .32 or .33, had the two patches to allow setting initcwnd and initrwnd as you demonstrate.
Somewhere in 2.6.35 or 2.6.36 era, initrwnd was changed to 10. Later, around 2.6.38, initcwnd was changed to 10.
I've seen people claim that certain web accelerators use an initcwnd more like 20 to 40.
You can change initcwnd on CentOS 6.2 but not initrwnd. And it defaults to 3
People can check their server kernel version with
uname -a
Servers that appear to be at 20 or especially 40 might just be setting the buffers to match the maximum client side window (which is what Microsoft appears to do on their servers).echo 1 | sudo tee /proc/foo
This has the added bonus that you can replace "echo 1" with a complex script that may not be safe to run as root.
For me, I can just copy over a modified sysctl.conf to a server and have such changes applied (reboot may be needed).
It's frustrating how often a website will provide a client-specific rendering which is much worse than the default. (I'm looking at you, Wordpress).
"This increased initial window is optional: a TCP MAY start with a larger initial window."
And specifically this: "MAY start with a larger initial window". "larger" than what?
a.) larger than that proposed?
or
b.) larger than was standard before this proposal?
That's completely off the mark. NN was a reaction to the plan by ISPs to throttle large sites (e.g. YouTube) that their own customers were requesting unless they were paid protection money. It later became a political thing, with people mostly deciding to support (or oppose) it based on party lines.
It has nothing to do with tuning one's network, in spite of rhetoric to the contrary. It was just an attempt to stop rent-seeking by greedy ISPs that has morphed politically after attracting lobbyist attention.
So it's not "cheating" in terms of your competitors, but it's "cheating" in the sense that either you're basically jumping the queue for your TCP flows or everyone else does the same thing and then things are back to square one, if networks can't deal with it.
An argument that networks now can deal with much larger congestion windows can be made, and Google is making it in the IETF, of course.