Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread David Hodgkinson

Larry Leszczynski [EMAIL PROTECTED] writes:

 Hi All -
 
 I'm hoping for some enlightenment about how KeepAlive is implemented in
 Apache and whether KeepAlive even comes into play when front-end and
 back-end mod_perl servers communicate with each other via HTTP.

http://thingy.kcilink.com/modperlguide/performance/KeepAlive.html


-- 
Dave Hodgkinson, http://www.hodgkinson.org
Editor-in-chief, The Highway Star   http://www.deep-purple.com
  Apache, mod_perl, MySQL, Sybase hired gun for, well, hire
  -

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread Stas Bekman

On Mon, 27 Nov 2000, Larry Leszczynski wrote:

 Hi All -
 
 I'm hoping for some enlightenment about how KeepAlive is implemented in
 Apache and whether KeepAlive even comes into play when front-end and
 back-end mod_perl servers communicate with each other via HTTP.

http://perl.apache.org/guide/performance.html#KeepAlive
 
 Suppose front-end server A is handling user requests.  In the process of
 handling a front-end request, suppose I use LWP or equivalent to make a
 HTTP request from A to a back-end server B to get some data that is
 needed.  Assuming all the right headers are set for KeepAlive to work
 (content length, etc.), can the connection between A and B even take
 advantage of KeepAlive for the next time A makes the same request to B?

 One problem is that I'm not sure what processes would actually be
 "keeping" the ends of the "kept alive" connections.  At each end, would it
 be the parent httpd process, or the individual httpd child process that
 made/answered the request?
 
 I'm thinking that if A had to fork a CGI that in turn talked to B, the
 kept-alive connection would be lost as soon as the CGI process on A died
 (socket timeouts notwithstanding).  But what if the request from A to B is
 made from within a mod_perl module, or within an Apache::Registry script?
 
 Along the same line of thought (assuming this has made any sense so far),
 what happens when you throw ProxyPass/ProxyPassReverse into the mix?  What
 (if anything) can be done to take advantage of KeepAlive then?
 
 
 Larry Leszczynski
 [EMAIL PROTECTED]
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 



_
Stas Bekman  JAm_pH --   Just Another mod_perl Hacker
http://stason.org/   mod_perl Guide  http://perl.apache.org/guide 
mailto:[EMAIL PROTECTED]   http://apachetoday.com http://jazzvalley.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread Larry Leszczynski

Hi All -

 I'm hoping for some enlightenment about how KeepAlive is implemented in
 Apache and whether KeepAlive even comes into play when front-end and
 back-end mod_perl servers communicate with each other via HTTP.

I suppose I shouldn't have started off my previous post with such a
general-sounding comment.  Thanks for all the pointers to the KeepAlive
section in the mod_perl guide, which I have read before and which doesn't
answer the questions I was asking below.

I'll try rephrasing, I'm still hoping for info regarding the questions
that follow:

mod_backhand takes advantage of KeepAlive to speed up communications
between a front-end server and a set a back-end servers that feed data to
the front-end.  I'm trying to figure out how that works and if I can take
advantage of KeepAlive the same way using mod_perl front-end and back-end
servers but without running mod_backhand.

Suppose front-end server A is handling user requests.  In the process of
handling a front-end request, suppose I use LWP or equivalent to make a
HTTP request from A to a back-end server B to get some data that is
needed.  Assuming all the right headers are set for KeepAlive to work
(content length, etc.), can the connection between A and B even take
advantage of KeepAlive for the next time A makes the same request to B?

One problem is that I'm not sure what processes would actually be
"keeping" the ends of the "kept alive" connections.  At each end, would it
be the parent httpd process, or the individual httpd child process that
made/answered the request?

I'm thinking that if A had to fork a CGI that in turn talked to B, the
kept-alive connection would be lost as soon as the CGI process on A died
(socket timeouts notwithstanding).  But what if the request from A to B is
made from within a mod_perl module, or within an Apache::Registry script?

