CodingBox दस्तावेज़

IB प्रोटोकॉल और ट्रांसपोर्ट: लेयर, QP, RDMA, सबनेट मैनेजर

InfiniBand को शुरू से ही एक ऐसी फ़ैब्रिक के तौर पर डिज़ाइन किया गया था जिसमें कंप्यूटर एक-दूसरे की मेमोरी से बात करते हैं, न कि अजनबियों के बीच पैकेट भेजने के लिए। इसकी लेयर, एड्रेसिंग और मैनेजमेंट Ethernet इंजीनियर को अपरिचित लगती हैं, लेकिन शब्दावली समझ आते ही ये सीधी हो जाती हैं — और यही बताती हैं कि फ़िज़िकल लेयर को इतने सख़्त मानकों पर क्यों रखा जाता है। यह पेज प्रोटोकॉल का नज़रिया है; ऑप्टिक्स InfiniBand ऑप्टिक्स में हैं।

लेयर

लेयरकंटेंटनोट
फ़िज़िकललेन (1x, 4x, 8x, 12x), प्रति-लेन सिग्नलिंग (NRZ से लेकर HDR के PAM4 तक… देखें स्पीड), एन्कोडिंग (QDR तक 8B/10B, FDR से 64B/66B), FEC (FDR से ऑप्शनल, HDR/NDR पर RS-FEC)ट्रांसीवर की दुनिया
लिंकLID के साथ लोकल राउटिंग हेडर (LRH), वर्चुअल लेन (VL0–VL14 डेटा, VL15 मैनेजमेंट), प्रति-VL क्रेडिट-आधारित फ़्लो कंट्रोल, लिंक-लेयर CRC (ICRC/VCRC)डिज़ाइन से ही लॉसलेस
नेटवर्कमल्टी-सबनेट राउटिंग के लिए 128-बिट GID के साथ ग्लोबल राउटिंग हेडर (GRH)एक क्लस्टर के भीतर कम ही इस्तेमाल होता है
ट्रांसपोर्टसेंड/रिसीव क्यू वाले क्यू पेयर (QP), सर्विस टाइप RC/UC/UD/XRC, MTU तक सेगमेंटेशन, रिलायबल सर्विस के लिए ACK/NAKयहीं RDMA काम करता है
अपरverbs API, MPI, NCCL (UCX/SHARP के ज़रिए), स्टोरेज (SRP, iSER, NVMe/IB), IPoIBजो एप्लिकेशन इस्तेमाल करते हैं

एड्रेसिंग और पहचान

आइडेंटिफ़ायरसाइज़असाइन करने वालाअर्थ
GUID64-बिटनिर्मातापोर्ट, नोड या सिस्टम की स्थायी पहचान (MAC जैसी)
LID (लोकल आइडेंटिफ़ायर)16-बिटसबनेट मैनेजरसबनेट के भीतर एड्रेस; फ़ॉरवर्डिंग टेबल LID इस्तेमाल करती हैं
GID128-बिटSM (प्रीफ़िक्स) + GUIDसबनेट प्रीफ़िक्स + GUID; सबनेट के बीच और RoCE में इस्तेमाल होता है
PKey (पार्टिशन कुंजी)16-बिटSMपार्टिशन में सदस्यता (VLAN जैसी); फ़ुल/लिमिटेड सदस्य
QPN24-बिटHCAक्यू पेयर नंबर — पोर्ट के भीतर एंडपॉइंट

क्यू पेयर और ट्रांसपोर्ट सर्विस

एक क्यू पेयर HCA में एक सेंड क्यू और एक रिसीव क्यू होता है, जिसका मालिक कोई एप्लिकेशन होता है। इसमें पोस्ट की गई वर्क रिक्वेस्ट हार्डवेयर एक्ज़िक्यूट करता है; कम्प्लीशन एक कम्प्लीशन क्यू में पहुँचते हैं। सर्विस टाइप:

