インテル® Xeon Phi™ コプロセッサーを搭載したシステムで Mellanox* 社の InfiniBand アダプターを使用する

同カテゴリーの次の記事

C# による並列プログラミング

この記事は、インテル® デベロッパー・ゾーンに公開されている「Working with Mellanox* InfiniBand Adapter on System with Intel® Xeon Phi™ Coprocessors」の日本語参考訳です。


InfiniBand* は、HPC 分野で一般的に利用されるネットワーク・プロトコルであり、非常に高いスループットを提供します。インテルと Mellanox* は、最も良く知られた InfiniBand* アダプターの製造業者です。この記事では、インテル® Xeon Phi™ コプロセッサーを搭載するシステムで、異なるバージョンの OFED* (Open Fabrics Enterprise Distribution)、OpenFabrics OFED-1.5.4.1、OpenFabrics OFED-3.5.2-mic そして Mellanox* OFED 2.1 と Mellanox* InfiniBand* アダプターをインストール、そしてテストした経験をまとめています。

コプロセッサー上でネイティブ・アプリケーションが Mellanox* InfiniBand アダプターと通信できるようにするには、コプロセッサー通信リンク (CCL) を有効にする必要があります。前述の 3 つの OFED スタックを Mellanox* InfiniBand アダプターと共に使用する場合、CCL をサポートします。

1. ハードウェアのインストール

2 つのシステムは、それぞれ 1 ソケットのインテル® Xeon® E5-2670 2.60 GHz プロセッサーと 2 枚のインテル® Xeon Phi™ コプロセッサー・カードを搭載しています。両方のシステムで、RHEL 6.3 が動作しています。システムは、ギガビット・イーサーネット・アダプターを持ち、ギガビット・イーサーネット・ルーターを介して接続されています。

テストに先立ち、両方のシステムの電源を落し、それぞれ空の PCIe スロットに Mellanox* ConnectX-3 VPI InfiniBand アダプターを装着します。システムは 2 台のみであるため、各アダプターはルーターを介さず直接 InfiniBand ケーブルで接続されます (バックツーバック接続)。2 台のシステムの電源を ON にし、Mellanox* InfiniBand アダプターが正しく認識されているか確認するため、”lspci” コマンドを使用します:

# lspci | grep Mellanox
84:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]

1 行目の最初のフィールド (84:00.0) は PCIe バスのスロット番号で、2 番目のフィールドはスロット名 (Network controller) です。2 行目はデバイス名を示し、この場合 “Mellanox InfiniBand アダプター” であることがわかります。

2. OFED をサポートする MPSS のインストール

Mellanox* アダプターが正しくインストールされたら、3 つの異なる OFED スタックを MPSS 3.3 で (OFED-1.5.4.1, OFED-3.5.2-mic および Mellanox* OFED 2.1) サポートされる Mellanox* InfiniBand アダプターで使用するため、MPSS 3.3 に含まれる MPSS ユーザーガイドに従ってインストールします。3 つの異なる OFED スタックは、それぞれ別のハードウェア・ドライブにインストールされます。これは、異なるバージョンの検証を行う際、以前のバージョンのアンインストールを行わなくて済むようにします。

2.1 OFED 1.5.4.1

  • www.openfabrics.org からダウンロードし、以降の 2.3 節の説明に従ってください。OFED-1.5.4.1 をインストールするには、事前に zlib-devel と tcl-devel パッケージを入手する必要があります。
  • readme ファイルの 2.2 節に従って、基本 MPSS 3.3 をインストールします。
  • mpss-3.3/ofed フォルダーからインテル MPSS OFED をインストールします。警告メッセージが出るかもしれませんが、無視できます。
# cd mpss3-3
# cp ofed/modules/*`uname –r`*.rpm ofed
# rpm –Uvh ofed/*.rpm
warning: ofed/ofed-ibpd-3.3-r0.glibc2.12.2.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID d536787c: NOKEY
Preparing...             ########################################### [100%]
1:dapl                   ########################################### [ 11%]
2:ofed-ibpd              ########################################### [ 22%]
3:ofed-driver-2.6.32-279.
                         ########################################### [ 33%]
