क्या विंडोज के साथ प्रति सेकंड लाखों डाटाग्राम को संसाधित करना संभव है?


11

मैं जांच कर रहा हूं कि क्या मैं विंडोज पर एक एचपीसी ऐप लागू कर सकता हूं जो एक उच्च दर पर छोटे यूडीपी मल्टीकास्ट डेटाग्राम (ज्यादातर 100-400 बाइट्स) प्राप्त करता है, एक दर्जन या शायद 200 मल्टीकास्ट समूहों का उपयोग करके (यानी एमएसआई-एक्स और आरएसएस का उपयोग कर सकता है)। कई कोर के पैमाने पर), प्रति पैकेट कुछ प्रसंस्करण करता है, और फिर इसे बाहर भेजता है। टीसीपी के माध्यम से भेजना मैं एक दीवार से टकराने के बिना (6.4Gb / सेकंड) की जरूरत के अनुसार ऊपर जाने में कामयाब रहा, लेकिन उच्च pps दरों पर डेटाग्राम प्राप्त करना एक मुद्दा बन गया।

विंडोज 2012 R2 पर 2-पोर्ट 10Gb ईथरनेट एनआईसी के साथ एक उच्च-स्पेक एनयूएमए मशीन पर हाल ही में एक परीक्षण में , मैं केवल प्रति सेकंड सैकड़ों यूडीपी डेटाग्राम प्राप्त करने में सक्षम था (प्रारंभिक ड्रॉप, यानी वास्तव में डेटा को संसाधित किए बिना,) 2x12 कोर का उपयोग करके यह देखने के लिए कि यह कितनी तेजी से मिलता है) समीकरण से मेरे ऐप के प्रसंस्करण ओवरहेड को हटा दें, और परीक्षण किए गए 12 मल्टीकास्ट समूहों के कर्नेल भाग को एक NUMA नोड के 8 या 10 कोर में वितरित किया गया प्रतीत होता है ( अधिकतम आरएसएस का मान सेट किया गया था) 16) - एक .net ऐप के साथ, इसलिए देशी ऐप्स को तेजी से जाने में सक्षम होना चाहिए।

लेकिन फिर भी लेन Holgate केवल 500kpps पर यूडीपी पैकेट प्राप्त करने में कामयाब रहे में अपने उच्च प्रदर्शन विंडोज रियो परीक्षण , 1024 बाइट्स का एक यूडीपी पेलोड का उपयोग कर।

में QLogic के श्वेतपत्र (परीक्षण के अंतर्गत ओएस उल्लेख नहीं) के लिए सीमा पर स्थापित कर रहे हैं (ताकि दोनों प्राप्त करने और बाद में भेजने? भी शामिल है) "सुपर छोटे पैकेट मार्ग मल्टी-थ्रेडेड" 5.7Mpps । में लेख पर लिनक्स नेटवर्किंग , सीमा पर स्थापित कर रहे हैं 2Mpps को 1Mpps (कथित तौर पर स्केलिंग और अधिक या कम रैखिक) प्रति कोर, या यहाँ तक 15Mpps कि बाईपास गिरी विशेष समाधान के साथ।

जैसे जाल

10GigE लिंक पर लाइन रेट ( 14.88Mpps ) पर ट्रैफिक उत्पन्न कर सकते हैं जिसमें 900Mhz पर सिर्फ एक कोर चल रहा है। यह प्रति पैकेट लगभग 60-65 घड़ी चक्रों के बराबर होता है, और कोर और घड़ी आवृत्ति (4 कोर के साथ, 450 मेगाहर्ट्ज से कम पर लाइन दर) के साथ अच्छी तरह से तराजू होता है। इसी तरह की दरें प्राप्त पक्ष पर पहुंच जाती हैं

अब तक मैं (लेटेस्ट वर्जन के) विंडोज / विंडोज सर्वर को विशेष रूप से अग्रणी पैराग्राफ में वर्णित यूडीपी मल्टीकास्ट को कितनी दूर ले जा सकता हूं?

संपादित वहाँ एक CloudFlare ब्लॉग पोस्ट है - और एक दिलचस्प टिप्पणी अनुभाग - कैसे लिनक्स पर यह करने के लिए पर: कैसे प्रति सेकंड एक लाख पैकेट प्राप्त करने , और वहाँ इसी है हैकर समाचार टिप्पणियां पृष्ठ


