CentOS7でConnectX-3 VPIをセットアップ

win10でConnectX-3の動作確認とファームウェアのアップデートが完了したので、CentOS7.8にMLXN_OFEDをインストールして、ConnectX-3の動作確認とopensmの起動までを記録

## Install CentOS 7.8
oepnsmを動作させておくのが目的なので、CentOS7.8は「最小限のインストール」でインストールを完了させた。

CentOS/RHELにMLNX_OFEDをインストールする際に必要なパッケージは**Hardware and Software Requirements**に書かれているので、必要なパッケージをインストールしておく。

```shell-session
# yum install perl pciutils python gcc-gfortran libxml2-python tcsh libnl.i686 libnl expat glib2 tcl libstdc++ bc tk gtk2 atk cairo numactl pkgconfig ethtool lsof
```

## Download MLNX_OFED
MellanoxのサポートページからConnectX-3 VPI用のMLNX_OFEDをダウンロードする。OSのマイナーバージョン単位でサポートOSを限定しているが、ConnectX-3 VPI用でCent/RHEL7.8をサポートしているMLNX_OFEDのバージョンは、V5.0-2.1.8.0なので、これをダウンロードする。
<img width="769" alt="CX3-Linux-01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312242/399d8fbd-8898-d317-2f76-01e29cd9bd0f.png">

ISOとtgz両方が提供されているが、通常のインストール手順はISOイメージを使った方法がガイドされているので、ISOイメージをダウンロードした。（ISOイメージの場合には、mountする。tgzの場合には適当なディレクトリにtarする。の違い程度でその後の手順に変わりはない筈）

ISOイメージのリンクをクリックすると、ダウンロードページに移動して、ライセンスに承諾後にダウンロードが始まる仕組みになっているので、別PCでWebブラウザからダウンロードしてしまうのがコマンドラインしか使えない状態のCentの環境の場合には簡単なので、ISOイメージは別PCでダウンロードしてCentへscpで解決。

## Install MLNX_OFED
ダウンロードが完了したので、後はUser Manualの手順に従ってインストールするのだが... アカウントとパスワードを求められるようになってしまった...
基本的なインストール手順に大きな違いはなさそうなので、少し古いバージョンのUser Manualを入手することで回避。（その後に少し探してみると...）

（インストール手順に従うと）MLNX_OFEDをインストールする前に、HCAカード(ConnectX-3)が認識（インストール）されていることをlspciコマンドで確認する。

```shell-session
# lspci -v | grep Mellanox
01:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
	Subsystem: Mellanox Technologies Device 0022
#
```

ConnectX-3が表示されない場合には、HCAカードがハード的に認識されていない状態なので、事前に解決が必要。

ConnectX-3が表示されているのを確認したので、ISOイメージをmountコマンドでマウントする。

```shell-session
# mount -o ro,loop MLNX_OFED_LINUX-5.0-2.1.8.0-rhel7.8-x86_64.iso /mnt
# ls /mnt
LICENSE               RPMS                common.pl             create_mlnx_ofed_installers.pl  docs              mlnx_add_kernel_support.sh  src
RPM-GPG-KEY-Mellanox  RPMS_UPSTREAM_LIBS  common_installers.pl  distro                          is_kmp_compat.sh  mlnxofedinstall             uninstall.sh
#
```

ISOイメージのマウントが完了したので、MLNX_OFEDをインストールする。
mlnxofedinstallコマンドでMLNX_OFEDをインストールする。但し、OEM版のHCAなので、インストーラーがエラーで終了するのを避ける為に、--without-fw-updateをオプション指定する。
MLNX_OFED_LINUXパッケージをインストールするが、「OFED,RDMA等々（ガッツリ省略）のパッケージはインストールされたままだとコンフリクトするから削除する。絶対に削除したパッケージを再インストールしてはいけない！」と表示されているので、インストールしないと先に進まないので「Do you want to continue?」でyを入力してインストーラーを進める。

```shell-session
# /mnt/mlnxofedinstall --without-fw-update
Logs dir: /tmp/MLNX_OFED_LINUX.9912.logs
General log file: /tmp/MLNX_OFED_LINUX.9912.logs/general.log
Verifying KMP rpms compatibility with target kernel...
This program will install the MLNX_OFED_LINUX package on your machine.
Note that all other Mellanox, OEM, OFED, RDMA or Distribution IB packages will be removed.
Those packages are removed due to conflicts with MLNX_OFED_LINUX, do not reinstall them.

Do you want to continue?[y/N]:y


Starting MLNX_OFED_LINUX-5.0-2.1.8.0 installation ...

Installing mlnx-ofa_kernel RPM
Preparing...                          ########################################
Updating / installing...
mlnx-ofa_kernel-5.0-OFED.5.0.2.1.8.1.g########################################
Configured /etc/security/limits.conf
Installing kmod-mlnx-ofa_kernel 5.0 RPM
Preparing...                          ########################################
kmod-mlnx-ofa_kernel-5.0-OFED.5.0.2.1.########################################
Installing mlnx-ofa_kernel-devel RPM
Preparing...                          ########################################
Updating / installing...
mlnx-ofa_kernel-devel-5.0-OFED.5.0.2.1########################################
Installing kmod-kernel-mft-mlnx 4.14.0 RPM
Preparing...                          ########################################
kmod-kernel-mft-mlnx-4.14.0-1.rhel7u8 ########################################
Installing knem RPM
Preparing...                          ########################################
Updating / installing...
knem-1.1.3.90mlnx1-OFED.5.0.0.3.8.1.g1########################################
Installing kmod-knem 1.1.3.90mlnx1 RPM
Preparing...                          ########################################
kmod-knem-1.1.3.90mlnx1-OFED.5.0.0.3.8########################################
Installing kmod-iser 5.0 RPM
Preparing...                          ########################################
kmod-iser-5.0-OFED.5.0.2.1.8.1.g5f6717########################################
Installing kmod-srp 5.0 RPM
Preparing...                          ########################################
kmod-srp-5.0-OFED.5.0.2.1.8.1.g5f67178########################################
Installing kmod-isert 5.0 RPM
Preparing...                          ########################################
kmod-isert-5.0-OFED.5.0.2.1.8.1.g5f671########################################
Installing kmod-rshim 1.18 RPM
Preparing...                          ########################################
kmod-rshim-1.18-0.gb99e894.rhel7u8    ########################################
Installing mpi-selector RPM
Preparing...                          ########################################
Updating / installing...
mpi-selector-1.0.3-1.50218            ########################################
Installing user level RPMs:
Preparing...                          ########################################
ofed-scripts-5.0-OFED.5.0.2.1.8       ########################################
Preparing...                          ########################################
rdma-core-50mlnx1-1.50218             ########################################
Preparing...                          ########################################
libibverbs-50mlnx1-1.50218            ########################################
Preparing...                          ########################################
librdmacm-50mlnx1-1.50218             ########################################
Preparing...                          ########################################
libibumad-50mlnx1-1.50218             ########################################
Preparing...                          ########################################
infiniband-diags-50mlnx1-1.50218      ########################################
Preparing...                          ########################################
rdma-core-devel-50mlnx1-1.50218       ########################################
Preparing...                          ########################################
libibverbs-utils-50mlnx1-1.50218      ########################################
Preparing...                          ########################################
ibsim-0.9-1.50218                     ########################################
Preparing...                          ########################################
ibacm-50mlnx1-1.50218                 ########################################
Preparing...                          ########################################
librdmacm-utils-50mlnx1-1.50218       ########################################
Preparing...                          ########################################
opensm-libs-5.6.0.MLNX20200217.cedc1e4########################################
Preparing...                          ########################################
opensm-5.6.0.MLNX20200217.cedc1e4-0.1.########################################
Preparing...                          ########################################
opensm-devel-5.6.0.MLNX20200217.cedc1e########################################
Preparing...                          ########################################
opensm-static-5.6.0.MLNX20200217.cedc1########################################
Preparing...                          ########################################
dapl-2.1.10mlnx-OFED.3.4.2.1.0.50218  ########################################
Preparing...                          ########################################
dapl-devel-2.1.10mlnx-OFED.3.4.2.1.0.5########################################
Preparing...                          ########################################
dapl-devel-static-2.1.10mlnx-OFED.3.4.########################################
Preparing...                          ########################################
dapl-utils-2.1.10mlnx-OFED.3.4.2.1.0.5########################################
Preparing...                          ########################################
perftest-4.4-0.23.g89e176a.50218      ########################################
Preparing...                          ########################################
mstflint-4.13.0-1.41.g4e8819c.50218   ########################################
Preparing...                          ########################################
mft-4.14.0-105                        ########################################
Preparing...                          ########################################
srp_daemon-50mlnx1-1.50218            ########################################
Preparing...                          ########################################
ibutils2-2.1.1-0.121.MLNX20200324.g061########################################
Preparing...                          ########################################
ibutils-1.5.7.1-0.12.gdcaeae2.50218   ########################################
Preparing...                          ########################################
cc_mgr-1.0-0.48.MLNX20200216.g4ea049f.########################################
Preparing...                          ########################################
dump_pr-1.0-0.44.MLNX20200216.g4ea049f########################################
Preparing...                          ########################################
ar_mgr-1.0-0.49.MLNX20200216.g4ea049f.########################################
Preparing...                          ########################################
ibdump-6.0.0-1.50218                  ########################################
Preparing...                          ########################################
qperf-0.4.11-1.50218                  ########################################
Preparing...                          ########################################
mxm-3.7.3112-1.50218                  ########################################
Preparing...                          ########################################
ucx-1.8.0-1.50218                     ########################################
Preparing...                          ########################################
ucx-devel-1.8.0-1.50218               ########################################
Preparing...                          ########################################
sharp-2.1.0.MLNX20200223.f63394a9c8-1.########################################
Preparing...                          ########################################
ucx-cma-1.8.0-1.50218                 ########################################
Preparing...                          ########################################
ucx-ib-1.8.0-1.50218                  ########################################
Preparing...                          ########################################
ucx-rdmacm-1.8.0-1.50218              ########################################
Preparing...                          ########################################
ucx-knem-1.8.0-1.50218                ########################################
Preparing...                          ########################################
hcoll-4.5.3045-1.50218                ########################################
Preparing...                          ########################################
openmpi-4.0.3rc4-1.50218              ########################################
Preparing...                          ########################################
mlnx-ethtool-5.4-1.50218              ########################################
Preparing...                          ########################################
mlnx-iproute2-5.4.0-1.50218           ########################################
Preparing...                          ########################################
mlnxofed-docs-5.0-2.1.8.0             ########################################
Preparing...                          ########################################
mpitests_openmpi-3.2.20-e1a0676.50218 ########################################
Device (01:00.0):
	01:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
	Link Width: x8
	PCI Link Speed: 8GT/s


Installation finished successfully.


Preparing...                          ################################# [100%]
Updating / installing...
   1:mlnx-fw-updater-5.0-2.1.8.0      ################################# [100%]

Added 'RUN_FW_UPDATER_ONBOOT=no to /etc/infiniband/openib.conf

Skipping FW update.
To load the new driver, run:
/etc/init.d/openibd restart
#
```

