Mellanox ConnectX-4の最新ドライバがWindows 10で認識しなかったのでmlxupでファームウェアを更新したら認識するようになった話

要約: タイトル

背景

無駄に光クロスにしたのもあり、10Gbpsな環境にしようと色々買っている。機器はこんな感じ。

  • ルータ: RTX1300
  • スイッチ: CRS305-1G-4S+IN
  • ケーブル: 10Gtek SFP+ DACケーブル(Amazonで売っている)
  • NIC: Mellanox ConnectX-4 MCX4121A-ACAT (Windows機とNAS用)

Mellanox ConnectX-3が安価でいいんだけど、Windows 11のドライバがないとかで将来がちょっと不安だったので、少し奮発してMellanox ConnectX-4にした。eBayで$72(約1万円)が2個。

さっそくWindows機にMellanox ConnectX-4を取り付けたらWindowsの標準のドライバ(?)でとりあえず動いた。(PCI Express x8で動くけど、手元の環境ではx4だった。)

最新のドライバを入れたほうがよいかなと思い公式サイトに行ってドライバを入れてみた。

https://network.nvidia.com/products/adapter-software/ethernet/windows/winof-2/

ConnectX-4ならWinOF-2 を使えという感じらしい。2つあるうちのLTS版?っぽい3.10.52010-LTSを使ってみることにした。(OS種類が複数出るけど、どれも同じファイルなのでこの辺は適当に)

しかしインストールしてみるとNICが認識しなくなってしまった。デバイスマネージャでみるとダメな感じだった(コード 10?とか出てた)もう1個のドライバも試しても少し違うけど同様に認識されなかった。

とりあえずドライバを削除してネットワークを使えるようにする。

そのあと悩みながらドライバのUser Manualを眺めていたところ、マニュアルにfirmware upgrateなる記述を見て「もしかしてファームウェアを最新にする必要があるのか?」と思い試した。うーん、それなら先に書いてほしいなぁ。

作業

ファームウェア更新用にmlxupというコマンドラインツールが提供されている。

https://network.nvidia.com/support/firmware/mlxup-mft/

コマンドプロンプトを開いて叩くだけ。簡単。

>mlxup.exe
Querying Mellanox devices firmware ...

Device #1:
----------

  Device Type:      ConnectX4LX
  Part Number:      MCX4121A-ACA_Ax
  Description:      ConnectX-4 Lx EN network interface card; 25GbE dual-port SFP28; PCIe3.0 x8; ROHS R6
  PSID:             MT_2420110034
  PCI Device Name:  mt4117_pciconf0
  Base MAC:         ec0d9a84c71e
  Versions:         Current        Available
     FW             14.18.1204     14.32.1010
     PXE            3.5.0109       3.6.0502
     UEFI           N/A            14.25.0017

  Status:           Update required

---------
Found 1 device(s) requiring firmware update...

Perform FW update? [y/N]:

という感じに動く。上記の通りファームウェアが若干古いようだった。

更新するか聞かれているので、yを押して更新する。この更新は10分ぐらいかかるので我慢して待ちましょう。

Perform FW update? [y/N]: y

Device #1: Updating FW ...
Done

Restart needed for updates to take effect.
Log File: C:\Users\xxxx\AppData\Local\Temp\mlxup-20230720_022715_4936.log

ファームウェア更新後、再度ドライバを入れなおして再起動したら動いた。よかったよかった。

計測環境が整ってないのでどれぐらい改善されたかはわからないけどね・・・

メモ

  • WindowsPCI Express接続時のレーン数を確認するには、デバイスマネージャからデバイスを開き、詳細タブ→プロパティ「PCIの現在のリンク幅」から確認できる(16進数なのでx16の場合10)
  • 同様にデバイスがサポートしているレーン数も プロパティ「PCIの最大のリンク幅」から確認できる
  • 今回はx8ではなくx4で認識されていたけど、動作には問題なかった(最初はこれがダメなのかと思って悩んでた)