उच्च-बैंडविड्थ कनेक्शन के लिए (बहुत) बड़े initcwnd स्थापित करने के लिए संभावित डाउनसाइड क्या हैं?


9

मैं लिनक्स में टीसीपी मापदंडों के साथ प्रयोग कर रहा हूं (3.5 कर्नेल के साथ)। मूल रूप से इस संबंध में:

सर्वर: डेटाबेसेंटर में गिगाबिट अपलिंक, वास्तविक बैंडविड्थ (अपलिंक साझा करने के कारण) लगभग 70 एमबी / एस है जब दूसरे डेटासेंटर से जांच की जाती है।

ग्राहक: गीगाबिट स्थानीय लैन 200mbit फाइबर से जुड़ा है। परीक्षण-फ़ाइल प्राप्त करना वास्तव में 20 एमबी / एस प्राप्त करता है।

विलंबता: लगभग 50ms राउंडट्रिप।

रिमोट सर्वर का इस्तेमाल 10 से 100mb की रेंज में फाइलों के लिए फाइलर के रूप में किया जाता है। मैंने देखा कि इन फ़ाइलों के लिए 10-ट्रांसफ़र-टाइम का initcwnd का उपयोग टीसीपी स्लो-स्टार्ट से बहुत अधिक प्रभावित होता है, 10mb लोड करने के लिए 3.5 सेकंड लगते हैं (शीर्ष गति: 3.3 एमबी / एस) क्योंकि यह धीमा शुरू होता है और फिर इसे रैंप करता है अधिकतम गति तक पहुँचने से पहले समाप्त हो गया है। मेरा लक्ष्य उन फ़ाइलों के न्यूनतम लोड-समय के लिए धुन करना है (इसलिए उच्चतम कच्चे प्रवाह या न्यूनतम राउंडट्रिप विलंबता नहीं है, मैं दोनों को बलिदान करने के लिए तैयार हूं, अगर फ़ाइल लोड करने के लिए वास्तविक समय घटता है)

इसलिए मैंने यह निर्धारित करने के लिए एक सरल गणना की कोशिश की कि आदर्श initcwnd क्या होना चाहिए, किसी भी अन्य कनेक्शन की अनदेखी और दूसरों पर संभावित प्रभाव। बैंडविड्थ-देरी-उत्पाद 200 Mbit / s * 50ms = 10 Mbit या 1.310.720 बाइट्स है। यह ध्यान में रखते हुए कि initcwnd को MSS की इकाइयों में सेट किया गया है और माना जा रहा है कि MSS 1400 बाइट्स के आसपास है, इसके लिए सेटिंग की आवश्यकता होगी: 1.310.720 / 1400 = 936

यह मान डिफ़ॉल्ट (लिनक्स में 10 * MSS, विंडोज में 64kb) से बहुत दूर है, इसलिए इसे इस तरह सेट करना एक अच्छा विचार नहीं है। इस तरह इसे कॉन्फ़िगर करने की अपेक्षित डाउनसाइड क्या हैं? उदाहरण के लिए:

  • क्या यह उसी नेटवर्क के अन्य उपयोगकर्ताओं को प्रभावित करेगा?
  • क्या यह अन्य कनेक्शनों के लिए अस्वीकार्य भीड़ बना सकता है?
  • रास्ते में कहीं पर राउटर-बफर?
  • छोटी मात्रा के पैकेट-नुकसान के प्रभाव को बढ़ाएं?

1
क्या आप इस बात की पुष्टि कर सकते हैं कि जब आप कहते हैं कि आप मेगाबाइट्स / एस कह रहे हैं 70 MB/sऔर मेगाबिट्स नहीं हैं? बस स्पष्टीकरण की तलाश है।
एंडी शिन

हां, मेगाबाइट्स / मेगाबाइट्स नहीं हैं।
टॉमस

अगर मैं तुम होते, तो मैं इसे 2 गुना (10, 20, 40, 80, ...) से गुणा करने की कोशिश करता और यह देखता कि यह आपके सामान्य डाउनलोड समय को कैसे बेहतर बनाता
mvp

जवाबों:


1

