Tbf में बाल्टी का आकार


11

मैंने लिनक्स के टोकन बकेट फ़िल्टर (tbf) के बारे में कई बार पढ़ा है और फिर भी मुझे पूरी तरह से समझ में नहीं आया कि मैं कैसे burstऔर latencyमापदंडों की गणना करूँ , मुझ पर शर्म करें :(

मुझे लगता है कि एक उचित विलंबता लगभग 50 एमएस है। ठीक है, लेकिन क्या मूल्य फट जाना चाहिए?

मेनपेज कहता है:

बाद की गणना बाल्टी के आकार, दर और संभवतः चोटी (यदि सेट) को ध्यान में रखती है। ये दो पैरामीटर परस्पर अनन्य हैं।

तो, बाल्टी और फिल्टर से संबंधित विलंबता कैसे है? क्या इसकी गणना करने का कोई सूत्र है? या यह केवल "ओके, एक्स बाइट्स ऑफ बर्स्ट एंड वाई सेकंड्स ऑफ लेटेंसी मेरे लिए अच्छा है" का मामला है?


1
सभी को यह स्पष्ट नहीं है: tbfलिनक्स ट्रैफिक कंट्रोल ढांचे का हिस्सा है। man tbfया man tc-tbfप्रलेखन लाने के लिए चाहिए।
derobert

1
आपके संपादन से, ऐसा लगता है कि आपको एक टोकन बाल्टी फ़िल्टर की एक व्याख्या की आवश्यकता है, वैचारिक रूप से। मैं अपने जवाब देने के लिए एक जोड़ देंगे एक बार मैं एक कंप्यूटर (अपने फोन पर इस लेखन।) के सामने वापस कर रहा हूँ
derobert

अंत में वैचारिक व्याख्या में जोड़ा
derobert

जवाबों:


16

मैनपेज से, एकमात्र बाधा burstयह है कि आपके कॉन्फ़िगर किए गए दर को अनुमति देने के लिए यह पर्याप्त उच्च होना चाहिए: यह कम से कम दर / HZ होना चाहिए। HZ एक कर्नेल कॉन्फ़िगरेशन पैरामीटर है; आप यह पता लगा सकते हैं कि यह आपके कर्नेल कॉन्फिग की जाँच करके आपके सिस्टम पर क्या है। जैसे, डेबियन पर, आप कर सकते हैं:

$ egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
CONFIG_HZ_250=y

इसलिए मेरे सिस्टम पर HZ 250 है। 10mbps की दर से हिट करने के लिए, मुझे इस प्रकार burstकम से कम 10,000,000 बिट्स / सेकंड / 250 Hz = 40,000 बिट्स = 5000 बाइट्स की आवश्यकता होगी। (नोट करें कि मानपृष्ठ में उच्च मान उस समय से है जब HZ = 100 डिफ़ॉल्ट था)।

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

तो: आप वांछित प्राप्त करने के लिए कम से कम बड़े होने के लिए फट को कॉन्फ़िगर करते हैं rate। इसके अलावा, आप इसे और बढ़ा सकते हैं, इस पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं।

एक टोकन बाल्टी फ़िल्टर का अवधारणात्मक मॉडल

टोकन बाल्टी फ़िल्टर

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

वास्तव में नेटवर्क पर एक पैकेट प्रसारित करने के लिए, उस पैकेट को बाइट्स में अपने आकार के बराबर टोकन प्राप्त करना चाहिए mpu(जो भी बड़ा हो)।

टोकन की प्रतीक्षा में पैकेटों की एक पंक्ति (या हो सकती है) है। यह तब होता है जब बाल्टी खाली होती है, या वैकल्पिक रूप से पैकेट के आकार की तुलना में कम टोकन होते हैं। बाल्टी के सामने फुटपाथ पर केवल इतना ही कमरा है, और कमरे की मात्रा (बाइट्स में) सीधे सेट है limit। वैकल्पिक रूप से, इसे अप्रत्यक्ष रूप से latency(एक आदर्श दुनिया में, गणना rate× होगी latency) के साथ सेट किया जा सकता है ।

जब कर्नेल फ़िल्टर किए गए इंटरफ़ेस से एक पैकेट भेजना चाहता है, तो वह पैकेट को पंक्ति के अंत में रखने का प्रयास करता है। यदि फुटपाथ पर कोई कमरा नहीं है, तो यह पैकेट के लिए दुर्भाग्यपूर्ण है, क्योंकि फुटपाथ के अंत में एक अथाह गड्ढा है, और कर्नेल पैकेट को गिरा देता है।

अंतिम टुकड़ा एक टोकन बनाने वाली मशीन है जो हर टिक को बाल्टी में जोड़ rate/ HZटोकन देती है। (यही कारण है कि आपकी बाल्टी को कम से कम इतना बड़ा होना चाहिए, अन्यथा कुछ नए ढके हुए टोकन तुरंत छोड़ दिए जाएंगे)।


मैंने सोचा था कि यह विपरीत है, कि आप एक पल के लिए दर को पार करने की अनुमति देते हैं, जिसे बाद में औसत दर तक पहुंचने के लिए कम दर से मुआवजा दिया गया था ...
सेबलक

@sebelk मैं आरटीएफएस के बिना निश्चित नहीं हूं, लेकिन यह उसी परिणाम के लिए काम करेगा, जब मामले के अलावा tbf को एक इंटरफ़ेस में जोड़ा जाता है जो वर्तमान में ऊपर चल रहा है rate। या नहीं, तुम बस कह सकते हैं के रूप में बाल्टी पूर्ण शुरू होता है ...
derobert

@ सेल्बेक: यह भी सच है। आइए हम कहते हैं कि हमारे पास 1000 बाइट्स (फट आकार) की एक बाल्टी है और टोकन दर 10 बाइट्स पीआर है। दूसरा। इसलिए यदि 100 सेकंड के लिए कोई पैकेट नहीं आया है तो बाल्टी भर दी जाएगी। फिर आने वाले पैकेट के अगले 1000 बाइट्स बिना कतार के तुरंत प्रसारित हो जाएंगे, उर्फ। एक डेटा दर में विस्फोट जो टोकन निर्माण की दर से ऊपर हो सकता है।
बजरके फ्रंड-हेन्सन

5

Derobert के पूरक का एक और जवाब।

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

टीबीएफ के लिए फट पैरामीटर बाइट्स की संख्या है जिसे दर सीमित करने से पहले असीमित गति से भेजा जा सकता है ( दर द्वारा निर्दिष्ट ) में किक करता है। एक बार दर सीमित करने के बाद फिर से फटने का एकमात्र तरीका है कि आपके दर को नीचे भेजने के लिए सीमित करना है। ।

उदाहरण के लिए, मान लें कि आपका tbf फट पैरामीटर 10K बाइट्स है, और आपका tbf दर पैरामीटर 2K बाइट्स / सेकंड है, और आप वर्तमान में दर सीमित हैं (अर्थात फट समाप्त हो गया है, इसलिए आप 2kbps पर भेजने तक सीमित हैं)। यदि आपने स्वेच्छा से 10 सेकंड के लिए 1Kbps पर भेजने की गति को कम कर दिया है, तो आप अपने 10K बाइट्स फट भत्ता को फिर से जमा करेंगे (= (2000 [बाइट्स / सेकंड] - 1000 [बाइट्स / सेकंड]) * 10 सेकंड)। 10sec से अधिक के लिए इसे 1kbps से नीचे रखने पर कोई प्रभाव नहीं पड़ेगा क्योंकि tbf आपको फट पैरामीटर से अधिक संचय की अनुमति नहीं देता है ।

यदि आपने पूरी तरह से खर्च करना बंद कर दिया है तो आपको 5sec (= 100000 [बाइट्स] / 2000 [बाइट्स / सेकंड]) में आपका फटा हुआ भत्ता फिर से मिलेगा।

आपको इसका उपयोग करने के लिए अपने सभी फट भत्ते को वापस नहीं लेना है, आप जितना जमा कर सकते हैं उतना उपयोग कर सकते हैं।

इसे देखने का एक और तरीका है: आपको असीमित गति से फट बाइट भेजने की अनुमति है , इसके बाद आपकी दीर्घकालिक औसत गति कभी भी दर से अधिक नहीं हो सकती है । हालाँकि, क्योंकि यह एक दीर्घकालिक औसत है, यदि आप पूरी दर से नीचे भेजने की अनुमति देते हैं , तो आपको पूरी गति से भेजने की अनुमति है - लेकिन फिर भी आपको केवल सबसे अधिक फटने वाले बाइट्स (और यदि ऐसा नहीं है) आप को पकड़ने के लिए अनुमति नहीं है)।

दूसरी शिकन है टीबीएफ की इन दर सीमाओं में से दो , और आपके ट्रैफ़िक को दोनों से गुजरना पड़ता है। दूसरे एक में, फट पैरामीटर को mtu और, और दर को चोटी कहा जाता है । आप इस दूसरे का उपयोग करने की गति को सीमित करने के लिए पहले एक का उपयोग करने के लिए माना जाता है कि यह फट सकता है। इस दूसरे का उपयोग करना वैकल्पिक है, और यदि आप इसका उपयोग नहीं करते हैं तो डिवाइस की गति पर फटने को भेजा जाता है।

अंत में, tbf का एक सीमा पैरामीटर है। यदि प्रोग्राम लगातार दर से अधिक तेजी से भेजता है , तो पैकेट कतार में बनाए जाएंगे। अनंत कर्नेल मेमोरी नहीं है, इसलिए सीमा कहती है कि कर्नेल पैकेट छोड़ने से पहले कितने बाइट्स बना सकता है।

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