Infiniband Day02「Infiniband入門」

アジェンダ• Infiniband入門について• 用語• ケーブリング• HCA• ノードアドレス• Subnet Manager• ドライバ＆ユーティリティ（Linux&Win)• トラブルシューティング

Infiniband入門について• 本セッションではSubnet Managerと下位レイヤについて説明します。

SubnetManager

ブロック
ストレージ
アクセス

Application
MPI

uDAPL

ユーザレベルIBサービス
MAD Services
Verbs Library

ユーザ空間
カーネル空間Upper Layer
Protocol (ULP)
Mid Layer

SRP

iSER

NFSoR

Xsigo
vNIC
vHBA

TCP
IPoIB

SDP

Infiniband Core モジュール(CM, SA Client, MAD, Verbs)
DriverHCA
Infiniband
Fabric

用語• データレート– Single Data Rate (SDR), 10Gbps (実レートは 8Gbps)– Double Data Rate (DDR), 20Gbps (実レートは16Gbps)– Quad Data Rate (QDR), 40Gbps (実レートは32Gbps)
上記ではエンコードに8B/10Bが使われるため、実効レートが80%– 2011年に予定されているFDR 56Gbps, EDR 100Gbpsでは64B/66B（実効レート96%）が採用される• InfiniBand デバイス
– ホスト・チャネル・アダプタ (HCA)• ホスト側の接続デバイス– ターゲット・チャネル・アダプタ (TCA)• I/O ターゲット側のデバイス– スイッチ– ルータ• 複数のIBサブネットを接続ケーブルとコネクタ
ケーブル

レート

コネクタ

接続距離

CopperSDR

CX420mDDR

CX412m

QDR

QSFP

7m

FDR

QSFP

5m (目標値)

EDR

Enhanced QSFP

3m (目標値)

QDR

QSFP

15m

FDR

QSFP

10m(目標値)

EDR

Enhanced QSFP

7-10m(目標値)

SDRCX4300m

DDR

CX4150m

QDR

QSFP

100m

FDR

QSFP

100m(目標値)

EDR

EnhancedQSFP

100m(目標値)

Active Fiber

QDR

QSFP

300m

Single Fiber

QDR

QSFP

4km

Active Copper

Fiber

両端（各ポート）で、ネゴシエーションが行われ、共通の最大スピードで接続されます。

ホスト・チャネル・アダプタ (HCA)• InfiniHost III Ex – デュアルポート InfiniBand HCA カード（PCI Express用）––––Arbel (MT25208 / MT25218(MF)) ベース、PCI-Express x8 対応、 Dual 4X IB ポート
オプティカル・メディア・コンバータサポート
SDRおよびDDRバージョン
IBM BC-H daughter card

• InfiniHost III Lx – シングルポート InfiniBand HCA カード （PCI Express用）––––Sinai (MT25204) ベース, PCI-Express x4 & x8対応、 シングル 4x IB ポート
オプティカル・メディア・コンバータサポート
SDRおよびDDRバージョン
HP C-Class daughter card

• ConnectX IB – シングル/デュアル-ポート InfiniBand HCA カード （PCIExpress用）–––––Hermon (MT25418/ MT25428) ベース、PCI-Express x8
オプティカル・メディア・コンバータサポート
DDR・QDRバージョン
HP C-Class BladeSystem daughter card
QDRのインタフェースはQSFP

ノードアドレス•

すべてのデバイスおよびポートは、 Globally Unique Identifiers (GUID)というグローバルでユニークなIDが割り付けられる– 64-bit アドレス
• 例 GUID: 0x0013970102000157– イーサネットのMACアドレスと同様の位置づけ– GUIDの前半部分は、ハードウェアベンダーの情報となる
 GUID タイプ: ポート、ノード、システムイメージ、スイッチ•

各ポートは、 Local Identifier (LID)がダイナミックにアサインされる––––

16-bit、最大48000のアドレスが使用可能
イーサネットのIPアドレスと同様の位置づけ
ノード側では設定できず、サブネットマネージャ（SM）から動的にアサインされる
リブート後には同じアドレスがアサインされることは保証されないが、ほとんどのサブネットマネージャはキャッシュしているリブート前のアドレスをアサインする– ファブリック内では、エンドポイントのアドレスとして使用される (スイッチもHCAもLIDがアサインされる)– 通常は、サブネット内で１から順にアサインされる (特に必須ではない)•