@ रामाउंड सिद्धांत रूप में, यह संभवतः विंडोज में संभव है। लेकिन व्यवहार में यह कैसे संभव है? अब तक मैं मानक हार्डवेयर पर लाइनक्स में इन स्तरों को प्राप्त करने वाले लोगों से काफी कुछ रिपोर्ट में आया हूं, लेकिन विंडोज में कहीं भी एक भी बंद नहीं हो रहा है। और आपको कैसे लगता है कि मैं प्रश्न के दायरे को कम कर सकता हूं? यह सिर्फ यह है: "विंडोज में उच्चतम यूडीपी मल्टीकास्ट दरें क्या हैं?"। मेरे प्रश्न में पाठ का बड़ा हिस्सा सिर्फ उदाहरण हैं जो यह दिखाने के लिए चाहिए कि यह लिनक्स के साथ संभव है - और मैंने अपना होमवर्क किया है।
यूजीन बेर्सोवस्की

@Rhhound 'यदि लिनक्स पर इसका संभव हो तो विंडोज पर संभव है'। मैं क्रमशः असहमत हूँ .. एक प्रणाली जो तुरंत दिमाग में आती है वह है iptables .. हाँ सौभाग्य उस सिस्टम को खिड़कियों पर नकल कर रहा है। ^ _ ^
NiCk Newman

मैं वास्तव में उस मुश्किल की कोशिश नहीं कर रहा था, इसलिए आप हमेशा उन सभी कोड को ले सकते हैं जो मेरे पास आरआईओ परीक्षण के लिए उपलब्ध हैं जो मैंने किया और पुश करना जारी रखा।
लेन होलगेट

जवाबों:


5

माइक्रोसॉफ्ट के अनुसार, उनकी प्रयोगशाला में परीक्षणों से पता चला कि " आरआईओ के शुरुआती परीक्षण में एक विशेष सर्वर पर" , वे संभाल करने में सक्षम थे

  • Windows Server 2008R2 में बिना RIO के, बिना नुकसान के 2Mpps
  • RIO का उपयोग करके विंडोज सर्वर 8 पर 4Mpps (पूर्व-रिलीज़)

उस वीडियो का स्क्रीनशॉट (44:33):

यहाँ छवि विवरण दर्ज करें

तो मेरे सवाल का जवाब Is it possible to process millions of datagrams per second with Windows?होगा: हाँ , और जाहिर है यह RIO से पहले भी था, विंडोज सर्वर 2008R2 में।

लेकिन आधिकारिक आंकड़ों के अलावा, विशेष रूप से अप्रकाशित सॉफ्टवेयर पर, एक चुटकी नमक के साथ लिया जाना, केवल इस प्रस्तुति में दी गई विरल जानकारी के साथ, परीक्षण के बारे में कई सवाल, और इसलिए परिणामों की ठीक से व्याख्या कैसे करें, बने रहें। सबसे अधिक प्रासंगिक हैं:

  1. क्या भेजे जाने के आंकड़े हैं? प्राप्त करना? या रूटिंग के लिए हो सकता है (यानी प्राप्त + भेजें)?
  2. पैकेट का आकार क्या है? -> संभवतया सबसे कम संभव है, जैसा कि आम तौर पर किया जाता है जब पीपीएस के आंकड़ों के बारे में डींग मारने की कोशिश की जाती है
  3. कितने कनेक्शन (यदि टीसीपी) / पैकेट धाराएं (यदि यूडीपी) हैं ? -> वर्कलोड को वितरित करने के लिए संभवतः जितना आवश्यक हो उतना ही मौजूद सभी कोर का उपयोग किया जा सकता है
  4. क्या परीक्षण सेटअप? मशीन और एनआईसी चश्मा और वायरिंग

पहला महत्वपूर्ण है, क्योंकि Send और Receives को अलग-अलग चरणों की आवश्यकता होती है और प्रदर्शन में पर्याप्त अंतर दिखा सकते हैं। अन्य आंकड़ों के लिए, हम संभवतः यह मान सकते हैं कि प्रति पैकेट कम से कम एक कनेक्शन / पैकेट स्ट्रीम प्रति कोर अधिकतम संभव Mpps आंकड़े प्राप्त करने के लिए एक उच्च-कल्पना मशीन पर इस्तेमाल किया जा रहा था।


संपादित करें मैं अभी लिनक्स पर उच्च प्रदर्शन पैकेट प्रसंस्करण पर एक इंटेल दस्तावेज़ पर ठोकर खाई है , और उसके अनुसार, (लिनक्स)

