Stress tool: http://openwebload.sourceforge.net/
Server: PIII 900MHz, 512MB, CentOS 5.2, lighttpd/1.4.19, PHP 5.2.6
Desktop: Athlon XP 2600+, 2GB, WinXP

[index.php]

Php says 2 + 2 = <?php echo (2 + 2); ?>

Since PHP code is a very simple one, response time (or cpu usage) should have better representation of magnet/rewrite over-head.

Statistics without any technique

C:\>openload.exe http://example.com/index.php 4

MaTps 237.86, Tps 237.86, Resp Time  0.016, Err   0%, Count   240
MaTps 237.77, Tps 237.00, Resp Time  0.017, Err   0%, Count   477
MaTps 238.06, Tps 240.59, Resp Time  0.017, Err   0%, Count   720
MaTps 238.55, Tps 243.03, Resp Time  0.016, Err   0%, Count   964
MaTps 238.58, Tps 238.85, Resp Time  0.017, Err   0%, Count  1205
MaTps 238.28, Tps 235.59, Resp Time  0.017, Err   0%, Count  1442
MaTps 238.12, Tps 236.61, Resp Time  0.017, Err   0%, Count  1685
MaTps 238.20, Tps 239.00, Resp Time  0.017, Err   0%, Count  1924
MaTps 238.51, Tps 241.28, Resp Time  0.017, Err   0%, Count  2166
MaTps 238.29, Tps 236.29, Resp Time  0.017, Err   0%, Count  2403
MaTps 239.21, Tps 247.52, Resp Time  0.016, Err   0%, Count  2653
MaTps 239.37, Tps 240.80, Resp Time  0.017, Err   0%, Count  2895
MaTps 238.50, Tps 230.69, Resp Time  0.017, Err   0%, Count  3128
MaTps 239.05, Tps 244.00, Resp Time  0.016, Err   0%, Count  3372
MaTps 239.52, Tps 243.76, Resp Time  0.016, Err   0%, Count  3616
MaTps 238.90, Tps 233.30, Resp Time  0.017, Err   0%, Count  3850
MaTps 240.06, Tps 250.50, Resp Time  0.016, Err   0%, Count  4103
MaTps 240.23, Tps 241.79, Resp Time  0.017, Err   0%, Count  4346
MaTps 240.49, Tps 242.81, Resp Time  0.016, Err   0%, Count  4591
MaTps 239.78, Tps 233.37, Resp Time  0.017, Err   0%, Count  4826
MaTps 240.11, Tps 243.06, Resp Time  0.016, Err   0%, Count  5071
MaTps 240.20, Tps 241.07, Resp Time  0.017, Err   0%, Count  5314
MaTps 240.23, Tps 240.52, Resp Time  0.017, Err   0%, Count  5555
MaTps 240.57, Tps 243.54, Resp Time  0.016, Err   0%, Count  5800
MaTps 240.79, Tps 242.81, Resp Time  0.016, Err   0%, Count  6045
MaTps 240.82, Tps 241.07, Resp Time  0.017, Err   0%, Count  6288
MaTps 240.32, Tps 235.82, Resp Time  0.017, Err   0%, Count  6525
MaTps 241.19, Tps 249.00, Resp Time  0.016, Err   0%, Count  6774
MaTps 241.20, Tps 241.28, Resp Time  0.016, Err   0%, Count  7016

CPU usage by lighttpd process was swinging between 20% & 22%


Statistics for mod_magnet

[lighttpd.conf]

$HTTP["host"] == "example.com" {
  server.document-root = "/sites/example.com/htdocs"
  magnet.attract-physical-path-to = ( server.document-root + "/rewrite.lua" )
}

C:\>openload.exe http://example.com/index.php 4

