लिनक्स टीसी क्लास / फिल्टर नंबरिंग


12

मैं वर्तमान में ISP- स्तर की कंपनियों के लिए ट्रैफ़िक को आकार देने वाले समाधान पर काम कर रहा हूं, और एक दिलचस्प (किफ़ायती दार्शनिक) समस्या के लिए आया हूं।

एंडपॉइंट की संख्या के बारे में देखते हुए सिस्टम को संभालना चाहिए (जो कि ~ 20k के आसपास है) मुझे थोड़ी चिंता हुई कि क्या होगा जब मुझे अधिक उपयोगकर्ताओं की नीति / आकार ट्रैफ़िक की आवश्यकता होगी। जैसा कि मैं वर्तमान में पूरे नेटवर्क के लिए एचएफएससी आकार देने वाले पेड़ (टीसी-एचएफ़एससी, ज्यादातर समान-लेकिन-कूलर के रूप में बेहतर-ज्ञात एचटीबी) का उपयोग कर रहा हूं, मुझे अधिक क्लासिड (प्रत्येक उपयोगकर्ता के लिए कम से कम एक उपयोगकर्ता के लिए) का उपयोग करने की आवश्यकता होगी नेटवर्क)। जो समस्या मुझे मिली वह यह थी कि टीसी क्लासिड्स थोड़े सीमित हैं - वे 16-बिट संख्याएं हैं, जो मुझे इस समाधान के आकार का अधिकतम 64k उपयोगकर्ता देती हैं।

इसी तरह, अगर मैं कुशलतापूर्वक टीसी फिल्टर का प्रबंधन करना चाहता हूं (जैसे 'फ्लश ऑल तकनीक' का उपयोग नहीं कर रहा), तो मुझे व्यक्तिगत फिल्टर प्रविष्टियों को हटाने या संशोधित करने में सक्षम होने की आवश्यकता है। (मैं LARTC [1] से हैश तालिका के समान कुछ का उपयोग कर रहा हूं)। फिर, एकमात्र विधि जो इसके साथ काम करती दिखती है वह है व्यक्तिगत प्राथमिकताओं का उपयोग करके सभी फ़िल्टर को क्रमांकित करना (tc filter add dev ... पुजारी 1)। कोई अन्य पैरामीटर नहीं है जो इस उद्देश्य के लिए इस्तेमाल किया जा सकता है, और, अफसोस की बात है, प्रियो 16-बिट-केवल भी है।

मेरा प्रश्न निम्नलिखित है: क्या उपलब्ध "पहचानकर्ता स्थान" को बढ़ाने के लिए कुछ अच्छी विधि मौजूद है, जैसे कि 'tc' क्लास कमांड के लिए 32-बिट clsid, और 'tc filter' के लिए 32-बिट प्राथमिकताएँ (या कोई अन्य संशोधन हैंडल)। आदेश?

बहुत बहुत धन्यवाद,

-mk

(btw मुझे उम्मीद है कि यह "64k उपयोगकर्ताओं को हर किसी के लिए पर्याप्त नहीं होना चाहिए" परिदृश्य के लिए होगा ...)


उन सभी मानों को कर्नेल स्थान में संग्रहीत किया जाता है, उन्हें बड़ा करने के लिए आपको अपनी कर्नेल और उपयोगकर्ता स्थान उपयोगिताओं को फिर से तैयार करना होगा। क्या आपने 64 बिट कर्नेल का उपयोग करने की कोशिश की है? उन्हें वहां 32 बिट के रूप में परिभाषित किया जा सकता है।
ह्यूबर्ट करियो

64 बिट कर्नेल समान आकारों का उपयोग करता है। उदाहरण के लिए, फ़िल्टर संख्या u32-पूर्णांक है जिसमें ऊपरी (प्रोटोकॉल) और निचले हिस्से (प्रियो) दोनों स्पष्ट रूप से 16 बिट हैं। क्लास आईडी को यू 16 के रूप में हार्डकोड किया गया है। शायद LKML पर किसी से पूछने का प्रयास करें।
एक्सा