टाइपरिलायबलकनेक्टेडइस्तेमाल
RC — विश्वसनीय, कनेक्शन-आधारितहाँ (ACK/NAK, रीट्रांसमिट)हाँ, प्रति पीयर एक QPज़्यादातर RDMA ट्रैफ़िक; MPI, NCCL, स्टोरेज
UC — अविश्वसनीय, कनेक्शन-आधारितनहींहाँकम ही इस्तेमाल होता है
UD — अविश्वसनीय डेटाग्रामनहींनहीं, सभी पीयर के लिए एक QPमैनेजमेंट, IPoIB, मल्टीकास्ट
XRC — विस्तारित विश्वसनीय, कनेक्शन-आधारितहाँप्रोसेस के बीच साझा रिसीव क्यूQP की संख्या घटाने के लिए बड़ी MPI जॉब में
RD — विश्वसनीय डेटाग्रामहाँनहींव्यावहारिक रूप से इस्तेमाल नहीं होता

RDMA ऑपरेशन (READ, WRITE, एटॉमिक) दो होस्ट पर मौजूद एप्लिकेशन बफ़र के बीच डेटा सीधे मूव करते हैं, बिना किसी CPU के उसे कॉपी किए; SEND/RECEIVE मैसेज ले जाता है। HCA के छूने से पहले मेमोरी को रजिस्टर किया जाना ज़रूरी है (पिन की गई और उसे एक कुंजी दी गई)। GPUDirect RDMA इसे GPU मेमोरी तक बढ़ा देता है (GPU फ़ैब्रिक)।

फ़्लो कंट्रोल और MTU

हर लिंक प्रति वर्चुअल लेन क्रेडिट-आधारित फ़्लो कंट्रोल चलाता है: रिसीवर बफ़र स्पेस विज्ञापित करता है, सेंडर उससे ज़्यादा कभी नहीं भेजता जितना वह अब्ज़ॉर्ब कर सके। कंजेशन की वजह से कोई फ़्रेम ड्रॉप नहीं होता; इसकी जगह बैक-प्रेशर आगे बढ़ता है — यह वही ट्रेड-ऑफ़ है जो Fibre Channel के क्रेडिट में होता है, और यही वजह है कि एक भी धीमा या एररयुक्त लिंक पूरी जॉब को डिग्रेड कर देता है। लिंक MTU 256–4096 बाइट (आमतौर पर 4096) होता है; पाथ MTU एंड टू एंड नेगोशिएट होता है। सर्विस लेवल (SL) ट्रैफ़िक क्लास अलग करने के लिए VL से मैप होते हैं, और एडेप्टिव राउटिंग फ़्लो को कंजेस्टेड लिंक के आसपास से निकाल सकता है।

सबनेट मैनेजर

हर सबनेट पर ठीक एक सबनेट मैनेजर (SM) सक्रिय होता है (बाक़ी स्टैंडबाय पर रहते हैं)। यह:

  1. डायरेक्टेड-रूट मैनेजमेंट पैकेट (VL15/QP0 पर SMP) के साथ फ़ैब्रिक में घूमकर टोपोलॉजी को डिस्कवर करता है — हर स्विच और HCA पोर्ट को।
  2. LID असाइन करता है और पोर्ट कॉन्फ़िगर करता है (स्पीड, विड्थ, MTU, VL आर्बिट्रेशन, PKey)।
  3. रूट कैलकुलेट करता है — min-hop, up-down, fat-tree, dragonfly+, एडेप्टिव राउटिंग — और हर स्विच की लीनियर फ़ॉरवर्डिंग टेबल प्रोग्राम करता है।
  4. समय-समय पर और ट्रैप (पोर्ट up/down) पर स्वीप करता है, फ़ेल्योर के आसपास से री-राउट करते हुए।
  5. सबनेट एडमिनिस्ट्रेटर (SA) चलाता है, जो होस्ट से आने वाली पाथ क्वेरी का जवाब देता है।