色々とパッケージがインストールされて、インストールが終了したので、指示通りにopenibdを再起動して、openidbの状態を確認する。

```shell-session
# /etc/init.d/openibd restart
Unloading HCA driver:                                      [  OK  ]
Loading HCA driver and Access Layer:                       [  OK  ]
#
# /etc/init.d/openibd status

  HCA driver loaded

Configured IPoIB devices:
ib0

Currently active IPoIB devices:
ib0
Configured Mellanox EN devices:

Currently active Mellanox devices:
ib0

The following OFED modules are loaded:

  rdma_ucm
  rdma_cm
  ib_ipoib
  mlx4_core
  mlx4_ib
  mlx4_en
  mlx5_core
  mlx5_ib
  ib_uverbs
  ib_umad
  ib_ucm
  ib_cm
  ib_core
  mlxfw
  mlx5_fpga_tools

#
```
HCAドライバーが正常にロードされて、IPoIB deviceも作成（認識）されているので問題なさそう。
次に、MST(Mellanox Software Toolsの略だそうな）を起動して、ConnectX-3の状態を確認する。

```shell_session
# mst start
Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices
-W- Missing "lsusb" command, skipping MTUSB devices detection
#
# mst status -v
MST modules:
------------
    MST PCI module loaded
    MST PCI configuration module loaded
PCI devices:
------------
DEVICE_TYPE             MST                           PCI       RDMA            NET                       NUMA
ConnectX3(rev:1)        /dev/mst/mt4099_pciconf0
ConnectX3(rev:1)        /dev/mst/mt4099_pci_cr0       01:00.0   mlx4_0          net-ib0                   -1

#
```

MTUSB deviceはスキップされているが、ConnectX-3のdeviceファイルが作成されているので、無事にHCAが認識されている模様。
念のため、デバイスの情報を確認する。

```shell-session
# flint -d /dev/mst/mt4099_pci_cr0 query
Image type:            FS2
FW Version:            2.42.5000
FW Release Date:       5.9.2017
Product Version:       02.42.50.00
Device ID:             4099
Description:           Node             Port1            Port2            Sys image
GUIDs:                 0002c90300f66b30 0002c90300f66b31 0002c90300f66b32 0002c90300f66b33
MACs:                                       0002c9f66b30     0002c9f66b31
VSD:
PSID:                  FJT1060100019
#
# mlxconfig -d /dev/mst/mt4099_pci_cr0 query

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

Device type:    ConnectX3
Device:         /dev/mst/mt4099_pci_cr0

Configurations:                              Next Boot
         SRIOV_EN                            True(1)
         NUM_OF_VFS                          16
         LINK_TYPE_P1                        VPI(3)
         LINK_TYPE_P2                        VPI(3)
         LOG_BAR_SIZE                        3
         BOOT_PKEY_P1                        0
         BOOT_PKEY_P2                        0
         BOOT_OPTION_ROM_EN_P1               True(1)
         BOOT_VLAN_EN_P1                     False(0)
         BOOT_RETRY_CNT_P1                   0
         LEGACY_BOOT_PROTOCOL_P1             PXE(1)
         BOOT_VLAN_P1                        1
         BOOT_OPTION_ROM_EN_P2               True(1)
         BOOT_VLAN_EN_P2                     False(0)
         BOOT_RETRY_CNT_P2                   0
         LEGACY_BOOT_PROTOCOL_P2             PXE(1)
         BOOT_VLAN_P2                        1
         IP_VER_P1                           IPv4(0)
         IP_VER_P2                           IPv4(0)
         CQ_TIMESTAMP                        True(1)
#
# ibv_devices
    device          	   node GUID
    ------          	----------------
    mlx4_0          	0002c90300f66b30
#
# ibv_devinfo
hca_id:	mlx4_0
	transport:			InfiniBand (0)
	fw_ver:				2.42.5000
	node_guid:			0002:c903:00f6:6b30
	sys_image_guid:			0002:c903:00f6:6b33
	vendor_id:			0x02c9
	vendor_part_id:			4099
	hw_ver:				0x1
	board_id:			FJT1060100019
	phys_port_cnt:			1
		port:	1
			state:			PORT_DOWN (1)
			max_mtu:		4096 (5)
			active_mtu:		4096 (5)
			sm_lid:			0
			port_lid:		0
			port_lmc:		0x00
			link_layer:		InfiniBand

#
```

確認出来る範囲で一通りデータを取得出来ているので、HCAとしてConnectX-3がCent7で動作可能な状態になっている模様。


## opensm

ConnectX-3が認識されているのを確認したが、SMとしてOpenSMを動作させるのが目的なので、opensmを起動してみる。

```shell-session
# opensm
-------------------------------------------------
OpenSM 5.6.0.MLNX20200217.cedc1e4
Command Line Arguments:
 Log File: /var/log/opensm.log
-------------------------------------------------
OpenSM 5.6.0.MLNX20200217.cedc1e4

Using default GUID 0x2c90300f66b31
Entering DISCOVERING state

SM port is down


^COpenSM: Got signal 2 - exiting...
Exiting SM

#
```

起動は問題ない模様。（対抗となるHCA or スイッチが無いので、port is downはその通り。）
システム起動時にopensmが自動で起動する状態になっている筈なのだが、確認する為、一旦rebootしてからopensmdの状態を確認する。

OS起動後に、以下のコマンドでopensmの状態を確認する。

```shell_session
# /etc/init.d/opensmd status
opensm (pid 1496) is running...
#
# systemctl status opensmd
● opensmd.service - LSB: Activates/Deactivates InfiniBand Subnet Manager
   Loaded: loaded (/etc/rc.d/init.d/opensmd; bad; vendor preset: disabled)
   Active: active (running) since 木 2020-08-13 18:07:20 JST; 48s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1421 ExecStart=/etc/rc.d/init.d/opensmd start (code=exited, status=0/SUCCESS)
 Main PID: 1496 (opensm)
   CGroup: /system.slice/opensmd.service
           └─1496 /usr/sbin/opensm --daemon

 8月 13 18:07:19 localhost.localdomain systemd[1]: Starting LSB: Activates/Deactivates InfiniBand Subnet Manager...
 8月 13 18:07:19 localhost.localdomain OpenSM[1496]: /var/log/opensm.log log file opened
 8月 13 18:07:19 localhost.localdomain OpenSM[1496]: OpenSM 5.6.0.MLNX20200217.cedc1e4
 8月 13 18:07:19 localhost.localdomain OpenSM[1496]: Entering DISCOVERING state
 8月 13 18:07:20 localhost.localdomain OpenSM[1496]: SM port is down
 8月 13 18:07:20 localhost.localdomain opensmd[1421]: Starting IB Subnet Manager.[  OK  ]
 8月 13 18:07:20 localhost.localdomain systemd[1]: Started LSB: Activates/Deactivates InfiniBand Subnet Manager.
#
```

```shell-session
# systemctl list-units --type=service | grep open
openibd.service                        loaded active exited  openibd - configure Mellanox devices
opensmd.service                        loaded active running LSB: Activates/Deactivates InfiniBand Subnet Manager
```
と、systemctlのサービスとして管理されていて、普通に動作(running状態)していることを確認出来た。
opensmのパッケージは、yumでインストールされているようなのでパッケージ情報を確認する。

```shell_session
# yum info opensm
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.cat.net
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
インストール済みパッケージ
名前                : opensm
アーキテクチャー    : x86_64
バージョン          : 5.6.0.MLNX20200217.cedc1e4
リリース            : 0.1.50218
容量                : 2.4 M
リポジトリー        : installed
要約                : InfiniBand subnet manager and administration
URL                 : https://github.com/linux-rdma/opensm
ライセンス          : GPLv2 or BSD
説明                : OpenSM provides an implementation of an InfiniBand Subnet Manager and
                    : Administration. Such a software entity is required to run for in order
                    : to initialize the InfiniBand hardware (at least one per each
                    : InfiniBand subnet).

#
```

後は、IBな環境に設置して起動して普通に動作するれば完了。

## 設置後の状況

IB環境下に設置した直後の状態は以下の通り。

```shell-session
# lspci -v -s 01:00.0
01:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
	Subsystem: Mellanox Technologies Device 0022
	Flags: bus master, fast devsel, latency 0, IRQ 16
	Memory at f0200000 (64-bit, non-prefetchable) [size=1M]
	Memory at 1fff000000 (64-bit, prefetchable) [size=8M]
	Capabilities: [40] Power Management version 3
	Capabilities: [48] Vital Product Data
	Capabilities: [9c] MSI-X: Enable+ Count=128 Masked-
	Capabilities: [60] Express Endpoint, MSI 00
	Capabilities: [c0] Vendor Specific Information: Len=18 <?>
	Capabilities: [100] Alternative Routing-ID Interpretation (ARI)
	Capabilities: [148] Device Serial Number 00-02-c9-03-00-f6-6b-30
	Capabilities: [154] Advanced Error Reporting
	Capabilities: [18c] #19
	Capabilities: [108] Single Root I/O Virtualization (SR-IOV)
	Kernel driver in use: mlx4_core
	Kernel modules: mlx4_core

#
# ibv_devinfo
hca_id:	mlx4_0
	transport:			InfiniBand (0)
	fw_ver:				2.42.5000
	node_guid:			0002:c903:00f6:6b30
	sys_image_guid:			0002:c903:00f6:6b33
	vendor_id:			0x02c9
	vendor_part_id:			4099
	hw_ver:				0x1
	board_id:			FJT1060100019
	phys_port_cnt:			1
		port:	1
			state:			PORT_ACTIVE (4)
			max_mtu:		4096 (5)
			active_mtu:		4096 (5)
			sm_lid:			5
			port_lid:		5
			port_lmc:		0x00
			link_layer:		InfiniBand

#
# /etc/init.d/openibd status

  HCA driver loaded

Configured IPoIB devices:
ib0

Currently active IPoIB devices:
ib0
Configured Mellanox EN devices:

Currently active Mellanox devices:
ib0

The following OFED modules are loaded:

  rdma_ucm
  rdma_cm
  ib_ipoib
  mlx4_core
  mlx4_ib
  mlx4_en
  mlx5_core
  mlx5_ib
  ib_uverbs
  ib_umad
  ib_ucm
  ib_cm
  ib_core
  mlxfw
  mlx5_fpga_tools

#
# ibstat
CA 'mlx4_0'
	CA type: MT4099
	Number of ports: 1
	Firmware version: 2.42.5000
	Hardware version: 1
	Node GUID: 0x0002c90300f66b30
	System image GUID: 0x0002c90300f66b33
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 56
		Base lid: 5
		LMC: 0
		SM lid: 5
		Capability mask: 0x0251486a
		Port GUID: 0x0002c90300f66b31
		Link layer: InfiniBand
#
```

Centが起動してデバイスの認識は出来ているので、後はスイッチに繋ぎ込んで貰ってから、必要があればOpenSMの設定を変更すれば完了。
基本、デフォルトのままで使える筈