php5-cgi+Nginx: which is faster 127.0.0.1:9000 or Unix sockets?

Mark Alan varia at e-healthexpert.org
Thu Nov 6 17:07:46 MSK 2008


We intended to test server performance using either:
  /usr/bin/php-cgi -q -b 127.0.0.1:9000  # i.e., the classic IP:port
or:
  /usr/bin/php-cgi -q -b /tmp/php-fastcgi.socket  # i.e. using Unix 
domain sockets (and having taken care to change the relevant lines in 
nginx config files from: fastcgi_pass 127.0.0.1:9000 to fastcgi_pass 
unix:/tmp/php-fastcgi.socket)

In order to verify the impact of the differences described at: 
<http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html>

*Material*
- Ubuntu 8.04.1 LTS server
- Nginx 0.6.32 installed with:
   wget 
http://http.us.debian.org/debian/pool/main/n/nginx/nginx_0.6.32-3_i386.deb
   sudo gdebi nginx_0.6.32-3_i386.deb
- PH5 5.2.4 installed with:
   sudo aptitude -R install php5-cli php5-cgi php5-mysql php5-imap
- Apache Bench 2.0.40-dev installed with:
   sudo aptitude -R install apache2-utils

*Methods*
- Create php test script with:
echo -e '<?php\n;\n?>' | sudo -u www-data tee 
/var/www/nginx-default/benchtest.php
- Start php-cgi using the Ubuntu's UPSTART script posted as "20081106 - 
How to enable Nginx to serve PHP code/pages in UBUNTU" in this Nginx 
mailing list.
- Start Apache Bench script with:
   sudo ab -n 10000 -c 100 http://127.0.0.1/benchtest.php | tee 
bench-ip.log # after configuring php-cgi to listen at 127.0.0.1:9000
   sudo ab -n 10000 -c 100 http://127.0.0.1/benchtest.php | tee 
bench-socket.log #after configuring php-cgi a unix socket at 
/tmp/php-fastcgi.socket

*Results and Discussion*
We made a delta file (bench-diff.txt) using the linux diff utility to 
show the differences between the two approaches:
- diff -Naur bench-ip.log bench-socket.log > bench-diff.txt

Using the described testing procedure shows that using using Unix domain 
sockets, besides the elsewhere described advantage of being  more secure 
(see external link above), significantly improves server cgi performance.


Regards,

M.


File bench-diff.txt follows:
--- cut here ---
--- bench-ip.log	2008-11-06 13:22:30.000000000 +0000
+++ bench-socket.log	2008-11-06 13:18:15.000000000 +0000
@@ -13,31 +13,31 @@
  Document Length:        0 bytes

  Concurrency Level:      100
-Time taken for tests:   5.708770 seconds
+Time taken for tests:   4.980691 seconds
  Complete requests:      10000
  Failed requests:        0
  Write errors:           0
  Total transferred:      1510000 bytes
  HTML transferred:       0 bytes
-Requests per second:    1751.69 [#/sec] (mean)
-Time per request:       57.088 [ms] (mean)
-Time per request:       0.571 [ms] (mean, across all concurrent requests)
-Transfer rate:          258.20 [Kbytes/sec] received
+Requests per second:    2007.75 [#/sec] (mean)
+Time per request:       49.807 [ms] (mean)
+Time per request:       0.498 [ms] (mean, across all concurrent requests)
+Transfer rate:          295.94 [Kbytes/sec] received

  Connection Times (ms)
                min  mean[+/-sd] median   max
-Connect:        0    0   1.4      0      27
-Processing:     9   55   9.5     55     156
-Waiting:        9   55   9.3     55     154
-Total:         15   56   9.0     55     156
+Connect:        0    1   4.1      0      35
+Processing:     4   47  12.8     48     145
+Waiting:        4   46  12.6     48     129
+Total:         12   48  11.1     49     145

  Percentage of the requests served within a certain time (ms)
-  50%     55
-  66%     57
-  75%     59
-  80%     61
-  90%     67
-  95%     71
-  98%     81
-  99%     91
- 100%    156 (longest request)
+  50%     49
+  66%     51
+  75%     53
+  80%     55
+  90%     60
+  95%     69
+  98%     78
+  99%     83
+ 100%    145 (longest request)
--- cut here ---





More information about the nginx mailing list