Linux InfiniBand


Linux InfiniBandのメモ帳


 ConnectXを10GbEに設定する。

実験環境での設定手順。
Mellanoxのドライバを使用する為にScientific Linux 6.1を使用してます。
カードはHPのHP 448397-B21 DualPort InfiniBand 4x DDR PCI-Eを使用。
ドライバ等はインストール済みの状態で、一カ所設定ファイルを書き換え。

[root@scientific infiniband]# cat /etc/infiniband/connectx.conf
# ConnectX Port Configuration for
/bin/echo eth > /sys/bus/pci/devices/0000\:02\:00.0/mlx4_port1
/bin/echo eth > /sys/bus/pci/devices/0000\:02\:00.0/mlx4_port2

設定コマンドあるけど、そっちだと設定失敗して必ずInfiniBandモードになる。
以下の設定だと何故か駄目。

# ConnectX Port Configuration for
/sbin/connectx_port_config -d  -c eth,eth

InfiniBandモードに戻したかったら、

/bin/echo ib > /sys/bus/pci/devices/0000\:02\:00.0/mlx4_port1
/bin/echo ib > /sys/bus/pci/devices/0000\:02\:00.0/mlx4_port2

で戻ります。

ConnectX-2以降の場合のポート設定

/etc/modprobe.d 以下にmlx4_coreを呼び出す際のオプションを書いたファイルを置く。
うちでは、mlnx.confというファイルを作成している。

options mlx4_core port_type_array=1,2

ポート1から順に指定していく、1はIBで2はEthernetの指定になる。

 Ubuntu 12.04LTSの場合

MLNX_OFEDが対応したので、それをインストール。
ABIに変更があるため、同梱のコマンド・ライブラリ等を使用しないと駄目みたい。
kernel-imageを3.5まで上げてみたが動作した。3.8だとコンパイルエラーでこけます。

 Ubuntu 12.10の場合

Ubuntu 12.10でConnextX-2 MHQH29B-XTCを使って試してみた。
Ubuntu 12.04 LTSだと、iSERにバグがあって色々と面倒だったので、12.10使ってます。
12.10だとKernelが3.5になってるから、色々とRDMA回りが修正されてます。
ちなみに、InfiniBand用のppaがあるので、それを利用。
https://launchpad.net/~narayan-desai/+archive/infiniband
から、パッケージ落とせるのでそれを利用すると楽。

sudo add-apt-repository ppa:narayan-desai/infiniband
sudo vi /etc/apt/sources.list.d/narayan-desai-infiniband-quantal.list

ただし 12.04LTS precise用なので、/etc/apt/sources.list.d/の下の設定ファイルを下記のように書き換える必要あり。

deb http://ppa.launchpad.net/narayan-desai/infiniband/ubuntu precise main
deb-src http://ppa.launchpad.net/narayan-desai/infiniband/ubuntu precise main

ドライバはOFEDのKernel Patchは使用せずに、Kernel標準のドライバを利用してます。
上記のはDebian OFEDからパッケージ取ってきてる模様。
Debian系でも標準パッケージだけで、新しいOFEDに近い環境が使える日も近い?

パッケージ追加

とりあえず、以下のパッケージを追加すれば、動作確認可能です。

sudo aptitude install infiniband-diags

InfiniBandの設定

/etc/modules に下記を追加(debian OFED how toより拝借)

# Hardware drivers
# Choose the apropriate modules from
# /lib/modules/<kernel-version>/updates/kernel/drivers/infiniband/hw
#
# Mellanox ConnectX cards
mlx4_ib
mlx4_en
#ib_mthca # some mellanox cards
#iw_cxgb3 # Chelsio T3 cards
#iw_nes # NetEffect cards
#
# Protocol modules
# Common modules
rdma_ucm
ib_umad
ib_uverbs
# IP over IB
ib_ipoib
# scsi over IB 
ib_srp
# IB SDP protocol
ib_sdp

