टीसीपी एक्सेप्ट () एक्सपी के तहत इतना खराब क्यों है?


89

जिस दर पर मेरा सर्वर स्वीकार कर सकता है () नए आने वाले टीसीपी कनेक्शन वास्तव में एक्सएन के तहत खराब हैं। नंगे धातु हार्डवेयर पर एक ही परीक्षण 3-5x गति अप दिखाता है।

  1. यह कैसे एक्सएन के तहत इतना बुरा है?
  2. क्या आप नए TCP कनेक्शन के लिए प्रदर्शन में सुधार करने के लिए Xen को ट्विक कर सकते हैं?
  3. क्या इस तरह के उपयोग-मामले के लिए अन्य वर्चुअलाइजेशन प्लेटफॉर्म बेहतर हैं?

पृष्ठभूमि

हाल ही में मैं एक घर के अंदर विकसित जावा सर्वर के कुछ प्रदर्शन बाधाओं पर शोध कर रहा हूं जो एक्सएन के तहत चल रहा है। सर्वर HTTP बोलता है और सरल टीसीपी कनेक्ट / अनुरोध / प्रतिक्रिया / कॉल को डिस्कनेक्ट करता है।

लेकिन सर्वर पर ट्रैफ़िक भेजने के बावजूद, यह ~ 7000 टीसीपी कनेक्शन प्रति सेकंड (8-कोर EC2 उदाहरण, c1.xlarge रनिंग एक्सएन पर) को स्वीकार नहीं कर सकता है। परीक्षण के दौरान, सर्वर एक अजीब व्यवहार भी प्रदर्शित करता है जहां एक कोर (जरूरी नहीं कि सीपीयू 0) बहुत लोड हो जाता है> 80%, जबकि अन्य कोर लगभग निष्क्रिय रहते हैं। इससे मुझे लगता है कि समस्या कर्नेल / अंतर्निहित वर्चुअलाइजेशन से संबंधित है।

नंगे धातु पर एक ही परिदृश्य का परीक्षण करते समय, गैर-वर्चुअलाइज़ किए गए प्लेटफ़ॉर्म पर मुझे 35 000 / सेकंड से अधिक टीसीपी स्वीकार () दर दिखाते हुए परीक्षा परिणाम मिलते हैं। सभी कोर के साथ उबंटू चलने वाली एक कोर i5 4 कोर मशीन पर यह लगभग पूरी तरह से संतृप्त है। मेरे लिए उस तरह का आंकड़ा सही लगता है।

फिर से एक्सईएन उदाहरण पर, मैंने sysctl.conf में लगभग हर सेटिंग्स को सक्षम / ट्वीक करने की कोशिश की है। जिसमें पैकेट पैकेट स्टीयरिंग और रिसीव फ्लो स्टीयरिंग और पिनिंग थ्रेड / प्रोसेस को सीपीयू में सक्षम करना शामिल है लेकिन कोई स्पष्ट लाभ नहीं है।

मुझे पता है कि वर्चुअलाइज्ड चलने पर प्रदर्शन की उम्मीद की जानी चाहिए। लेकिन इस डिग्री के लिए? एक धीमी, नंगे धातु सर्वर पुण्य outperforming। 5 के कारक द्वारा 8-कोर?

  1. क्या यह वास्तव में एक्सएन का अपेक्षित व्यवहार है?
  2. क्या आप नए TCP कनेक्शन के लिए प्रदर्शन में सुधार करने के लिए Xen को ट्विक कर सकते हैं?
  3. क्या इस तरह के उपयोग-मामले के लिए अन्य वर्चुअलाइजेशन प्लेटफॉर्म बेहतर हैं?

इस व्यवहार को पुन: प्रस्तुत करना

जब इस बारे में और पड़ताल की और समस्या का पता लगाया तो मुझे पता चला कि नेटपरफ परफॉर्मेंस टेस्टिंग टूल उसी तरह के परिदृश्य का अनुकरण कर सकता है जैसा मैं अनुभव कर रहा हूं। नेटपरफ के टीसीपी_सीआर परीक्षण का उपयोग करके मैंने विभिन्न सर्वरों (आभासी और गैर-पुण्य दोनों) से विभिन्न रिपोर्ट एकत्र की हैं। यदि आप कुछ निष्कर्षों के साथ योगदान करना चाहते हैं या मेरी वर्तमान रिपोर्ट देखना चाहते हैं, तो कृपया https://gist.github.com/985475 देखें

मुझे कैसे पता चलेगा कि यह समस्या खराब लिखे गए सॉफ़्टवेयर के कारण नहीं है?

  1. सर्वर को नंगे धातु के हार्डवेयर पर परीक्षण किया गया है और यह लगभग सभी कोर को उपलब्ध करता है।
  2. टीसीपी-कनेक्शनों का उपयोग करते समय, समस्या दूर हो जाती है।

यह महत्वपूर्ण क्यों है?

