[note: followup set to m.d.platform, since this seem to be of wide interest, not just networking, and is not really right for .firefox. Patrick's original post, which I recommend people read, is in m.d.a.firefox and m.d.platforms.mobile]

Patrick McManus wrote:
2] Uses up wasted bandwidth. If the bandwidth were always fully consumed
at the TCP level by a single stream then parallelization would just be
rearranging the order in which the bytes were received between the
streams - it wouldn't speed anything up in the aggregate. But due to
congestion control, latencies involved in higher level protocols,
different routes with different bottlenecks, and occasional service
delays on both the client and server one stream is very unlikely to
saturate the available bandwidth. This is especially true of a young
stream or ones dealing in small objects. Multiple streams help sop up
that inefficiency. But its a very crude tool because fairly soon all the
bandwidth is being used and just rearranged between streams and the
problems mentioned in the "too many" section start to creep in.

Right. The situation here is in particular the total number of connections we allow (not per-server). Parallelizing loads over multiple servers obviously helps if each server for some reason has a thinner pipe to the client than the client's available bandwidth, but none of the servers share the connection bottleneck with each other. I'm sort of wondering how common a situation this is.

Are there other situations in which the "spread the content over 30 servers" approach is a good one for a web page? It feels like a hack to work around our poor usage of the limited number of per-server persistent connections we use (e.g. lack of pipelining, etc), right?

I think there are great network gains to be had by separating high
latency operations from the block transfers and then more tightly
managing the block transfers according to some sense of priority.

This seems very plausible. What sort of API would we want here? We have the (underused) nsISupportsPriority, but it's not very rich in terms of what it can express, right? What would be useful things to communicate to the network layer about the likely properties of a given load? (Note: they'd have to be "likely", because for just about every rule I can think of with this stuff there are exceptions. Nothing is _really_ preventing someone from creating a <script> that returns an infinite amount of data.)

The cost of doing this is maintaining a tighter integration between
networking and content rendering awareness. But given that those are
both fundamental responsibilities of the platform, it seems worthwhile.

Agreed, though if we can do this without networking needing to know about content details like "script" (as in, content would describe what's special about scripts in terms networking understands), that would be ideal.

-Boris
_______________________________________________
dev-tech-network mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-network

Reply via email to