Along the same line of thought (assuming this has made any sense so far),
what happens when you throw ProxyPass/ProxyPassReverse into the mix?  What
(if anything) can be done to take advantage of KeepAlive then?


Thanks,
Larry Leszczynski
[EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread Stas Bekman

On Tue, 28 Nov 2000, Larry Leszczynski wrote:

 Hi All -
 
  I'm hoping for some enlightenment about how KeepAlive is implemented in
  Apache and whether KeepAlive even comes into play when front-end and
  back-end mod_perl servers communicate with each other via HTTP.
 
 I suppose I shouldn't have started off my previous post with such a
 general-sounding comment.  Thanks for all the pointers to the KeepAlive
 section in the mod_perl guide, which I have read before and which doesn't
 answer the questions I was asking below.
 
 I'll try rephrasing, I'm still hoping for info regarding the questions
 that follow:
 
 mod_backhand takes advantage of KeepAlive to speed up communications
 between a front-end server and a set a back-end servers that feed data to
 the front-end.  I'm trying to figure out how that works and if I can take
 advantage of KeepAlive the same way using mod_perl front-end and back-end
 servers but without running mod_backhand.
 
 Suppose front-end server A is handling user requests.  In the process of
 handling a front-end request, suppose I use LWP or equivalent to make a
 HTTP request from A to a back-end server B to get some data that is
 needed.  Assuming all the right headers are set for KeepAlive to work
 (content length, etc.), can the connection between A and B even take
 advantage of KeepAlive for the next time A makes the same request to B?
 
 One problem is that I'm not sure what processes would actually be
 "keeping" the ends of the "kept alive" connections.  At each end, would it
 be the parent httpd process, or the individual httpd child process that
 made/answered the request?
 
 I'm thinking that if A had to fork a CGI that in turn talked to B, the
 kept-alive connection would be lost as soon as the CGI process on A died
 (socket timeouts notwithstanding).  But what if the request from A to B is
 made from within a mod_perl module, or within an Apache::Registry script?
 
 Along the same line of thought (assuming this has made any sense so far),
 what happens when you throw ProxyPass/ProxyPassReverse into the mix?  What
 (if anything) can be done to take advantage of KeepAlive then?

Before trying to answer your question, let me ask you another
question. What's the average run time of you mod_perl scripts? Is it 2 to
5 msecs? Or is it 0.5 to 1 sec? If you are in the former range this
question makes sense, well may be. If you are in the latter range, you are
wasting your time.

KeepAlive comes to overcome the overhead of initiating connections between
the browser and the server. It's useful when you serve static pages,
because they are delivered in matter of a few milli-seconds. Which is
somewhat comparable with the overhead of creating the connection... or
very fast mod_perl code whose run time comparable to delivery of static
pages (we have simple ads serving at 4-6msec).

KeepAlive helps a lot with SSL connections (https) where the handshake is
a few (4-5?) times slower compared to http, but it's still significant in
the same range of run times.

If your average run time is 10-100 slower than 5 msec, this overhead is
insignificant since it comes down to something like 0.01% of the total
response time over http and probably 0.05% over https.

Now do you still want the KeepAlive?

_
Stas Bekman  JAm_pH --   Just Another mod_perl Hacker
http://stason.org/   mod_perl Guide  http://perl.apache.org/guide 
mailto:[EMAIL PROTECTED]   http://apachetoday.com http://jazzvalley.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread Matt Sergeant

On Tue, 28 Nov 2000, Larry Leszczynski wrote:

 Suppose front-end server A is handling user requests.  In the process of
 handling a front-end request, suppose I use LWP or equivalent to make a
 HTTP request from A to a back-end server B to get some data that is
 needed.  Assuming all the right headers are set for KeepAlive to work
 (content length, etc.), can the connection between A and B even take
 advantage of KeepAlive for the next time A makes the same request to B?

If you use HTTP::GHTTP, and keep the same request object around in server
memory, you can set the appropriate keepalive headers, and it should
re-use the same connection next time around assuming the keepalive hasn't
timed out.

-- 
Matt/

/||** Director and CTO **
   //||**  AxKit.com Ltd   **  ** XML Application Serving **
  // ||** http://axkit.org **  ** XSLT, XPathScript, XSP  **
 // \\| // ** Personal Web Site: http://sergeant.org/ **
 \\//
 //\\
//  \\


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread Stas Bekman

On 28 Nov 2000, Joe Schaefer wrote:

 Stas Bekman [EMAIL PROTECTED] writes:
 
  Before trying to answer your question, let me ask you another
  question. What's the average run time of you mod_perl scripts? Is it 2 to
  5 msecs? Or is it 0.5 to 1 sec? If you are in the former range this
  question makes sense, well may be. If you are in the latter range, you are
  wasting your time.
 
 I disagree, naturally ;).  With respect to the effectiveness of keepalives,
 there are many factors that come into play - not least of which are your 
 own site design and consideration of the effects of TCP slow start.  Long
 story short, IMHO there is no way to distill a universal answer for whether 
 one should or should not enable http keepalives.
 
 For the servers I manage, the effect of enabling keepalives on the browser-
 proxy connection is quite significant.  Over DSL connection to a live site
 situated thousands of miles away (20+hops), here's my apachebench stats:
 
 
 % ./ab -n 500 -c 10 http://front.end/proxied/to/backend/content_handler
 
 (The mod_perl content handler here grabs content from a mysql server
 via DBI - it is decidedly non-trivial :)
 
 ...
 
 Document Length:1807 bytes
 
 Concurrency Level:  10
 Time taken for tests:   21.539 seconds
 Complete requests:  500
 Failed requests:0
 Total transferred:  995500 bytes
 HTML transferred:   903500 bytes
 Requests per second:23.21
 Transfer rate:  46.22 kb/s received
 
 Connnection Times (ms)
   min   avg   max
 Connect:   60   129  3064
 Processing:   107   298   250
 Total:167   427  3314
 
 Same URL with keep-alives enabled:
 
 % ./ab -k -n 500 -c 10 http://front.end/proxied/to/backend/content_handler
 
 ...
 
 Document Length:1807 bytes
 
 Concurrency Level:  10
 Time taken for tests:   15.047 seconds
 Complete requests:  500
 Failed requests:0
 Keep-Alive requests:500
 Total transferred:  1014010 bytes
 HTML transferred:   903500 bytes
 Requests per second:33.23
 Transfer rate:  67.39 kb/s received
 
 Connnection Times (ms)
   min   avg   max
 Connect:0 193
 Processing:99   295  2507
 Total: 99   296  2600
 

