जिस दर पर मेरा सर्वर स्वीकार कर सकता है () नए आने वाले टीसीपी कनेक्शन वास्तव में एक्सएन के तहत खराब हैं। नंगे धातु हार्डवेयर पर एक ही परीक्षण 3-5x गति अप दिखाता है।
- यह कैसे एक्सएन के तहत इतना बुरा है?
- क्या आप नए TCP कनेक्शन के लिए प्रदर्शन में सुधार करने के लिए Xen को ट्विक कर सकते हैं?
- क्या इस तरह के उपयोग-मामले के लिए अन्य वर्चुअलाइजेशन प्लेटफॉर्म बेहतर हैं?
पृष्ठभूमि
हाल ही में मैं एक घर के अंदर विकसित जावा सर्वर के कुछ प्रदर्शन बाधाओं पर शोध कर रहा हूं जो एक्सएन के तहत चल रहा है। सर्वर HTTP बोलता है और सरल टीसीपी कनेक्ट / अनुरोध / प्रतिक्रिया / कॉल को डिस्कनेक्ट करता है।
लेकिन सर्वर पर ट्रैफ़िक भेजने के बावजूद, यह ~ 7000 टीसीपी कनेक्शन प्रति सेकंड (8-कोर EC2 उदाहरण, c1.xlarge रनिंग एक्सएन पर) को स्वीकार नहीं कर सकता है। परीक्षण के दौरान, सर्वर एक अजीब व्यवहार भी प्रदर्शित करता है जहां एक कोर (जरूरी नहीं कि सीपीयू 0) बहुत लोड हो जाता है> 80%, जबकि अन्य कोर लगभग निष्क्रिय रहते हैं। इससे मुझे लगता है कि समस्या कर्नेल / अंतर्निहित वर्चुअलाइजेशन से संबंधित है।
नंगे धातु पर एक ही परिदृश्य का परीक्षण करते समय, गैर-वर्चुअलाइज़ किए गए प्लेटफ़ॉर्म पर मुझे 35 000 / सेकंड से अधिक टीसीपी स्वीकार () दर दिखाते हुए परीक्षा परिणाम मिलते हैं। सभी कोर के साथ उबंटू चलने वाली एक कोर i5 4 कोर मशीन पर यह लगभग पूरी तरह से संतृप्त है। मेरे लिए उस तरह का आंकड़ा सही लगता है।
फिर से एक्सईएन उदाहरण पर, मैंने sysctl.conf में लगभग हर सेटिंग्स को सक्षम / ट्वीक करने की कोशिश की है। जिसमें पैकेट पैकेट स्टीयरिंग और रिसीव फ्लो स्टीयरिंग और पिनिंग थ्रेड / प्रोसेस को सीपीयू में सक्षम करना शामिल है लेकिन कोई स्पष्ट लाभ नहीं है।
मुझे पता है कि वर्चुअलाइज्ड चलने पर प्रदर्शन की उम्मीद की जानी चाहिए। लेकिन इस डिग्री के लिए? एक धीमी, नंगे धातु सर्वर पुण्य outperforming। 5 के कारक द्वारा 8-कोर?
- क्या यह वास्तव में एक्सएन का अपेक्षित व्यवहार है?
- क्या आप नए TCP कनेक्शन के लिए प्रदर्शन में सुधार करने के लिए Xen को ट्विक कर सकते हैं?
- क्या इस तरह के उपयोग-मामले के लिए अन्य वर्चुअलाइजेशन प्लेटफॉर्म बेहतर हैं?
इस व्यवहार को पुन: प्रस्तुत करना
जब इस बारे में और पड़ताल की और समस्या का पता लगाया तो मुझे पता चला कि नेटपरफ परफॉर्मेंस टेस्टिंग टूल उसी तरह के परिदृश्य का अनुकरण कर सकता है जैसा मैं अनुभव कर रहा हूं। नेटपरफ के टीसीपी_सीआर परीक्षण का उपयोग करके मैंने विभिन्न सर्वरों (आभासी और गैर-पुण्य दोनों) से विभिन्न रिपोर्ट एकत्र की हैं। यदि आप कुछ निष्कर्षों के साथ योगदान करना चाहते हैं या मेरी वर्तमान रिपोर्ट देखना चाहते हैं, तो कृपया https://gist.github.com/985475 देखें
मुझे कैसे पता चलेगा कि यह समस्या खराब लिखे गए सॉफ़्टवेयर के कारण नहीं है?
- सर्वर को नंगे धातु के हार्डवेयर पर परीक्षण किया गया है और यह लगभग सभी कोर को उपलब्ध करता है।
- टीसीपी-कनेक्शनों का उपयोग करते समय, समस्या दूर हो जाती है।
यह महत्वपूर्ण क्यों है?
पर ESN (मेरे नियोक्ता) मैं की परियोजना का नेतृत्व कर रहा हूँ Beaconpush , एक धूमकेतु / वेब सॉकेट सर्वर जावा में लिखा। भले ही यह बहुत अच्छा प्रदर्शन हो और इष्टतम स्थितियों के तहत इसे दिए गए लगभग किसी भी बैंडविड्थ को संतृप्त कर सकता है, यह अभी भी सीमित है कि नए टीसीपी कनेक्शन कितनी तेजी से बन सकते हैं। यानी, यदि आपके पास एक बड़ा उपयोगकर्ता मंथन है जहां उपयोगकर्ता बहुत बार आते हैं और जाते हैं, तो कई टीसीपी कनेक्शन स्थापित करने / फाड़ने होंगे। हम यथासंभव लंबे समय तक जीवित रहने वाले इस कनेक्शन को कम करने का प्रयास करते हैं। लेकिन अंत में, स्वीकार () प्रदर्शन वह है जो हमारे कोर को कताई से रखता है और हम इसे पसंद नहीं करते हैं।
अपडेट १
किसी ने इस प्रश्न को हैकर समाचार में पोस्ट किया , वहाँ कुछ प्रश्न / उत्तर भी हैं। लेकिन मैं इस प्रश्न को अद्यतन रखने की कोशिश करूँगा कि मुझे जो जानकारी मिलती है मैं उसके साथ ही रहूँ।
हार्डवेयर / प्लेटफ़ॉर्म जो मैंने इस पर परीक्षण किया है:
- EC2 उदाहरण के प्रकार c1.xlarge (8 कोर, 7 जीबी रैम) और cc1.4xlarge (2x Intel Xeon X5570, 23 GB RAM) के साथ। AMI का उपयोग क्रमशः ami-08f40561 और ami-1cad5275 था। किसी ने यह भी बताया कि "सुरक्षा समूह" (यानी EC2s फ़ायरवॉल) भी प्रभावित हो सकता है। लेकिन इस परीक्षण परिदृश्य के लिए, मैंने केवल स्थानीयहोस्ट पर कोशिश की है ताकि इस तरह के बाहरी कारकों को खत्म किया जा सके। एक और अफवाह मैंने सुनी है कि EC2 इंस्टेंसेस 100k PPS से अधिक नहीं धकेल सकते हैं।
- दो निजी वर्चुअलाइज्ड सर्वर, जो एक्सएन चला रहा है। परीक्षण से पहले एक शून्य लोड था, लेकिन कोई फर्क नहीं पड़ा।
- निजी समर्पित, Rackspace पर Xen-server। उसी के परिणाम के बारे में वहाँ।
मैं इन परीक्षणों को फिर से चलाने और https://gist.github.com/985475 पर रिपोर्ट भरने की प्रक्रिया में हूं यदि आप मदद करना चाहते हैं, तो अपने नंबर का योगदान करें। यह आसान है!
(कार्य योजना को एक अलग, समेकित उत्तर में ले जाया गया है)