मंच प्रति सेकंड लगभग 2M लेनदेन की लेनदेन दर को बनाए रख सकता है

मानक लिनक्स नेटवर्किंग स्टैक का उपयोग करना (2x8 कोर के साथ भौतिक होस्ट पर)। इस अनुरोध / उत्तर परीक्षण में एक लेनदेन दोनों शामिल हैं

  1. एक यूडीपी पैकेट का स्वागत
  2. बाद में उस पैकेट को अग्रेषित करना

(netperf के नेटसेवर का उपयोग करके)। परीक्षण समानांतर में 100 लेनदेन चला रहा था। रुचि रखने वालों के लिए पेपर में कई और विवरण हैं। काश हमारे पास विंडोज की तुलना के लिए ऐसा कुछ होता ... वैसे भी, यहाँ उस अनुरोध / उत्तर परीक्षण के लिए सबसे अधिक प्रासंगिक चार्ट है:

यहाँ छवि विवरण दर्ज करें


2

tl; डॉ

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

NB यह एक उत्तर नहीं है जिसे मैं स्वीकार करना चाहता हूं। यह इस सवाल के जवाब में किसी को भी दिलचस्पी देने का इरादा है कि हम कहां खड़े हैं और आगे की जांच कहां करें।


लेन होल्गेट, जिन्हें Google के अनुसार केवल वही लगता है जिसने विंडोज नेटवर्किंग से अधिक प्रदर्शन प्राप्त करने के लिए RIO का परीक्षण किया है (और परिणाम प्रकाशित किया है), बस अपने ब्लॉग पर एक टिप्पणी में स्पष्ट किया कि वह एक एकल IP / पोर्ट कॉम्बो का उपयोग कर रहा था UDP पैकेट भेजने के लिए।

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

मैं पुराने और नए एपीआई के बीच सापेक्ष प्रदर्शन की तुलना करने के लिए अधिकतम प्रदर्शन प्राप्त करने की कोशिश नहीं कर रहा था और इसलिए मैं अपने परीक्षण में पूरी तरह से नहीं था।

लेकिन "कठिन परिश्रम" के अलावा और अधिक कठिन RIO दुनिया के लिए मानक IOCP के सापेक्ष (रिश्तेदार) आराम क्षेत्र को क्या दे रहा है? कम से कम जहां तक ​​एक एकल यूडीपी पैकेट स्ट्रीम का संबंध है।

मुझे लगता है कि उनका क्या मतलब है - जैसा कि उन्होंने RIO के कई परीक्षणों में विभिन्न डिजाइन दृष्टिकोणों की कोशिश की - यह है कि उन्होंने प्रदर्शन के अंतिम बिट को निचोड़ने के लिए ठीक-ठाक एनआईसी सेटिंग्स को पसंद नहीं किया। जो, उदाहरण के लिए, प्राप्त बफर आकार के मामले में संभावित रूप से यूडीपी प्राप्त प्रदर्शन और पैकेट हानि के आंकड़ों पर एक बड़ा सकारात्मक प्रभाव पड़ सकता है।

हालाँकि समस्या यह है कि अन्य लिनक्स / यूनिक्स / बीएसडी परीक्षणों के साथ अपने परिणामों की सीधे तुलना करने की कोशिश की जा रही है: अधिकांश परीक्षण, "पैकेट प्रति सेकंड" सीमा को धक्का देने की कोशिश करते समय, सबसे छोटे संभव पैकेट / फ्रेम आकार, अर्थात एक ईथरनेट का उपयोग करें 64 बाइट्स का फ्रेम। लेन ने 1024 बाइट पैकेट (-> 1070 बाइट फ्रेम) का परीक्षण किया, जो (विशेष रूप से नो-नागल यूडीपी के लिए) आपको "प्रति सेकंड" बिट्स के उच्चतर अंक प्राप्त कर सकता है, लेकिन छोटे पैकेटों की तुलना में जहाँ तक हो सके pps सीमा को धक्का नहीं दे सकता है। । इसलिए इन आंकड़ों की तुलना करना उचित नहीं होगा।