4:libibscif              ########################################### [ 44%]
5:libibscif-devel        ########################################### [ 56%]
6:ofed-driver-devel-2.6.3
                         ########################################### [ 67%]
7:dapl-devel             ########################################### [ 78%]
8:dapl-utils             ########################################### [ 89%]
9:dapl-devel-static      ########################################### [100%]
  • システムを再起動します。

2.2 OFED 3.5.2-MIC

ユーザーガイドの 2.4 節の説明に従って、https://www.openfabrics.org/downloads/ofed-mic/ofed-3.5-2-mic/ から OFED-3.5.2-MIC をインストールし、システムを再起動します。このパッケージのインストール手順は以前のバージョンとは異なり、mpss-3.3/ofed/ にある追加パッケージをインストールする必要が無いことに注意してください。

2.3 Mellanox* OFED 2.1

ユーザーガイドの 2.5 節の説明に従って、Mellanox* OFED 2.1.x をインストールします:

  • www.mellanox.com から、Products > Software > InfiniBand VPI Driver を検索し、”Mellanox OpenFrabrics Enterprise Distribution for Linux” OFED ソフトウェアをダウンロードします:MLNX_OFED_LINUX-2.1-1.0.6.-rhel6-3–x86_64.tgz
  • tar ファイルを解凍しドキュメントを読んでください。

    # tar xvf MLNX_OFED_LINUX-2.1-1.0.6.-rhel6-3–x86_64.tgz
    # cd MLNX_OFED_LINUX-2.1-1.0.6.-rhel6-3–x86_64

  • RHEL インストール・ディスクから、tcl、tk、そして libnl-devel パッケージをインストールします。
  • スタックをインストールします:
    # ./mlnxofedinstall
  • インテル MPSS OFED ibpd rpm をインストールします:
    # rpm –U mpss-3.3/ofed/ofed-ibpd*.rpm
  • mpss-3.3/src フォルダーの dapl、libibscif、そして ofed-driver ソース RPM をコンパイルします:
    # rpmbuild –rebuild –define “MOFED 1” mpss-3.3/src/dapl*.src.rpm mpss-3.3/src/libibscif*.src.rpm mpss-3.3/src/ofed-driver*.src.rpm
  • $HOME/rpmbuild/RPMS/x86_64 にある RPM をインストールします:
    # ls $HOME/rpmbuild/RPMS/x86_64
    dapl-2.0.42.2-1.el6.x86_64.rpm
    dapl-devel-2.0.42.2-1.el6.x86_64.rpm
    dapl-devel-static-2.0.42.2-1.el6.x86_64.rpm
    dapl-utils-2.0.42.2-1.el6.x86_64.rpm
    libibscif-1.0.0-1.el6.x86_64.rpm
    libibscif-devel-1.0.0-1.el6.x86_64.rpm
    ofed-driver-2.6.32-279.el6.x86_64-3.3-1.x86_64.rpm
    ofed-driver-devel-2.6.32-279.el6.x86_64-3.3-1.x86_64.rpm
    # rpm –U $HOME/rpmbuild/RPMS/x86_64/*.rpm
  • システムを再起動します。

3. Starting MPSS with OFED Support

ここで説明する OFED バージョンでは、OFED をサポートする MPSS を開始する手順はバージョンにかかわらず同じです。この節では、MPSS と InfiniBand 関連のすべてのサービスを起動する手順について説明します。この手順を実行する前に、MPSS に含まれる readme の 2.5 節に従って、コプロセッサーへのパスワードなしの SSH ログインを設定してください。利用する OFED バージョンごとに、テストする前に次の手順を実行します:

最初に、MPSS サービスが開始されていなければ、開始します:

