2013-07-27 6 views
42

मैं अपने कोड बेस पर संगतता और प्रदर्शन के लिए हिपहॉप-PHP का मूल्यांकन कर रहा हूं, लेकिन अंतर्निहित वेब सर्वर सक्षम होने पर मुझे बहुत खराब प्रदर्शन मिल रहा है।एचएचवीएम खराब प्रदर्शन

मेरे पास निम्न नमूना परीक्षण प्रोग्राम है जो एक फाइबोनैकी अनुक्रम की गणना करता है।

ex3.php:

function fib($n) 
{ 
    if ($n <= 2) 
     return 1; 
    else 
     return fib($n-1) + fib($n-2); 
} 

$n = 36; 
printf("fib(%d) = %d\n", $n, fib($n, 2)); 

जब मैं कमांड लाइन का उपयोग कर HHVM के माध्यम से इस चलाने के लिए, मैं शानदार परिणाम:

time hhvm -v"Eval.Jit=true" -f ./ex3.php 
fib(36) = 14930352 

real 0m0.267s 
user 0m0.248s 
sys  0m0.020s 

मानक PHP के साथ इस की तुलना करें:

[email protected]:/www# time php -f ./ex3.php 
fib(36) = 14930352 

real 0m5.606s 
user 0m5.600s 
sys  0m0.000s  

हालांकि, जब मैं एचएचवीएम में अंतर्निर्मित वेब सर्वर को सक्षम करना चाहता हूं, तो सभी प्रदर्शन लाभ खो गए हैं:

hhvm -v"Eval.Jit=true" -m server -p 8000 & 
time wget -qSO - http://localhost:8000/ex3.php 
    HTTP/1.1 200 OK 
    Content-Type: text/html; charset=utf-8 
    X-Powered-By: HPHP 
    Date: Sat, 27 Jul 2013 14:16:09 GMT 
    Content-Length: 19 
fib(36) = 14930352 

real 0m5.279s 
user 0m0.000s 
sys  0m0.000s 

जैसा कि आप देख सकते हैं, मुझे एचएचवीएम से प्रतिक्रिया मिल रही है, लेकिन इस अनुरोध को संसाधित करने में 5 सेकंड से अधिक समय लगता है। मैं क्या खो रहा हूँ?

उत्तर

97

एचएचवीएम इंजीनियर यहां।

सर्वर मोड में, एचएचवीएम दुभाषिया-केवल मोड (यानी जेआईटी ऑफ के साथ) में देखे गए पहले एन अनुरोधों को चलाएगा।

अनुकूलित अनुकूलित में डिफ़ॉल्ट एन = 11 है, इसलिए यदि आप 12 बार अनुरोध चलाने के लिए थे, तो 12 वां एक बहुत तेज़ होगा।

आप इसे कॉन्फ़िगरेशन विकल्प के साथ ट्यून कर सकते हैं, जैसे: -v Eval.JitWarmupRequests=3। यदि आप इसे 0 पर सेट करते हैं, तो आप तुरंत स्पीडअप देखेंगे।

ऐसा करने के कुछ कारण हैं।

सबसे पहले, यह क्षणिक गर्म प्रभाव को जेआईटी-संकलित कोड को प्रभावित करने से रोकता है।

उदाहरण के लिए, पहले कुछ अनुरोधों को एपीसी में मूल्यों को पॉप्युलेट करने की आवश्यकता हो सकती है, जिससे एप्लिकेशन कोड स्थिर-राज्य पथों से अलग-अलग पथों को नीचे जाने का कारण बनता है। इस तरह, हम जेआईटी संकलन पर जगह बर्बाद नहीं करते हैं जिसका उपयोग केवल कुछ ही बार किया जाएगा।

दूसरा, यह भविष्य में संकलन को बेहतर बनाने के लिए एचएचवीएम को प्रोफाइलिंग जानकारी एकत्र करने की अनुमति देता है।

यदि हम देखते हैं कि एक निश्चित मान एक पूर्णांक 99% समय है, उदाहरण के लिए, हम पूर्णांक मामले के लिए अनुकूलित कोड संकलित कर सकते हैं। वर्तमान में हमारे पास प्रोफाइलिंग सक्षम के साथ जेआईटी-कंपाइल कोड की सुविधा नहीं है (हार्ड पार्ट इसे सुरक्षित रूप से इसे फेंकने के बाद इसे फेंक रहा है), इसलिए हम दुभाषिया-केवल मोड में डेटा संग्रह करते हैं।

+0

मुझे अपने nginx सेटअप के साथ बेहद धीमी प्रदर्शन है। यदि आप मुझे अपने धागे पर किसी भी फ़ीड को वापस दे सकते हैं http://stackoverflow.com/questions/25147053/extremely-slow-hhvm-wordpress-nginx?rq=1 –

+0

मैं जवाब में डेटा से हल नहीं कर सका। यदि कोई भी एक ही चिंता का सामना कर रहा है तो इन धागे पर जाएं: 1. https://github.com/facebook/hhvm/issues/3166 2. https://github.com/facebook/hhvm/issues/900 मैं था कॉन्फ़िगरेशन निर्दिष्ट किए बिना सर्वर बनाना, जहां मैं गलत था। – Parixit

2

मैं एक ही प्रदर्शन समस्या है, और मैं केवल /etc/hhvm/php.ini

;hhvm.log.level = Warning 
;hhvm.log.always_log_unhandled_exceptions = true 
;hhvm.log.runtime_error_reporting_level = 8191 
2

में इन पंक्तियों टिप्पणी करता है, तो HHVM> v3.4 Eval.JitWarmupRequests बदल गया के बाद शानदार परिणाम प्राप्त = 0 से Eval।JitProfileInterpRequests = 0

 
`#!/usr/bin/hhvm -v Eval.Jit=1 -v Eval.JitProfileInterpRequests=0 ./do.php` 
+0

वह कोड कहां बदला जा सकता है? मुझे उस फ़ाइल का पथ नहीं मिल रहा है। कोई उपाय? –

संबंधित मुद्दे