/etc/network/interfaceで下記のように設定してる。

auto p2p1
iface p2p1 inet manual
        post-up /bin/echo eth > /sys/bus/pci/devices/0000\:02\:00.0/mlx4_port2
        up ifconfig p2p1 0.0.0.0 mtu 9000 promisc up

auto ib0 
iface ib0 inet static
        post-up /bin/echo connected  > /sys/class/net/ib0/mode
        post-up ip link set ib0 mtu 65520
#       post-up /bin/echo datagram > /sys/class/net/ib0/mode
#       post-up ip link set ib0 mtu 4092
#       post-up ip link set ib0 mtu 2044
        address 192.168.17.55
        network 192.168.17.0
        netmask 255.255.255.0
        broadcast 192.168.17.255

p2p1が、MHQH29B-XTRのPort2をEtherにする設定。
ib0が、Port1をIPoIBでの使用する設定。
上記の設定ではconnected modeで設定している。
UDモードで設定したい場合は、コメントになってる部分をコメントアウトする。

はまった所

ESXi 4.1・Linux・OpenIndiana・Windows Server 2008 R2でInfiniBand使用してるけど、OpenSMを最新にするとエラーが orz
とりあえず、Windows Server 2008 R2にインストールしてWindows用のOFED 3.1のOpenSMを使用すると何とか動くので、
それで動作させてますが、WindowsでのIPoIBインターフェスが上がらなくなって鬱 orz

 SCSTでSRP Targetの設定

  • 設定ファイル
# Automatically generated by SCST Configurator v2.0.0.
 

HANDLER vdisk_blockio {
        DEVICE disk00 {
                filename /dev/zvol/zpool/iscsi
                nv_cache 1
        }
}

TARGET_DRIVER ib_srpt {
        enabled 1
        TARGET ib_srpt_target_0 {
                rel_tgt_id 1
                enabled 1 

                GROUP HOST01 {
                        LUN 0 disk00
                }
        }
}

 srptools

とりあえず、OFEDで配ってるのではなくて改造されてる方の所。
https://github.com/bvanassche/srptools
srp initiatorのバックポートとかもされてるみたい。

 iscsi initiatorの設定方法

open-iscsiの設定方法は色々なところに載ってるので省略。

open-iscsiでのiSER initiatorの設定の仕方

root@kvm-server-01:~# iscsiadm --mode node --op update -T  iqn.1986-03.com.sun:02:iscsi-iser-kvm \
--name=iface.iscsi_ifacename --value=iser

と設定してやる。
上手く接続できると以下のように。

root@kvm-server-01:~# iscsiadm -m session -P 3
iSCSI Transport Class version 2.0-870
version 2.0-871
Target: iqn.1986-03.com.sun:02:iscsi-iser-kvm
        Current Portal: 192.168.17.41:3260,2
        Persistent Portal: 192.168.17.41:3260,2
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: iser
                Iface Initiatorname: iqn.1993-08.org.debian:01:355da1e80c7
                Iface IPaddress: <empty>
                Iface HWaddress: (null)
                Iface Netdev: (null)
                SID: 1
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
                ************************
                Negotiated iSCSI params:
                ************************
                HeaderDigest: None
                DataDigest: None
                MaxRecvDataSegmentLength: 128
                MaxXmitDataSegmentLength: 8192
                FirstBurstLength: 65536
                MaxBurstLength: 1048576
                ImmediateData: No
                InitialR2T: Yes
                MaxOutstandingR2T: 1
                ************************
                Attached SCSI devices:
                ************************
                Host Number: 8  State: running
                scsi8 Channel 00 Id 0 Lun: 0
                        Attached scsi disk sdc          State: running

うちの環境では、速度がIPoIBのTCP使用のiscsiに比べて倍くらいまで速度アップしました。
実際にもっと速いストレージ使うとその差はもっと出ると思われ。