Aktualizacja firmware ConnectX za pomocą mstflint

Dzisiaj miałem okazję zaktualizować oprogramowanie układowe (firmware) karty Mellanox ConnectX-3. Pomyślałem, że przybliżę ten proces (powinien sprawdzić się także dla poprzednich modeli kart serii ConnectX).

 

Urządzenie na PCIe ConnectX-3 to produkcji Mellanox (obecnie należącego do nVidia) karta sieciowa wyposażone w interfejs (lub dwa) SFP+ o wydajności sieciowej 10Gb/s.

W interfejs wkładamy wkładki, które posiadają odpowiednie gniazdo dostosowane do sieci lokalnej – optyczne (np. LC), miedziane (np. RJ45), oraz z zamontowanym na stałe przewodem (miedzianym) – tzw. przewody DAC. Aby zaktualizować firmware trzeba przygotować oprogramowanie mstflint (https://github.com/Mellanox/mstflint/) oraz zainstalować kilka bibliotek w systemie. Aktualizację przeprowadziłem w systemie operacyjnym RedHat Enteprise Linux 8.4 (co gwarantuje, iż identyczne kroki zadziałają w RockyLinux 8 czy CentOS 8). Wszystkie kroki musimy wykonywać z uprawnieniami użytkownika root.
Przygotowanie systemu:

# instalacja narzędzi do kompilacji
dnf group install "Development Tools" -y
# instalacja potrzebnych bibliotek
dnf install openssl-devel libibmad-devel zlib-devel wget unzip pciutils -y

Kolejnym krokiem jest pobranie źródeł i kompilacja programu mstflint – jest to pakiet, który pozwala na komunikację z kartą sieciową ConnectX i zarządzanie jej oprogramowaniem układowym.
Instalacja mstflint:

# przejście do folderu /tmp/ aby nie robić nieporządku w systemie
cd /tmp
# pobieranie aktualnych źródeł mstflint
wget https://github.com/Mellanox/mstflint/archive/refs/heads/master.zip
# wypakowanie i uruchomienie skryptu przygotowawczego
unzip master.zip
cd mstflint-master/
./autogen.sh
# konfiguracja, kompilacja i instalacja w systemie
./configure
make
make install

Teraz musimy ustalić adres naszej karty sieciowej. Wystarczy skorzystać z komendy "lspci", która wyświetli listę urządzeń. Liczba po lewej to adres, którego użyjemy do komunikacji z kartą (jak na obrazku niżej):

Warto sprawdzić, czy mstflint działa, aby to zrobić zapytamy o informacje na temat obecnej wersji firmware, którego używa karta komendą (wpisz po -d adres, który wyświetlił u Ciebie lspci):

mstflint -d 01:00.0 q full

Wynik powinien przypominać coś takiego:

# mstflint -d 01:00.0 q
Image type: FS2
FW Version: 2.33.5220
FW Release Date: 29.3.2015
MIC Version: 1.5.0
Config Sectors: 1
Product Version: 02.33.52.20
Rom Info: type=PXE version=3.4.467
Device ID: 4099
Description: Node Port1 Port2 Sys image
GUIDs: ffffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffff
MACs: f4521427b0c0 f4521427b0c1
VSD:
PSID: MT_1170110023

Jak widać, komunikacja się powiodła i mamy możliwość aktualizacji firmware. Należy zacząć od pobrania wersji dopasowanej do naszej karty sieciowej ze strony producenta – tj. https://www.mellanox.com/support/firmware/firmware-downloads.

Po lewej szukamy modelu, który mamy (np. ConnectX-3) a po prawej wybieramy rodzaj urządzenia (Ethernet w wypadku karty sieciowej). Patrząc na dostępne wersje widać, że istnieje możliwość wgrania nowszej. Trzeba jednak wybrać (z tabelki OPN) wersję urządzenia. Możemy ją poznać znowu korzystając z narzędzia lspci za pomocą komendy (wpisz po -s adres, który wyświetlił u Ciebie lspci):

lspci -vv -s 01:00.0 | grep "Part number" -A 3

Wynik (pokazany poniżej) wskazuje wersję urządzenia, którą posiadamy, i to ją należy wskazać w kolumnie OPN na stronie z firmware.

[PN] Part number: MCX311A-XCAT
[EC] Engineering changes: A6
[SN] Serial number: MT1402X13666
[V0] Vendor specific: PCIe Gen3 x4

W kolejnej kolumnie "PSID" wybieramy numer zgodny z tym, który pokazał nam msflint z argumentem g full (zaznaczony wyżej na niebiesko). Po prawej w kolumeni "Download/Documentation" pojawi się odnośnik do stosownego archiwum zawierającego firmware dla urządzenia. Pobieramy go, rozpakowujemy i programujemy naszą kartę:

# pobranie pliku
wget http://www.mellanox.com/downloads/firmware/plik.zip
# wypakowanie (wypakowany plik ma rozszerzenie .bin)
unzip plik.zip
# programowanie, trzeba potwierdzić że chcemy to zrobić klikając w "y"
mstflint -d 01:00.0 -i plik.bin burn

Current FW version on flash: 2.33.5220 (obecna wersja firmware)
New FW version: 2.42.5000 (wersja do wgrania)

Burn process will not be failsafe. No checks will be performed.
ALL flash, including the Invariant Sector will be overwritten.
If this process fails, computer may remain in an inoperable state.
Do you want to continue ? (y/n) [n] : y

Burning FS2 FW image without signatures - OK
Restoring signature - OK

Po tej operacji wystarczy zrestartować komputer i gotowe! Możemy cieszyć się poprawkami oprogramowania karty sieciowej.