- Many sites still do not use subdomain sharding: it's an advanced technique
which I suspect is only used by the hottest head sites of the web. It'd be
interesting to build a table of how many domains the most popular sites use.
So this might not be such a big deal in practice, except for people who sit
on Facebook/Maps/Youtube all day.
- Theoretically, Chrome could use raw sockets and its own TCP stack, right?
Of course that raises the bar to getting the full SPDY benefit considerably.
- Even in the SPDY world big sites will still use subdomain sharding anyway,
because often the subdomains aren't there purely to hack around browser
limits but because the content is being served from different locations.
Eg most of the facebook subdomains are akamai but www isn't
Makes sense. My only thoughts:
- Many sites still do not use subdomain sharding: it's an advanced technique
which I suspect is only used by the hottest head sites of the web. It'd be
interesting to build a table of how many domains the most popular sites use.
So this might not be such a big deal in practice, except for people who sit
on Facebook/Maps/Youtube all day.
- Theoretically, Chrome could use raw sockets and its own TCP stack, right?
Of course that raises the bar to getting the full SPDY benefit considerably.
- Even in the SPDY world big sites will still use subdomain sharding anyway,
because often the subdomains aren't there purely to hack around browser
limits but because the content is being served from different locations.
Eg most of the facebook subdomains are akamai but www isn't
Have you thought about going to the IETF with this? I imagine OS vendors will be reluctant to change something like this without their blessing (although that's not always -- or maybe even usually -- the case ;).
Maybe a good starting place (as in, what you propose might be out of scope, but at least the right people will be in the room):
http://www.ietf.org/dyn/wg/charter/tcpm-charter.html
This puts HTTP-over-SCTP in an interesting light as well, of course. Or, as you mention, building something on top of UDP (although I agree this wouldn't be a great outcome).
Cheers,
--
Mark Nottingham http://www.mnot.net/
Very interesting stuff.
Have you thought about going to the IETF with this? I imagine OS vendors will be reluctant to change something like this without their blessing (although that's not always -- or maybe even usually -- the case ;).
Maybe a good starting place (as in, what you propose might be out of scope, but at least the right people will be in the room):
http://www.ietf.org/dyn/wg/charter/tcpm-charter.html
This puts HTTP-over-SCTP in an interesting light as well, of course. Or, as you mention, building something on top of UDP (although I agree this wouldn't be a great outcome).
SCTP streams are logical streams over a single association (SCTP's
term for a connection). The cwnd evolves based on the cumulative
bytes sent out and acknowledged over the association, not based on an
individual stream (so yes - across all streams). SCTP's capacity to
get data out quickly during slow start is no different than TCP's -
but if you can justify increasing the initial cwnd for TCP the same
arguments will be equally valid for SCTP.
One other note of interest - FreeBSD 6.1 sends extra ACKs in the form
of window updates, which artificially accelerate cwnd growth during
slow start. Perhaps some other OSes do similar things to gain an
edge?
- Jon
On 22/01/2010, at 5:29 AM, Mike Belshe wrote:
>> - Theoretically, Chrome could use raw sockets and its own TCP stack, right?
>> Of course that raises the bar to getting the full SPDY benefit considerably.
>>
> Not really - that requires admin access to deploy and would generally not be good for users. Browsers could use UDP based protocols. I don't really want to do that. I'd rather fix TCP.
What about inflating the window size by getting a bigger buffer to start?. iperf seems to use this to good effect; see
http://iperf.svn.sourceforge.net/viewvc/iperf/trunk/src/tcp_window_size.c
AIUI you still may hit OS limits, but it's better than nothing. Not sure if this would work on Windows, however...
Picking up an old thread...
What about inflating the window size by getting a bigger buffer to start?. iperf seems to use this to good effect; see
On 22/01/2010, at 5:29 AM, Mike Belshe wrote:
>> - Theoretically, Chrome could use raw sockets and its own TCP stack, right?
>> Of course that raises the bar to getting the full SPDY benefit considerably.
>>
> Not really - that requires admin access to deploy and would generally not be good for users. Browsers could use UDP based protocols. I don't really want to do that. I'd rather fix TCP.
http://iperf.svn.sourceforge.net/viewvc/iperf/trunk/src/tcp_window_size.c
What I'd really like to see would be for OS vendors to make the
initial window a tunable parameter (and for bonus points also make it
settable on a per-connection basis with setsockopt()). That way we
could do fancy things like tune it based on my application - say 90%
of my responses are 10k or under I could tune it for 10k and serve the
bulk of my responses with a single round trip. You could even get
fancy and run a fancy feedback loop that automatically decrease it if
you start seeing the retransmit level increase across your server farm
and increase it until you start to see problems. I've been wanting to
add a patch to the Linux kernel to make it tunable but I haven't had
the time to look at it yet.
That way the algorithms don't have to have a single setting that works
well for all installs and applications.
-Pat