This is not a real world benchmark. It may generate the real world
load, but not the real world usage. And once you realize that this
cool speedup that you show doesn't really happen.

User requests a single page at a time. The connection is tied to the
browser. User will not issue a new request in the same rate as ab
does. I'd say it takes at least 5-10 secs for user to read the page
and you don't want to keep the mod_perl server tied all this time
doing nothing. Even the front-end server, since you will end up with
thousands of front-end servers if you will use a big KeepAlive.

 Any way you slice it, that is a _huge_ difference!  You just have
 to test the effects yourself to see if it keepalives are worth
 running on your server.

That's true, my point was the same -- check your numbers and see
whether it helps or not. Definitely not with ab or any other benchmark
tool.



_
Stas Bekman  JAm_pH --   Just Another mod_perl Hacker
http://stason.org/   mod_perl Guide  http://perl.apache.org/guide 
mailto:[EMAIL PROTECTED]   http://apachetoday.com http://jazzvalley.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread Joe Schaefer

Stas Bekman [EMAIL PROTECTED] writes:

 This is not a real world benchmark. It may generate the real world
 load, but not the real world usage. And once you realize that this
 cool speedup that you show doesn't really happen.
 

Of course not- I only posted those results to show that under certain
real conditions, it can make a real difference.  Often times a single
url will contain links to 20+ url's on the same server (many of them
304's). If you have keepalives enabled (even if only for 1 or 2 sec's), 
the page loading wait is often noticable for modem users.

