無法讓 Mellanox ConnectX-3 與收發器/電纜一起使用
我正在嘗試將我的本地網路設置升級到 40G,但我似乎遇到了障礙。我有從ebay上下來的 Mellanox ConnectX-3 VPI CX353A 網卡,更新了他們的韌體並安裝了他們的驅動程序。在切換收發器/電纜併購買重新編碼電纜的工具後,我仍然無法找到問題。我相信問題在於驅動程序,他們看到收發器已連接但似乎不願意使用它。
我的硬體:
MLNX OFED 驅動程序版本:4.9-3.1.5
網線/收發器:
https://www.fs.com/products/30775.html
https://www.fs.com/products/69907.html
定制與我的 MikroTik CRS354-48G-4S+2Q+RM 開關一起使用。我可以更改電纜應使用的供應商,我有 FS 電纜的重新編碼工具。
我發現的各種 InfiniBand 命令的輸出:https ://pastebin.com/8ZWb7wjb
ethtool -m 的輸出
root@testserver:/home/test# ethtool -m enp1s0 Identifier : 0x0d (QSFP+) Extended identifier : 0x00 Extended identifier description : 1.5W max. Power consumption Extended identifier description : No CDR in TX, No CDR in RX Extended identifier description : High Power Class (> 3.5 W) not enabled Connector : 0x23 (No separable connector) Transceiver codes : 0x08 0x00 0x30 0x00 0x40 0x00 0x80 0xd5 Transceiver type : 40G Ethernet: 40G Base-CR4 Transceiver type : SAS 6.0G Transceiver type : SAS 3.0G Transceiver type : FC: short distance (S) Transceiver type : FC: Twin Axial Pair (TW) Transceiver type : FC: 1200 MBytes/sec Transceiver type : FC: 800 MBytes/sec Transceiver type : FC: 400 MBytes/sec Transceiver type : FC: 200 MBytes/sec Transceiver type : FC: 100 MBytes/sec Encoding : 0x00 (unspecified) BR, Nominal : 10300Mbps Rate identifier : 0x00 Length (SMF,km) : 0km Length (OM3 50um) : 0m Length (OM2 50um) : 0m Length (OM1 62.5um) : 0m Length (Copper or Active cable) : 1m Transmitter technology : 0xa0 (Copper cable unequalized) Attenuation at 2.5GHz : 8db Attenuation at 5.0GHz : 11db Attenuation at 7.0GHz : 0db Attenuation at 12.9GHz : 0db Vendor name : FS Vendor OUI : 00:40:20 Vendor PN : QSFP-PC01 Vendor rev : A Vendor SN : MT1422VS08180 Date code : 190228 Revision Compliance : Revision not specified Module temperature : 0.00 degrees C / 32.00 degrees F Module voltage : 0.0000 V
ethtool 的輸出:
root@testserver:/home/test# ethtool enp1s0 Settings for enp1s0: Supported ports: [ FIBRE ] Supported link modes: 1000baseKX/Full 10000baseKX4/Full 10000baseKR/Full 40000baseCR4/Full 40000baseSR4/Full 56000baseCR4/Full 56000baseSR4/Full Supported pause frame use: Symmetric Receive-only Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 1000baseKX/Full 10000baseKX4/Full 10000baseKR/Full 40000baseCR4/Full 40000baseSR4/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: Unknown! Duplex: Unknown! (255) Port: FIBRE PHYAD: 0 Transceiver: internal Auto-negotiation: off Supports Wake-on: d Wake-on: d Current message level: 0x00000014 (20) link ifdown Link detected: no
TL;DR自動協商在我的交換機上關閉,並且具有製造商推薦的 40G 連接設置。打開自動協商解決了這個問題。
我想用我在設置 40 Gb 網路的過程中的冒險細節來回答我的問題。這樣,將來嘗試此操作的其他任何人都有一些參考點。
我認為重要的是要注意我在乙太網模式下使用了我的 40G NIC,而不是 Infiniband。乙太網驅動程序似乎確實有效,但我結束了 OFED 驅動程序,因為它有效,我不想再弄亂它了。如果您打算進行這樣的設置,請確保您的卡能夠支持乙太網模式!
我試過的
拿到交換機、NIC 和電纜後,我安裝了 Mellanox/Nvidia 提供的 OFED(OpenFabrics Enterprise Distribution)驅動程序/軟體。一旦那些未能建立連結,我就使用軟體內置的工具來更新他們的韌體。這很簡單,我唯一遇到的問題是為我的特定卡找到最新的韌體 .bin 文件。我使用的韌體是 2.33.5000,仍然很舊,但比卡上的要新。
在那次失敗之後,我認為電纜/收發器(一個單元)是罪魁禍首。我將最初獲得的電纜換成了一對(56G 10m AOC + 56G 2m DAC > 40G 11m AOC + 40G 1m DAC)定制電纜,這些電纜是為我購買的特定 Mikrotik 開關設計的。由於這些都是定制的,所以他們花了一個月的時間才到貨。一旦這些到達並且不起作用,我就被難住了,並繼續在各種論壇上尋求幫助。不久之後,有人建議我從 FS.com購買一個工具,該工具允許我在收發器上重新編碼供應商,以希望誘使 NIC 正常工作。
由於電纜是為交換機定制的,我認為是 NIC 不配合。將收發器設置為 IBM 或 Mellanox 均無效。在尋求進一步幫助後,一些人建議我找到有關 NIC 的文件並找到兼容的電纜/收發器。我確實找到了一個 PDF(雖然不是由 IBM/Mellanox 提供或製作),其中列出了 FS.com 提供的一些兼容元件號。所以我從 FS.com 購買了IBM 49Y7890 1m DAC。
一旦它到達,我發現這也不是解決方案。出於絕望,我發現一些人已經刷卡到真正的 Mellanox 韌體。我決定嘗試一下。在對更新程序進行一些故障排除後,我成功刷新了韌體版本 2.42.5000,新 PSID 為 MT_1100120019(有關這如何搞砸的詳細資訊,請參見第 4 段“這不是結束”。請參閱此處了解如何穿越閃光)。在此嘗試失敗後,對該問題進行了進一步的討論並最終得出結論,我應該測試直接連接到彼此的 NIC。一旦我將 NIC 連接在一起並設置了它們的子網,我使用幾個 iperf 測試看到了 36.5GBit/s 的速度(因為 iperf 和 iperf3 是單執行緒的,你需要為這些速度設置多個。我每組設置 16 個以使用10 個執行緒)。一旦我從罪魁禍首列表中消除了 NIC,我開始懷疑交換機上的自動協商設置是否會成為問題。重新打開它,我立即看到“連結正常”。
這還沒有結束
我已經讓設置正常工作,結果證明沒有兼容性問題,我可能永遠不需要更換電纜或購買 IBM 電纜。我欣喜若狂,但這還遠沒有結束。我曾打算在我的伺服器上使用 Proxmox 執行此設置,並將 Windows 作為客戶端電腦。這兩個系統都將配備 40G。
因為我知道我會多次搞砸 Proxmox 安裝,所以我首先將所有內容備份到另一個驅動器。完成後,我開始在 Proxmox 上安裝 Mellanox OFED 驅動程序。嘗試這個有幾個問題,OFED 驅動程序試圖從 Proxmox 中刪除非常關鍵的包,因為它們“干擾”驅動程序(它們不會)。所以我編輯了 mlnxofedinstaller 腳本並註釋掉了對“remove_old_packages”函式的所有呼叫。這阻止了安裝程序對 Proxmox 進行腦葉切除術。
在這一點上,大多數事情都奏效了,我遇到的唯一問題是將數據發送到伺服器。它每秒接受的數據不超過幾兆字節,遠遠低於我應該得到的數據。我嘗試了許多不同版本的軟體,嘗試了 Ubuntu 20.04、19.XX 沒有工作,因為 Proxmox 沒有依賴項,但這兩個安裝有。我被迫安裝 Ubuntu 18.04 驅動程序,因為這些是沒有依賴性問題的最新驅動程序。安裝驅動程序通常不能解決速度問題。所以我嘗試只使用安裝核心包
--kernel-only
安裝程序上的標誌。在某些時候,我已經達到了我想要的速度,但這是僥倖,因為我後來無法複製它們。我決定嘗試一些 Debian 10 驅動程序的變體,以 20MB/s 的速度獲得稍微好一點的速度。一段時間後,我從別人那裡得到了一些想法,我嘗試將 40G 網路設置為 9000 MTU。這導致了一些非常奇怪的結果。即使整個設置的 MTU 為 9000,速度也只有 1 Gb。我將其切換回 1500 以在 Ubuntu 而不是 Proxmox 上進行進一步測試,因為我在 Ubuntu 上的速度很好。這沒有通過,我最初執行的速度測試一定是僥倖。我決定交換系統中的 NIC,將它們取出後將它們標記為 1 和 2,這樣我就不會混淆它們。在執行了更多的速度測試後,事實證明 Proxmox 系統中的卡是問題所在。我能夠全速發送,但無法全速接收。我回想起了更新該 NIC 上韌體的驅動程序,並沒有考慮太多,因為我使用的是最新版本。所以我重新刷了我原來安裝的cross flashed版本。經過進一步測試,我們得出結論,22GBit/s 上行和 11GBit/s 下行的有限速度是系統之間各種瓶頸的結果。專門在具有 30 GB 文件的 RAM 磁碟上進行測試,我們得出結論,裝有兩倍 DIMM 的伺服器能夠以兩倍的速度寫入。由於兼容層是單執行緒的,嘗試在測試系統上使用 NVMe 和 NTFS 文件系統效果不佳。在執行了十幾個 iperf 測試後,一切執行順利,即使伺服器執行 Proxmox。
使用 OFED 驅動程序時需要注意,您將無法連接到 CIFS 網路共享。OFED 驅動程序解除安裝此模組,直到驅動程序不再執行。乙太網驅動程序可以工作,但可能需要跨快閃記憶體到 mellanox 韌體。
前面的路線
由於我的預算約為 $ 1,500, I had to go with some of the cheapest equipment I could find. Hence the $ 60個網卡。當我發現這款售價 500 美元的新 Mikrotik 開關時,我被激怒了。它以我能找到的最優惠的價格提供了我所需要的一切,甚至擊敗了一些二手設備。它沒有埠許可,並附帶頂級軟體許可之一。這真的是一個很難擊敗的交易。當然,一切都伴隨著妥協。
儘管我真的不打算使用 10G SFP+ 埠,但我希望它們用於未來的擴展。我得到了一個 SFP+ 到 RJ45 適配器和一個 10G NIC,所以我在 40G 設備發貨時有一些東西要測試。我能夠在 10G NIC 上總共接收每秒 2 Gb 的數據。這是我可以在我的 1 Gb 網際網路連接和配備 1 Gb 的伺服器之間提供的所有數據。但是嘗試從 10G 卡向網際網路執行千兆上傳會導致速度比我預期的要低得多。儘管能夠達到 900Mbps 的速度相當可靠,但我只能達到 300Mbps 左右。我繼續四處詢問,結論是交換機沒有緩衝區大小以將 10G 降至 1G。通過將我的路由器的 1G 上行鏈路切換到 10G 埠並嘗試從 40G 系統以千兆位上傳(僅下降 4 倍,而不是 10 倍)將速度降低到 ~1mbps,這一理論得到了進一步發展。這表明 48 個 1G 埠具有共享緩衝區。
這對我的 Windows 機器來說並不是真正的問題,因為我從來沒有以這種速度上傳。但是對於我的伺服器來說,這是一個相當大的問題。將上傳頻寬削減到三分之一可能最終成為一個真正的問題。在探勘了一些之後,我發現我可以使用路由指標來強制流量通過 40G NIC 或 1G NIC,具體取決於它的去向。雖然這個解決方案不是 100% 完美,但它仍然執行良好。
使用
route -n
命令我可以看到我目前的路線路徑。目標是修改路由,以便本地連接首選 40G,網際網路連接首選 1G。路由上的度量越高,使用成本越高,因此系統將使用成本最低的路由。Proxmox 預設帶有 ifupdown,它更穩定並且具有更多功能。Netplan 可以添加路由,但不能刪除或修改它們。它也不允許您在界面啟動之前、之時或之後執行命令。您可以使用 netplan,但您需要設置單獨的服務來刪除/修改其他路由。
這是我目前的
/etc/network/interfaces
配置,我必須將 post-up 命令添加到我的 NIC 以添加路由;auto ens18 # 1 Gigabit NIC iface ens18 inet static ... post-up /usr/sbin/route add -net 192.168.0.0/24 metric 1000 ens18 auto ens19 # 40 Gigabit NIC iface ens19 inet static ... post-up /usr/sbin/route add -net 0.0.0.0/0 gw 192.168.0.1 metric 1000 ens19 post-up /usr/sbin/route add -net 192.168.0.0/24 metric 1 ens19 post-up /usr/sbin/route del -net 192.168.0.0/24 metric 0 ens19
你的路線應該是這樣的;
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 1 0 0 ens18 0.0.0.0 192.168.0.1 0.0.0.0 UG 1000 0 0 ens19 192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 ens19 192.168.0.0 0.0.0.0 255.255.255.0 U 1000 0 0 ens18
顯然,這些介面需要在不同的本地 IP 上,我建議將 IP 設置為 40G NIC 用於任何本地。如果需要埠轉發,請使用千兆網卡。只要您一次發送的數據不超過 100MB,就可以在本地使用千兆網卡。如果您將 40 Gb/s 的本地數據發送到綁定到千兆埠的 IP,則此路由可以工作,但它並不總是一致的。
請務必注意,如果您正在修改路線,則應在刪除舊版本之前添加修改後的版本。同樣重要的是要注意,您的設置可能不需要與我上面發布的完全相同。例如,我的 Proxmox 安裝已經為 ens18 添加了一條路由,所以我需要在添加我想要的路由後刪除它。
就是這樣!我終於以我想要的速度完成了我的設置。我能夠以大約 1.7GB/s 和大約 1GB/s 的速度傳輸到我的伺服器(限制是 NTFS 或 SSD 之一)。