MaTps 228.40, Tps 228.40, Resp Time  0.017, Err   0%, Count   230
MaTps 227.47, Tps 219.12, Resp Time  0.018, Err   0%, Count   450
MaTps 227.17, Tps 224.43, Resp Time  0.018, Err   0%, Count   676
MaTps 226.31, Tps 218.60, Resp Time  0.018, Err   0%, Count   897
MaTps 224.58, Tps 208.98, Resp Time  0.018, Err   0%, Count  1111
MaTps 224.39, Tps 222.66, Resp Time  0.019, Err   0%, Count  1335
MaTps 224.07, Tps 221.23, Resp Time  0.018, Err   0%, Count  1558
MaTps 223.32, Tps 216.57, Resp Time  0.019, Err   0%, Count  1775
MaTps 222.38, Tps 213.93, Resp Time  0.019, Err   0%, Count  1990
MaTps 223.41, Tps 232.67, Resp Time  0.017, Err   0%, Count  2225
MaTps 222.73, Tps 216.57, Resp Time  0.018, Err   0%, Count  2442
MaTps 223.61, Tps 231.54, Resp Time  0.017, Err   0%, Count  2674
MaTps 223.86, Tps 226.10, Resp Time  0.018, Err   0%, Count  2901
MaTps 224.37, Tps 229.00, Resp Time  0.018, Err   0%, Count  3130
MaTps 223.91, Tps 219.78, Resp Time  0.018, Err   0%, Count  3350
MaTps 223.00, Tps 214.79, Resp Time  0.019, Err   0%, Count  3565
MaTps 222.64, Tps 219.37, Resp Time  0.018, Err   0%, Count  3787
MaTps 222.37, Tps 220.00, Resp Time  0.018, Err   0%, Count  4007
MaTps 222.11, Tps 219.78, Resp Time  0.018, Err   0%, Count  4227
MaTps 222.10, Tps 222.00, Resp Time  0.018, Err   0%, Count  4449
MaTps 222.25, Tps 223.55, Resp Time  0.018, Err   0%, Count  4673
MaTps 221.56, Tps 215.42, Resp Time  0.018, Err   0%, Count  4891

C:\>openload.exe http://example.com/missing/ 4

MaTps 210.95, Tps 210.95, Resp Time  0.019, Err   0%, Count   212
MaTps 212.25, Tps 224.00, Resp Time  0.018, Err   0%, Count   436
MaTps 213.80, Tps 227.77, Resp Time  0.018, Err   0%, Count   664
MaTps 214.51, Tps 220.90, Resp Time  0.018, Err   0%, Count   886
MaTps 214.44, Tps 213.79, Resp Time  0.019, Err   0%, Count  1100
MaTps 215.47, Tps 224.78, Resp Time  0.018, Err   0%, Count  1325
MaTps 216.20, Tps 222.77, Resp Time  0.018, Err   0%, Count  1550
MaTps 215.36, Tps 207.79, Resp Time  0.019, Err   0%, Count  1758
MaTps 215.83, Tps 220.00, Resp Time  0.018, Err   0%, Count  1978
MaTps 216.95, Tps 227.09, Resp Time  0.017, Err   0%, Count  2206
MaTps 217.84, Tps 225.87, Resp Time  0.018, Err   0%, Count  2433
MaTps 217.59, Tps 215.28, Resp Time  0.019, Err   0%, Count  2650
MaTps 218.91, Tps 230.85, Resp Time  0.017, Err   0%, Count  2882
MaTps 218.90, Tps 218.81, Resp Time  0.018, Err   0%, Count  3103
MaTps 219.21, Tps 222.00, Resp Time  0.018, Err   0%, Count  3325
MaTps 219.23, Tps 219.37, Resp Time  0.018, Err   0%, Count  3547
MaTps 218.91, Tps 216.00, Resp Time  0.019, Err   0%, Count  3763
MaTps 219.21, Tps 222.00, Resp Time  0.018, Err   0%, Count  3985
MaTps 219.59, Tps 223.00, Resp Time  0.018, Err   0%, Count  4208
MaTps 219.43, Tps 217.91, Resp Time  0.018, Err   0%, Count  4427
MaTps 219.89, Tps 224.10, Resp Time  0.018, Err   0%, Count  4652
MaTps 220.04, Tps 221.34, Resp Time  0.018, Err   0%, Count  4874

CPU usage by lighttpd process was swinging between 25% & 28%

Statistics for mod_rewrite

[lighttpd.conf]

$HTTP["host"] == "example.com" {
  server.document-root = "/sites/example.com/htdocs"
  url.rewrite = (
    "^/(.*)\.(.+)$" => "$0",
    "^/(.+)/?$" => "/index.php/$1"
  )
}

C:\>openload.exe http://example.com/index.php 4