GIDがSubnet間のルーティングで使用される– GIDは128-bitで、64-bit Subnet prefix+64-bit GUID
– Subnet PrefixはSubnet Managerから割り当てられる

サブネット・マネージャ (SM)••

すべてのInfinibandファブリックは最低ひとつのサブネットマネージャを持つ
SMP (サブネット・マネージャ・パケット）: SM <-> SMA間のMAD– QP0がSMP処理用のコントロール専用で使用され、最優先処理されるVirtual Lane
15で送信受信される•網内に複数のSMが存在する場合– ひとつのSMが「Master」でアクティブとなり、ほかのSMは「Standby」モードとなる•

ファブリック内のどこでもSMを配置できる– ノード、スイッチ、スペシャルデバイスなど、SMの場所はどこでもよい– Xsigoシャーシにおいては、SCP上でOpenSMがデフォルトで作動している。なお、ファブリック内でほかのSMが動作していても構いません。

•

SM とSMA (サブネット・マネージャ・エージェント)– すべてのIBデバイスはサブネット・マネージャ・エージェントを持つ– SMはマネージメント・データグラム・パケット（MAD）をSMAへ送信する– SMAは、ローカルのステータスの変更を通知する際に、TrapをSMへ送信する•

SM がサブネット・データベースを管理– NodeInfo、portInfo、switchInfo、GUIDInfo、ForwardingTable、LinkInfoなど– サブネットのトポロジーとPathInfoを作成

サブネット・マネージャ (SM)の役割••••••••

サブネット全体の物理トポロジーを検出する。エンドノード、スイッチの検出には、‘direct routed‟ SMPパケットが使われる。このSMPパケットは全スイッチの全ポートへ使われ、フォワーディング情報が含まれる。
全エンドノード、スイッチ、ルータへLIDをアサイン
リニア・フォワーディング・テーブル（LFT）の計算。エンドノード間の「すべてのパス」について、最短経路を計算する。あるエンドノード間のパスで、マルチパスが存在した場合は、そのひとつをランダムに選択する。このようにしてマルチパスのロードバランスが行われる
計算したLFTをスイッチへ設定‘Sweep‟（=ファブリック内の定期的なクエリ）を行い、構成変更を監視（OpenSMのデフォルト10秒）
サブネットからのノードの追加と削除（オプション）スイッチがローカルノードのステータス変更を、Trap notice SMPでSMへ通知
サブネット内の構成変更の監視 （トラップまたは、‘sweep‟=ファブリック内への定期的なクエリ）

その他InfiniBand の特徴• 低遅延。Port-to-portでのレイテンシは、100ナノ秒以下。
• クレジットベースのフローコントロール。（Ethernetのxon/xoffより信頼性が高い。）宛先側の受信バッファで空きができるまで、パケットは送信されない。パケット送信後、宛先側ノードはクレジットを発行し、空きバッファを伝える。このメカニズムにより、Infinibandファブリック内でのパケットロスはほぼ発生しない。
• 物理リンク毎に、最大16バーチャル・レーン（VL)を持ち、キューイングが行われ、Head-of-Line Blockingを防ぐ。各VLでそれぞれのバッファスペースを持つ。VL15はSMP専用となる。
• スイッチは、パケットの宛先LIDとユニキャスト・フォワーディング・テーブ
ルのエントリに基づいて、各ユニキャストパケットをアウトプットポートへ送信する• マルチキャストパケットは、スイッチ（またチャネル・アダプタ）で複製される。各ポートは、SMから通知されたマルチキャストグループへ所属する。
SMは、そのマルチキャストグループのLIDをアサインする。SMは、グループメンバに応じて、マルチキャスト・ツリーを決定し、スイッチへ設定を行う

ドライバ & ユーティリティ

Linux OpenFabrics Enterprise Distribution (OFED)• Linux – ホストドライバコントロール– OFED *:• /etc/init.d/openibd [ start | stop | restart | status ]• OFEDホストドライバのコントロール• * openib 若しくは kernel-ib RPM をインストールする必要があります。

– OpenSM *:• /etc/init.d/opensmd [ start | stop | restart | status ]• * opensmd と依存するRPMをインストールする必要があります。

