Networking

無法讓 Mellanox ConnectX-3 與收發器/電纜一起使用

  • July 5, 2021

我正在嘗試將我的本地網路設置升級到 40G,但我似乎遇到了障礙。我有從ebay上下來的 Mellanox ConnectX-3 VPI CX353A 網卡,更新了他們的韌體並安裝了他們的驅動程序。在切換收發器/電纜併購買重新編碼電纜的工具後,我仍然無法找到問題。我相信問題在於驅動程序,他們看到收發器已連接但似乎不願意使用它。

我的硬體:

https://pastebin.com/ucdYv1rb

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 之一)。

引用自:https://serverfault.com/questions/1067766