# service mpss start
Starting Intel(R) MPSS:                                    [  OK  ]
mic0: online (mode: linux image: /usr/share/mpss/boot/bzImage-knightscorner)
mic1: online (mode: linux image: /usr/share/mpss/boot/bzImage-knightscorner)

次に、InfiniBand と HCA サービスを開始します:

# service openibd start
Starting psmd:                                             [  OK  ]
Setting up InfiniBand network interfaces:                  [  OK  ]
No configuration found for ib0
Setting up service network . . .                           [  done  ]

システムの 1 つ (のみ) で、InfiniBand ネットワークのサブネット・マネージャーを起動します:

# service opensmd start
Starting IB Subnet Manager.                                [  OK  ]

コプロセッサー向けの ibscif アダプターを起動します:

#service ofed-mic start
Starting OFED Stack:
host                                                       [  OK  ]
mic0                                                       [  OK  ]
mic1                                                       [  OK  ]

最後に、CCL-proxy サービスを起動します:

#service mpxyd start
Starting mpxyd daemon:                                     [  OK  ]

4. 基本テスト

3 節で示した、OFED をサポートする MPSS を起動した後にテストされた各 OFED バージョン向けに、 “ibv_devinfo” コマンドを使用して各ホスト上の InfiniBand デバイスを確認できます。ホストのいずれかの出力には、仮想デバイス scif0 および物理アダプター mlx4_0 が含まれます:

# ibv_devinfo
hca_id: scif0
        transport:                      iWARP (1)
        fw_ver:                         0.0.1
        node_guid:                      4c79:baff:fe14:0033
        sys_image_guid:                 4c79:baff:fe14:0033
        vendor_id:                      0x8086
        vendor_part_id:                 0
        hw_ver:                         0x1
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             4096 (5)
                        sm_lid:                 1
                        port_lid:               1000
                        port_lmc:               0x00
                        link_layer:             Ethernet
hca_id: mlx4_0
        transport:                      InfiniBand (0)
        fw_ver:                         2.30.8000
        node_guid:                      f452:1403:007c:bd30
        sys_image_guid:                 f452:1403:007c:bd33
        vendor_id:                      0x02c9
        vendor_part_id:                 4099
        hw_ver:                         0x0
        board_id:                       MT_1100120019
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             2048 (4)
                        sm_lid:                 1
                        port_lid:               1
                        port_lmc:               0x00
                        link_layer:             InfiniBand

同様に、各システム上のコプロセッサー mic0 と mic1 で ibv_devinfo コマンドを実行すると、次のような出力が得られます (物理アダプター mlx_4_0 の CCL が有効になっていることに注目してください):

# ssh mic0 ibv_devinfo
hca_id: mlx4_0
        transport:                      InfiniBand (0)
        fw_ver:                         2.30.8000
        node_guid:                      f452:1403:007c:bd30
        sys_image_guid:                 f452:1403:007c:bd33
        vendor_id:                      0x02c9
        vendor_part_id:                 4099
        hw_ver:                         0x0
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             2048 (4)
                        sm_lid:                 1
                        port_lid:               1
                        port_lmc:               0x00
                        link_layer:             InfiniBand

hca_id: scif0
        transport:                      SCIF (2)
        fw_ver:                         0.0.1
        node_guid:                      4c79:baff:fe14:0032
        sys_image_guid:                 4c79:baff:fe14:0032
        vendor_id:                      0x8086
        vendor_part_id:                 0
        hw_ver:                         0x1
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             4096 (5)
                        sm_lid:                 1
                        port_lid:               1001
                        port_lmc:               0x00
                        link_layer:             SCIF

# ssh mic1 ibv_devinfo
hca_id: mlx4_0
        transport:                      InfiniBand (0)
        fw_ver:                         2.30.8000
        node_guid:                      f452:1403:007c:bd30
        sys_image_guid:                 f452:1403:007c:bd33
        vendor_id:                      0x02c9
        vendor_part_id:                 4099
        hw_ver:                         0x0
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             2048 (4)
                        sm_lid:                 1
                        port_lid:               1
                        port_lmc:               0x00
                        link_layer:             InfiniBand

