Mellanox OFEDを整理

#経緯など
Subnet Manager(SM)をどうしてもIBネットワーク上で動作させることが必要になってしまったので、格安で入手したConnectX-2でopensmを立ち上げて急場を凌ごうとしたのだけど、2020年8月時点では、想定外に苦戦しているので、必要な情報を整理することにした。
そもそも、事前の調査がほぼゼロの状況でConnextX-2を入手してしまったので、動かない可能性は覚悟していたのだが、意外と必要そうな情報やデータが入手出来てしまったので粘ってしまっているが、firmwareやOSなどの稼働条件を整理してみることにした。
最終的にServer/PC側の問題や仕様上の制限によって動作不可となる可能性が残っているので、以外と先が長そうだったりはする。
（そこのリスクヘッジをする為に、自宅Serverを購入しようとしているし...　電気代がぁ...）

OFED自体(HCA用のドライバー類）は、OpenFabricアライアンス（だっけ？）が標準実装版をリリース/管理していて、各社がカスタマイズしたモノを提供しているという枠組みになっているらしい。が、MellanoxのHCAをターゲットにしているのでMellanoxが提供しているOFEDを利用するのが簡単だし楽ということになっている。
尚、メーカーがサポートしている組み合わせの範囲内であれば簡単という前提条件があるのだが、これについては当たり前すぎて注記しているのは、公式のMellanoxが提供するドキュメントやWebサイトだったりもするので、よい大人はお金で解決するのが時間も労力も節約出来て経済的ではあったりする。


## Mellanox OFEDダウンロードページ
Mellanoxが提供しているOFED（HCA用のドライバー）は、代表的なOS毎に提供されている、Linuxは代表的なディストリビューションに対応しているので、使いたいHCAとディストリビューション（とバージョンとアーキテクチャ）の組み合わせが提供されていれば動作する筈なので、ConnectX-2, X-3とLinux(CentOS)とWindowsの組み合わせを整理する。

### Linux Driver
https://www.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed

| version     | ConnectX-2 | ConnectX-3    | ConnectX-4 | CentOS            |
|:------------|:----------:|:-------------:|:----------:|:-----------------:|
| 5.1-0.6.6.0 | X          | X             | O          | 8.0-8.2 / 7.2-7.8 |
| 5.0-2.1.8.0 | X          | O (2.42.5000) | O          | 8.0-8.2 / 7.2-7.8 |
| 4.7-3.2.9.0 | X          | O (2.42.5000) | O          | 8.0-8.1 / 7.2-7.7 |
| 4.6-1.0.1.1 | X          | O          | O          | 8.0 / 7.2-7.6     |
| 4.5-1.0.1.0 | X          | O          | O          | 7.2-7.6           |
| 4.4-2.0.7.0 | X          | O          | O          | 7.1-7.5           |
| 4.4-1.0.0.0 | X          | O          | O          | 7.1-7.5           |
| 3.4-2.0.0.0 | O          | O          | O          | 7.0-7.3           |

ConnectX-2は、3.4-2.0.0.0が最後。SR-IOVをテストしたOSは、RedHat7.3, SLES12SP2, Ubuntu16.10と記載あり。
ConnectX-3は、5.0-2.1.8.0が最後。

### WinOF/WinOF2 Driver
https://www.mellanox.com/products/adapter-software/ethernet/windows/winof-2

ConnectX-3は、WinOFでサポート。
ConnectX-4またはConnectX-5は、WinOF2でサポート。
ConnectX-2は、WinOFの古い版でサポートしている模様。
WinOF主な版の対応は以下の通り。

| version  | ConnectX-2   | ConnectX-3 VPI | Win10    | WinServer                  |           |
|:---------|:------------:|:--------------:|:--------:|:--------------------------:|:---------:|
| 5.50     | X            | O (2.42.5000)  | 8.1, 10  | 2012, 2012R2, 2016, 2019   |           |
| 5.40     | X            | O (2.42.5000)  | X        | 2016                       |           |
| 5.35_FUR | X            | O (2.40.5030)  | 7, 8, 10   | 2008R2, 2012, 2012R2       |           |
| 5.10     | X            | O (2.35.5100)  | 7, 8.1, 10 | 2008R2, 2012, 2012R2       |           |
| 4.95     | X            | O (2.34.5000)  | 7, 8.1     | 2008R2, 2012, 2012R2       |           |
| 4.90     | X            | O (2.33.5100)  | 7, 8.1     | 2008R2, 2012, 2012R2       |           |
| 4.80     | O (2.9.1000) | O (2.32.5100)  | 7, 8.1     | 2008R2, 2012, 2012R2       | [RelNote](https://www.mellanox.com/related-docs/prod_software/MLNX_VPI_WinOF_Release_Notes_Rev_4.80.pdf) |

Win10やWinServer2019では、ConnectX-2は未サポートとなっている。
別途入手した、ConnectX-3 (OEM)のfirmwareは、2.32.5100だったので、このファームをサポートしているWinOFのバージョンは4.80となる。
firmwareを更新すれば、もう少し新しいWinOFが使えるようになると思うが、2008R2が動作しているDL3200をターゲットにした場合には、現状のfirmwareで動作確認をした方がよ良さそう。
Win10@自宅では、WinOFは5.50をインストールしてflintやmlxconfigコマンドは正常に動作した（SRIOV_EN=1も設定可能)ので、HCA（とfirmware）に合わせてWinOFのバージョンを選択する必要があるのかは不明だが、組み合わせは外さないのが一般的にはお勧め。

### VMware Driver
https://www.mellanox.com/products/ethernet-drivers/vmware/exsi-server

| ESX      | ConnectX-2          | ConnectX-3 VPI         | ConnectX-4             |
|:---------|:-------------------:|:----------------------:|:----------------------:|
| ESXi 7.0 | X                   | X                      | 12.27.1016 (4.19.70.1) |
| ESXi 6.7 | X                   | X                      | 12.24.1000 (4.17.17.8) |
| ESXi 6.5 | X                   | 2.42.5000 (3.16.11.10) | 12.23.1002 (4.16.14.2) |
| ESXi 6.0 | X                   | 2.36.5000 (2.4.0)      | 12.22.1002 (4.15.13.2) |
| ESXi 5.5 | 2.9.1200 (1.9.10.0) | 2.11.0500 (1.9.10.0)   | X                      |


# Install OFED

HCA用のドライバー(OFED/WinOF)をインストールすることで、サーバで利用が可能になる。Windows系は正しいWinOF（ConnectX-4からは、WinOF2）のバージョンをダウンロードして通常のアプリと同様にインストールすれば完了となる。
Linux系も正しいバージョンのOFEDをインストールする必要があるが、tcl/tkのパッケージのインストールが求められたり、専用のkernelモジュールをインストールしていたりするなど、正解を見つけるのが大変そうな印象。

## ConnectX and Windows
ConnectX-2をサポートしているWin2008R2用のWinOFは[Win2008R - WinOF 4.80](http://www.mellanox.com/downloads/WinOF/MLNX_VPI_WinOF-4_80_All_win2008R2_x64.exe)から.exeファイルをダウンロードしてインストールする。
ConnectX-3のfirmwareが、2.32.5100の場合もWinOF 4.80を利用。それ以上のfirmwareの場合には対応するWinOFのバージョンが異なるので上で整理した対応表とrelease noteを確認してサポートされているバージョンをダウンロードしてインストールする。

ベンダーが提供する範囲では、Win10の場合にはConnectX-2はサポートされていない。正式にはサポートしていないが、Win10対応のWinOFをインストールすることでConnectX-2を認識することは確認している。（自宅にIBの環境が無いので動作は未確認）

## ConnectX-2 and CentOS 7.3
ConnectX-2をサポートしているLinux用のOFEDのバージョンは3.4-2.0.0系が最終サポート、3.4-2.2.2.3が確認した中で一番最後にリリースされているので、RHEL7/CentOS7系のドライバーとしては、[3.4-2.2.2.3](http://www.mellanox.com/page/mlnx_ofed_eula?mtag=linux_sw_drivers&mrequest=downloads&mtype=ofed&mver=MLNX_OFED-3.4-2.2.2.3&mname=MLNX_OFED_LINUX-3.4-2.2.2.3-rhel7.3-x86_64.tgz)をインストールするのが正解の模様。
 

# Mellanox Firmware Tools (MFT)
Mellanoxが提供するfirmwareを更新する際に必要なツールがMFT。HCAへのfirmware更新のみだけでなく、OEMのHCA用のfirmwareを作成するコマンド（ツール）も含まれている（っぽい）

MFTの入手先は以下のURLだが、サポートページを更新している最中みたいで、もしかするとそのうち消えてしまうかもしれない。
[MFT download page](https://www.mellanox.com/products/adapter-software/firmware-tools)