2009-07-19 26 views
9

वेब विभिन्न भाषाओं, कंपाइलर और वर्चुअल मशीनों के विभिन्न प्रकार के प्रदर्शन परीक्षण से भरा है। फिर भी इनमें से कोई भी कुछ असली दुनिया परिदृश्य का उपयोग करके प्रदर्शन का परीक्षण नहीं करता है। इसके अलावा, इस तरह के बेंचमार्क के लिए Google को खोजना आम तौर पर केवल कई वर्षों के पुराने बेंचमार्क उत्पन्न करता है क्योंकि उनके पास लिंक एकत्र करने का सबसे अधिक समय होता है।मोनो आभासी मशीन का वर्तमान प्रदर्शन कैसा है?

क्या आप में से कोई भी अलग वर्चुअल मशीनों के वर्तमान प्रदर्शन में कुछ वास्तविक अंतर्दृष्टि है? इसके अलावा मैं विशेष रूप से जानना चाहता हूं कि कैसे मोनो का प्रदर्शन माइक्रोसॉफ्ट के नेट और सन के जावा की तुलना करता है और कैसे विभिन्न आभासी मशीनों का प्रदर्शन हाल ही में विकसित हुआ है।

+2

यह * मोनो * दिन-प्रतिदिन दिन में बढ़ रहा है :)। पूर्ण शब्दों में कोई विचार नहीं है। – akarnokd

उत्तर

2

जावा और मोनो की तुलना के लिए आप The Computer Language Benchmarks Game पर एक नज़र डाल सकते हैं।

+0

मुझे उस सूची में वास्तविक .NET VM का कोई संकेत नहीं दिख रहा है? –

+0

चूंकि यह लिनक्स पर नहीं चलेगा। लेकिन यही कारण है कि मैंने मोनो और जावा को अपना जवाब प्रतिबंधित कर दिया। – Joey

1

जबकि मैंने मोनो का उपयोग नहीं किया है, मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप इसके साथ क्या करते हैं। मुझे नहीं बातों पर आप सटीक संख्या दे सकते हैं, लेकिन यहां मोनो चल बिन्दु प्रदर्शन के बारे में एक दिलचस्प tidbit है:

http://forums.xna.com/forums/p/24249/24249.aspx

मोनो पल में अपने CPU के SIMD निर्देश (SSE2 और SSE4 के उपयोग की अनुमति देता है के रूप में, मैं विश्वास करें) नाटकीय रूप से फ्लोटिंग पॉइंट गणनाओं को गति देने के लिए, यह इस तरह की चीज़ (10x तेज तक) पर .NET को उड़ सकता है, क्योंकि चार्ट दिखाता है (और उम्मीद है कि माइक्रोसॉफ्ट जल्द ही कुछ ही लागू करेगा, .NET 4.5, कृपया?)। हालांकि, चार्ट यह भी दिखाता है कि Mono.Simd का उपयोग नहीं करते समय .NET अभी भी मोनो से काफी तेज है। और आप विश्वास का एक बड़ा छलांग ले सकते हैं और स्ट्रिंग प्रदर्शन जैसे अन्य क्षेत्रों में फ़्लोटिंग पॉइंट प्रदर्शन में 20% अंतर को extrapolate।

हालांकि, यह मोनो 2.2 है और चीजें काफी बदल सकती हैं क्योंकि मोनो इन दिनों काफी तेजी से आगे बढ़ रहा है, या इसलिए मैं सुनता हूं।

+0

अगर मैं पूछूं तो डाउनवोट क्यों? – JulianR

+0

मोनो का प्रदर्शन भयानक है और केवल मामूली रूप से सुधार हुआ है और एक बार इसके पूरे जीवन में (मोनो 2.2 के साथ)। –

12

माप प्रदर्शन एक जटिल मामला है। अतीत में, जब एक ही ऑपरेटिंग सिस्टम के खिलाफ भाषाओं का परीक्षण किया गया था, वही हार्डवेयर चला रहा था और पुस्तकालयों का एक बहुत ही सीमित सेट था, तो यह बेंचमार्क बनाना संभव था जो एक रैखिक मीट्रिक दे सकता था जो सिस्टम को मापता था। यह लोगों को शून्य से दस तक चीजों का मूल्यांकन करने देगा, परिणाम को समेटेगा और अगले विषय पर जल्दी से आगे बढ़ेगा।

चीजें आधुनिक प्रणालियों के साथ अधिक जटिल हो गई हैं क्योंकि खाते में कई चर हैं।

कम से कम मोनो के मामले में वहाँ चर के बहुत सारे है कि सामने आते हैं:

  • कोड:

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

    • इस्तेमाल किया कचरा संग्रहण एल्गोरिथ्म
    • से अधिक CPU के साथ जीसी पैमाने करता है?
    • जीसी वृद्धिशील, या वास्तविक समय है?
    • क्या यह बेहतर प्रदर्शन के लिए थ्रेड-स्थानीय स्टोरेज का समर्थन करता है?
    • क्या यह सटीक, कॉम्पैक्टिंग, पीढ़ी, रूढ़िवादी और प्रत्येक का मिश्रण है।
  • एपीआई डिजाइन:

    • विलंबता या बैंडविड्थ के लिए बनाया गया एपीआई
    • एपीआई स्वचालित रूप से एक से अधिक CPU के लिए स्केलिंग का समर्थन कर रहे हैं।
    • क्या आप जीपीयू को भारी कर्तव्य का काम बंद कर सकते हैं?
    • अपने API का समर्थन स्ट्रीमिंग इंटरफेस

ये सभी बातें जटिल मामलों बहुत ज्यादा करते हैं और एक साधारण 0 करने के लिए 10 जवाब देना बहुत मुश्किल है।

