サーバ、クライアント間の帯域を上げたくて、Mellanox ConnectX-3 VPIをセットアップした。 入手したのはMCX354A-FCBTで、スペック上40Gの帯域がある。
購入は、ebayでbrand newのものが送料含めて7000ほどで買えた。 また、接続用のケーブルはfiberjpで汎用のパッシブDACを2000円ほどで購入した。
インストール先は、ちょっと古めのサーバと第三世代ryzenを搭載したデスクトップ。 サーバの方はカードを挿入したらそのまま認識までした。
一方デスクトップ機の方は、そのままだと認識しなかった。 切り分けを行った結果、UEFIでPCIeのバージョンを3に固定することで認識した。 第三世代ryzenとX570チップセットだとPCIe4が使えるので、 NICかマザーボードのネゴシエーションがうまく行かないのかもしれない。 また、そのままだとLinuxのドライバの初期化が失敗する。 おそらくPCIeデバイスがそれなりにあるので、メモリの確保に失敗しているらしい。 MSI X570 Gaming Plusでは、「Above 4G memory/ Crypto Currency mining」をEnableにすると解決した。
あとは、OS側からNICのファームウェアを更新する。 利用しているのはArch Linuxだが、ファームウェア更新用のソフトウェアの最新版がdebやrpmでしか配布されていない。 これらのパッケージから取り出しても良かったが、OSS版が存在したのでそちらを使うようにした。
$ git clone https://github.com/Mellanox/mstflint.git $ cd mstflint $ ./autogen.sh $ ./configure --disable-inband $ make $ make install
デフォルトだとInfiniBandのライブラリがないとビルドできないので、明示的に無効にする。
OSS版では、ツールセットの先頭にmstがつくので、手順のflintはmstflintと読み替える必要がある。 また、デバイスの指定はPCI ID(?)を利用する。
$ lspci|grep -i mellanox 2d:00.0 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3] $ mstflint -d 2d:00.0 q Image type: FS2 FW Version: 2.11.1280 Device ID: 4099 HW Access Key: Disabled <snip> VSD: PSID: ORC1090120019
セラーの説明ではHPのOEMとのことだったが、実際にはOracleのものらしい。 とはいえ、以降の手順では特に関係はない。
手順はこちらを参考にした。 この手順では、カスタムファームウェアを作ることなく、直接Mellanoxの最新ファームウェアを書き込む。
まずは、現在のファームウェアと設定をバックアップする。
$ mstflint -d 2d:00.0 ri orig_firmware.bin $ mstflint -d 2d:00.0 dc orig_firmware.ini
次にファームウェアを書き込む。
$ mstflint -d 2d:00.0 -i fw-ConnectX3-rel-2_42_5000-MCX354A-FCB_A2-A5-FlexBoot-3.4.752.bin -allow_psid_change burn Current FW version on flash: 2.11.1280 New FW version: 2.42.5000 You are about to replace current PSID on flash - "ORC1090120019" with a different PSID - "MT_1090120019". Note: It is highly recommended not to change the PSID. Do you want to continue ? (y/n) [n] : y Burning FS2 FW image without signatures - OK Restoring signature - OK
成功したらリブートする。
リブート後にポートをEtherに設定する。
$ mstconfig -d 2d:00.0 set SRIOV_EN=1 LINK_TYPE_P1=2 LINK_TYPE_P2=2 Device #1: ---------- Device type: ConnectX3 Device: 2d:00.0 Configurations: Next Boot New SRIOV_EN False(0) True(1) LINK_TYPE_P1 VPI(3) ETH(2) LINK_TYPE_P2 VPI(3) ETH(2) Apply new Configuration? (y/n) [n] : y Applying... Done! -I- Please reboot machine to load new configurations.
更に再起動することで、通常のNICと同様に利用できる。
iperfで速度計測した結果、MTU9000で13Gbpsほどの速度が出た。 CPUでサチっているようでカタログスペックは出ないものの、 10Gよりも速度は出ているので十分だろう。