ฉันมีเซิร์ฟเวอร์ 10 เครื่องที่มี CPU สองตัวแต่ละตัวและ Mellanox 100G Infiniband NIC หนึ่งตัวต่อ CPU NIC แต่ละตัวเชื่อมต่อกับสวิตช์ Mellanox 36 พอร์ต 100G IB หนึ่งตัว
แอปพลิเคชัน RDMA ของฉันทำงานเป็นหนึ่งกระบวนการต่อโหนด NUMA และเชื่อมโยงกับ NIC ในเครื่องเพื่อหลีกเลี่ยงทราฟฟิกข้าม CPU แต่ละโหนด/กระบวนการจำเป็นต้องเชื่อมต่อกับโหนดอื่นๆ ทุกโหนดโดยใช้โหมด RC
ปัญหาที่ฉันพบคือ ดูเหมือนว่าการกำหนดเส้นทางเริ่มต้นของ OpenSM บังคับให้ฉันใช้ NIC บางอย่างเพื่อเข้าถึงโหนดเป้าหมาย ดังนั้นฉันจะต้องใช้ NIC ทั้งสองจากโหนด NUMA ทั้งสองเพื่อเข้าถึงโหนดอื่นทั้งหมด นั่นหมายความว่าฉันต้องการ PD สองตัวด้วย โดยต้องลงทะเบียนหน่วยความจำทั้งหมดสองครั้ง
มีวิธีใดบ้างที่จะอนุญาตให้ NIC เดียวสามารถเชื่อมต่อกับ NIC/พอร์ตอื่นๆ บนเครือข่ายได้
โดยพื้นฐานแล้วฉันต้องการให้ OpenSM คิดว่าแต่ละ NIC อยู่บนเซิร์ฟเวอร์ของตัวเอง เช่น แสร้งทำเป็นว่าไม่สามารถรับส่งข้อมูล QPI ได้
ดู: https://docs.mellanox.com/display/MLNXOFEDv461000/OpenSM
เมื่อมีเมทริกซ์ MinHop แล้ว สวิตช์แต่ละตัวจะถูกเยี่ยมชมและสำหรับแต่ละ LID เป้าหมาย จะมีการตัดสินใจว่าควรใช้พอร์ตใดเพื่อไปยัง LID นั้น
รหัสที่เกี่ยวข้อง: https://github.com/linux-rdma/opensm/blob/844ab3b7edaad983449b5d3a4a773088b8daa299/opensm/osm_ucast_mgr.c#L201