पर 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 पर रिपोर्ट भरने की प्रक्रिया में हूं यदि आप मदद करना चाहते हैं, तो अपने नंबर का योगदान करें। यह आसान है!

(कार्य योजना को एक अलग, समेकित उत्तर में ले जाया गया है)


3
एक मुद्दे पर चुटकी लेते हुए उत्कृष्ट नौकरी, लेकिन मेरा मानना ​​है कि आपको एक एक्स -विशिष्ट मेलिंग सूची, समर्थन मंच या यहां तक ​​कि xensource बग रिपोर्ट साइट पर बहुत बेहतर काम किया जाएगा । मेरा मानना ​​है कि यह कुछ शेड्यूलर बग हो सकता है - यदि आप अपने 7,000 कनेक्शनों की संख्या * 4 कोर / 0.80 सीपीयू लोड करते हैं तो आपको बिल्कुल 35,000 मिलते हैं - आपको 4 कोर पूरी तरह से संतृप्त हो जाएंगे।
-wabbit

आह, और एक और बात: यदि आप कर सकते हैं, तो अपने अतिथि के लिए एक अलग (अधिक हाल ही में) कर्नेल संस्करण आज़माएं।
वाबेट

@ पर्यायवाची- dj धन्यवाद। मैंने इसे EC2 पर कर्नेल 2.6.38 के साथ cc1.4xlarge पर आज़माया। अगर मैं गलत नहीं हूँ तो मैंने लगभग १०% की वृद्धि देखी। लेकिन यह उस प्रकार के बीफ़ियर हार्डवेयर के कारण अधिक संभावना है।
cgbystrom

6
एचएन प्रतिक्रियाओं के साथ इसे अद्यतन रखने के लिए धन्यवाद, यह एक बड़ा सवाल है। मैं सुझाव देता हूं कि कार्य योजना को एक समेकित उत्तर में स्थानांतरित करना, संभवतः - क्योंकि ये समस्या के सभी संभावित उत्तर हैं।
जेफ एटवुड

@ जफ़ एक्शन प्लान को मूव करें, चेक करें।
cgbystrom

जवाबों:


27

अभी: छोटा पैकेट प्रदर्शन एक्सएमएल के तहत बेकार है

(इसके बजाय प्रश्न से स्वयं को एक अलग उत्तर में ले जाया गया)

एचएन (केवीएम डेवलपर?) पर एक उपयोगकर्ता के अनुसार यह एक्सपी और केवीएम में छोटे पैकेट प्रदर्शन के कारण है। यह वर्चुअलाइजेशन के साथ एक ज्ञात समस्या है और उसके अनुसार, VMWare का ESX इसे बेहतर तरीके से संभालता है। उन्होंने यह भी कहा कि KVM इस ( मूल पद ) को कम करने के लिए डिज़ाइन की गई कुछ नई सुविधाएँ ला रहा है ।

अगर यह सही है तो यह जानकारी थोड़ी हतोत्साहित करने वाली है। किसी भी तरह से, मैं नीचे दिए गए चरणों की कोशिश करूँगा जब तक कि कुछ ज़ेन गुरु निश्चित उत्तर के साथ नहीं आते हैं :)

netperf ग्राफ Xen -users मेलिंग लिस्ट के Iain Kay ने इस ग्राफ को संकलित किया: TCP_CRR बार को नोटिस करें, "2.6.18-239.9.1.el5" बनाम "2.6.39 (Xen 4.1.0 के साथ)" की तुलना करें।