1
यहां तक ​​कि अपने फिल्टरों के लिए हैश का उपयोग करने से, आपको बहुत सारी IO समस्याएँ होती हैं यदि आप बहुत अधिक फ़िल्टर्स का उपयोग कर रहे हैं (मैं ऊपर की ओर और नीचे की ओर अनुमान लगाता हूं)। मैं बहुत समय बिता चुका हूं और कर्नेल के अंदर कतारों के क्रियान्वयन को पैच करना पड़ा है, जिसमें चीजें ksoftirqd के साथ काम कर रही हैं। मैंने साइमन लोदल नाम के एक आदमी से एक पैच का इस्तेमाल किया, जो मुझे 4 साल पहले LARTC पर मिला था। उनके पैच मेल-archive.com/lartc@mailman.ds9a.nl/msg16279.html पर देखें । आप उसे एक ई-मेल भेजने की कोशिश कर सकते हैं क्योंकि उसके पास हमेशा एक अद्यतन संस्करण (अंतिम कर्नेल के खिलाफ) होता है।
पबल्यूज़

@Pabluez बहुत बहुत धन्यवाद, मैं इसे से सबसे अच्छा पाने की कोशिश करूंगा।
एक्सा

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

जवाबों:


2

मुझे लगता है कि आपको 64k उपयोगकर्ताओं को एक ही इंटरफ़ेस पर प्रत्येक के लिए अपस्ट्रीम और डाउनस्ट्रीम कक्षाओं और फिल्टर के साथ नहीं डालना चाहिए। आपके पास प्रत्येक इंटरफ़ेस के लिए हैंडलर दोहरा सकते हैं, इसलिए अधिक इंटरफेस जोड़ें। यह चीजें करने के लिए आपको एक अविश्वसनीय काम / सर्वर / एनआईसी की आवश्यकता होगी। यदि सर्वर क्रैश हो जाता है, तो आपके पास 64k उपयोगकर्ता ऑफ़लाइन होंगे (और यह ट्रैफ़िक की मात्रा के साथ आसानी से क्रैश हो जाएगा)। यह मत भूलो कि आपके नेटवर्क कार्ड के माध्यम से जाने वाले EACH पैकेट को फ़िल्टर द्वारा वर्गीकृत और वर्गीकृत किया जाएगा और पंक्तिबद्ध होने के लिए एक कक्षा में भेजा जाएगा। यह 64k ग्राहकों के साथ एक आईएसपी गेटवे के एनआईसी के लिए बहुत काम है। मुख्यतः सभी वीडियो स्ट्रीम के साथ जो हमारे पास आजकल हैं (जो ठीक से कतार में कठिन है)।


मैं कुछ अन्य स्तर पर सेवा की उपलब्धता सुनिश्चित कर रहा हूं, लेकिन चिंता के लिए धन्यवाद। वास्तव में, अच्छे एनआईसी के साथ, एक लिनक्स राउटर होना मुश्किल नहीं है जो 10Gbits को आगे बढ़ा सकता है।
एक्सा

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

1
ठीक है, फॉरवर्ड करने के लिए 10Gbits कोई समस्या नहीं है, समस्या कई 64k * 2 (अप डाउन) फिल्टर और कक्षाएं चल रही है। हालांकि सौभाग्य: डी
पल्ब्यूज़

0

आप एक मशीन पर सभी ट्रैफ़िक को संभालने के बजाय ट्रैफ़िक हैंडलिंग को दो मशीनों (तीसरे का उपयोग करके) में विभाजित कर सकते हैं। स्रोत आईपी पते के आधार पर यातायात को रूट किया जा सकता है। तो, यदि आपके पास समान रूप से आईपी रेंज (ओं) को विभाजित कर सकते हैं, तो आपके पास 10k उपयोगकर्ता होंगे।

बेशक, जरूरत पड़ने पर आप दो से अधिक मशीनों का उपयोग कर सकते हैं। मुझे लगता है कि यह लिनक्स कर्नेल को पैच करने और कुछ अन्य हैक करने से बेहतर हो सकता है। संक्षेप में, यातायात आकार देने को कई मशीनों पर वितरित किया जाएगा। केंद्रीय नोड सही प्रसंस्करण नोड के लिए यातायात को आगे बढ़ाएगा।

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