एनएपीआई बनाम अनुकूली व्यवधान


12

क्या कोई यह बता सकता है कि उच्च नेटवर्किंग लोड के तहत इंटरप्ट ओवरहेड को कम करने के लिए दो निम्नलिखित तकनीकों का उपयोग कैसे किया जाता है?

  1. अनुकूली-आरएक्स / अनुकूली-टीएक्स, और
  2. NAPI;

मैं एक जवाब की सराहना करता हूं जो कि लिनक्स कर्नेल स्रोत स्तर के करीब अंतर बताता है? मैं यह भी सुनना चाहूंगा कि एनआईसी को मतदान के लिए मजबूर करने के लिए कैसे किया जा सकता है / लोड पर गतिरोध मोड को बाधित करना जो ~ 400Mbps है।

अधिक पृष्ठभूमि:

समस्या यह है कि bnx2 और e1000 ड्राइवर "ethtool -C adaptive-rx" कमांड को अनदेखा करते हैं। यह शायद इसलिए है क्योंकि वे ड्राइवर अनुकूली अवरोधों का समर्थन नहीं करते हैं। ब्रॉडकॉम प्रोग्रामर के संदर्भ नियमावली के अनुसार, यह सुविधा BCM5709 NIC हार्डवेयर द्वारा समर्थित होनी चाहिए।

इसलिए मैंने NAPI को आज़माने का फैसला किया और netif_napi_add () फंक्शन कॉल में 64 से 16 तक वज़न कम करने के लिए NIC को कम लोड के तहत पोलिंग मोड में लाने के लिए मजबूर किया, लेकिन दुर्भाग्य से यह काम नहीं किया। मुझे लगता है कि NAPI को NIC में किसी विशेष हार्डवेयर समर्थन की आवश्यकता नहीं है, क्या यह सही है?

मैं जिस हार्डवेयर का उपयोग कर रहा हूं वह BCM5709 NIC है (यह bnx2 ड्राइवर का उपयोग करता है)। और OS उबंटू 10.04 है। CPU XEON 5620 है।

जवाबों:


18

इंटरप्ट मॉडरेशन के पीछे मुख्य सिद्धांत प्राप्त फ्रेम (या प्रति ट्रांसमिट फ्रेम पूरा होने में एक बाधा) से कम एक अवरोध उत्पन्न करना है, जब सर्विसिंग में व्यवधान उत्पन्न होता है, तो ओएस ओवरहेड को कम करना। 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? आदि) की संवेदनशीलता दोनों को देखें।

डेव


1
आपने कहा था कि " एनएपीआई कार्यान्वयन इस तथ्य का लाभ उठाने का प्रयास करता है कि ट्रैफ़िक में गड़बड़ी आती है, ताकि आप प्राप्त पहले फ्रेम पर तुरंत एक बाधा उत्पन्न करें , फिर आप तुरंत मतदान मोड में स्विच करें "। लेकिन विकी ने कहा कि एनएपीआई हार्डवेयर अवरोधों का उपयोग नहीं करता है, कभी नहीं, लेकिन हर निश्चित अवधि में चुनाव करता है : en.wikipedia.org/wiki/New_API सटीक उद्धरण: "कर्नेल समय-समय पर बिना रुकावट आने वाले नेटवर्क पैकेट के आगमन की जांच कर सकता है। , जो रुकावट प्रसंस्करण के ओवरहेड को समाप्त करता है। " सच कहाँ है?
एलेक्स

1
@ अलेक्स हार्डवेयर व्यवधान का उपयोग उस कर्नेल को सूचित करने के लिए किया जाना चाहिए जिसे प्राप्त करने के लिए ट्रैफ़िक है। एक "पुरानी शैली" इंटरप्ट हैंडलर शेड्यूल पैकेट प्राप्त होता है, फिर से इंटरप्ट को सक्षम करता है। एक NAPI इंटरप्ट हैंडलर बाधित करता है, एक पोलर को शेड्यूल करता है, और इंटरप्ट को फिर से सक्षम करता है। मतदाता एक निश्चित मात्रा में पैकेट के लिए पैकेट प्राप्त करता है, और जब तक यातायात सेवा करने के लिए ट्रैफ़िक चलता रहता है, इसका उद्देश्य एनआईसी से हमेशा ट्रैफ़िक खींचकर कठिन व्यवधान को रोकना है। जब ट्रैफिक कम हो जाता है, तो पोलर बाहर निकल जाता है और सिस्टम एक रुकावट के इंतजार में वापस चला जाता है।
सुपरजामी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.