Commit 933ceb47 authored by dgaudet's avatar dgaudet
Browse files

update with a few more links


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@81228 13f79535-47bb-0310-9956-ffa450edef68
parent d81e0027
Loading
Loading
Loading
Loading
+35 −4
Changes for docs/manual/misc/perf-tuning.html: 35 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ Suppose your
web server uses multiple <CODE>Listen</CODE> statements to listen on
either multiple ports or multiple addresses.  In order to test each
socket to see if a connection is ready Apache uses <CODE>select(2)</CODE>.
<CODE>select(2)</CODE> indicates that a socket has <EM>none</EM> or
<CODE>select(2)</CODE> indicates that a socket has <EM>zero</EM> or
<EM>at least one</EM> connection waiting on it.  Apache's model includes
multiple children, and all the idle ones test for new connections at the
same time.  A naive implementation looks something like this
@@ -647,7 +647,8 @@ as a result of writing the log. At least one of these is required to
properly implement the HTTP protocol.  The second occurs because the
Common Log Format dictates that the log record include a timestamp of the
end of the request.  A custom logging module could eliminate one of the
calls.
calls.  Or you can use a method which moves the time into shared memory,
see the <a href="#patches">patches section below</a>.

<P>As described earlier, <CODE>Rule STATUS=yes</CODE> causes two
<CODE>gettimeofday</CODE> calls and a call to <CODE>times</CODE>:
@@ -782,6 +783,29 @@ munmap(0x400e3000, 6144) = 0
That's 19 system calls, of which 4 remain relatively easy to remove,
but don't seem worth the effort.

<h3><a name="patches">Appendix: Patches Available</a></h3>

There are
<a href="http://www.arctic.org/~dgaudet/apache/1.3/">
several performance patches available for 1.3.</a>  But they may
be slightly out of date by the time Apache 1.3.0 has been released,
it shouldn't be difficult for someone with a little C knowledge to
update them.  In particular:

<ul>
<li>A 
<a href="http://www.arctic.org/~dgaudet/apache/1.3/shared_time.patch">
patch</a> to remove all <code>time(2)</code> system calls.
<li>A
<a href="http://www.arctic.org/~dgaudet/apache/1.3/mod_include_speedups.patch">
patch</a> to remove various system calls from <code>mod_include</code>,
these calls are used by few sites but required for backwards compatibility.
<li>A
<a href="http://www.arctic.org/~dgaudet/apache/1.3/top_fuel.patch">
patch</a> which integrates the above two plus a few other speedups at the
cost of removing some functionality.
</ul>

<H3>Appendix: The Pre-Forking Model</H3>

<P>Apache (on Unix) is a <EM>pre-forking</EM> model server.  The
@@ -819,9 +843,16 @@ depending on the operating system.

<P>Apache's core code is already multithread aware, and Apache version
1.3 is multithreaded on NT.  There have been at least two other experimental
implementations of threaded Apache (one using the 1.3 code base on DCE,
implementations of threaded Apache, one using the 1.3 code base on DCE,
and one using a custom user-level threads package and the 1.0 code base,
neither are available publically).  Part of our redesign for version 2.0
neither are available publically.  There is also an experimental port of
Apache 1.3 to <a href="http://www.mozilla.org/docs/refList/refNSPR/">
Netscape's Portable Run Time</a>, which
<a href="http://www.arctic.org/~dgaudet/apache/2.0/">is available</a>
(but you're encouraged to join the
<a href="http://dev.apache.org/mailing-lists">new-httpd mailing list</a>
if you intend to use it).
Part of our redesign for version 2.0
of Apache will include abstractions of the server model so that we
can continue to support the pre-forking model, and also support various
threaded models.