Lies, damned lies and benchmarks

jjohn on 2003-01-05T01:35:51

Ye Olde slashdot recently ran an article about the tiny web server Boa. That lead me to look at its obligatory benchmark page were it compares favorably to apache. The issue of web server benchmarks as become of interest to me as I work on my game State Secrets, which is has a single-threaded all Perl web server. I haven't been bowled over by the performance of SS as a web server (I didn't build it for speed) and some pages seem to take far too long to render.

Enter apache's benchmarking tool ab.

I present the results of two benchmarking runs. The benchmarking software was run on the same machine as the server (I realize there are inherent problems with this). The first set of numbers represents static content service. The second set of number is for dynamic content. There is an order of magnatude difference between these numbers, as one would expect.

What, if anything, do you make of these numbers? To me, it seems the server is performing pretty well. Of course, my expectations are pretty low. I don't expect to support more than 4 simultaneous users.

static content

invocation: ab http://marian:8080/ -n 1000 -c 12

Server Software:        State-Secrets-server/0.1
Server Hostname:        marian
Server Port:            8080

Document Path:          /
Document Length:        2752 bytes

Concurrency Level:      12
Time taken for tests:   15.477 seconds
Complete requests:      1000
Failed requests:        0
Broken pipe errors:     0
Total transferred:      2935000 bytes
HTML transferred:       2752000 bytes
Requests per second:    64.61 [#/sec] (mean)
Time per request:       185.72 [ms] (mean)
Time per request:       15.48 [ms] (mean, across all concurrent requests)
Transfer rate:          189.64 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     1    6.7      0    85
Processing:    61   183   29.6    197   330
Waiting:        7   183   30.1    196   330
Total:         61   184   27.3    197   330

Percentage of the requests served within a certain time (ms)
  50%    197
  66%    199
  75%    200
  80%    201
  90%    203
  95%    232
  98%    235
  99%    245
 100%    330 (last request)

dynamic content

invocation: ab 'http://marian:8080/game?function=hq&tid=ff46fa784a60d86029abca19d204ed17' -n 1000 -c 12

Server Software:        State-Secrets-server/0.1
Server Hostname:        marian
Server Port:            8080

Document Path:          /game?function=hq&tid=ff46fa784a60d86029abca19d204ed17
Document Length:        3019 bytes

Concurrency Level:      12
Time taken for tests:   35.151 seconds
Complete requests:      1000
Failed requests:        0
Broken pipe errors:     0
Total transferred:      3131000 bytes
HTML transferred:       3019000 bytes
Requests per second:    28.45 [#/sec] (mean)
Time per request:       421.81 [ms] (mean)
Time per request:       35.15 [ms] (mean, across all concurrent requests)
Transfer rate:          89.07 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     1    4.9      0    64
Processing:    46   419   35.7    427   499
Waiting:        1   418   36.5    426   499
Total:         46   420   32.7    427   499

Percentage of the requests served within a certain time (ms)
  50%    427
  66%    428
  75%    429
  80%    429
  90%    432
  95%    445
  98%    465
  99%    468
 100%    499 (last request)


POE

Matts on 2003-01-05T10:59:27

I wrote an "optimised" HTTP server in POE to see what the max performance I could get out of it would be. It turned out about 80 reqs/sec on a PIII-700.

I'd say you're not doing too bad. I tend not to worry about performance unless a URI is returning less than 5 reqs/sec.