Benchmark Report
I wrote a PHP server which has the same features as zimg for testing. The test result below proved zimg is more efficient than PHP.
Author: buaazp
Date: 08/01/2013
Test Method
This suite of testing is using ab which is a tool of Apache. Every test send 100,000 requests in the same concurrency level. And the processing ability is judged by number of processing request per second. Nginx and PHP is built as a constrast.
Test commonds:
ab2 -c 100 -n 100000 http://127.0.0.1:4869/5f189d8ec57f5a5a0d3dcba47fa797e2
ab2 -c 100 -n 100000 http://127.0.0.1:80/zimg.php?md5=5f189d8ec57f5a5a0d3dcba47fa797e2
ab2 -c 100 -n 100000 http://127.0.0.1:4869/5f189d8ec57f5a5a0d3dcba47fa797e2?w=100&h=100&g=1
ab2 -c 100 -n 100000 http://127.0.0.1:80/zimg.php?md5=5f189d8ec57f5a5a0d3dcba47fa797e2&w=100&h=100&g=1
NOTE: The unit of results below is rps - request per second.
Environment
OS:openSUSE 12.3
CPU:Intel Xeon E3-1230 V2
Memory:8GB DDR3 1333MHz
Disk:WD 1TB 7200
Software Version
zimg:1.0.0
Nginx:1.2.9
PHP:5.3.17
Testing Result
Object | zimg | zimg+memcached | Nginx+PHP |
---|---|---|---|
Static Image | 2857.80 | 4995.95 | 426.56 |
Processing | 2799.34 | 4658.35 | 58.61 |
Because of special design, zimg is 6 to 79 times faster than PHP.
High Pressure Testing
There is a echo test between http module in zimg and Nginx. They receive 200,000 requests and return a sigle string "It works!". Nginx performing well without php-fpm. While zimg is more stable. I record the processing number in every different concurrency level.
Test commonds:
ab2 -c 5000 -n 200000 http://127.0.0.1:4869/
ab2 -c 5000 -n 200000 http://127.0.0.1:80/
Test result:
Concurrency | zimg | Nginx |
---|---|---|
100 | 32765.35 | 33412.12 |
300 | 32991.86 | 32063.05 |
500 | 31364.29 | 30599.07 |
1000 | 28936.67 | 28163.63 |
2000 | 27939.02 | 25124.51 |
3000 | 28168.56 | 22053.22 |
4000 | 28463.45 | 21464.88 |
5000 | 27947.37 | 13536.93 |
6000 | 27533.83 | 14430.21 |
7000 | 27502.03 | 14623.62 |
8000 | 26505.07 | 13389.28 |
9000 | 27124.89 | 13650.01 |
10000 | 27446.23 | 10901.13 |
11000 | 26335.22 | 10585.73 |
12000 | 27068.68 | 10461.54 |
13000 | 26798.55 | 8530.11 |
14000 | 26741.93 | 7628.09 |
15000 | 26556.54 | 9832.16 |
16000 | 26815.70 | 8018.44 |
17000 | 27811.33 | 7951.21 |
18000 | 25722.97 | 6246.00 |
19000 | 26730.02 | 8134.93 |
20000 | 27678.67 | 6106.95 |
Notes: After 1,000 concurrency level, nginx begins to return failed. After 9,000 level, nginx cann't complete 200,000 requests any more. So I reduce request number of nginx. zimg return all successful responses in all concurrency level.
This chart is the result of high pressure testing.