I compiled 2 different versions of apache 2.2.4 on Solaris 10 (06/06, on a crappy U10, but...) one using the prefork MPM (compile --with-mpm=prefork) and the other using the worker MPM (compile --with-mpm=worker). Prefork is supposed to generally be better for single or dual cpu systems, and worker is supposed to be generally better for multi-CPU systems. The following are the Apache Bench results run against each build on an old Sun Ultra 10 with a single 440mhz CPU and 512m RAM. The server isn't impressive, but it works for bench-testing the MPMs...
I used the default settings for each MPM:
-------------------------------------------------------------
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
-------------------------------------------------------------
and the siege tests were run with the following settings:------------------------------------------------------------- concurrent = 10 time = 5M benchmark = true -------------------------------------------------------------
Apache Bench results for prefork:
-------------------------------------------------------------
% ./ab -n 10000 -c 10 http://192.168.1.80/index.html
...
Server Software:        Apache/2.2.4
Server Hostname:        192.168.1.80
Server Port:            80
Document Path:          /index.html
Document Length:        44 bytes
Concurrency Level:      10
Time taken for tests:   478.185521 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3160000 bytes
HTML transferred:       440000 bytes
Requests per second:    20.91 [#/sec] (mean)
Time per request:       478.185 [ms] (mean)
Time per request:       47.819 [ms] (mean, across all concurrent requests)
Transfer rate:          6.45 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2  95.4      0    3380
Processing:     1  472 1178.0      2   10139
Waiting:        0   41 389.2      0   10138
Total:          1  475 1182.0      2   10139
Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      3
  80%      4
  90%   3372
  95%   3377
  98%   3379
  99%   3381
 100%  10139 (longest request)
-------------------------------------------------------------
Siege results for prefork:------------------------------------------------------------- Lifting the server siege... done. Transactions: 6045 hits Availability: 100.00 % Elapsed time: 300.38 secs Data transferred: 0.25 MB Response time: 0.50 secs Transaction rate: 20.12 trans/sec Throughput: 0.00 MB/sec Concurrency: 9.97 Successful transactions: 6045 Failed transactions: 0 Longest transaction: 10.13 Shortest transaction: 0.00 -------------------------------------------------------------Apache Bench results for worker:
-------------------------------------------------------------
% ./ab -n 10000 -c 10 http://192.168.1.80/index.html
...
Server Software:        Apache/2.2.4
Server Hostname:        192.168.1.80
Server Port:            80
Document Path:          /index.html
Document Length:        44 bytes
Concurrency Level:      10
Time taken for tests:   244.283673 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3160000 bytes
HTML transferred:       440000 bytes
Requests per second:    40.94 [#/sec] (mean)
Time per request:       244.284 [ms] (mean)
Time per request:       24.428 [ms] (mean, across all concurrent requests)
Transfer rate:          12.63 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1  75.4      0    3378
Processing:     1  239 870.1      1   11898
Waiting:        0   16 229.6      0    3388
Total:          1  241 872.9      1   11898
Percentage of the requests served within a certain time (ms)
  50%      1
  66%      2
  75%      2
  80%      2
  90%      4
  95%   3373
  98%   3379
  99%   3380
 100%  11898 (longest request)
-------------------------------------------------------------
Siege results for worker:------------------------------------------------------------- Lifting the server siege... done. Transactions: 11024 hits Availability: 100.00 % Elapsed time: 300.24 secs Data transferred: 0.46 MB Response time: 0.27 secs Transaction rate: 36.72 trans/sec Throughput: 0.00 MB/sec Concurrency: 9.91 Successful transactions: 11024 Failed transactions: 0 Longest transaction: 11.92 Shortest transaction: 0.00 -------------------------------------------------------------
So for this setup, the worker MPM was almost twice as fast as the prefork.
I'm going to run these same tests on a multi-cpu server and see what the results look like.
No comments:
Post a Comment