Windows UDP में मेरी खोज के परिणामों को सारांशित करने से अब तक का प्रदर्शन प्राप्त होता है:

  • अल्ट्रा लो लेटेंसी और / या हाई थ्रूपुट एप्लिकेशन को डिवेलप करने की कोशिश करते समय कोई भी वास्तव में विंडोज का उपयोग नहीं करता है, इन दिनों वे लिनक्स का उपयोग कर रहे हैं
  • व्यावहारिक रूप से सभी प्रदर्शन परीक्षण और वास्तविक परिणाम (यानी केवल उत्पाद विज्ञापन नहीं) के साथ रिपोर्ट इन दिनों लिनक्स या बीएसडी पर हैं (एक अग्रणी होने और हमें कम से कम एक संदर्भ देने के लिए धन्यवाद!)
  • क्या लिनक्स पर UDP (मानक सॉकेट) लिनक्स की तुलना में अधिक तेज / धीमा है? मैं अभी तक नहीं बता सकता, मुझे अपना परीक्षण करना होगा
  • उच्च-प्रदर्शन UDP (RIO बनाम नेटमैप) लिनक्स पर विंडोज की तुलना में तेज / धीमा है? लिनक्स आसानी से 900MHz पर सिंगल कोर के साथ पूर्ण 10Gb लाइन की गति को संभालता है, विंडोज, प्रकाशित सबसे अच्छे मामले में 1024 के बड़े यूडीपी पैकेट आकार के लिए 43% या 492kpps तक जाने में सक्षम है, यानी छोटे आकार के लिए bps के आंकड़े संभवतः काफी होंगे हालांकि, पीपीएस आंकड़े संभवतः बढ़ेंगे (जब तक कि बाधा से निपटने या कुछ अन्य कर्नेल स्थान ओवरहेड सीमित कारक नहीं होता)।

जैसे वे क्यों लिनक्स का उपयोग करते हैं, ऐसा इसलिए होना चाहिए क्योंकि विकासशील समाधान जिसमें नेटमैप या आरआईओ जैसे कर्नेल परिवर्तन शामिल होते हैं - प्रदर्शन को सीमाओं तक पहुंचाने के लिए आवश्यक है - विंडोज जैसी बंद प्रणाली के साथ असंभव है, जब तक कि आपकी तनख्वाह रेडमंड से बाहर आने के लिए न हो। या आपके पास Microsoft के साथ कुछ विशेष अनुबंध हैं। यही वजह है कि RIO एक MS उत्पाद है।

अंत में, बस कुछ चरम उदाहरण देने के लिए जो मैंने खोजा था और लिनक्स भूमि पर चल रहा है:

पहले से ही 15 साल पहले, कुछ 1 गीगा एनआईसी पर 800 मेगाहर्ट्ज पेंटियम III सीपीयू, 133 मेगाहर्ट्ज फ्रंट-साइड बस का उपयोग करके 680kpp प्राप्त कर रहे थे । संपादित करें : वे क्लिक का उपयोग कर रहे थे , एक कर्नेल-मोड राउटर जो मानक नेटवर्क स्टैक के बहुत से बायपास करता है, अर्थात वे "धोखा" देते हैं।

2013 में, आर्गन डिज़ाइन प्राप्त करने में कामयाब रहा

ट्रेड्स लेटेंसी को कम से कम 35ns [नैनो सेकंड] तक टिकें

Btw वे भी दावा करते हैं कि

ट्रेडिंग के लिए मौजूदा कंप्यूटिंग कोड का विशाल बहुमत आज x86 प्रोसेसर आर्किटेक्चर पर लिनक्स के लिए लिखा गया है।

और आर्गन एरिस्टा 7124FX स्विच का उपयोग करते हैं , कि (एक FPGA के अलावा) में एक ओएस है

एक मानक लिनक्स कर्नेल के शीर्ष पर बनाया गया है।


0

आपको निश्चित रूप से विभिन्न कॉन्फ़िगरेशन और परिदृश्यों को "मापने" की आवश्यकता होगी। यह AFAIK 2 कंपनियों द्वारा प्रदान किए गए दो गियर के साथ किया जा सकता है। IXIA और स्पाइरेंट । वे हार्डवेयर आधारित ट्रैफ़िक जेनरेटर्स को लाइन गति से ट्रैफ़िक पंप करने में सक्षम बनाते हैं। वे रैंप टेस्ट की पेशकश करते हैं जहां आप उस गति का पता लगा सकते हैं जिस पर आपका विशेष सिस्टम गिर सकता है। उपकरण महंगे हैं लेकिन आप उन्हें किराए पर ले सकते हैं।

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