Linux नेटवर्किंग स्टैक
Linux नेटवर्क पैकेट रिसीव
- नेटवर्क डिवाइस में NIC(Network Interface Card) पैकेट के आने की सूचना देने के लिए IRQ(Interrupt Request) उत्पन्न करता है
- IRQ हैंडलर बहुत उच्च प्राथमिकता पर चलता है और अतिरिक्त IRQ जनरेशन को ब्लॉक करता है
- डिवाइस ड्राइवर IRQ context के बाहर काम को प्रोसेस करने के लिए softIRQ सिस्टम का उपयोग किया जाता है
- softIRQ kernel thread बनाया जाता है, और
softnet_data structure बनाया जाता है
- NIC, DMA(Direct Memory Access) का उपयोग करके नेटवर्क डेटा को RAM के ring buffer में लिखवाता है
- NAPI softIRQ polling loop शुरू होता है
net_rx_action loop, NAPI structure की जाँच करता है और पैकेट को napi_gro_receive तक भेजता है
- पैकेट
netif_receive_skb के जरिए protocol stack तक पहुँचता है
Linux kernel नेटवर्क ट्रांसमिशन
- जब application कोई message भेजता है, तो TCP header लिखा जाता है और L3 handler को कॉल किया जाता है
- पैकेट को fragment किया जाता है, और L2 transmission function को कॉल किया जाता है
- ड्राइवर पैकेट को
tx ring buffer में queue करता है
- NIC, RAM से पैकेट लेकर उसे transmit करता है
- ट्रांसमिशन पूरा होने पर NIC hard IRQ उत्पन्न करता है
- ड्राइवर इस IRQ को प्रोसेस करता है और NAPI poll सिस्टम को schedule करता है
नेटवर्क परफ़ॉर्मेंस ट्यूनिंग
त्वरित HOWTO
/proc/net/softnet_stat & /proc/net/sockstat
/proc/net/softnet_stat फ़ाइल हर CPU core के आँकड़े देती है
/proc/net/sockstat फ़ाइल socket उपयोग के आँकड़े देती है
ss
ss socket statistics की जाँच करने वाली utility है, जिससे memory usage देखा जा सकता है
netstat
netstat नेटवर्क connection और protocol stack statistics देने वाली command-line utility है
sysctl
sysctl command का उपयोग करके system/network settings बदली जा सकती हैं
/etc/sysctl.conf फ़ाइल को edit करके मानों को स्थायी रूप से बदला जा सकता है
NIC ring buffer
- NIC ring buffer एक fixed-size FIFO buffer है, जो RAM में स्थित होता है
- burst connection को सुचारु रूप से संभालने के लिए इस queue को बढ़ाने की आवश्यकता हो सकती है
GN⁺ का सार
- यह गाइड Linux नेटवर्क स्टैक के काम करने के तरीके को विस्तार से समझाती है और नेटवर्क परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के कई तरीके बताती है
- नेटवर्क पैकेट के रिसीव और ट्रांसमिशन के दौरान IRQ और softIRQ की भूमिका को समझना महत्वपूर्ण है
sysctl command से system settings को समायोजित करके और NIC ring buffer का आकार बदलकर परफ़ॉर्मेंस बेहतर की जा सकती है
- नेटवर्क परफ़ॉर्मेंस ट्यूनिंग सिस्टम की विशिष्ट आवश्यकताओं पर निर्भर कर सकती है, इसलिए अलग-अलग settings के साथ प्रयोग करना ज़रूरी है
अभी कोई टिप्पणी नहीं है.