यहाँ और HN से प्रतिक्रियाओं / उत्तरों के आधार पर वर्तमान कार्य योजना :

  1. इस समस्या को एक एक्स-विशिष्ट मेलिंग सूची और xensource के बगज़िला के रूप में सबमिट करें जैसा कि syneticon-dj द्वारा सुझाया गया है एक संदेश को एक्स -उपयोगकर्ता सूची में पोस्ट किया गया था, जिसका उत्तर दिया गया है।

  2. एक सरल पैथोलॉजिकल, एप्लिकेशन-लेवल टेस्ट केस बनाएं और उसे प्रकाशित करें।
    निर्देश के साथ एक परीक्षण सर्वर बनाया और GitHub को प्रकाशित किया गया है । इसके साथ आपको netperf की तुलना में अधिक वास्तविक दुनिया का उपयोग-मामला देखने में सक्षम होना चाहिए।

  3. 32-बिट PV Xen अतिथि उदाहरण आज़माएँ, क्योंकि 64-बिट, Xen में अधिक ओवरहेड का कारण हो सकता है। एचएन पर किसी ने इसका उल्लेख किया। फर्क नहीं पड़ा।

  4. HN पर abofh द्वारा सुझाए अनुसार sysctl.conf में net.ipv4.tcp_syncookies सक्षम करने का प्रयास करें। यह स्पष्ट रूप से प्रदर्शन में सुधार कर सकता है क्योंकि हैंडशेक कर्नेल में होगा। मुझे इससे कोई मतलब नहीं था।

  5. HN पर abofh द्वारा सुझाए गए 1024 से बैकलॉग को कुछ अधिक तक बढ़ाएं। यह भी मदद कर सकता है क्योंकि अतिथि संभावित रूप से स्वीकार कर सकते हैं () डोमे (0 (मेजबान) द्वारा दिए गए निष्पादन स्लाइस के दौरान अधिक कनेक्शन।

  6. डबल-चेक करें कि सभी मशीनों पर कॉनट्रैक अक्षम है क्योंकि यह स्वीकार दर (deubeulyou द्वारा सुझाया गया) को आधा कर सकता है। हां, यह सभी परीक्षणों में अक्षम था।

  7. "सुनो क्यू अतिप्रवाह और तुल्यकालन बाल्टियाँ अतिप्रवाह netstat -s में" के लिए जाँच करें (HN पर mike_esspe द्वारा सुझाया गया)।

  8. कई कोर (आरपीएस / आरएफएस मैंने पहले सक्षम करने की कोशिश की है, के बीच में बाधा से निपटने को विभाजित करने की कोशिश की जाती है, लेकिन फिर से प्रयास करने लायक हो सकता है)। HN पर adamt द्वारा सुझाया गया।

  9. मैट बेली द्वारा सुझाए अनुसार टीसीपी विभाजन ऑफलोड और तितर बितर / इकट्ठा त्वरण को बंद करना। (EC2 या इसी तरह के VPS होस्ट पर संभव नहीं)


2
+1 निश्चित रूप से आपके द्वारा खोजे जाने पर प्रदर्शन परिणामों को पोस्ट करता है!
क्रिसकॉक

इस सवाल को लेकर किसी ने ट्विटर पर मुझे खूब लताड़ा। दुर्भाग्य से, ऐसा लगता है कि यह समस्याएं बनी हुई हैं। मैंने पिछले साल से ज्यादा शोध नहीं किया है। इस समय के दौरान Xen MAY में सुधार हुआ है, मुझे नहीं पता। KVM डेवलपर ने यह भी उल्लेख किया कि वे इस तरह के मुद्दों को संबोधित कर रहे थे। पीछा करने लायक हो सकता है। इसके अलावा, एक और सिफारिश मैंने सुनी है कि Xen / KVM के बजाय OpenVZ की कोशिश करें क्योंकि यह syscalls की कम या कोई लेयरिंग / अवरोधन नहीं जोड़ता है।
cgbystrom

21

वास्तविक रूप से, मैंने पाया कि एनआईसी हार्डवेयर त्वरण को बंद करने से एक्सएन नियंत्रक (एलआरसी के लिए भी सही) पर नेटवर्क के प्रदर्शन में काफी सुधार होता है:

तितर बितर इकट्ठा:

/usr/sbin/ethtool -K br0 sg off

टीसीपी सेगमेंटेशन ऑफ़लोड:

/usr/sbin/ethtool -K br0 tso off

जहां br0 आपके ब्रिज या नेटवर्क डिवाइस को हाइपरवाइजर होस्ट पर है। आपको इसे हर बूट पर बंद करने के लिए सेट करना होगा। YMMV।


मैं इसके समर्थन में हूं। मेरे पास एक Windows 2003 सर्वर था जो एक्सएन पर चल रहा था, जो उच्च थ्रूपुट स्थितियों के तहत कुछ भयानक पैकेट हानि की समस्याओं का सामना कर रहा था। समस्या दूर चला गया जब मैं विकलांग टीसीपी खंड बोझ उतार लेना
rupello

धन्यवाद। मैंने आपके सुझावों के साथ मूल प्रश्न में "एक्शन प्लान" अपडेट किया।
21:39 पर cgbystrom


3

शायद आप थोड़ा स्पष्ट कर सकते हैं - क्या आपने अपने स्वयं के सर्वर पर एक्सएन के तहत परीक्षण चलाए थे, या केवल एक ईसी 2 उदाहरण पर?

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

अंत में, प्रतीत होता है कि सीपीयू / कर्नेल संयोजन हैं जो ईसी 2 पर अजीब सीपीयू उपयोग / हैंगअप (और शायद सामान्य रूप से एक्सएन ) का कारण बनते हैं, जैसा कि हाल ही में लाइब्रेटो द्वारा ब्लॉग किया गया था


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

0

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

echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 0 > /proc/sys/net/bridge.bridge-nf-call-arptables

यह सर्वर के आकार पर निर्भर करता है, लेकिन छोटे लोगों (4-कोर प्रोसेसर) पर एक सीपीयू कोर को एक्सएम डोमिन को समर्पित करता है और इसे पिन करता है। हाइपरविजर बूट विकल्प:

dom0_max_vcpus=1 dom0_vcpus_pin dom0_mem=<at least 512M>

क्या आपने डोमिनर में फिजिकल ईथरनेट पीसीआई डिवाइस पास करने की कोशिश की? अच्छा प्रदर्शन बूस्ट होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.