OpenSM (ओपन सोर्स) और विक्रेता के फ़ैब्रिक मैनेजर (UFM) इसे लागू करते हैं; फ़ैब्रिक मैनेजर वह जगह भी है जहाँ पोर्ट एरर, लिंक स्पीड/विड्थ नेगोशिएशन के नतीजे और ऑप्टिक्स DDM पूरे फ़्लीट में इकट्ठा होते हैं (लिंक रिलायबिलिटी और मॉनिटरिंग)।

लिंक नेगोशिएशन

लिंक-अप पर दोनों सिरे विड्थ (1x/2x/4x) और स्पीड (प्रति-लेन रेट) को सबसे ऊँचे कॉमन वैल्यू पर नेगोशिएट करते हैं। जो लिंक उम्मीद से 2x पर या एक जनरेशन धीमा आता है, वह Ethernet के “10G पर लिंक, 25G पर नहीं” का InfiniBand जैसा मामला है: एक लेन की फ़ाइबर या लेज़र, कोई मार्जिनल केबल, या मिसमैच्ड ट्रांसीवर जनरेशन (स्पीड और रेट)। फ़ैब्रिक मैनेजर नेगोशिएट की गई स्थिति रिपोर्ट करता है; होस्ट पर इसे ibstat / ibportstate दिखाते हैं।

मैनेजमेंट और डायग्नोस्टिक्स टूल

टूलमक़सद
ibstat, ibstatusलोकल पोर्ट स्टेटस, रेट, विड्थ, LID
ibnetdiscoverटोपोलॉजी डंप
ibdiagnetपूरी फ़ैब्रिक की जाँच: एरर, स्पीड/विड्थ मिसमैच, डुप्लिकेट GUID, केबल जानकारी
perfquery, ibqueryerrorsप्रति-पोर्ट काउंटर: सिंबल एरर, लिंक डाउन, लिंक रिकवरी, पोर्ट rcv एरर, एक्सेसिव बफ़र ओवररन, VL15 ड्रॉप, FEC काउंटर
mlxlink, mlxcablesप्रति-पोर्ट PHY डीटेल और केबल/ट्रांसीवर EEPROM, DDM, FEC हिस्टोग्राम
ibportstateस्पीड/विड्थ फ़ोर्स करना, पोर्ट रीसेट करना

सिंबल एरर और लिंक रिकवरी फ़िज़िकल-लेयर काउंटर हैं — Ethernet के CRC/FEC के समकक्ष, जो Rx पावर और सफ़ाई से जुड़े होते हैं (फ़ैब्रिक)।

एक पैराग्राफ़ में InfiniBand बनाम RoCE

RoCE v2 वही verbs/RDMA ट्रांसपोर्ट UDP/IP/Ethernet पर चलाता है; यह सबनेट मैनेजर की जगह IP राउटिंग और PKey की जगह VLAN इस्तेमाल करता है, और क्रेडिट फ़्लो कंट्रोल की जगह PFC/ECN (DCQCN) लाता है — जिसे लॉसलेस बनाने के लिए सही तरह से कॉन्फ़िगर करना ज़रूरी है (लॉसलेस ईथरनेट, इंटरकनेक्ट)। ट्रांसीवर फ़िज़िकली एक जैसे होते हैं; सिर्फ़ आइडेंटिटी कोडिंग और होस्ट पॉलिसी अलग होती हैं।

CodingBox में

InfiniBand मॉड्यूल किसी भी QSFP/OSFP की तरह पढ़े जाते हैं: पहचान जानकारी (SFF-8636 बाइट 164 या CMIS एप्लिकेशन में InfiniBand रेट बिट सहित), Check transceiver और DDM पर प्रति-लेन DDM और चेकसम। जो पोर्ट अपनी रेटेड स्पीड से कम पर नेगोशिएट करता है, उसके दोनों सिरों का बेंच पर पढ़ना उचित है।


अगर आपको इस सामग्री में कोई अशुद्धि या त्रुटि दिखे, तो संबंधित अंश चुनें और Ctrl+Enter दबाकर