मेरा टीसीपी थ्रूपुट यूडीपी थ्रूपुट से बहुत अधिक क्यों है?


15

मैंने अपने हार्डवेयर या कर्नेल कॉन्फ़िगरेशन (सभी डिफ़ॉल्ट सेटिंग्स, ताज़ा ओएस स्थापित, लिनक्स कर्नेल 3.11 टीसीपी / आईपी स्टैक) के लिए कुछ भी असामान्य नहीं किया है और मैं टीसीपी के माध्यम से प्रति सेकंड लगभग 3.83 मिलियन संदेश औसत कर रहा हूं, जबकि मैं केवल 0.75 औसत हूं। UDP के माध्यम से प्रति सेकंड मिलियन संदेश। यह पूरी तरह से दोषपूर्ण लगता है कि मुझे दो प्रोटोकॉल की क्या उम्मीद है।

कठोर अंतर के लिए सबसे अधिक संभावित कारण क्या है और मैं इसे Ubuntu 13.10 पर कैसे निदान कर सकता हूं?

#TCP RESULTS
Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    10^6bits/s  % S      % S      us/KB   us/KB

87380  65536     64    10.00      1963.43   32.96    17.09    5.500   2.852

#UDP RESULTS
Socket  Message  Elapsed      Messages                   CPU      Service
Size    Size     Time         Okay Errors   Throughput   Util     Demand
bytes   bytes    secs            #      #   10^6bits/sec % SS     us/KB

4194304      64   10.00     7491010      0      383.5     28.97    24.751
212992            10.00     1404941              71.9     25.03    21.381

इस परीक्षण के लिए मेरे पास दो परीक्षण सर्वर हैं जो समान हैं और सीधे 10 जी क्रॉसओवर केबल के माध्यम से जुड़े हुए हैं। इस मामले में उपयोग किए जाने वाले एनआईसी इंटेल एक्स 520 आउट-ऑफ-द-बॉक्स कॉन्फ़िगरेशन के साथ हैं और मदरबोर्ड पर पीसीआई 3.0 एक्स 8 स्लॉट से जुड़े हैं, जो एक एनयूएमए नियंत्रक के माध्यम से सीपीयू के साथ संचार करता है।


आपने कैसे बेंचमार्क बनाए? आपने उन पैकेजों को क्या भेजा है?
ब्रिअम

मैंने netperfबेंचमार्क, UDP_STREAM और TCP_STREAM परीक्षण, एक ही CPU और 64 बाइट संदेश आकार के लिए उपयोग किया।
एलिसेल

1
यह @ Braiam के प्रश्न का उत्तर नहीं देता है। नेटवर्क टोपोलॉजी है और विस्तृत परीक्षण विधि यहां महत्वपूर्ण है।
पावेल Paमेरदा

1
@ Pavel wasimerda क्षमा करें, मैंने सोचा कि वह केवल परीक्षण पद्धति के लिए ही पूछ रहा था। नेटवर्क टोपोलॉजी के बारे में, दो परीक्षण सर्वर समान हैं और सीधे 10G क्रॉसओवर केबल के माध्यम से जुड़े हुए हैं। इस मामले में उपयोग किए जाने वाले एनआईसी इंटेल एक्स 520 आउट-ऑफ-द-बॉक्स कॉन्फ़िगरेशन के साथ हैं और मदरबोर्ड पर पीसीआई 3.0 एक्स 8 स्लॉट से जुड़े हैं, जो एक एनयूएमए नियंत्रक के माध्यम से सीपीयू के साथ संचार करता है। क्या इससे आपके सवाल का जवाब मिलता है?
एलेसेलेल

1
हां, @elleciel, यह मेरे सवाल का जवाब जरूर देता है। हालांकि इस मामले में मेरे पास सीधे जुड़ी मशीनों के लिए आपको जवाब देने की विशेषज्ञता नहीं है। मैं देख रहा हूं कि आपने स्वयं ही प्रश्न को संशोधित कर दिया है, जो बहुत अच्छा है। सवाल उठेगा क्योंकि अब मुझे भी दिलचस्पी है।
पावेल Paमेरदा

जवाबों:


29

