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