2009-03-05 7 views
12

जब आप जानते हैं कि आपका सॉफ़्टवेयर (ड्राइवर नहीं है, ओएस का हिस्सा नहीं है, केवल एक एप्लिकेशन) वर्चुअलाइज्ड वातावरण में अधिकतर चलाएगा, तो आपके कोड और/या कंपाइलर सेटिंग्स को अनुकूलित करने के लिए रणनीतियां हैं? या किसी भी गाइड के लिए आपको क्या करना चाहिए और क्या नहीं करना चाहिए?वर्चुअल मशीनों के लिए सॉफ़्टवेयर ऑप्टिमाइज़ेशन

यह 0.0x% प्रदर्शन लाभ के बारे में नहीं है, लेकिन शायद, ऐसी सरल चीजें हैं जो प्रदर्शन में काफी सुधार लाती हैं या चीजें जो सरल लगती हैं लेकिन वर्चुअलाइज्ड वातावरण में विनाशकारी होती हैं। उदाहरण के लिए कर्नेल बिल्ड में CONFIG_PARAVIRT को सक्षम करना आसानी से किया जाता है और प्रदर्शन को बहुत बढ़ा सकता है। अब यदि कोई है तो मैं अनुप्रयोगों के लिए समान चीजों की तलाश में हूं।

मेरे मामले में यह सी ++ कोड और शायद वीएमवेयर होगा लेकिन मैं प्रश्न को यथासंभव भाषा/उत्पाद-अज्ञेयवादी के रूप में रखना चाहता हूं। मुझे आश्चर्य है कि ऐसी रणनीतियां भी हैं या यदि यह समय की पूरी बर्बादी होगी - वर्चुअलाइजेशन की सभी अवधारणाओं के बाद यह है कि आपको इसके बारे में ज्यादा परवाह नहीं है।

उत्तर

3

एकमात्र सलाह जो मैं आपको दे सकता हूं, मैग्ली()/mlockall() .. का सावधानीपूर्वक उपयोग है, जबकि बग्गी गुब्बारे ड्राइवरों की तलाश में।

उदाहरण के लिए, यदि एक ज़ेन अतिथि 1 जीबी के साथ बूट किया गया है, तो 512 एमबी तक नीचे घुमाया गया है, यह बहुत विशिष्ट है कि विशेषाधिकार प्राप्त डोमेन ने यह नहीं देखा कि पैरावार्च्यूलाइज्ड कर्नेल वास्तव में प्रक्रियाओं (यानी Committed_AS) को कितना स्मृति दे रहा था। दरअसल, ज़ेन के साथ, जब तक यह मूल्य ज़ेनबस पर नहीं रखा जाता है, विशेषाधिकार प्राप्त मेजबान को पता नहीं होता कि ऐसा गुब्बारा क्या करेगा। मेरा मानना ​​है कि कर्नेल को कॉन्फ़िगर करने के तरीके के आधार पर यह भी केवीएम के साथ मेल खाता है .. लेकिन आपका प्रश्न यह मानता है कि हम ऐसी चीजों के बारे में कुछ भी नहीं जानते :)

तो, सामान की रक्षा करें (सावधान रहें, लेकिन समझदार) जो बस नहीं हो सकता 'आकाश गिर रहा है' परिदृश्य के लिए हमेशा खाते हैं।

इसी तरह, पीवी कर्नेल को बताने के लिए posix_fadvise()/posix_madvise() का उपयोग करें कि आप कितना करते हैं या बफरिंग की आवश्यकता नहीं है हमेशा एक अच्छा विचार है।

इसके अलावा, आप बहुत कम कर सकते हैं .. क्योंकि आप केवल पैरावार्च्यूलाइज्ड कर्नेल से बात कर रहे हैं, जिसे पहली जगह वर्चुअलाइजेशन के लिए प्रक्रियाओं को अनजान बनाने के लिए डिज़ाइन किया गया है।

मैं KVM का उपयोग नहीं करता (अभी तक), हालांकि मैं भविष्य में इसे और अधिक जानने की योजना बना रहा हूं। हालांकि, 9 0% सामान जिन्हें मैं हाल ही में लिख रहा हूं विशेष रूप से पैरावार्च्यूलाइज्ड ज़ेन मेहमानों पर चलाने के लिए डिज़ाइन किया गया है। क्षमा करें एक छोटे से एक्सईएन/सी केंद्रित हो सकता है, लेकिन जहां मेरे अनुभव है और pv_ops मुख्य लाइन में है कि (जल्द ही यह भी एक्सईएन -0 ऑप्स) :)

अच्छा सवाल है, btw :)

संपादित करें:

