インテル® Xeon Phi™ コプロセッサーを搭載したシステムで Mellanox* 社の InfiniBand アダプターを使用する
この記事は、インテル® デベロッパー・ゾーンに公開されている「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 テストコマンドでチェックし、ハードウェアが動作していることを確認しました。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。