2011-10-14 9 views
25

पर कब्जा करने के लिए libpcap मैं 0 जीबीपीएस नेटवर्क कार्ड से 0 पैकेट नुकसान के साथ पैकेट कैप्चर करना चाहता हूं। मैं 100 एमबीपीएस एनआईसी के लिए लिपैप का उपयोग कर रहा हूं और यह ठीक काम कर रहा है। क्या libpcap 10Gbps एनआईसी यातायात को संभालने में सक्षम होगा? यदि यह प्राप्त करने के अन्य वैकल्पिक तरीके क्या नहीं हैं?10 जीबीपीएस एनआईसी

+0

पर बेहतर हो जाएंगे इस पर निर्भर करता है कि आप कितने प्रोसेसर को फेंकते हैं ... जो स्पष्ट होना चाहिए था। –

उत्तर

36

0 पैकेट नुकसान के साथ 10 जीबीपीएस को संभालने के लिए libpcap चाहेगा या नहीं, यह मशीन का एक मामला है जिसका आप उपयोग कर रहे हैं और libpcap संस्करण। यदि मशीन, सीपीयू और एचडीडी I/O पर्याप्त तेज़ हैं, तो आपको 0 पैकेट नुकसान मिल सकता है। अन्यथा आपको निम्न क्रियाएं करने की आवश्यकता हो सकती है:

  • अपने libpcap को नवीनतम संस्करण में अपडेट करें। Libpcap 1.0.0 या बाद में, supposts शून्य-प्रति (स्मृति-मैप किए गए) तंत्र। इसका मतलब है कि एक बफर है जो कर्नेल के पता स्थान और एप्लिकेशन की पता स्थान दोनों में है, ताकि डेटा को कर्नेल-मोड बफर से उपयोगकर्ता-मोड बफर में कॉपी करने की आवश्यकता न हो। पैकेट को अभी भी साझा बफर में स्कबफ (लिनक्स) से कॉपी किया गया है, इसलिए यह वास्तव में "एक-प्रति" की तरह है, लेकिन यह अभी भी एक छोटी प्रति है, जिससे कैप्चर किए गए पैकेट प्राप्त करने के लिए आवश्यक CPU समय कम हो सकता है। इसके अलावा बफर प्रति एप्लिकेशन जागने कॉल से अधिक पैकेट प्राप्त किए जा सकते हैं।

  • आप एक उच्च CPU उपयोग दिखाई देती है तो यह शायद अपने CPU कि पैकेट आगमन दर को संभाल नहीं कर सकते हैं। कैप्चर के दौरान आप अपने सिस्टम संसाधनों की जांच के लिए xosview (एक सिस्टम लोड विज़ुअलाइजेशन टूल) का उपयोग कर सकते हैं।

  • यदि सीपीयू पैकेट छोड़ देता है, तो आप PF_RING का उपयोग कर सकते हैं। PF_RING एक परिपत्र बफर के साथ libpcap का विस्तार है: http://www.ntop.org/products/pf_ring/। यह तेजी से रास्ता है और 10 जीबीपीएस के साथ कमोडिटी एनआईसी http://www.ntop.org/products/pf_ring/hardware-packet-filtering/ के साथ कब्जा कर सकता है।

  • एक और तरीका एनआईसी प्राप्त करना है जिसमें ऑन-बोर्ड मेमोरी और पैकेट कैप्चरिंग के लिए एक विशिष्ट एचडब्ल्यू डिज़ाइन है, http://en.wikipedia.org/wiki/DAG_Technology देखें।

  • यदि सीपीयू आपकी समस्या नहीं है, तो आपको डिस्क डेटा स्थानांतरण गति का परीक्षण करने की आवश्यकता है। लिनक्स पर एचडीपार्म सबसे सरल उपकरण है। कुछ distros एक जीयूआई के साथ आते हैं, अन्यथा: $ sudo hdparm -tT /dev/hda

आप अपने खुद के एप्लिकेशन बना रहे हैं libpcap के आधार पर:

  • उपयोग pcap_stats पहचान करने के लिए (क) पैकेट की संख्या गिरा दिया क्योंकि वहाँ जब वे पहुंचे तो ऑपरेटिंग सिस्टम के बफर में कोई कमरा नहीं था, क्योंकि पैकेट को पर्याप्त तेज़ी से पढ़ा नहीं जा रहा था; (बी) नेटवर्क इंटरफ़ेस या उसके ड्राइवर द्वारा छोड़े गए पैकेट की संख्या।

  • libpcap 1.0.0 एक API एक आवेदन बफर आकार निर्धारित करते हैं, प्लेटफार्मों जहां बफर आकार सेट किया जा सकता पर देता है कि है। बी) यदि आपको बफर सेट करना मुश्किल लगता है, तो आप Libpcap 1.1.0 या बाद में उपयोग कर सकते हैं जिसमें डिफ़ॉल्ट कैप्चर बफर आकार 32K से 512K तक बढ़ा दिया गया है। ग) तुम सिर्फ tcpdump का उपयोग कर रहे हैं, तो 4.0.0 या बाद का उपयोग करें और बफर

2