Infiniband Utilities
下記のパッケージはRHEL5で提供されている各種Infinibandのトラブルシューティング用のツールです。もしお使いのRedhatサーバでこれらのパッケージが見つからない場合は、rpmコマンドでRHEL5のインストレーションメディアからインストールできます。

• openib-1.1-5.el5.x86_64.rpm• libibcommon-1.0.1-5.el5.x86_64.rpm• libibumad-1.0.1-5.el5.x86_64.rpm• opensm-libs-2.0.0-5.el5.x86_64.rpm• libibmad-1.0.1-5.el5.x86_64.rpm• openib-diags-1.1.0-5.el5.x86_64.rpm

Linux ホストツール• lspci– OSからHCAが見えるかどうか• lsmod– カーネルモジュールがロードされているか• ibstat*– HCAのオペレーション状態とファームウェアの確認• perfquery*– ホストのIBポートカウンタ• ibnetdiscover*– ファブリック・トポロジーのダンプユーティリティ• Fabric Verification Scripts*– Ibcheckerrors, ibcheckwidth, ibcheckstate, ibportstate, ibping,ibtracert, ibclearcounters & ibclearerrors, Ibidsverify.pl, ibdiagnet,
sminfo, smpquery, saquery

InfiniBand Fabric Verification Tools• ibcheckerrors– ファブリック全体のポートで、しきい値を超えたエラーをチェックします。

• ibcheckwidth– ファブリック全体のポートで、リンク幅が最高値（通常は4x）となっていることを確認します。1xのリンク幅となっているポートを見つけるのに便利なツールです。

• ibcheckstate– ファブリック全体のLinkUpとなっているポートを確認します。

• ibportstate– Infinibandポートのステートをコントロールします。Enable, Disable, Reset、SpeedとQueryのオプションが使えます。

• ibping– ファブリック内でLIDへPingするツールです。対向ノードではibpingがサービスモードで動作している必要があります。

• ibtracert– デバイスまたはノード間で、GUIDもしくはLIDを使って、IBコネクションのトレースをします。2点間でどのパスが使われているかを確認するのによいツールです。

InfiniBand Fabric Verification Tools (continued)• ibclearcounters & ibclearerrors– ibclearcounters: ファブリック内の全ポートで、パフォーマンスカウンタも含む全カウンタをクリアします。
– ibclearerrors: ファブリック内の全ポートのポートカウンタをクリアします。パフォーマン
スカウンタはクリアされません。

• Ibidsverify.pl– サブネット内の不正なLIDとGUIDをスキャンします。

• ibdiagnet– サブネットの確認とファブリック障害について、広範なチェックをします。

• sminfo– ファブリック内のSubnet Managerへクエリを行うツールです。SMが起動しているか確認するのによいツールです。

• smpquery– ポートとデバイス状況を詳細なクエリを行うツールです。

• saquery– パス、ノード、サービス、ポート情報、マルチキャストグループ情報のクエリを行うツールです。

Linux上からHCAのハードウェア確認# lspci -v -s 06:00.0
06:00.0 InfiniBand: Mellanox Technologies MT25208 [InfiniHost III Ex] (rev 20)
Subsystem: Mellanox Technologies MT25208 [InfiniHost III Ex]
Flags: bus master, fast devsel, latency 0, IRQ 193
Memory at d9500000 (64-bit, non-prefetchable) [size=1M]
Memory at d8800000 (64-bit, prefetchable) [size=8M]
Capabilities: [40] Power Management version 2
Capabilities: [48] Vital Product Data
Capabilities: [90] Message Signalled Interrupts: 64bit+ Queue=0/5 EnableCapabilities: [84] MSI-X: Enable+ Mask- TabSize=32
Capabilities: [60] Express Endpoint IRQ 0# ibv_devinfo
hca_id: mthca0
fw_ver:node_guid:
sys_image_guid:vendor_id:
vendor_part_id:
hw_ver:board_id:
phys_port_cnt:
port:
1
state:
max_mtu:active_mtu:
sm_lid:port_lid:
port_lmc:

1.2.0
0002:c902:0020:98c4
0002:c902:0020:98c7
0x02c925204
0xA0
MT_0230000002
1
PORT_ACTIVE (4)2048 (4)2048 (4)5160x00Linuxカーネルモジュールの確認
lsmodの出力にOFEDが含まれている:
ModuleSize Used by
kxsigod
41984 1
vnic
99104 0xcpm
70376 2 kxsigod,vnic
xsigoib
82968 2 vnic,xcpm
rdma_ucm
45824 0ib_sdp112244 0
rdma_cm
65304 2 rdma_ucm,ib_sdp
iw_cm
42632 1 rdma_cm
ib_addr
40840 1 rdma_cm
ib_uverbs
66752 1 rdma_ucm
ib_umad47784 0ib_mthca
158280 0
ib_ipoib
106992 0
ib_cm
67288 3
xsigoib,rdma_cm,ib_ipoib
ib_sa
73120 5
xcpm,xsigoib,rdma_cm,ib_ipoib,ib_cm
ib_mad71624 6
xsigoib,ib_umad,mlx4_ib,ib_mthca,ib_cm,ib_sa
ib_core96396 13
xsigoib,rdma_ucm,ib_sdp,rdma_cm,iw_cm,
ib_uverbs,ib_umad,mlx4_ib,ib_mthca,ib_ipo
ib,ib_cm,ib_sa,ib_mad
ipv6
409761 15 ib_ipoib

OFED カーネルモジュール:–/etc/init.d/openibd status

HCA driver loaded
Configured IPoIB devices:
ib0 ib1 ib2Currently active IPoIB devices:
The following OFED modules are loaded:
rdma_ucm
ib_sdprdma_cm
ib_addr
ib_ipoib
mlx4_core
mlx4_ib
mlx4_enib_mthca
ib_uverbs
ib_umad
ib_sa
ib_cm
ib_madib_coreHCA のステータス確認 (Linux)
ibstat コマンドで、Linuxサーバ上のHCAのステータスが表示できます。
[root@IBM-x3455 ~]# ibstat
CA 'mthca0'CA type: MT25204
Number of ports: 1
Firmware version: 1.1.0
Hardware version: a0
Node GUID: 0x0002c902002221c4
System image GUID: 0x0002c902002221c7
Port 1:
State: Active (リンクに問題があるときは„Down‟ の表示)
Physical state: LinkUp (リンクに問題があるときは„Polling‟ の表示)
Rate: 10Base lid: 27
LMC: 0SM lid: 5
Capability mask: 0x02510a68
Port GUID: 0x0002c902002221c5

Windows OpenFabrics Enterprise Distribution (OFED)• Windows – ホストドライバコントロール– デバイスドライバ:• メニュー: スタート->コントロールパネル->ハードウェア/デバイスマネージャ• コマンドライン・ユーティリティ“devcon[32|64].exe” が “c:¥Program Files¥XsigoSystems¥Support” ディレクトリにあります:– OFED Mellanox HCA Device Driver (InfiniBand Host Channel Adapters/InfiniHostIII *):» devcon[32|64].exe [ enable | disable | restart ] =infinibandhca– OFED InfiniBand Bus Driver (System devices/InfiniBand Fabric):» Obtain ID of Device Driver using: devcon[32|64].exe find =system@ROOT¥SYSTEM¥*» devcon[32|64].exe [ enable | disable | restart ] =system@ROOT¥SYSTEM¥[ID of Device from above]– Xsigo Virtual Bus Driver (System devices/Xsigo Virtual Bus):» Obtain ID of Device Driver using: devcon[32|64].exe find =system@ROOT¥SYSTEM¥*» devcon[32|64].exe [ enable | disable | restart ] =system@ROOT¥SYSTEM¥[ID of Device from above]– サービス:• メニュー: スタート->すべてのプログラム->管理ツール/サービス (services.msc)• コマンドユーティリティ “net.exe” を使う場合:– Xsigo I/O Virtual Service (XSIGOIOV Service):» net [ start | stop ] xsigoiov

WindowsでHCAが認識されていることを確認• “reg.exe” コマンドでPCIテーブルにMellanox HCAをサーチします:C:¥>reg query HKLM¥System¥CurrentControlSet¥Enum¥PCI /s /f InfiniHost
HKEY_LOCAL_MACHINE¥System¥CurrentControlSet¥Enum¥PCI¥VEN_15B3&DEV_6274&
SUBSYS_627415B3&REV_A0¥4&382a1eaa&0&0008
DeviceDesc
REG_SZ
InfiniHost III Lx (MT25204) - Mellanox
InfiniBand HCA for PCI Express
End of search: 1 match(es) found.