MaTps 219.00, Tps 219.00, Resp Time  0.018, Err   0%, Count   219
MaTps 219.32, Tps 222.22, Resp Time  0.018, Err   0%, Count   443
MaTps 219.05, Tps 216.57, Resp Time  0.018, Err   0%, Count   660
MaTps 219.84, Tps 227.00, Resp Time  0.018, Err   0%, Count   887
MaTps 220.02, Tps 221.67, Resp Time  0.018, Err   0%, Count  1110
MaTps 220.40, Tps 223.78, Resp Time  0.018, Err   0%, Count  1334
MaTps 220.79, Tps 224.33, Resp Time  0.018, Err   0%, Count  1559
MaTps 221.69, Tps 229.77, Resp Time  0.018, Err   0%, Count  1789
MaTps 221.17, Tps 216.48, Resp Time  0.018, Err   0%, Count  2007
MaTps 222.12, Tps 230.69, Resp Time  0.017, Err   0%, Count  2240
MaTps 222.39, Tps 224.78, Resp Time  0.018, Err   0%, Count  2465
MaTps 222.22, Tps 220.68, Resp Time  0.018, Err   0%, Count  2687
MaTps 222.63, Tps 226.32, Resp Time  0.018, Err   0%, Count  2914
MaTps 223.20, Tps 228.32, Resp Time  0.017, Err   0%, Count  3143
MaTps 222.88, Tps 220.00, Resp Time  0.018, Err   0%, Count  3363
MaTps 222.49, Tps 219.00, Resp Time  0.018, Err   0%, Count  3582
MaTps 222.34, Tps 221.00, Resp Time  0.018, Err   0%, Count  3803
MaTps 223.14, Tps 230.31, Resp Time  0.017, Err   0%, Count  4034
MaTps 222.64, Tps 218.13, Resp Time  0.018, Err   0%, Count  4253
MaTps 223.17, Tps 228.00, Resp Time  0.018, Err   0%, Count  4481
MaTps 223.75, Tps 229.00, Resp Time  0.018, Err   0%, Count  4710
MaTps 222.96, Tps 215.78, Resp Time  0.018, Err   0%, Count  4926

C:\>openload.exe http://example.com/missing/ 4

MaTps 219.78, Tps 219.78, Resp Time  0.018, Err   0%, Count   220
MaTps 219.64, Tps 218.34, Resp Time  0.018, Err   0%, Count   439
MaTps 219.71, Tps 220.36, Resp Time  0.018, Err   0%, Count   662
MaTps 219.85, Tps 221.12, Resp Time  0.018, Err   0%, Count   884
MaTps 219.58, Tps 217.13, Resp Time  0.018, Err   0%, Count  1102
MaTps 219.79, Tps 221.67, Resp Time  0.018, Err   0%, Count  1325
MaTps 220.00, Tps 221.89, Resp Time  0.018, Err   0%, Count  1548
MaTps 221.49, Tps 234.89, Resp Time  0.017, Err   0%, Count  1785
MaTps 221.39, Tps 220.57, Resp Time  0.018, Err   0%, Count  2008
MaTps 221.92, Tps 226.64, Resp Time  0.018, Err   0%, Count  2236
MaTps 222.13, Tps 224.00, Resp Time  0.018, Err   0%, Count  2460
MaTps 221.11, Tps 212.00, Resp Time  0.019, Err   0%, Count  2672
MaTps 221.90, Tps 229.00, Resp Time  0.018, Err   0%, Count  2901
MaTps 222.57, Tps 228.54, Resp Time  0.017, Err   0%, Count  3130
MaTps 222.91, Tps 226.00, Resp Time  0.018, Err   0%, Count  3356
MaTps 222.39, Tps 217.69, Resp Time  0.018, Err   0%, Count  3575
MaTps 222.64, Tps 224.88, Resp Time  0.018, Err   0%, Count  3801
MaTps 222.85, Tps 224.78, Resp Time  0.018, Err   0%, Count  4026
MaTps 221.17, Tps 206.00, Resp Time  0.019, Err   0%, Count  4232
MaTps 221.97, Tps 229.17, Resp Time  0.017, Err   0%, Count  4463
MaTps 222.73, Tps 229.62, Resp Time  0.017, Err   0%, Count  4694
MaTps 223.74, Tps 232.84, Resp Time  0.017, Err   0%, Count  4928

CPU usage by lighttpd process was swinging between 21% & 23%

Conclusions

Permalink solution using mod_magnet & mod_rewrite are having similar response time (under light load - 4 concurrent users). I did not see any significant performance difference (for response time) in both solution. I’ve also performed similar test for 10 concurrent users and results were similar (response time increased by about 50%).

I also monitored CPU usage by lighttpd process during the test and it was slightly higher (25-28%) for mod_magnet based solution (as compared to 21-23% for mod_rewrite). This indicates that mod_rewrite should perform slightly better under heavy load. Sorry, I could not confirm heavy load scenario as my desktop CPU was maxing (going 60-80%) for 10 concurrent users.

Note: Permalink solution based on mod_magnet is more reliable and should always work for any permalink pattern. Permalink solution based on mod_rewrite needs special tuning for not-so-common patterns and non-wordpress content inside your webroot. For example, my favorite pattern /%category%/%postname%.html and custom folder like http://sudhaker.com/demo/ will need special tuning in mod_rewrite rules.

Cheers,
Sudhaker

Posted Friday, October 17th, 2008 at 12:57 am
Filed Under Category: Web Development
You can skip to the end and leave a response. Pinging is currently not allowed.

0

Leave a Reply

CAPTCHA image