- From: Jeffrey Mogul <mogul@pa.dec.com>
- Date: Thu, 07 Dec 95 17:35:09 PST
- To: touch@ISI.EDU
- Cc: www-talk@www0.cern.ch, www-speed@tipper.oit.unc.edu
From: Simon Spero <ses@tipper.oit.unc.edu> > The concept of speculative transmission has been in HTTP-NG from > back before it was HTTP-NG; the technique can be used with HTTP/1.X > with persisent connections, but for several reasons, I believe that > this is not ideal. The main reason is the potentially negative > effects of speculative-mistakes; if complete documents are sent in > monolithic chunks, you need to wait for the whole of one document > to arrive before you can see what's next. This presumes that the speculative transmission doesn't have preemption, which is a prerequisite. It's also a prerequisite (or, to be more precise, an important optimization) for pipelining + persistent connections in HTTP 1.1. As John Wraclawksi pointed out to me after my SIGCOMM presentation, if you are doing pipelining and the user hits the "Stop" button, you either need preemption, or you have to close the connection and reopen a new one (which wastes several RTTs, but is no worse than HTTP 1.0). Although the HTTP working group hasn't really addressed this yet, it presumably will happen fairly soon, so I think one can assume that HTTP 1.1 will have preemption whether or not it has prefetching. Of course, it's an interesting tradeoff if the "preemption" mechanism adopted is "close and reopen the TCP connection": how often does this increase latency to the user vs. how often does a successful prefetch reduce latency? But I think one can do a reasonably fast preemption using the TCP Urgent Pointer (cf. the Telnet protocol). direct requests preempt speculative responses both at the server and at the client Yup. Preempt may mean "abort" or it may mean "suspend". direct requests and responses preempt speculative packets in the network - i.e., this is why you need red-flagged ABR ATM packets, or some sort of similar flag in integrated-services IP. It doesn't work at all with current IP. Since our aim is to make HTTP + current TCP + current IP + current link layers (i.e., not ATM) work better within the next year or so, this is moot. As you observe, it can't be done. Also, it's a micro-optimization; one or two packets of latency (if the MTUs are set according to Van Jacobson's advice in RFC1144) should not materially affect interactivity. cache hits are forwarded to the server presender so that the server presender can update its speculation set This won't be popular with the HTTP community, since it adds server load. And it's not clear to me that the server's "speculation set" (predictive model) should be updated to reflect cache-hit behavior ... since (in our approach, at least) its purpose is to predict cache-miss behavior! speculative responses are dropped if no bandwidth in the net server busy with other direct requests or responses In our model, servers can stop sending prefetch predictions if they are overloaded (or use a feedback control system to adjust their prediction threshold to maintain slightly under 100% loading). Note - the server rules imply that cache updates arrive on a different IP port than direct requests, and that the cache loads come on different IP ports than direct responses. This might be an optimization, but it's not necessary. And if you don't insist on this optimization, the changes to HTTP are quite minimal (and hence easy to get into the standard). -Jeff
Received on Thursday, 7 December 1995 20:43:54 UTC