Windows OFED ドライバモジュールの確認

OFED ドライバモジュール( “RUNNING”ステータス):– ドライバモジュールのクエリについては、WindowsのSCコマンドを使います。 – IB Bus ドライバ (ibbus) と Mellanox HCA デバイスドライバが(mthca) ロードされていることを確認:
c:¥>sc query ibbus
SERVICE_NAME: ibbus
TYPE
STATE
WIN32_EXIT_CODESERVICE_EXIT_CODECHECKPOINT
WAIT_HINT: 1: 4: 0: 0: 0x0: 0x0

KERNEL_DRIVERRUNNING(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN))
(0x0)
(0x0)

c:¥>sc query mthca
SERVICE_NAME: mthca
TYPE
STATE
WIN32_EXIT_CODESERVICE_EXIT_CODECHECKPOINT
WAIT_HINT: 1: 4: 0: 0: 0x0: 0x0

KERNEL_DRIVERRUNNING(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN))
(0x0)
(0x0)

HCA のステータス確認(Windows)
HCA ステータスは、WindowsのDoSコマンドから確認できます:InfiniBand ポート LED インジケータ• IB ポート LED の挙動– 各Infinibandポートは２つのLEDで接続状況を知らせます：• 緑 – 物理リンクがUp– 点滅の場合は、Infinibandケーブルの接続不良を意味します。
– ノードとスイッチ間の物理リンクのUpには、Infinibandホストドライバが先にロードされている必要があります。そうでない場合は、ポートのLEDは点灯しません。
• 橙 – 論理リンクがUp– 点滅は、トラフィックがあることを意味します。
– ノードとスイッチ間の論理リンクがUpするには、ファブリック内でSubnet Managerが起動して、アクティブでなければなりません。
（言い換えれば、論理リンクがアクティブかどうかで、ファブリック内でSMが起動しているかを簡単に確認することができます。）

Infiniband 統計情報
perfquery コマンドは、IBサブネット内でどのノード上のInfinibandポートカウンタでも表示できます。
# perfquery [<lid|guid> [[port] ][root@IBM-x3455 ~]# perfquery 27 1
# Port counters: Lid 27 port 1 ← Displays port 1 info for node with LID 27
PortSelect:......................1
CounterSelect:...................0x0000
SymbolErrors:....................0LinkRecovers:....................0
LinkDowned:......................0
RcvErrors:.......................0
RcvRemotePhysErrors:.............0RcvSwRelayErrors:................0
XmtDiscards:.....................0
XmtConstraintErrors:.............0
RcvConstraintErrors:.............0
LinkIntegrityErrors:.............0
ExcBufOverrunErrors:.............0
VL15Dropped:.....................0
XmtBytes:........................2808
RcvBytes:........................2808
XmtPkts:.........................39
RcvPkts:.........................39

カウンタをゼロにリセットするには‘perfquery –R‟ で行います。

トラブルシューティング

Infinibandファブリック・デバッギング

いつファブリックのデバッグや確認が必要となるか？
– 初期インストールと起動時• インストール後は常に、リンクWidth/Speedと全ポートのカウンタを一度はチェックしましょう。

– パフォーマンス問題時– タイムアウトエラー時– アプリケーションの障害時– 再ケーブリング時– ハードウェア・メンテナンスや交換時– モニタリング時 (診断)

一般的なファブリック障害• ハードウェア/ケーブルの問題– 問題原因の最多はケーブル。（折り曲げ、コネクタや損傷、不良など）• 通信エラー– ポートカウンタの問題• サブネットマネージャの構成・設定– 不適切なHOQ/SLV値によりパケットのドロップ (xmitdiscards)• ファブリックのトポロジー障害– 不適切なレイアウトによりファブリック内で輻輳 (over-subscription)• 環境の問題– 電源の障害• サーバ/HCA/Switchステータス– ハードウェアがUpで起動できているか– 各ポートがActiveとなっているか– HCAやスイッチファームウェアが最新となっているか、すべて同じバージョンか一般的な問題解決方法• 外部ポート– ケーブルの再接続 (両端)
– 他のポートでのテスト– ケーブルの交換– PCI riser card やHCAの再挿入– HCAの交換• シャーシベースのスイッチの場合、内部ポート– 特定のスイッチファブリックやIO Cardをトレースで特定– 該当コンポーネントの再挿入– IOカードを別スロットへ移動し、問題がカードに依存するかを確認ファブリックの確認