In my particular line of work, any excess latency is intolerable.  
My customers want almost instantaneous page loads, so my servers 
are built to accomodate them.  Heavy server loads are not of 
paramount concern.

I'm sure that is quite different from what your needs are, and 
that's my point. It all depends.

 
 That's true, my point was the same -- check your numbers and see
 whether it helps or not. Definitely not with ab or any other benchmark
 tool.
 

Nothing wrong with ab - just know it's limitations (or how to make it
say what you want ;).

-- 
Joe Schaefer


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Does mod_perl have anything to do with KeepAlive?

2000-11-28 Thread Stas Bekman

On 28 Nov 2000, Joe Schaefer wrote:

 Stas Bekman [EMAIL PROTECTED] writes:
 
  This is not a real world benchmark. It may generate the real world
  load, but not the real world usage. And once you realize that this
  cool speedup that you show doesn't really happen.
  
 
 Of course not- I only posted those results to show that under certain
 real conditions, it can make a real difference.  Often times a single
 url will contain links to 20+ url's on the same server (many of them
 304's). If you have keepalives enabled (even if only for 1 or 2 sec's), 
 the page loading wait is often noticable for modem users.
 
 In my particular line of work, any excess latency is intolerable.  
 My customers want almost instantaneous page loads, so my servers 
 are built to accomodate them.  Heavy server loads are not of 
 paramount concern.
 
 I'm sure that is quite different from what your needs are, and 
 that's my point. It all depends.

  That's true, my point was the same -- check your numbers and see
  whether it helps or not. Definitely not with ab or any other benchmark
  tool.
  
 
 Nothing wrong with ab - just know it's limitations (or how to make it
 say what you want ;).

Joe, I agree with you absolutely. Each one has to evaluate his own
situation and configure things based on the requirement.

I just wanted to make sure that folks won't jump on the wrong conclusion
based on your specific case benchmark to run and enable the KeepAlive on
their machine, which in the average case will sky rocket the memory usage
as the number of tied processes will go up.

_
Stas Bekman  JAm_pH --   Just Another mod_perl Hacker
http://stason.org/   mod_perl Guide  http://perl.apache.org/guide 
mailto:[EMAIL PROTECTED]   http://apachetoday.com http://jazzvalley.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Does mod_perl have anything to do with KeepAlive?

2000-11-27 Thread Larry Leszczynski

Hi All -

I'm hoping for some enlightenment about how KeepAlive is implemented in
Apache and whether KeepAlive even comes into play when front-end and
back-end mod_perl servers communicate with each other via HTTP.

Suppose front-end server A is handling user requests.  In the process of
handling a front-end request, suppose I use LWP or equivalent to make a
HTTP request from A to a back-end server B to get some data that is
needed.  Assuming all the right headers are set for KeepAlive to work
(content length, etc.), can the connection between A and B even take
advantage of KeepAlive for the next time A makes the same request to B?

One problem is that I'm not sure what processes would actually be
"keeping" the ends of the "kept alive" connections.  At each end, would it
be the parent httpd process, or the individual httpd child process that
made/answered the request?

I'm thinking that if A had to fork a CGI that in turn talked to B, the
kept-alive connection would be lost as soon as the CGI process on A died
(socket timeouts notwithstanding).  But what if the request from A to B is
made from within a mod_perl module, or within an Apache::Registry script?

Along the same line of thought (assuming this has made any sense so far),
what happens when you throw ProxyPass/ProxyPassReverse into the mix?  What
(if anything) can be done to take advantage of KeepAlive then?


Larry Leszczynski
[EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]