2011-07-11 10 views
5

Niedawno zrobiłem benchmark na HipHop dla PHP z Apache Benchmark (ab).benchmark apache na HipHop dla PHP

Spodziewałem się, że wynik HipHop for PHP będzie działał szybciej niż normalnie serwer WWW Apache2, ale okazało się, że jest inaczej.

mogę użyć tego skryptu, aby przetestować serwer,

<?php 
    $i=0; 
    while($i < 1000000){ 
    echo 'Welcome to HipHop for PHP<br />'; 
    $i++; 
    } 
?> 

i używam tego polecenia ab do odniesienia:

ab -n 500 -c 5 [URL] 

i używam tego polecenia do kompilacji:

hphp/hphp hiphop1.php -k 1 -l 3

Wynik testu wydajności serwera apache2:

[email protected]:~/dev/hiphop-php/doc$ ab -n 500 -c 5 http://localhost/hiphop1.php 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking localhost (be patient) 
Completed 100 requests 
Completed 200 requests 
Completed 300 requests 
Completed 400 requests 
Completed 500 requests 
Finished 500 requests 


Server Software:  Apache/2.2.16 
Server Hostname:  localhost 
Server Port:   80 

Document Path:   /hiphop1.php 
Document Length:  31000000 bytes 

Concurrency Level:  5 
Time taken for tests: 71.024 seconds 
Complete requests:  500 
Failed requests:  0 
Write errors:   0 
Total transferred:  15500095500 bytes 
HTML transferred:  15500000000 bytes 
Requests per second: 7.04 [#/sec] (mean) 
Time per request:  710.240 [ms] (mean) 
Time per request:  142.048 [ms] (mean, across all concurrent requests) 
Transfer rate:   213122.37 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 0.9  0  19 
Processing: 505 708 61.1 694  960 
Waiting:  0 0 3.3  0  67 
Total:  505 708 61.1 695  960 

Percentage of the requests served within a certain time (ms) 
    50% 695 
    66% 714 
    75% 729 
    80% 736 
    90% 781 
    95% 857 
    98% 898 
    99% 938 
100% 960 (longest request) 

i punktem odniesienia dla HipHop for PHP:

[email protected]:~/dev/hiphop-php/doc$ ab -n 500 -c 5 http://localhost:8080/hiphop1.php 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking localhost (be patient) 
Completed 100 requests 
Completed 200 requests 
Completed 300 requests 
Completed 400 requests 
Completed 500 requests 
Finished 500 requests 


Server Software:   
Server Hostname:  localhost 
Server Port:   8080 

Document Path:   /hiphop1.php 
Document Length:  31000000 bytes 

Concurrency Level:  5 
Time taken for tests: 294.546 seconds 
Complete requests:  500 
Failed requests:  0 
Write errors:   0 
Total transferred:  15500052500 bytes 
HTML transferred:  15500000000 bytes 
Requests per second: 1.70 [#/sec] (mean) 
Time per request:  2945.455 [ms] (mean) 
Time per request:  589.091 [ms] (mean, across all concurrent requests) 
Transfer rate:   51390.26 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 1.6  0  20 
Processing: 1515 2941 579.7 2919 4734 
Waiting:  1452 2626 532.5 2609 4135 
Total:  1515 2941 579.7 2919 4734 

Percentage of the requests served within a certain time (ms) 
    50% 2919 
    66% 3147 
    75% 3334 
    80% 3448 
    90% 3704 
    95% 3937 
    98% 4223 
    99% 4394 
100% 4734 (longest request) 

Pytanie jest, dlaczego HipHop działać wolniej w moim teście?

Czy jest coś nie tak z testem skryptu?

+0

Serwery (zwłaszcza bufor wyjściowy) mogą być konfigurowane inaczej. Jeśli bufor jest zbyt mały, wymagana jest większa liczba operacji wejścia/wyjścia. – LazyOne

+7

Twój kod testowy jest daleki od typowego obciążenia aplikacji internetowej. Współczesne aplikacje internetowe będą wykonywać wiele operacji na obiektach, IO bazy danych, przetwarzanie danych wejściowych przez użytkownika itp. Cały twój kod testuje pętle i wyniki tekstowe. Jest całkowicie możliwe, że hiphop jest szybszy w typowym, realnym świecie, ale wolniejszy w jednym lub dwóch bardzo szczególnych przypadkach. – GordonM

+1

Jakieś sugestie w testowaniu aplikacji internetowych? szczególnie HipHop for PHP? Nie wiem, jak zrobić test dla benchmarkingu serwera WWW – Kiddo

Odpowiedz

3

To błędne przekonanie, że hiphop PHP przyspiesza wykonywanie kodu PHP. To niekoniecznie. Facebook opracował go, ponieważ cała jego platforma jest wbudowana w kilka plików PHP, a te pliki są wykonywane tak często i są tak masywne, że korzystanie z czystego PHP byłoby nieefektywne.

używając Hip-Hop jest tylko krokiem do wykonania PHP, nigdy nie powinieneś używać PHP Hip-Hop do "Prostego" kodu w ten sposób.

Również PHP wykonuje pewne funkcje, które są wykonywane natywnie w C + ze swoim skrypcie PHP.