ファブリックの確認:
1. カウンタのクリア•

ibclearcounters & ibclearerrors

2. ファブリックを通したトラフィックをかける (ノード間の通信が望ましい)•

iperf / netperf / iometer などのツール

3. パフォーマンスとポートカウンタをモニターし、問題がないか確認する•

perfquery

4. 問題個所を特定し、前頁の対処
5. 1-4を繰り返し、問題がないか確認ポートカウンタ
Port Counter

Description

SymbolError

ひとつもしくは複数のVirtual Lane上で、検出されたSymbolエラーの合計(アクティブなポートでのケーブル抜き差しでも検出されることがありますが、定常的に数値があがる場合はリンク障害を示唆します）

LinkErrorRecovery

リンクエラーリカバリ処理が正常に終了した場合のPort Trainingステートマシーンの回数(リンク障害があることを示唆します)

LinkDowned

リンクエラーリカバリ処理が失敗し、そのリンクがダウンした場合のPort Trainingス
テートマシーンの回数(リンクにかかわる作業などの理由でこの値があがることもあります)

PortRcvErrors

ポートで受信したエラーを含むパケットの合計(リンク障害があることを示唆します)

PortRcvRemotePhysicalErrors

ポートで受信したEBPデリミタのマークがされているパケットの合計(これは、問題がファブリック内のどこかで問題があったことを示唆します。このポートがファブリック内の他のスイッチで壊れたパケットを受信したことを示唆します。)

PortRcvSwitchRelayErrors

受信ポートで破棄されたパケットの合計で、それらはスイッチでフォワードすることができなかったパケット数となります。
(必ずしも問題ではありません。このカウンタは、ファブリック内で適当なイベントがあった場合（NFS over IPoIBが動作しているなど）に増加します)

PortXmitDiscards

ポートで破棄されたアウトバンド・パケットの合計。ポートがダウンや輻輳などの理由で破棄されたパケット数。
(HOQ/SLVやその他パラメータの調整が必要かもしれません)ポートカウンタ(続き)Port Counter

PortXmitConstraintErrors

PortRcvConstraintErrors

Description
下記のような理由によりポートから送信できなかったパケットの合計:- FilterRawOutbound が有効で、パケットがRaw- PartitionEnforcementOutbound が有効で、パケットがPkeyチェック、IP バージョンチェック、TransportバージョンチェックでFail(ほとんどの場合、このタイプのエラーは出ません)
下記のような理由によりポートで破棄されたパケットの合計:- FilterRawOutbound が有効で、パケットがRaw- PartitionEnforcementOutbound が有効で、パケットがPkeyチェック、IP バージョンチェック、TransportバージョンチェックでFail(ほとんどの場合、このタイプのエラーは出ません)

LocalLinkIntegrityErrors

ローカル物理エラーの頻度がしきい値を超えた場合の回数。
(このエラーは一般的に問題リンクのみにより増加するので、通常リンク問題を示唆します)

ExcessiveBufferOverrunErrors

連続したフローコントロールのアップデートで、オーバーランエラーが発生した回数(あまり一般的なエラーではありません)

VL15Dropped

リソースの制限（バッファ不足）などにより、VL15の入力パケットがドロップした回数。
(このカウンタは少しの値だけあがることは問題とはみなされません。大きなファブリッ
クではカウンタがあがることがあります)Default Threshold (XgOS)
ibcheckerrs のデフォルト設定# Default thresholds
SymbolErrors=10
LinkRecovers=10
LinkDowned=10
RcvErrors=10
RcvRemotePhysErrors=100
RcvSwRelayErrors=100
XmtDiscards=100
XmtConstraintErrors=100
RcvConstraintErrors=100
LinkIntegrityErrors=10
ExcBufOverrunErrors=10
VL15Dropped=100