जब मैंने 'सावधान लेकिन समझदार' कहा, मेरा मतलब रूढ़िवादी से एक कदम था। यदि आपका प्रोग्राम कुछ नौकरी संरचना आवंटित करता है जो अधिकांश कार्यों की आवश्यकता है, तो इसे लॉक करें। यदि आपके आवंटित बफर बड़ी फ़ाइलों को पढ़ने के लिए हैं, तो उन्हें लॉक न करें .. और सुनिश्चित करें कि कर्नेल को यह जानने के लिए posix_fadvise() को कॉल करना है कि आप केवल एक बार पहुंचने का इरादा रखते हैं (यदि ऐसा है)। साथ ही, कर्नेल को मेमोरी मैप की गई फ़ाइलों के उपयोग पर सलाह देना सुनिश्चित करें, खासकर यदि वे समेकन को व्यवस्थित करने के लिए सेवा करते हैं।

संक्षेप में, मदद आपके मेजबान कर्नेल स्मृति प्रबंधन, न दें महत्वपूर्ण आवंटित ब्लॉकों गंदा पेजिंग में फेंक दिया हो, यह न मानें कि अपने कार्यक्रम सब कुछ ताला लगा यह आवंटित :)

द्वारा किसी और चीज से ज्यादा महत्वपूर्ण है अस्पष्टता के लिए खेद है। सबसे अच्छा वाक्यांश जो मैं साथ आ सकता था वह 'सावधान, लेकिन समझदार' था।

+0

+1, लेकिन, "(सावधान रहें, लेकिन समझदार)"? आपका क्या अर्थ है? वे व्यावहारिक रूप से समानार्थी हैं ... –

+0

व्याख्या करने के लिए संपादित :) –

+0

+ 1. कार्य: "इस लेखन के रूप में (2.6.21) लिनक्स को याद नहीं है एक खुली फ़ाइल के लिए POSIX_FADV_DONTNEED सलाह। यह सलाह दी जाती है जब सलाह दी जाती है, और जब यह अनुपालन नहीं कर सकती है तो यह सलाह भूल जाती है। इसलिए यह सुनिश्चित करने के लिए कि लिनक्स अनुपालन कर सकता है। " – VolkerK

1

मेरी एकमात्र सलाह आपकी याददाश्त रखती है और यदि संभव हो तो IO कम उपयोग करें।

एक वीएम में आईओ भौतिक हार्डवेयर की तुलना में काफी धीमी है। यदि आप इसे करने से बच सकते हैं तो इससे बचें।

1

वास्तविक हार्डवेयर पर धीमी चीजें धीमी होती हैं जब सिस्टम वर्चुअलाइज्ड होता है। यह वर्चुअलाइजेशन तकनीक पर निर्भर करता है कि वे कितने धीमे हो जाते हैं।

विशेष रूप से वर्चुअल वातावरण के बाहर दुनिया के साथ I/O की आवश्यकता वाले किसी भी चीज़ से बचें। चीजों को कैसे स्थापित किया जाता है, इस पर निर्भर करता है, इसमें स्क्रीन, स्वैपिंग, और डिस्क और नेटवर्क I/O पर ड्राइंग शामिल है। यह मोटे तौर पर महत्व के घटते क्रम में है।

यदि संभव हो, तो दिखाएं कि आप दस वर्षीय कंप्यूटर के लिए लिख रहे हैं। यदि आपका एप्लिकेशन 1 999 के डेस्कटॉप पीसी या लैपटॉप पर काम करेगा, तो इसे ठीक करना चाहिए।

4

मुझे यह सब I/O के बारे में पता चला है।

वीएम आमतौर पर आईओ में अविश्वसनीय रूप से बुरी तरह चूसते हैं। इससे वास्तविक टिन पर होने वाली चीज़ों की तुलना में विभिन्न चीजें बहुत खराब होती हैं।

स्वैपिंग विशेष रूप से एक बुरा हत्यारा है - यह पूरी तरह से वीएम प्रदर्शन को तोड़ देता है, यहां तक ​​कि थोड़ा, क्योंकि आईओ बहुत धीमी है।

अधिकांश कार्यान्वयन में वीएम के बीच बड़ी मात्रा में आईओ विवाद होता है, मैंने ऐसा नहीं देखा है जो इसे टालता है या समझदारी से संभालता है।

तो यदि आप कर सकते हैं तो अस्थायी फ़ाइलों के लिए रैमडिस्क का उपयोग करें, लेकिन इसे स्वैप करने का कारण नहीं बनें, क्योंकि यह और भी बदतर होगा।

+0

आईओ जब एक प्रोग्राम को कर्नेल के साथ सहयोग करने के लिए एक तरीके से कोड किया जाता है और उचित पीवी ड्राइवरों के साथ कर्नेल पर चलने वाला 2 एक गैर समस्या है। यह सवाल वास्तव में प्रकाश में लाता है कि मेजबान कर्नेल, वर्चुअलाइजेशन या नहीं समझता है। कृपया 'इसे न करें' से परे I/O विनिर्देशों पर चर्चा करें। –

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