benchmark results for distcc
The following table shows the effect of distcc on several
real-world compilation tasks; in this case, compiling various
open-source projects.  In each case, we compiled in four modes:
  -  local_01: all compilation done locally
  
-  dist_h38_j40: using distcc with 38 compilation servers (152
       CPUs), and make -j40, which gives 40 parallel
       compilations. distcc is used in non-pump mode (local preprocessing).
-  pump_h38_j40: like dist_h38_j40, but using
       distcc in pump (remote preprocessing) mode.
-  pump_h38_j80: like pump_h38_j40, but usingmake -j80instead ofmake -j40.
The client machine is an 2.8GHz Intel Pentium 4 machine, with 2G of
memory, running Linux 2.6.18.5 (modified Ubuntu 6.06).  The server
machines were all 4 CPU 2GHz AMD Dual Core Processor 270 machines,
with 2G of memory, running Linux 2.6.18.5 (modified Ubuntu 6.06).
Each test was run 5 times.  We report the average time over the 5
runs, as well as the standard deviation.  In order to minimize disk
caching effects on walltime results, we read all the files in each
project's tarball before building.
| Project | mode | wall time
 | std dev
 | cpu time
 | cpu %
 | 
|---|
| 
 | 
| binutils-2.18 | local_01 | 125.8s | 4.0s | 102.9s | 81.9% | 
| binutils-2.18 | dist_h38_j40 | 35.4s | 1.0s | 25.6s | 72.2% | 
| binutils-2.18 | pump_h38_j40 | 28.7s | 1.5s | 16.6s | 57.7% | 
| binutils-2.18 | pump_h38_j80 | 29.8s | 1.5s | 16.6s | 55.9% | 
| 
 | 
| glibc-2.6 | local_01 | 946.4s | 5.1s | 568.7s | 60.1% | 
| glibc-2.6 | dist_h38_j40 | 534.0s | 7.0s | 390.5s | 74.7% | 
| glibc-2.6 | pump_h38_j40 | 357.8s | 6.5s | 241.6s | 67.5% | 
| glibc-2.6 | pump_h38_j80 | 365.4s | 4.2s | 243.0s | 66.6% | 
| 
 | 
| hello-2.1.1 | local_01 | 0.7s | 0.1s | 0.4s | 62.8% | 
| hello-2.1.1 | dist_h38_j40 | 0.9s | 0.2s | 0.3s | 40.3% | 
| hello-2.1.1 | pump_h38_j40 | 1.1s | 0.1s | 0.4s | 31.3% | 
| hello-2.1.1 | pump_h38_j80 | 1.1s | 0.0s | 0.4s | 31.6% | 
| 
 | 
| httpd-2.0.43 | local_01 | 139.8s | 1.4s | 117.2s | 83.9% | 
| httpd-2.0.43 | dist_h38_j40 | 85.1s | 2.1s | 51.3s | 60.4% | 
| httpd-2.0.43 | pump_h38_j40 | 80.1s | 2.0s | 33.7s | 42.1% | 
| httpd-2.0.43 | pump_h38_j80 | 81.7s | 4.1s | 33.7s | 41.4% | 
| 
 | 
| linux-2.6.25 | local_01 | 818.3s | 7.9s | 543.9s | 66.5% | 
| linux-2.6.25 | dist_h38_j40 | 203.2s | 1.7s | 185.3s | 91.2% | 
| linux-2.6.25 | pump_h38_j40 | 134.9s | 5.3s | 96.5s | 71.6% | 
| linux-2.6.25 | pump_h38_j80 | 135.6s | 4.3s | 97.7s | 72.1% | 
| 
 | 
| samba-3.0.20 | local_01 | 314.0s | 2.4s | 258.8s | 82.4% | 
| samba-3.0.20 | dist_h38_j40 | 101.8s | 0.6s | 94.0s | 92.3% | 
| samba-3.0.20 | pump_h38_j40 | 31.4s | 2.4s | 21.1s | 67.4% | 
| samba-3.0.20 | pump_h38_j80 | 31.8s | 1.7s | 21.2s | 66.9% | 
| 
 | 
  -  For all but the smallest projects, distccresults in a
       significant speedup in compilation time over compiling locally. This is
       because distcc is able to compile many source files in parallel. Such
       parallelism may not possible for small projects such ashello, which involves four small compilations.
 
 
-  In almost all cases, distcc's new pump mode results in a significant
       speedup in compilation time over non-pump mode.  Sometimes, as for
       Samba 3.0, the speedup is more than a factor of three!
 
 
-  The parallelism of the various projects' Makefiles affects
       the obtained speedup significantly.  Makefiles that
       run makesequentially in subdirectories benefit less from
       distcc.  They will see little added benefit from distcc's pump mode
       because the sequentiality of their execution allows only some,
       but not many, compilations to be issued near
       simultaneously.
 
 
-  All these opensource projects are built by running
       configureplusmake.  In each case,
       we count only themaketime, not theconfiguretime.  However, projects such as
       binutils run extra configuration during themakestep (for binutils, the initialconfigurerun is
       trivial, and themakecommand does more intensive
       configuration in various subdirectories before building).  This
       will affect times as described above -- especially reducing the
       benefit of pump mode -- since the configuration
       steps are not run in parallel.
 
 
-  Even when pump mode does not speed up the build much, as for
       httpd, it still reduces the CPU burden on the
       local machine, making it more usable during compiles.  Note,
       however, that this is balanced by an increased CPU burden on
       the server machines (about 10% in our tests), and may also
       require more memory on the host machine than non-pump mode
       does.
 
 
-  With a multi-processor client machine, the speed-ups would have been
       less, both for non-pump distcc over local compilation as for
       distcc-pump over non-pump distcc. Still, with four-processor client
       machines, distcc's pump-mode is up to 2 1/2 times faster than its
       non-pump mode for large projects benchmarked at Google.
 
 
-  As a side note, while collecting benchmark results, we found sometimes
       that pump mode did not give the expected speedup.  On analyzing the
       logs, we discovered the reason: that distcc had encountered an error
       running the test in pump mode, and had fallen back to plain distcc
       mode.  This can happen for
       several
       reasons.  For example, the Linux kernel needed special attention
       because it rewrites header files during the build.