Search squid archive

Re: http_pipelining prefetch ..

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 24/03/11 00:01, Víctor José Hernández Gómez wrote:
Dear squid-users,

I have been reading about pipelining
(http://en.wikipedia.org/wiki/HTTP_pipelining), and we are thinking to
change the pipeline_prefetch directive to "on" in our Squid-based
installation, but have found some notes which prevent us to try it

Notes: (Now defaults to off for bandwidth management and access logging
reasons)

Can someone go into a more detailed explanation on this? Is it really
worth to try?

Not that much worth in it. The consensus seems to be that it better to spread the load over multiple parallel connections than wait on a sequential feed.

I'm not sure what those access logging reasons were, the bandwidth ones are a design flaw in the pipelining model itself.

In HTTP/1.0 (ie all Squid releases 3.1 and older) the required default action is to close the connection after completing one request, unless explicitly asked not to. Also a large portion of sites are dynamic and send out page objects of unknown length. The *only* way to signal completion of these objects in HTTP/1.0 is for the server to terminate the connection to Squid, and Squid to relay that termination on to the client.

In the pipeline N requests are in transit on a single connection before the first result comes back.
 Problem the first: N requests require M about of bandwidth to receive.
 Problem the second: they also require M amount of RAM to hold.
Problem the third: What happens to N-1 requests, M-1 bandwidth and M-1 memory after the first request closes the client connection? *poof* gone. Problem the fifth: pipeline client usually "recovers" by re-scheduling N-1 requests. loop back to problem 1.

*major* waste of resources whenever the client pipelines to a dynamic website.

That directive you see allows us to benefit a little be pre-parsing the second request before the first has finished. Squid caps pipeline at 2, so at most one requests is wasted. Squid does *not* pipeline to servers, it spreads the load over multiple parallel connections instead.

Even if pipelining is turned off in Squid the client software is free to schedule N requests in the TCP link buffers. So in that respect Squid already supports pipelining without any effort.

In my experience client software has either attempted and badly failed to do pipelining properly (ie error recovery is critical), or has done it so well nobody noticed.

Amos
--
Please be using
  Current Stable Squid 2.7.STABLE9 or 3.1.11
  Beta testers wanted for 3.2.0.5


[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux