On 11.04.2011 12:15, Philip Martin wrote:
Mark Phippard<[email protected]> writes:
Was reading the release notes on the new in-memory cache. How does
this work (provide benefits) with mod_dav_svn? It seems like the
cache is per-process. Aren't the processes (pre-fork MPM) with DAV
generally short-lived? If I checkout trunk and someone else
immediately checks out trunk after me do they get some kind of caching
benefit from my checkout?
Apache with the pre-fork MPM is a set of single threaded processes, with
the worker MPM it is a set on multi-threaded processes. The lifetime of
each process is configurable, it's possible to configure a new process
for every connection (or every http request if keepalive is not enabled)
but performance suffers so I think it is normal for each process to
handle hundreds, or thousands of requests.
The cache code is new but in-memory caching is not, to a certain extent
the current code replaced the previous in-memory cache.
As explained by Philip, short-lived server processes will affect
membuffer cache effectiveness. The highest gains will be seen
on single-process multi-threaded servers, e.g. the Windows
default MPM.
However, there are more aspects / improvements done to the
caching code since 1.6:
* cache virtually all data such that non-trivial server requests like
reports already reach significant hit rates even on the first run
(certain info is being used over and over again).
* support access of sub-items, e.g. individual entries in a cached
directory structure. Reduces directory iteration from O(n^2) to O(n).
* changing the API from "duplication" for inprocess caches to
a very efficient (de-)serialization approach. Writing to the cache
is about as fast as before but reading is up to 5 times as fast.
* cache-memserve, if configured at all, will now be used for full-text
caching only because the communication overhead would more
than offset the performance gains for the other structures
* cache-membuffer has a strict memory usage limit (as opposed
to cache-inprocess)
* the new serializer should slightly reduce memory consumption
compared to simple duplicating data structures, i.e. more data
fits into the cache
-- Stefan^2.