hca_id: scif0
        transport:                      SCIF (2)
        fw_ver:                         0.0.1
        node_guid:                      4c79:baff:fe1a:03da
        sys_image_guid:                 4c79:baff:fe1a:03da
        vendor_id:                      0x8086
        vendor_part_id:                 0
        hw_ver:                         0x1
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             4096 (5)
                        sm_lid:                 1
                        port_lid:               1002
                        port_lmc:               0x00
                        link_layer:             SCIF

InfiniBand HCA と仮想 scif が /sys/class/infiniband に存在することが確認されました:

# ls /sys/class/infiniband
mlx4_0  scif0

# ssh mic0 ls /sys/class/infiniband
mlx4_0
scif0

# ssh mic1 ls /sys/class/infiniband
mlx4_0
scif0

すべての InfiniBand ホストノードを表示するには、”ibhosts” コマンドを使用します:この場合、knightscorner5 と knightscorner7 の 2 つのホストが表示されます:

#ibhosts
Ca      : 0xf4521403007d2b90 ports 1 "knightscorner5 HCA-1"
Ca      : 0xf4521403007cbd30 ports 1 "knightscorner7 HCA-1"

リンク情報を表示するには、iblink コマンドを使用します。この場合、出力は knightscorner5 (0xf4521403007d2b91) の 1 つのポートと knightscorner7 (0xf4521403007cbd31) の 1 つのポートを示しています:

#iblinkinfo
CA: knightscorner5 HCA-1:
      0xf4521403007d2b91      2    1[  ] ==( 4X       14.0625 Gbps Active/  LinkUp)==>       1    1[  ] "knightscorner7 HCA-1" ( )
CA: knightscorner7 HCA-1:
      0xf4521403007cbd31      1    1[  ] ==( 4X       14.0625 Gbps Active/  LinkUp)==>       2    1[  ] "knightscorner5 HCA-1" ( )

ibstat コマンドは、ホスト上の利用可能なローカル InfiniBand のリンクを確認するために使用されます。この場合ステータスは、”LinkUp” と表示されています。

# ibstat
CA 'mlx4_0'
        CA type: MT4099
        Number of ports: 1
        Firmware version: 2.30.8000
        Hardware version: 0
        Node GUID: 0xf4521403007cbd30
        System image GUID: 0xf4521403007cbd33
        Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 56
                Base lid: 1
                LMC: 0
                SM lid: 1
                Capability mask: 0x0251486a
                Port GUID: 0xf4521403007cbd31
                Link layer: InfiniBand

最後に、InfiniBand 間の接続性をテストするため、”ibping” ユーティリティー (通常のインターネット・プロトコルの ping に相当) を使用します。これを行うには、ping される ibping サーバーが先に起動されていなければいけません (この場合 knightscorner5):

# ibping –S

その後、knightsconer7 システム上で、libstat 出力として表示されている相手先 (knightsconer5) システム (0xf4521403007d2b91) 向けに、特定ポート GUID を使用して ibping を開始します:

# ibping -G 0xf4521403007d2b91
Pong from knightscorner5.(none) (Lid 2): time 0.106 ms
Pong from knightscorner5.(none) (Lid 2): time 0.105 ms
Pong from knightscorner5.(none) (Lid 2): time 0.135 ms
. . . . . . . . . . . . . . . . . . . . . . . . . . .

これにより、2 つのシステム間の InfiniBand 接続を確認できました。

5. まとめ

この記事では、 2 台のシステムに Mellanox* InfiniBand アダプターをインストールし、ケーブルでバックツーバック接続する方法を紹介しました。そして、コプロセッサーをサポートする 3 つの異なる OFED スタックをインテル® MPSS と共にインストールしました。標準コマンドが、CCL を有効にするため必要なサービスを起動するのに使用されました。最後に、設定と接続を簡単な InfiniBand テストコマンドでチェックし、ハードウェアが動作していることを確認しました。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事