Red Hat Bugzilla – Bug 127607
Bad combination of threaded MPM and mod_cgi results in performance loss
Last modified: 2007-11-30 17:10:45 EST
Description of problem:
httpd (apache 2.0) came with Fedora Core 2 does not scale well. It
includes worker MPM binary, but it doesn't include mod_cgid (which is
better in threaded environment)
This actually limits performance of httpd.worker. Also, many people
think that preferred way of running apache is threaded server, so
we'd better make httpd.worker the default httpd.
The reason why mod_cgid cannot be included in standard distribution
is extremely old APR (Apache Portable Runtime) used to build and run
httpd. This comes up from right distribution policy (if many packages
use APR let it be shared and disable bundled APRs) but lame APR
release cycle. Latest available as separate release apr 0.9.4 lacks a
couple of functions used in mod_cgid.
I fixed this in least expensive way.
I've prepared 2 rpms (apr and apr-util), to which I've added latest
snapshots of corresponding packages taken from their distribution
site (e.g. apr.apache.org). Now anyone can safely build mod_cgid.
Another problem I've faced is multi-user virtual hosting.
There are 2 possible solutions to this: run multiple apache instances
on different combinations of localhost:(port) with one acting as a
front end (mod_proxy), and use proper apache infrastructure.
There was an attempt to create such infrastructure. perchild mpm. Now
it is dead. But before death it forked into which now known as
And now metuxmpm is available as httpd.metuxmpm binary which is in
httpd rpm I've provided.
Also, because base build dir is now threaded (worker), I think all
apxs-using stuff like php will recognize things correctly and enable
thread safety in their own builds.
The described packages are available at:
http://gw6.sgu.ru/yum/fedora/contrib/SRPMS - source rpms apr, apr-
http://gw6.sgu.ru/yum/fedora/contrib/i386 - binaries for i386
Version-Release number of selected component (if applicable):
It's better to file separate bugs on separate issues.
1) worker will not be the default MPM for a long time.
2) exactly what is the APR issue which prevents mod_cgid being built?
3) have you benchmarked mod_cgi vs mod_cgid? If you could post the
results of such benchmarking to fedora-devel-list we can discuss
including mod_cgid again.
Sorry, I thought they all will go to you ... :)
1) Well maybe it worth hack php.spec to build it threadsafe to allow
wider usage and testing of nondefault httpd.worker ?
2) mod_cgid won't build because apr-0.9.4 lacks apr_os_pipe_put_ex.
3) I will try to make adequate and reproducible benchmark.
Needs investigation for FC4.
mod_cgid.so is built again but I'm not going to enable it by default unless
there are some convincing reasons
I did some basic benchmarking with ab of a printenv CGI script: mod_cgid was at
most 10% higher for some concurrency levels; trailing out to approximately
equivalent performance at higher concurrency, but maybe that was just because I
was hitting the scaling limit of the system.