आप कक्षाओं में भाषा विभाजन के थे, और आप एक सक्षम और प्रदर्शन के बारे में पता प्रोग्रामर, मैं इन कक्षाओं में दुनिया को विभाजित होगा मान हैं:

  • टीयर 1: एक पेशेवर
  • द्वारा हाथ देखते विधानसभा भाषा
  • टीयर 2: स्थिरता संकलित, दृढ़ता से टाइप किया भाषाओं: C/C++/फोरट्रान/
  • टीयर 3: में कामयाब/JIT भाषाओं:। जावा/सी #/नेट/मोनो/बू/एफ #
  • टीयर 4: गतिशील रूप से टाइप किया/JITed भाषाएं: Google V8, IronPython, IronRuby
  • टियर 5: शुद्ध व्याख्या की गई भाषाओं: पायथन, पर्ल
  • टियर 6: शुद्ध व्याख्या की गई भाषाओं, अपने स्वयं के अच्छे के लिए बहुत सी विशेषताओं के साथ।

लेकिन भाषाएं पूरी तस्वीर पेंट नहीं करती हैं, एपीआई जिन्हें आप उपभोग करेंगे, होस्टिंग ऑपरेटिंग सिस्टम और अन्य सुविधाओं का आपके परिणामों पर बड़ा प्रभाव पड़ेगा।

उदाहरण के लिए, हाल ही में मोनो में हमने मोनो के कोड जेन इंजन को एक अधिक उन्नत, अत्यधिक अनुकूलन इंजन (एलएलवीएम इंजन) के साथ बदलने के लिए समर्थन जोड़ा। यह पता चला है कि यह एक परीक्षण खोजने के लिए अविश्वसनीय रूप से कठिन था जहां एलएलवीएम का उपयोग करने का ओवरहेड अतिरिक्त मेमोरी उपयोग के लायक था: डेस्कटॉप और वेब अनुप्रयोगों ने बहुत अंतर नहीं दिखाया। और शायद यह इस तथ्य के कारण है कि ये ज्यादातर I/O बाध्य अनुप्रयोग हैं।

एलएलवीएम का उपयोग वैज्ञानिक और कम्प्यूटेशनल गहन अनुप्रयोगों के लिए उपयोगी था, लेकिन वास्तविक जीवन में यह मोनो की डिफ़ॉल्ट अनुकूलन सेटिंग्स से काफी अंतर नहीं आया।

मोनो के विनिर्देशों के लिए: हालांकि मोनो बोहेम के जीसी का उपयोग करता है, ज्यादातर लोगों को यह नहीं पता कि बोहेम को विभिन्न तरीकों से कॉन्फ़िगर किया जा सकता है। डिफ़ॉल्ट आम आदमी विन्यास वास्तव में बहुत शक्तिशाली नहीं है, लेकिन यह उन सभी के लिए काम करता है जो त्वरित जीसी चाहते हैं। मोनो इस मोड में बोहेम का उपयोग नहीं करता है, मोनो बोहेम को सटीक-मोड में काम करने के लिए बड़े पैमाने पर कॉन्फ़िगर करता है और साथ ही थ्रेड स्थानीय स्टोरेज, मल्टी-कोर जीसी और रिलीज-मेमोरी-टू-द-ओएस मोड का लाभ उठाता है।

+2

धन्यवाद मिगुएल लेकिन आपने जो भी हिम्मत नहीं की थी वह असली दुनिया प्रदर्शन माप देने के लिए था। रेलवे/केकेएफपी/आदि पर मोनो बनाम रूबी पर एएसपीनेट एमवीसी का प्रदर्शन विशेष रूप से दिलचस्प होगा। एक ही सर्वर पर चल रहा है। – lhahne

+1

आपको यह जानने की जरूरत है कि आप क्या परीक्षण कर रहे हैं। यदि आपके पास दो समान अनुप्रयोग हैं, तो एएसपी.नेट एमवीसी के साथ मोनो में से एक और रेल/केकेएचपी वाला एक, मैं उनको आज़मा सकता हूं और परिणामों की रिपोर्ट कर सकता हूं। यदि कोड कम्प्यूटेशनल रूप से गहन है, तो मोनो तेज़ होगा, क्योंकि केवल दृढ़ता से टाइप की गई प्रणाली के लिए एक जेआईटी है। यदि कोड आईओ-बाउंड है, तो यह वास्तव में इस बात पर निर्भर करेगा कि कोड कैसे लिखा गया था। –

0

मुझे पता है कि यह पुराना है, लेकिन मुझे अभी पता चला है और वर्तमान प्रश्नों में से कोई भी नहीं (यहां तक ​​कि माइग्यूल) आपके प्रश्न में एक मौलिक दोष को संबोधित करता है: वर्चुअल मशीन।

आपको इस बिंदु पर गलत जानकारी दी गई है। नेट वीएम का उपयोग नहीं करता है, और न ही मोनो करता है। यह सच है कि .Net रनटाइम लाइब्रेरी का उपयोग करता है, और कोड जावा के बाइटकोड के समान तैनाती के लिए आईएल को संकलित करता है। हालांकि, एक रनटाइम वर्चुअल मशीन नहीं है। अंतर यह है कि तैनाती के बाद आईएल पूरी तरह से निष्पादन से पहले मूल मशीन कोड के लिए संकलित है। कोई वर्चुअल मशीन लागू करने की आवश्यकता नहीं है।

1

I benchmarked मोनो 2.0 और 2.2 इस वर्ष की शुरुआत में SciMark2 का उपयोग करते हुए पाया कि मोनो का प्रदर्शन थोड़ा बढ़ गया है लेकिन यह अभी भी अधिकांश अन्य वीएम की तुलना में बहुत धीमी है।

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