आपके परीक्षण सेटअप के बारे में विस्तृत जानकारी नहीं मिलने के अलावा, मुख्य समस्या यह है कि आप 64 बाइट के संदेश आकार का उपयोग करते हैं। यह 1500 बाइट्स के सामान्य एमटीयू से दूर है और यूडीपी को अत्यधिक अक्षम बनाता है: जबकि टीसीपी तार पर एक पैकेट में कई भेजता है (सिवाय इसके कि टीसीपी_NODELAY सेट है) लिंक का कुशल उपयोग करने के लिए, प्रत्येक पीडब्लूडी संदेश में परिणाम होगा एक अलग पैकेट। संख्याओं में: 64 बाइट आकार के लगभग 23 संदेशों को MTU आकार के एकल टीसीपी पैकेट में जोड़ा जाएगा, जबकि इसे यूडीपी के लिए समान डेटा के लिए 23 एकल पैकेटों की आवश्यकता होगी। इनमें से प्रत्येक पैकेट का मतलब मेजबान से भेजने, तार पर संचारित करने और सहकर्मी द्वारा प्राप्त करने के साथ ओवरहेड होता है। और जैसा कि आपके मामले में देखा गया है कि लगभग 80% यूडीपी पैकेट खो जाते हैं क्योंकि आपका हार्डवेयर इन सभी पैकेटों को प्रसारित करने और प्राप्त करने के लिए पर्याप्त तेज़ नहीं है।

तो आप इस बेंचमार्क से क्या सीख सकते हैं:

  • यूडीपी अविश्वसनीय है (80% पैकेट नुकसान)
  • एमटीयू के नीचे पैकेट आकार के साथ उपयोग किए जाने पर यूडीपी अक्षम है
  • लिंक का सबसे अच्छा उपयोग करने के लिए टीसीपी अत्यधिक अनुकूलित है

आपकी अपेक्षा के अनुसार, यूडीपी बेहतर होना चाहिए: क्या आपने कभी सोचा कि टीसीपी आधारित प्रोटोकॉल के साथ सभी प्रमुख फाइल ट्रांसफर (ftp, http, ...) क्यों किए जाते हैं? बेंचमार्क आपको इसका कारण बताता है।

तो लोग यूडीपी का उपयोग क्यों करते हैं?

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

2
आपको यूडीपी के साथ अपने 80% पैकेट नुकसान पर भी नजर डालनी चाहिए। ऐसा लगता है कि आपका हार्डवेयर इतनी तेजी से नहीं है कि पैकेट को उसी गति से संसाधित कर सकें, जो वे भेजते हैं। जबकि टीसीपी इस तरह के पैकेट के नुकसान को धीमा करने के लिए स्वीकार करता है, यूडीपी बस उसी गति से भेजेगा और पैकेट को ढीला करना जारी रखेगा। लेकिन अंत में यह प्रासंगिक नहीं है कि आप कितनी तेजी से भेज सकते हैं, लेकिन आप क्या प्राप्त करते हैं।
यूरिच

1
कुछ और जो एक कारक हो सकता है वह है टीसीपी त्वरण / नेटवर्क कार्ड को लोड करना (यदि यह इसका समर्थन करता है)।
cpugeniusmv

1
पैकेट भेजने से प्राप्त करने की तुलना में अधिक कुशल हो सकता है, खासकर अगर पिछले एक बाधित है।
स्टेफेन उलरिच

1
लोग यूडीपी का उपयोग एक एम्बेडेड डिवाइस के लिए उस डेटा को प्रसारित करने के लिए भी करते हैं जो इसे एक तार पर इकट्ठा कर रही है और कनेक्शन सेटअप से परेशान नहीं है
शाफ़्ट फ्रीक

3
आप सबसे अधिक संभावना है कि PCI एक्सप्रेस बस से IO बंधे हों। नेटवर्क कार्ड में टीसीपी सेगमेंट ऑफलोडिंग सक्षम होगा, सबसे अधिक संभावना है। इसका मतलब यह है कि टीसीपी हस्तांतरण कार्ड को बड़े ब्लॉक में भेज दिया जाएगा, फिर कार्ड स्लाइस करता है और उन्हें पैकेट में डालकर तार पर रख देता है। यूडीपी के लिए कोई समकक्ष नहीं है, इसलिए परिणाम प्रत्येक पैकेट के लिए एक पीसीआई लेनदेन (और सभी संबद्ध ओवरहेड्स) है।
एलेक्स.फोर्निच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.