इंटरप्ट मॉडरेशन के पीछे मुख्य सिद्धांत प्राप्त फ्रेम (या प्रति ट्रांसमिट फ्रेम पूरा होने में एक बाधा) से कम एक अवरोध उत्पन्न करना है, जब सर्विसिंग में व्यवधान उत्पन्न होता है, तो ओएस ओवरहेड को कम करना। BCM5709 कंट्रोलर इंटरलेसिंग के लिए हार्डवेयर में कुछ तरीकों का समर्थन करता है, जिसमें शामिल हैं:
- एक्स फ्रेम (एथलेट में आरएक्स-फ्रेम) प्राप्त करने के बाद एक बाधा उत्पन्न करें
- एक बाधा उत्पन्न करें जब X usecs के बाद कोई और फ़्रेम प्राप्त न हो (ethtool में rx-usecs)
इन हार्डवेयर विधियों का उपयोग करने में समस्या यह है कि आपको उन्हें थ्रूपुट या विलंबता का अनुकूलन करने के लिए चुनने की आवश्यकता है, आपके पास दोनों नहीं हो सकते। प्रत्येक प्राप्त फ्रेम (आरएक्स-फ्रेम = 1) के लिए एक बाधा उत्पन्न करना विलंबता को कम करता है, लेकिन यह बाधा सेवा ओवरहेड के संदर्भ में उच्च लागत पर ऐसा करता है। एक बड़ा मान सेट करना (आरएक्स-फ़्रेम = 10 कहना) सीपीयू चक्रों की संख्या को कम करता है जो प्राप्त प्रत्येक दस फ़्रेमों के लिए केवल एक बाधा उत्पन्न करता है, लेकिन आप दस के उस समूह में पहले फ्रेम के लिए एक उच्च विलंबता का सामना करेंगे।
एनएपीआई कार्यान्वयन इस तथ्य का लाभ उठाने का प्रयास करता है कि ट्रैफ़िक में गड़बड़ी आती है, जिससे आप प्राप्त पहले फ्रेम पर तुरंत एक बाधा उत्पन्न करते हैं, फिर आप तुरंत मतदान मोड (यानी निष्क्रिय व्यवधान) में स्विच करते हैं क्योंकि अधिक ट्रैफ़िक पीछे होगा। जब आप कुछ फ़्रेमों (आपके प्रश्न में 16 या 64) या कुछ समय अंतराल के लिए मतदान कर लेते हैं, तो ड्राइवर इंटरप्ट को फिर से सक्षम करेगा और फिर से शुरू करेगा।
यदि आपके पास एक पूर्वानुमानित कार्यभार है, तो निश्चित मानों को उपरोक्त (NAPI, rx- फ्रेम, rx-usecs) में से किसी एक के लिए चुना जा सकता है जो आपको सही ट्रेड-ऑफ देता है, लेकिन अधिकांश वर्कलोड अलग-अलग होते हैं और आप कुछ कार्य करना समाप्त करते हैं। यह वह जगह है जहाँ अनुकूली-आरएक्स / अनुकूली-टीएक्स खेल में आते हैं। वहाँ यह विचार है कि ड्राइवर लगातार कम ट्रैफ़िक में विलंबता के लिए या उच्च ट्रैफ़िक स्थितियों में थ्रूपुट के लिए ऑप्टिमाइज़ करने के लिए कार्यभार (फ़्रेम प्रति सेकंड, फ़्रेम आकार, आदि) और फ़्रेम को ले जाता है, जो हार्डवेयर इंटरलेसिंग कोलेसिंग योजना को ट्यून करता है। यह एक अच्छा सिद्धांत है लेकिन व्यवहार में इसे लागू करना मुश्किल हो सकता है। केवल कुछ ही ड्राइवर इसे लागू करते हैं ( http://fxr.watson.org/fxr/search?v=linux-2.6&string=use_adaptive_rx_coalesce ) और bnx2 / 1000 ड्राइवरों को उस सूची में नहीं रखा गया है।
प्रत्येक एथलेटूल कोलेसिंग फील्ड को कैसे काम करना चाहिए, इसके अच्छे विवरण के लिए, निम्नलिखित पते पर ethtool_coalesce संरचना की परिभाषाओं पर एक नज़र डालें:
http://fxr.watson.org/fxr/source/include/linux/ethtool.h?v=linux-2.6#L111
आपके लिए विशेष स्थिति (~ 400Mb / s थ्रूपुट) मैं आपके कार्यभार के लिए सर्वोत्तम सेटिंग्स के लिए rx- फ्रेम और rx-usecs मान ट्यूनिंग करने का सुझाव दूंगा। ISR के ओवरहेड के साथ-साथ विलंबता के लिए आपके एप्लिकेशन (httpd? आदि) की संवेदनशीलता दोनों को देखें।
डेव