InfiniBand
このページでは InifiniBand ネットワークを設定・診断・ベンチマークする方法を説明します。
目次
- 1 イントロダクション
- 2 用語
- 3 ソフトウェアのインストール
- 4 診断やベンチマークに使える InfiniBand プログラム
- 4.1 ibstat - コンピュータの InfiniBand GUID を表示
- 4.2 ibhosts - InfiniBand ネットワークの全てのホストを表示
- 4.3 ibswitches - InfiniBand ネットワークの全てのスイッチを表示
- 4.4 iblinkinfo - InfiniBand ネットワークのリンク情報を表示
- 4.5 ibping - 他の InfiniBand デバイスに Ping
- 4.6 ibdiagnet - サブネットの診断情報を表示
- 4.7 qperf - RDMA や TCP/IP のパフォーマンスを測定
- 4.8 iperf - TCP/IP のパフォーマンスを測定
- 5 トラブルシューティング
- 6 ネットワークの分割
イントロダクション
概要
InfiniBand (略して IB) は Ethernet や Fibre Channel の代わりとなる技術です。InfiniBand は高帯域幅と低遅延を実現します。InfiniBand では特定のマシンのストレージデバイスから他のマシンのユーザー空間に直接データを転送することができ、システムコールのオーバーヘッドを無視できます。CPU 上で動作する Ethernet のネットワークプロトコルとは異なり InfiniBand アダプタがネットワークプロトコルを処理します。10Gb 以上の Ethernet で問題となる広帯域転送における OS や CPU の負担を減らすことが可能です。
InfiniBand のハードウェアは Mellanox (Oracle によって支援されている Voltaire と合併しています) と Intel (QLogic の InfiniBand プログラムを持っています) によって製造されています。InfiniBand はスーパーコンピューターや計算クラスタ、データセンターなどでよく使われています。IBM, HP, Cray は InfiniBand Steering Committee のメンバーです。InfiniBand を使っている企業として Facebook, Twitter, eBay, YouTube, PayPal などが挙げられます。
InfiniBand のソフトウェアは OpenFabrics Open Source Alliance で開発されています。
手頃な中古品
InfiniBand のパッシブケーブルの長さの制限、InfiniBand のアクティブケーブルの高い価格、Ethernet よりも技術的に非常に高度なこと、さらに巨大企業が新しいバージョンを求めることなどから InifiniBand の中古市場は飽和状態となっており、家庭や小規模オフィスの内部ネットワーク用として中古の InfiniBand デバイスが手軽な価格で入手することができます。
帯域幅
信号伝送速度
現在 InfiniBand の伝送速度は PCI Express (略して PCIe) 規格の最大伝送速度に相当します。最初は PCI Extended (略して PCI-X) 相当しかなく性能に著しい制限がありました。レーンあたりの信号速度が 2.5Gb/s (PCI Express v1.0 相当) の SDR (Single Data Rate) から DDR (Double Data Rate) では 5Gb/s (PCI Express v2.0)、QDR (Quad Data Rate) では 10Gb/s (PCI Express 3.0)、FDR (Fourteen Data Rate) では 14.0625Gbps (PCI Express 4.0) と倍々に増やされていき、最新の EDR (Enhanced Data Rate) では 25Gb/s に到達しています。2017年に予定されている HDR (High Data Rate) は 50Gb/s です。
実効スループットとマルチ仮想レーン
SDR, DDR, QDR では (8ビットのデータが10ビットの信号になる) 8/10 変換が使われるため、実効スループットは 80% まで落ちます。SDR は 2Gb/s/レーン、DDR は 4Gb/s/レーン、QDR は 8Gb/s/レーンです。FDR から、InfiniBand は 64/66 変換を使用して信号比 96.97% の高い実効スループットを発揮します。FDR は 13.64Gb/s/レーン、EDR は 24.24Gb/s/レーン、HDR は 48.48Gb/s/レーンです。
InfiniBand デバイスでは複数の仮想レーンを使うことができ、大抵の場合は 4X が使われますが、低速な 1X や高速な 12X が使われることもあります。
一般的な 4X レーンのデバイスを使用した場合、実効スループットは次のとおりです: SDR は 8Gb/s、DDR は 16Gb/s、QDR は 32Gb/s、FDR は 54.54Gb/s、EDR は 96.97Gb/s、HDR は 193.94Gb/s。
遅延
InfiniBand のレイテンシは非常に小さいです: SDR (5us)、DDR (2.5us)、QDR (1.3us)、FDR (0.7us)、EDR (0.5us)、HDR (0.5us 未満)。10Gb Ethernet のレイテンシは約 7.22us であるため FDR の10倍以上です。
後方互換
ほとんどの InfiniBand デバイスには後方互換性があります。一番低いバージョンにあわせて接続は確立されます。PCI Express 8x スロット用の DDR アダプタは PCI Express 4x スロットでも動作します (帯域幅は半分になります)。
ケーブル
InfiniBand のパッシブ銅線ケーブルは QDR を使用する場合は最大7メートル、FDR を使用する場合は最大3メートルです。
InfiniBand のアクティブファイバー (光) ケーブルは FDR の場合で最大300メートルです (この記事では触れませんが派生の FDR10 では最大100メートルです)。
Mellanox の MetroX には80キロメートル (50マイル) までの接続ができる製品が存在します。1キロメートルあたり約 5us の遅延が発生します。
InfiniBand のケーブルを使うことで2台のコンピュータを直接接続できます (スイッチは不要です)。InfiniBand のクロスオーバーケーブルというものは存在しません。
用語
ハードウェア
InfiniBand 専用に製造されているアダプタ、スイッチ、ルーター、ブリッジ/ゲートウェイです。
- HCA (Host Channel Adapter)
- Ethernet の NIC (ネットワークインターフェイスカード) と似ています。InfiniBand ケーブルを PCI Express バスに接続します。HCA の世代によりますがバスの最大速度が使われます。InfiniBand ネットワークの終点ノードはトランスポート層として働き、InfiniBand の verbs インターフェイスをサポートしています。
- スイッチ
- Ethernet の NIC と似ています。同一の InfiniBand サブネット上で異なるリンクにパケットを移動します。
- ルーター
- Ethernet のルーターと似ています。異なる InfiniBand サブネット間でパケットを移動します。
- ブリッジ/ゲートウェイ
- InfiniBand と Ethernet ネットワークを接続するコンピュータ、あるいは独立のハードウェア。
GUID
Ethernet の MAC アドレスに似ていますが、デバイスには複数の GUID が割り当てられます。ハードウェアの製造メーカーによって割り当てられる GUID はマシンを再起動しても変化しません。64ビットのアドレスとしてアダプタ、スイッチ、ルーター、ブリッジ/ゲートウェイに割り当てられます (24ビットはメーカーのプレフィックスで残り40ビットがデバイスの識別子です)。
- Node GUID
- HCA, スイッチ, ルーターを識別します。
- Port GUID
- HCA, スイッチ, ルーターのポートを識別します (大抵 HCA には複数のポートが存在します)。
- System GUID
- 複数の GUID をひとつのエンティティで扱えます。
- LID (Local IDentifier)
- サブネットマネージャによって割り当てられる16ビットのアドレス。パケットをルーティングするために使われます。再起動すると値が変わります。
ソフトウェア
- SM (Subnet Manager)
- InfiniBand のサブネットを活発に管理します。InfiniBand ネットワークに接続されたコンピュータで動作するソフトウェアプログラムを使用するか、専用の InfiniBand デバイスや InfiniBand スイッチに機能が内蔵されています。サブネット上の全てのものを初期化・設定して LID (Local IDentifier) を割り当てます。サブネットを通じてトラフィックパスを確立し、不正信号を隔離し、不許可のサブネットマネージャを防止します。サブネットはひとつでもサブネットマネージャの下、複数のスイッチを使うことができます。予備のサブネットマネージャを同一サブネット上に配置することもできますが、同時に複数のサブネットマネージャが使われることはありません。
- MAD (MAnagement Datagram)
- InfiniBand デバイスと通信するときにサブネットマネージャが使用する標準メッセージ形式。UD (Unreliable Datagram) によって運搬されます。
ソフトウェアのインストール
ここでは InfiniBand に関する AUR パッケージを紹介しています。AUR パッケージのインストール方法については AUR を見てください。
ファームウェアのアップグレード
最新ファームウェアを使うことで性能を著しく向上させたり、接続時の問題を解決したりすることができます。
Mellanox
- mstflintAUR, libibumadAUR, libibmadAUR パッケージをインストールしてください。
- アダプタの PCI デバイス ID を確認してください (例えば以下の場合は "05:00.0" がアダプタの PCI デバイス ID になります):
$ lspci | grep Mellanox
05:00.0 InfiniBand: Mellanox Technologies MT25418 [ConnectX VPI PCIe 2.0 2.5GT/s - IB DDR / 10GigE] (rev a0)
- アダプタのファームウェアバージョンとアダプタの PSID を確認してください:
# mstflint -d <adapter PCI device ID> query
... FW Version: 2.7.1000 ... PSID: MT_04A0110002
- 最新版のファームウェアを確認:
- Mellanox のファームウェアダウンロードページ を開く。
- 使用しているデバイスのカテゴリを選択する。
- リストから使用している (mstflint で確認した) デバイスの PSID を検索する。
- ファームウェアイメージのファイル名を確認して現在使っている FW バージョンよりも新しいかどうか確認する (例えば fw-25408-2_9_1000-MHGH28-XTC_A1.bin.zip という名前のファイルであればファームウェアのバージョンは 2.9.1000 FW です)。
- 新しいバージョンが存在する場合、ファームウェアをダウンロードしてアダプタに書き込んでください:
$ unzip <firmware .bin.zip file name> # mstflint -d <adapter PCI device ID> -i <firmware .bin file name> burn
Intel/QLogic
http://driverdownloads.qlogic.com/QLogicDriverDownloads_UI/Defaultnewsearch.aspx や https://downloadcenter.intel.com/ を見てください。
カーネルモジュール
最新のカーネルには InifiniBand のモジュールが組み込まれており、ロードすることで使うことができます。
- rdmaAUR をインストール。
/usr/lib/udev/rules.d/98-rdma.rules
によって cxgb*, ib_*, mlx*, iw_*, be2net, usnic* ハードウェアカーネルモジュールがロードされます。- (
rdma.service
によって起動される)/usr/lib/rdma/rdma-init-kernel
によって/etc/rdma/rdma.conf
に指定されたカーネルモジュールがロードされます。
オプション | カテゴリ | カーネルモジュール |
---|---|---|
(常時) | Core | ib_core, ib_mad, ib_sa, and ib_addr |
(常時) | Core ユーザー | ib_umad, ib_uverbs, ib_ucm, and rdma_ucm |
(常時) | Core 接続マネージャ | iw_cm, ib_cm, and rdma_cm |
IPOIB_LOAD=yes (default yes)* | Internet Protocol over InfiniBand | ib_ipoib |
RDS_LOAD=yes (default yes) | Reliable Datagram Service | rds, rds_tcp, and rds_rdma |
SRP_LOAD=yes (default yes) | SCSI Remote Protocol イニシエータ | ib_srp |
SRPT_LOAD=yes (default yes) | SCSI Remote Protocol ターゲット | ib_srpt |
ISER_LOAD=yes (default yes) | iSCSI over RDMA イニシエータ | ib_iser. |
ISERT_LOAD=yes (default no) | iSCSI over RDMA ターゲット | ib_isert. |
(lhca デバイスの場合) | IBM pSeries アダプタ (rare) | ib_ehca |
(be2net モジュールの場合) | Emulex アダプタ (rare) | ocrdma |
サブネットマネージャ
InfiniBand ネットワークはサブネットマネージャを必要とします (サブネットマネージャを複数用意して冗長構成にすることもできます)。サブネットマネージャが存在しない場合でも、デバイスからリンクを認識することはできますが、"Initializing" 状態から永遠に "Active" になりません。サブネットマネージャは新しいアダプタが追加されていないか頻繁に (5あるいは30秒ごとに) InfiniBand をチェックして、アダプタをネットワークのルーティングテーブルに追加します。サブネットマネージャが組み込まれている InfiniBand スイッチを持っている場合、それを使ってください。持っていない場合はソフトウェアのサブネットマネージャを代わりとして使うことができます。InfiniBand サブネットマネージャ専用のデバイスも存在します。
ソフトウェアサブネットマネージャ
特定のコンピュータで以下を実行:
- カーネルモジュールをロードするために rdma をインストール
- opensmAUR と libibumadAUR をインストール
opensm.service
を起動・有効化
実行すると接続された InfiniBand ポートの状態が全て "Active" になり、物理状態が "LinkUp" になります。infiniband-diagsAUR に含まれている ibstat を実効することで確認できます:
$ ibstat
... (look at the ports shown you expect to be connected) State: Active Physical state: LinkUp ...
もしくは /sys
ファイルシステムを確認:
$ cat /sys/class/infiniband/kernel_module/ports/port_number/phys_state
5: LinkUp
$ cat /sys/class/infiniband/kernel_module/ports/port_number/state
4: ACTIVE
TCP/IP over InfiniBand (IPoIB)
InfiniBand アダプタ上で動作する仮想の Ethernet アダプタを作成することができます。TCP/IP しか扱えないプログラムでも (間接的に) InfiniBand ネットワークを使えるようにするためです。InfiniBand ネットワークでインターネットトラフィックを転送するためではありません (インターネット接続のほうが Ethernet デバイスよりも高速な環境なら話は別です。つまり、Internet2 に参加していて、超高性能なスーパーコンピュータやクラスタ、データセンターが使えて、さらに Google Fiber や Comcast によって提供されている 2Gbps 以上のインターネット接続が使用できる地域に居住しているという条件を満たす場合です。2015年現在ではほぼ不可能です)。
TCP/IP 経由で InfiniBand を使用するとプログラムのパフォーマンスが落ちます。IPoIB を使用すると全てのトラフィックは通常の TCP スタックを通過します。つまりシステムコール、メモリコピー、CPU で動作するネットワークプロトコルなどが必要になります。
- カーネルモジュールをロードするために rdma をインストール。
- (
ibX
という名前の) ネットワークインターフェイスが作成されるので (例:ib0
)、普通の Ethernet と同じように設定します。ゲートウェイを使用せずひとつのサブネットでポイントツーポイント接続を行う場合:- systemd-networkd を使う (既存のプライベートネットワーク IP アドレスと衝突しないように IP アドレスは必要に応じて置き換えてください):
/etc/systemd/network/interface.network
[Match] Name=interface [Network] Address=192.168.2.1/24
-
- systemd サービスによる固定 IP アドレス (既存のプライベートネットワーク IP アドレスと衝突しないように IP アドレスは必要に応じて置き換えてください):
/etc/conf.d/net-conf-interface
address=192.168.2.1 netmask=24 broadcast=192.168.2.255
接続モード
IPoIB は "datagram" (デフォルト) または "connected" モードで実行できます。Connected モードでは MTU を高く設定できますが、datagram モードと比べて約 5 %以上 TCP のレイテンシが増加します。
現在使われているモードを確認するには:
$ cat /sys/class/net/interface/mode
MTU
datagram モードでは UD (Unreliable Datagram) トランスポートが使われ、MTU は強制的に 2044 バイトになります (技術的には IB L2 MTU (4バイトは IPoIB のカプセル化ヘッダ用) ですが通常は 2044 バイトです)。
connected モードでは RC (Reliable Connected) トランスポートが使われ、MTU は最大で IP パケットの最大値である 64K に設定できます (正確な値は 65520 バイト)。
MTU を確認するには:
$ ip link show interface
接続モードと MTU の設定
デフォルトの接続モードや MTU を変更したい場合は ipoibmodemtu
が必要です。
- TCP/IP over InfiniBand (IPoIB) をインストール・設定。
- ipoibmodemtuAUR をインストール。
/etc/ipoibmodemtu.conf
でipoibmodemtu
を設定。ファイル内に説明が書かれています。- デフォルトでは InfiniBand ポート
ib0
がconnected
モードで MTU65520
に設定されています。
- デフォルトでは InfiniBand ポート
ipoibmodemtu.service
を起動・有効化。
設定による結果は様々です。connected
モードで MTU 65520
を使うことで (2倍以上となる) ギガ級の速度がでることもありますし、同程度あるいは速度が落ちることもあります。qperf や iperf を使って確認してください。
SDR の InfiniBand ネットワーク (論理値 8 Gb/s) で qperf を実行した例:
モード | MTU | MB/s | 遅延 (us) |
---|---|---|---|
datagram | 2044 | 707 | 19.4 |
connected | 2044 | 353 | 18.9 |
connected | 65520 | 726 | 19.6 |
InfiniBand 経由でリモートデータストレージを使う
iSCSI, iSCSI と iSER, SRP を使うことで、InfiniBand ネットワーク経由でターゲット (ホスト/サーバー) からイニシエータ (ゲスト/クライアント) に物理デバイスや仮想デバイスを共有することができます。ネットワーク共有フォルダをマウントする (Samba や NFS などの) 伝統的なファイル共有とは違って、イニシエータは共有デバイスをブロックレベルデバイスとして認識することができます。
欠点として一度に複数のシステムが共有デバイスを使うことはできず、既に共有されているデバイスをターゲットや他のイニシエータでマウントしようとしても失敗します (イニシエータ側で伝統的なファイル共有を動作させることは可能です)。
利点は物理的に離れていても高帯域幅でリモートからイニシエータのルートファイルシステムを使えることです (遠隔ブート)。
targetcli
targetcli
はシェルのように機能し、複雑な /etc/target/saveconfig.json
を擬似ファイルシステムとして作成します (手動で作成する必要はありません)。
インストールと使用方法
ターゲットで以下を実行:
- targetcli-fbAUR, python-configshell-fbAUR, python-rtslib-fbAUR をインストール。
target.service
を起動・有効化。
targetcli
では以下のことが出来ます:
- どの疑似ディレクトリでも、
help
を実行することで擬似ディレクトリで使えるコマンドを確認できます。また、help command
(help create
など) で詳しいヘルプが表示されます。 - ほとんどのコマンドでタブ補完が使えます。
- 擬似ディレクトリや擬似ファイルシステムを確認するには
ls
を実行してください。
バックストアの作成
targetcli
を使って共有したいデバイスや仮想デバイスのバックストアを設定してください (name はバックストアの名前に置き換えてください):
- ブロックデバイスを共有するには、次のコマンドを実行:
cd /backstores/block
とcreate name dev
(dev は共有したいブロックデバイスに置き換えてください、例:/dev/sda
,/dev/sda4
,/dev/disk/by-id/x
, LVM 論理ボリューム/dev/vg0/lv1
)。 - ファイルを仮想ブロックデバイスとして共有するには、次のコマンドを実行:
cd /backstores/fileio
とcreate name file
(file は共有したいファイルに置き換えてください、例:/path/to/file
)。 - 物理的な SCSI デバイスをパススルーして共有するには、次のコマンドを実行:
cd /backstores/pscsi
とcreate name dev
。 - RAM ディスクを共有するには、次のコマンドを実行:
cd /backstores/ramdisk
とcreate name size
(size は作成する RAM ディスクの容量に置き換えてください、例:512MB
,20GB
)。
iSCSI
iSCSI を使うことでネットワーク経由でストレージデバイスや仮想ストレージデバイスを使用できます。InfiniBand ネットワークの場合、ストレージは IPoIB あるいは iSER で使用できます。
iSCSI ターゲット, iSCSI イニシエータ, iSCSI ブートの記事と重複するところは多いですが、InfiniBand で使用するために変えなくてはいけないところも多く存在します。
IPoIB を使う
ターゲット環境の設定を先に行ってから一時的にイニシエータ環境に切り替えます。
- ターゲットとイニシエータの両方で TCP/IP over InfiniBand をインストール。
- ターゲット側で、共有したいデバイスや仮想デバイスごとに
targetcli
で以下を実行:- バックストアを作成。
- バックストアごとに iqn (iSCSI Qualified Name) を作成 (他のシステムから認識されるストレージの名前):
cd /iscsi
とcreate
を実行。ランダムに生成されたターゲット名が表示されます (例:iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.3d74b8d4020a
)。- Set up the tpg (Target Portal Group), automatically created in the last step as tpg1.
- lun (Logical Unit Number) を作成。
cd randomly_generated_target_name/tpg1/luns
とcreate storage_object
を実行。storage_object
は既存のストレージオブジェクトのフルパスに置き換えてください (/backstores/block/name
)。
- acl (Access Control List) を作成。
cd ../acls
とcreate wwn
を実行。wwn
はイニシエータシステムの iqn (iSCSI Qualified Name) に置き換えてください。- (open-iscsi あるいは open-iscsi-gitAUR をインストールしてから) イニシエータシステムで次のコマンドを実行することで
wwn
を確認できます:cat /etc/iscsi/initiatorname.iscsi
。
- (open-iscsi あるいは open-iscsi-gitAUR をインストールしてから) イニシエータシステムで次のコマンドを実行することで
- lun (Logical Unit Number) を作成。
cd /
,saveconfig
,exit
を実行して保存して終了してください。
- イニシエータ側では以下を実行:
- open-iscsi または open-iscsi-gitAUR をインストール。
open-iscsi.service
を起動・有効化。- At this point, if you need this initiator system's iqn (iSCSI Qualified Name), aka its wwn (World Wide Name), for setting up the target system's
luns
, run:cat /etc/iscsi/initiatorname.iscsi
. - Discover online targets. Run
iscsiadm -m discovery -t sendtargets -p portal
, where portal is an IP (v4 or v6) address or hostname. - Login to discovered targets. Run
iscsiadm -m node -L all
. - View which block device ID was given to each target logged into. Run
iscsiadm -m session -P 3 | grep Attached
. The block device ID will be the last line in the tree for each target. (-P
is the print command, its option is the verbosity level, and only level 3 lists the block device IDs.)
iSER を使う
iSER (iSCSI Extensions for RDMA) は TCP/IP ではなく InfiniBand の RDMA プロトコルを活用します。TCP/IP のオーバーヘッドを排除することで高帯域・低遅延を実現し、CPU の使用率を下げます。
iSER デバイスが複数ある場合のバグと対処方法
open-iscsi 2.0_873-7 現在、iSER デバイスが複数存在する場合、以下のように iscsiadm
がエラーを吐きます:
iscsiadm: recv's end state machine bug? iscsiadm: Could not perform SendTargets discovery: iSCSI PDU timed out
バグ自体はかなり前に解決されていますが、open-iscsi の開発者 は2012年からリリースタグを付けていないため open-iscsi 2.0_873-7 では2012年時点でのソースコードが使われます。以下の方法で解決できます:
- 最新の開発ブランチのソースコードからビルドされる open-iscsi-gitAUR を使用する。
- 下のセクションで説明している対処方法を使う。
iSER デバイスの設定
iSER デバイスがひとつしかない場合や open-iscsi-gitAUR をインストールして複数の iSER デバイスを使用する場合はこちらのセクションを読んでください。open-iscsi を使用して複数の iSER デバイスを使いたい場合は、下のセクションに書かれている対処方法を読んでください。
iSCSI Over IPoIB の手順に以下の変更を加えてください:
- IPoIB をインストールするかわりに、RDMA をインストールしてカーネルモジュールをロードすることができます。
- On the target system, after everything else is setup, while still in
targetcli
, enable iSER on the target:- Run
cd /iscsi/iqn/tpg1/portals/0.0.0.0:3260
for each iqn you want to have use iSER rather than IPoIB.- Where iqn is the randomly generated target name, i.e. iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.3d74b8d4020a.
- Run
enable_iser true
. cd /
,saveconfig
,exit
を実行して保存して終了してください。
- Run
- On the initiator system, when running
iscsiadm
to discover online targets and login to them, use the additional argument-I iser
.
open-iscsi 2.0_873-7 で複数の iSER デバイスを扱う
The bug only affects discovering multiple iSER devices. Once they're discovered, you can login to them, and fully use them. So as a workaround, you can discover the targets using IPoIB, change the target to iSER, make the 3 changes (filename, and two setting values) that open-iscsi -m discovery
would make using iSER on the initiator, and proceed as normal.
- On the target system, follow the iSCSI Over IPoIB instructions, without the changes for Configuring iSER devices.
- On the initiator system, follow the iSCSI Over IPoIB instructions, up to and including discovering online targets, without the changes for Configuring iSER devices. Then:
systemctl stop open-iscsi
を実行。- Rename each
/etc/iscsi/nodes/iqn/ip-port/default
file toiser
, and edit each of these files.- Where iqn is the randomly generated target name in targetcli, i.e. iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.3d74b8d4020a.
- Where ip-port-etc is a directory in the form "192.168.2.1,3260,1".
iface.iscsi_ifacename = default
をiface.iscsi_ifacename = iser
に変更。iface.transport_name = tcp
をiface.transport_name = iser
に変更。
- ターゲット側で、iSER デバイスの設定の手順に従って iSER を有効にしてください。
- イニシエータ側で以下を実行してください:
systemctl start open-iscsi
を実行。- 探知したターゲットにログインするときに、
iscsiadm -m node -L all -I iser
を実行。
診断やベンチマークに使える InfiniBand プログラム
ibstat - コンピュータの InfiniBand GUID を表示
ibstat はコンピュータに接続されている InfiniBand アダプタの詳しい情報を表示します。モデル番号、ポートの数、ファームウェアやハードウェアのバージョン、ノード、システムイメージ、ポートの GUID、ポートの状態、物理状態、ベース LID、LMC、SM LID、ケイパビリティマスク、リンク層などが表示されます。
$ ibstat
CA 'mlx4_0' CA type: MT25418 Number of ports: 2 Firmware version: 2.9.1000 Hardware version: a0 Node GUID: 0x0002c90300002f78 System image GUID: 0x0002c90300002f7b Port 1: State: Active Physical state: LinkUp Rate: 20 Base lid: 3 LMC: 0 SM lid: 3 Capability mask: 0x0251086a Port GUID: 0x0002c90300002f79 Link layer: InfiniBand Port 2: State: Down Physical state: Polling Rate: 10 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x02510868 Port GUID: 0x0002c90300002f7a Link layer: InfiniBand
上記は Mellanox Technologies (MT) アダプタの例です。モデル番号の代わりに PCI デバイス ID が報告されています (25418)。状態が "Active" となっているのは、サブネットマネージャに正しく接続されていることを意味します。物理状態が "LinkUp" なのは、ケーブルによる電気接続が確立されていることを意味しますが、必ずしもサブネットマネージャに正しく接続されているわけではありません。合計レートは 20 Gb/s となっています (5.0 Gb/s の信号レートと4つの仮想レーンが使われています)。サブネットマネージャは lid が3のポートが割り当てられています。
ibhosts - InfiniBand ネットワークの全てのホストを表示
ibhosts は InfiniBand ネットワーク上の各ホストの Node GUID、ポートの数、デバイス名を表示します。
# ibhosts
Ca : 0x0002c90300002778 ports 2 "MT25408 ConnectX Mellanox Technologies" Ca : 0x0002c90300002f78 ports 2 "hostname mlx4_0"
ibswitches - InfiniBand ネットワークの全てのスイッチを表示
ibswitches は InfiniBand ネットワーク上の各スイッチの Node GUID、ポートの数、デバイス名を表示します。直接接続している場合、何も表示しません。
# ibswitches
iblinkinfo - InfiniBand ネットワークのリンク情報を表示
iblinkinfo はデバイス名, Port GUID, 仮想レーンの数, 信号伝送速度, ポート状態, 物理状態, 接続先などを表示します。
# iblinkinfo
CA: MT25408 ConnectX Mellanox Technologies: 0x0002c90300002779 4 1[ ] ==( 4X 5.0 Gbps Active/ LinkUp)==> 3 1[ ] "kvm mlx4_0" ( ) CA: hostname mlx4_0: 0x0002c90300002f79 3 1[ ] ==( 4X 5.0 Gbps Active/ LinkUp)==> 4 1[ ] "MT25408 ConnectX Mellanox Technologies" ( )
上記の例では2つのアダプタが直接接続されており通信速度は 5.0 Gb/s で、4つの仮想レーン (4X) が使われていることがわかります。
ibping - 他の InfiniBand デバイスに Ping
ibping は他の InfiniBand GUID に ping を実行します。ibping を使うときは片方のコンピュータでサーバーモードで起動しておき、他のコンピュータでクライアントモードで実行する必要があります。
ibping をサーバーモードで起動するには:
# ibping -S
特定のポートに ping するので CA 名や Node あるいは System GUID を使うことはできません。クライアントモードで実行するときは -G
で Port GUID を指定するか、-L
で Lid を指定します:
# ibping -G 0x0002c90300002779 -or- # ibping -L 1
Pong from hostname.(none) (Lid 1): time 0.053 ms Pong from hostname.(none) (Lid 1): time 0.074 ms ^C --- hostname.(none) (Lid 4) ibping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1630 ms rtt min/avg/max = 0.053/0.063/0.074 ms
IPoIB を使っている場合、通常の ping
で TCP/IP スタックを使用して ping できます。ibping は InfiniBand インターフェイスを使うため TCP/IP スタックは使用されません。
ibdiagnet - サブネットの診断情報を表示
ibdiagnet はサブネットについて潜在的な問題を表示します。オプションを付けずに実行できます。-lw <1x|4x|12x>
でコンピュータのアダプタの期待されるリンク幅 (仮想レーンの数) を指定することができ、アダプタが適切に動作しているかどうか確認することが可能です。また、-ls <2.5|5|10>
でコンピュータのアダプタの期待されるリンク速度 (信号レート) を指定して正しく動作しているか確認できますが、FDR+ デバイスで 10 よりも大きいオプションを指定することはできません。-c <count>
で送信されるパケットのデフォルト数が上書きされます。
# ibdiagnet -lw 4x -ls 5 -c 1000
Loading IBDIAGNET from: /usr/lib/ibdiagnet1.5.7 -W- Topology file is not specified. Reports regarding cluster links will use direct routes. Loading IBDM from: /usr/lib/ibdm1.5.7 -I- Using port 1 as the local port. -I- Discovering ... 2 nodes (0 Switches & 2 CA-s) discovered. -I--------------------------------------------------- -I- Bad Guids/LIDs Info -I--------------------------------------------------- -I- No bad Guids were found -I--------------------------------------------------- -I- Links With Logical State = INIT -I--------------------------------------------------- -I- No bad Links (with logical state = INIT) were found -I--------------------------------------------------- -I- General Device Info -I--------------------------------------------------- -I--------------------------------------------------- -I- PM Counters Info -I--------------------------------------------------- -I- No illegal PM counters values were found -I--------------------------------------------------- -I- Links With links width != 4x (as set by -lw option) -I--------------------------------------------------- -I- No unmatched Links (with width != 4x) were found -I--------------------------------------------------- -I- Links With links speed != 5 (as set by -ls option) -I--------------------------------------------------- -I- No unmatched Links (with speed != 5) were found -I--------------------------------------------------- -I- Fabric Partitions Report (see ibdiagnet.pkey for a full hosts list) -I--------------------------------------------------- -I- PKey:0x7fff Hosts:2 full:2 limited:0 -I--------------------------------------------------- -I- IPoIB Subnets Check -I--------------------------------------------------- -I- Subnet: IPv4 PKey:0x7fff QKey:0x00000b1b MTU:2048Byte rate:10Gbps SL:0x00 -W- Suboptimal rate for group. Lowest member rate:20Gbps > group-rate:10Gbps -I--------------------------------------------------- -I- Bad Links Info -I- No bad link were found -I--------------------------------------------------- ---------------------------------------------------------------- -I- Stages Status Report: STAGE Errors Warnings Bad GUIDs/LIDs Check 0 0 Link State Active Check 0 0 General Devices Info Report 0 0 Performance Counters Report 0 0 Specific Link Width Check 0 0 Specific Link Speed Check 0 0 Partitions Check 0 0 IPoIB Subnets Check 0 1 Please see /tmp/ibdiagnet.log for complete log ---------------------------------------------------------------- -I- Done. Run time was 0 seconds.
qperf - RDMA や TCP/IP のパフォーマンスを測定
qperf は RDMA (SDP, UDP, UD, UC) や TCP/IP (IPoIB) における帯域幅や遅延を測定できます。
qperf を使う場合はまずどれかのコンピュータでサーバーモードで実行してください:
$ qperf
そして別のコンピュータでクライアントモードで起動してください (SERVERNODE はホストネーム (IPoIB の場合は TCP/IP アドレス) に、TESTS はテストの名前に置き換えてください):
$ qperf SERVERNODE [OPTIONS] TESTS
TCP/IP over IPoIB
$ qperf 192.168.2.2 tcp_bw tcp_lat
tcp_bw: bw = 701 MB/sec tcp_lat: latency = 19.8 us
iperf - TCP/IP のパフォーマンスを測定
iperf は InfiniBand 用のプログラムではなく、TCP/IP や UDP をテストするためのプログラムです。IPoIB を使用した場合の InfiniBand の TCP/IP のパフォーマンスは qperf でテストできますが、iperf を使うこともできます。
どれかのコンピュータで iperf をサーバーモードで起動してください:
$ iperf3 -s
そして別のコンピュータでクライアントモードで実行してください:
$ iperf3 -c 192.168.2.2
[ 4] local 192.168.2.1 port 20139 connected to 192.168.2.2 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-1.00 sec 639 MBytes 5.36 Gbits/sec ... [ 4] 9.00-10.00 sec 638 MBytes 5.35 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 4] 0.00-10.00 sec 6.23 GBytes 5.35 Gbits/sec sender [ 4] 0.00-10.00 sec 6.23 GBytes 5.35 Gbits/sec receiver iperf Done.
iperf shows Transfer in base 10 GB's, and Bandwidth in base 2 GB's. So, this example shows 6.23GB (base 10) in 10 seconds. That's 6.69GB (base 2) in 10 seconds. (6.23 * 2^30 / 10^9) That's 5.35 Gb/s (base 2), as shown by iperf. (6.23 * 2^30 / 10^9 * 8 / 10) That's 685 MB/s (base 2), which is roughly the speed that qperf reported. (6.23 * 2^30 / 10^9 * 8 / 10 * 1024 / 8)
トラブルシューティング
接続できない
リンク, 物理状態, ポート状態
- InfiniBand のハードウェアモジュールが認識されているか確認してください:
$ dmesg | egrep -i "Mellanox|InfiniBand|QLogic|Voltaire" # If you have an Intel adapter, you'll have to use Intel here and look through a few lines if you have other Intel hardware
[ 6.287556] mlx4_core: Mellanox ConnectX core driver v2.2-1 (Feb, 2014) [ 8.686257] <mlx4_ib> mlx4_ib_add: mlx4_ib: Mellanox ConnectX InfiniBand driver v2.2-1 (Feb 2014)
または:
$ ls -l /sys/class/infiniband
mlx4_0 -> ../../devices/pci0000:00/0000:00:03.0/0000:05:00.0/infiniband/mlx4_0
何も表示されない場合、カーネルがアダプタを認識していません。(mlx4_0 カーネルモジュールを使用する) Mellanox の ConnectX アダプタを使用している場合に上記のように出力されます。
- ポートや物理状態を確認してください:
$ ibstat
(look at the port shown you expect to be connected)
または:
$ cat /sys/class/infiniband/<kernel module>/ports/<port number>/phys_state
5: LinkUp
$ cat /sys/class/infiniband/<kernel module>/ports/<port number>/state
4: ACTIVE
物理状態が "LinkUp" になっているか確認してください。なっていない場合、ケーブルが接続されていないか、ケーブルが壊れているかです。ポートの状態は "Active" になっていなければなりません。"Initializing" や "INIT" になっている場合、サブネットマネージャが存在しないか、ネットワークのルーティングテーブルにポートを追加できていません。
- InfiniBand を直接使用している場合 ibping が通るか確認する。IPoIB を使っている場合は
ping
が成功するか確認する。
getaddrinfo failed: Name or service not known
- ibhosts を実行して各行の末尾に表示される CA 名を確認してください。
速度がでない
- まずは期待値を確認してください。
How have you determined you have a speed problem? Are you using qperf or iperf, which both transmit data to and from memory rather than hard drives. Or, are you benchmarking actual file transfers, which relies on your hard drives? Unless you're running RAID to boost speed, even with the fastest SSD's available in mid 2015, a single hard drive (or sometimes even multiple ones) will be bottlenecking your InfiniBand transfer speeds. Are you using RDMA or TCP/IP via IPoIB? If so, there is a performance hit for using IPoIB instead of RDMA.
- リンク速度を確認する:
$ ibstat
(look at the Rate shown on the port you are using.)
または:
# iblinkinfo
(look at the middle part formatted like "4X 5.0 Gbps")
または:
$ cat /sys/class/infiniband/<kernel module>/ports/<port number>/rate
20 Gb/sec (4X DDR)
帯域幅や仮想レーンの数が正しいか確認してください。
# ibdiagnet -lw <expected number of virtual lanes -ls <expected signaling rate> -c 1000
ネットワークの分割
InfiniBand のサブネットは使用者やアプリケーションごとに分割することができ、サービスのセキュリティや品質を上げることができます。各パーティションは PKEY (Partition Key) で識別されます。
libsdp で SDP (Sockets Direct Protocol) を使用する
代わりに librdmacmAUR を使ってください (開発当初の名前は rsockets でした)。
librdmacm (and formerly libsdp) use LD_PRELOAD
to intercept non-Infiniband programs' socket calls, and transparently (to the program) send them over RDMA over InfiniBand. That is, it can dramatically speed up programs built for TCP/IP, more than you can achieve by using them with IPoIB. It avoids the need to change a program's source code to work with InfiniBand, and can even be used on programs without the user having the source code. It does not work on programs that statically linked in socket libraries.
libsdp was deprecated. The ib_sdp kernel module is no longer maintained or distributed.