इस तरह इसे कॉन्फ़िगर करने की अपेक्षित डाउनसाइड क्या हैं? उदाहरण के लिए:

Will it affect other users of the same network?

Initcwnd बदलने से प्रभावित होगा:

  • सेटिंग्स के साथ सर्वर के उपयोगकर्ता बदल जाते हैं
  • यदि वे उपयोगकर्ता उस मार्ग से मेल खाते हैं जिस पर सेटिंग परिवर्तन कॉन्फ़िगर किया गया है।
Could it create unacceptable congestion for other connections?

ज़रूर।

Flood router-buffers somewhere on the path?

अप्रासंगिक नहीं है, लेकिन जब तक वे आपके राउटर नहीं होते, मैं उन मुद्दों पर ध्यान केंद्रित करूंगा जो आपके करीब हैं।

Increase the impact of small amounts of packet-loss?

ज़रूर, यह ऐसा कर सकता है।

उतावलापन यह है कि यह जानबूझकर और अनजाने में, पैकेट के नुकसान की लागत में वृद्धि करेगा। आपका सर्वर 3-तरीके के हैंडशेक (कम निवेश के लिए महत्वपूर्ण मात्रा में डेटा की मात्रा) और डेटा को पूरा करने में सक्षम किसी व्यक्ति द्वारा डॉस के लिए सरल है।

यह उन अवसरों को भी बढ़ाएगा कि उन पैकेटों के एक समूह को पीछे ले जाने की आवश्यकता होगी क्योंकि फटने वाले पहले पैकेटों में से एक खो जाएगा।


ठीक है, इसलिए संक्षेप में: केवल सही मार्गों के लिए initcwnd सेट के साथ एक निजी सर्वर के लिए यह उपयोगकर्ताओं के लिए अन्तरक्रियाशीलता के लिए एक अच्छा सुधार है।
टॉमस

0

मुझे नहीं लगता कि मैं पूरी तरह से समझ पा रहा हूं कि आप यहां क्या पूछ रहे हैं, जवाब देने का प्रयास करें:

सबसे पहले, आप जो करने की कोशिश कर रहे हैं वह केवल भेजने वाले पक्ष पर ही मायने रखता है, न कि प्राप्त करने वाले पक्ष पर। यानी आपको फ़ाइल सर्वर को बदलना होगा न कि रिसीवर को। यह मानते हुए कि आप क्या कर रहे हैं:

Initcwnd को बदलने (जैसे) 10 का मतलब है कि 10 पैकेट तुरंत चले जाएंगे। यदि वे सभी अपने लक्ष्य तक पहुँचते हैं तो आप धीमे-धीमे (घातीय cwnd वृद्धि) के कारण पहले RTT में एक बड़ी खिड़की के साथ समाप्त हो सकते हैं। हालांकि, पैकेट के नुकसान पर cwnd को आधा कर दिया जाएगा और चूंकि आप 10 पैकेटों के साथ फट रहे हैं, इसलिए आपके पास बहुत अधिक मात्रा में रिट्रांसमेशन्स होंगे, ताकि आप जितना सोचते हैं उससे अधिक समस्याओं का सामना कर सकें।

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

/ proc / sys / net / ipv4 / tcp_congestion_control वह जगह है जहाँ आप कंजेस्ट कंट्रोल कंट्रोल एल्गोरिथ्म को बदलते हैं।

ऐसी छोटी RTTs (50ms) और मध्यम या बड़ी फ़ाइलों के लिए FWIW आपकी औसत गति को बहुत प्रभावित नहीं करता है। अगर कोई पैकेट नुकसान नहीं होता है तो (यानी फैट पाइप) cwnd हर RTT पर दोगुना हो जाएगा। RTT = एक मोटी पाइप पर 50ms के साथ आप पहले सेकंड में 20 आरटीटी फिट करेंगे, जिसका अर्थ है कि initcwnd = 2 के साथ आप 1 सेकंड के बाद cwnd = 2 * 2 ^ 20 के साथ समाप्त हो जाएंगे, जो कि मैं शर्त लगा सकता हूं कि आप की तुलना में अधिक है संभाल ;-)

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