PF_RING के आकार के लिए -B ध्वज का उपयोग करें (एक अच्छा समाधान है एक वैकल्पिक netsniff-एनजी हो सकता है http://netsniff-ng.org/) । दोनों परियोजनाओं के लिए प्रदर्शन की लाभ शून्य प्रतिलिपि तंत्र द्वारा प्राप्त की जाती है। जाहिर है, बाधा एचडी हो सकती है, इसकी डाटा ट्रांसफर दर।

11

आप यह नहीं कह रहे कि कौन सी ऑपरेटिंग सिस्टम या सीपीयू। इससे कोई फ़र्क नहीं पड़ता कि आप libpcap चुनते हैं या नहीं, अंतर्निहित नेटवर्क प्रदर्शन अभी भी ऑपरेटिंग सिस्टम मेमोरी मैनेजमेंट और उसके नेटवर्क ड्राइवर द्वारा बोझ किया गया है। libpcap ने पैसों के साथ रखा है और 10 जीबीपीएस संभाल सकता है, लेकिन और भी कुछ है।

ताकि आप नंबर-क्रंचिंग, आभासी मशीनों चल रहा है और जबकि पैकेट पर कब्जा कर सकते हैं सबसे अच्छा सीपीयू चाहते हैं, AMD Opteron सीपीयू जो अभी भी इंटेल जिऑन Quadcore 5540 2.53GHz (से बेहतर साबित इंटेल की Xio/DDIO परिचय और ज्यादातर के बावजूद साथ जाना उसी एल 2 कैश के इंटेल ड्यूल-कोर साझाकरण के कारण)। सर्वश्रेष्ठ तैयार किए गए ओएस के लिए, नवीनतम फ्रीबीएसडी एएस-इज़ (जो अभी भी मूल हार्डवेयर का उपयोग कर लिनक्स 3.10 नेटवर्किंग से बेहतर प्रदर्शन करता है) के साथ जाएं। अन्यथा, इंटेल और लिनक्स बुनियादी ड्रॉप-फ्री 10 जीबीपीएस कैप्चर के लिए ठीक काम करेगा, बशर्ते आप रोल अप करने के इच्छुक हैं आपकी आस्तीन

आप ख़तरनाक गति के लिए हर समय वित्तीय की तरह या स्टोकेस्टिक या बड़े मैट्रिक्स भविष्य कहनेवाला कम्प्यूटेशनल crunching (या कुछ और), तो पढ़ा-ऑन करते हुए जोर दे रहे हैं ...

RedHat के रूप में है discovered, 67.2 नैनोसेकंड 10 जीबीपीएस दर पर एक न्यूनतम आकार के पैकेट को संसाधित करने के लिए क्या होता है। मैं मानता हूं कि यह 64 बाइट ईथरनेट पेलोड के लिए 81.6 नैनोसेकंद के करीब है लेकिन वे सैद्धांतिक रूप से 46-बाइट न्यूनतम बात कर रहे हैं।

यह कटौती करने के लिए, आप नहीं है या इनमें से कोई भी उपयोग करें यदि आप प्रत्येक पैकेट के लिए 81.6 एनएस के तहत रह कर पूर्ण दर पर 0% पैकेट ड्रॉप चाहते करने में सक्षम हो जाएगा:

  • मेक प्रत्येक पैकेट के लिए एक SKB कॉल
  • TLB (, कि भूमि के ऊपर कम से कम करने के पैकेट के कई 100s पर इस परिशोधित) (अनुवाद lookaside बफर, कि बचने के लिए, विशाल पेज आवंटन का उपयोग करें)
  • कम विलंबता (आप क्या कहा 'कब्जा' , इसलिए विलंबता यहां अप्रासंगिक है)। इसे इंटरप्ट कोलेस (ethtool -C rx-frames 1024+) कहा जाता है। बहु सीपीयू भर
  • फ्लोट प्रक्रियाओं (, उन्हें नीचे लॉक कर देना चाहिए प्रति नेटवर्क इंटरफेस बाधा एक)
  • malloc() libc (अधिमानतः एक विशाल आधारित, एक तेजी से एक के साथ बदलना चाहिए)

तो, लिनक्स 0 जीबीपीएस दर 0% ड्रॉप दर में कैप्चर करने के लिए फ्रीबीएसडी पर बढ़त है और कई वर्चुअल मशीन (और अन्य ओवरहेड्स) चलाती है। बस एक विशिष्ट नेटवर्क डिवाइस के लिए किसी प्रकार की एक नई मेमोरी प्रबंधन (एमएम) की आवश्यकता होती है और जरूरी नहीं कि पूरे ऑपरेटिंग सिस्टम। अधिकांश नए सुपर-हाई-प्रदर्शन नेटवर्क ड्राइवर अब डिवाइस को विशाल स्मृति का उपयोग कर रहे हैं जो कि उपयोगकर्ता समय पर आवंटित किए गए थे, फिर एक समय में पैकेट के बंडल को पास करने के लिए ड्राइवर कॉल का उपयोग करते थे।

कई नए नेटवर्क-चालक पुनरुद्देशित होने एम एम बाहर (किसी विशेष क्रम में) कर रहे हैं:

  • netmap
  • पीएफ-रिंग
  • पीएफ-रिंग + netmap
  • OpenOnload
  • DPDK
  • पैकेटशैडर

प्रत्येक कोड का परिपक्वता स्तर अत्यधिक निर्भर है जिस पर आप लिनक्स (या डिस्ट्रो) संस्करण चुनते हैं। मैंने उनमें से कुछ की कोशिश की है और एक बार जब मैं मूल डिजाइन को समझ गया, तो यह स्पष्ट हो गया कि मुझे क्या चाहिए। YMMV।

शुभकामनाएं।

1

यदि आपके पास समय है तो इंटेल डीपीडीके पर जाएं। यह शून्य प्रतिलिपि को एनआईसी के हार्डवेयर रजिस्टर तक पहुंचने की अनुमति देता है। मैं 10 जीबीपीएस पर 0% बूंदों को हासिल करने में सक्षम था, एक कोर पर 1.5 एमपीपीएस। आप लंबे समय तक

+0

हाँ, मुझे इंटेल IXFGB ड्राइवरों के साथ बहुत कठिनाई हुई है। यह विशिष्ट लिनक्स कर्नेल संस्करणों से बंधे रहने में इतना संवेदनशील है। –

संबंधित मुद्दे