SlideShare a Scribd company logo
1 of 61
Download to read offline
家庭内 LAN を高速に!
~ InfiniBand on Debian ~
  for 大統一 Debian 勉強会 , 2012/6/23




                     @tyamadajp
今日の内容
1. InfiniBand とは?(概略)
2. Debian で使ってみよう(基本セットアップ)
3.で、どんな感じ?( SAN 、 NAS を立ててみよう)
4.管理ツールの使い方
5.プロトコル& API について
今日の内容
1. InfiniBand とは?(概略)
2. Debian で使ってみよう(基本セットアップ)
3.で、どんな感じ?( SAN 、 NAS を立ててみよう)
4.管理ツールの使い方
5.プロトコル& API について

=話してる人(のレベル)=
・ eBay で wktk してぽちった。まるで反省していない…
・速さに wktk は満たされたが TLA 多すぎで涙目
・それで何するんですか?→手段が目的です(キリ
どんなもの?
1. かつて PCI/PCI-X の後継を目指した I/F
   XT→ISA→EISA/MCA→PCI/PCI-X→PCIe
   → 現在は 10+GbE と競合中

2. N[Gbps] のシリアルリンクを M 本束ねる
   N=2.5(SDR), 5.0(DDR), 10.0(QDR), …
   M=4, 12
   → x4 な SDR (10Gbps), QDR(40Gbps) が手頃

3. ケーブルはカッパー・ファイバ各種。コネクタは
   SFF-8470=CX4 (x4) と SFF-8436=QSFP の 2 種。
   10+GbE や SATA/SAS と共通(のものがある)。
   → 困らないと思うけど距離は 1Km 程度まで OK
   → 最近距離を延ばす IB over WAN という話も…
こんなもの



   送料がアレなのでスイッチは
   オクの出物、 HCA は USA で
   個人輸入業者経由がお勧め
まずは使ってみよう
必要なもの
→ OFED (OpenFabrics Enterprise Distribution)

OpenFabrics Alliance
・関係規格の参照実装のとりまとめ団体
・元々 OpenIB Alliance と IB 専門だった
・今は IB に加え、 over Ethernet, over TCP/IP での
  RDMA 通信方式の普及や参照実装の整備へ

OFED
・ちゃんと動作するバージョンセットとしてのリリース
・これを元に各社が独自拡張するなどして製品化
 →サーバやIBベンダから出ている。例: MLNX_OFED
・ OFED そのものは OSS(GPL, LGPL, BSDL)
 → Debian のはこちらがベース
余談: OFED versioning
これまで:
・ OFED-1.4
・ OFED-1.5

これから:
・ OFED-3.2   # ←Linux-3.2 に合わせている
・ OFED-3.5   # ←Linux-3.4(LTS) はどうなるの…?

今後はカーネル部分はアップストリームをベースに
使う形で、 OFED バージョンはカーネルバージョンに
揃える。そして、その上で使える範囲のパッケージ群を
収録する。

(という流れで 3.2-rc1 が先日出て、今 3.5 の話中)
IB on Debian
・ドライバ:
 …はカーネル同梱。でもロードさせる設定が必要

・ライブラリ
 上位 API 提供用とデバイスアクセス用がある
 両者は独立で、依存関係がないので入れ忘れ注意

・管理ツール
 ~ L4 まで見るネットワーク管理ツールと
 ~ L7 まで絡む上位プロトコル関連のものがある
 これも依存関係が相互にないもの多数なので
 入れ忘れ注意

「入れ忘れ注意」ってそのための OFED じゃないの?
→ まさにその通りで、いま色々とメンドイ状態…
IB on Debian
どの OFED/ どこの repo を使う?
              linux-2.6   linux-3.0    linux-3.2
     OFED-1.4 ○           △ (一部)       △ (一部)
     OFED-1.5 ○           ○            △ (一部)
     OFED-3.2 ?           ?            ○ (開発中)

・ OFED-1.4 でいいなら pkg-ofed
   → これなら apt-get install ofed で全部入って楽
  deb     http://pkg-ofed.alioth.debian.org/apt/ofed ./
  deb-src http://pkg-ofed.alioth.debian.org/apt/ofed ./
  → かなり古いので sid 混在環境などで困ったり
・ OFED-1.5 は sid へのパッケージ化の途上
   →ML に freeze ヤバス!ヤバス!とメールが…
IB on Debian
・正直なところ、 RetHat より対応度で遅れている
  → コア開発者まで居るし伊達じゃない> RedHat
  → その関係からか OFED は基本 RPM 志向。
    ソース配布が SRPM でされてるなど。

・だが、実験環境として手元で使いたいのは Debian
  → なので OFED を元にしつつ頑張る
  → 基本部分は揃っているので、取り込めていない
    周辺(例えば openibd など)を自前整備する

結局、 OFED-1.5 でも使えない機能が出つつあるので
sid で入れ、更に OFED-3.2 に向かっている本家を
git からセルフビルドするのが実験にはよい。
パッケージ作るなら pkg-ofed の svn も取り込むと○。
                       ただし面倒度が…
入れてみよう
理想: # apt-get install ofed
今回: # apt-get install ibverbs-utils infiniband-diags
    perftest libmlx4-1 libmthca1 mstflint ibutils
    rdmacm-utils libsdp1 libibumad-dev
    libibverbs-dev librdmacm-dev libibcm-dev

      ※ 今回使う分だけ。 MPI 等フルに入れる場合は
         ofed の依存関係見つつ個別に取捨選択して入れる
      ※ プリント資料と若干違いますが、 L7 相当部分の
        利用プロトコルの部分を少し変更しました>発表
セットアップ : モジュール周り
素 OFED の場合は /etc/infiniband/openibd.conf での
各機能の有効・無効の選択設定となるが、以下と同じ
=== /etc/modules === なぜこんなに細かいか?
mlx4_ib
ib_mthca             IB のスタックは L2 相当部から
ib_uverbs
ib_umad              L7 相当部まで多岐にわたり、
ib_ucm               さらに in-kernel/userland 、
rdma_ucm             使用 API セットの違いで必要な
ib_ipoib             機能(モジュール)セットが別々。
#ib_srp              なので上位の何かを入れたら
#svcrdma             他の関連物も芋蔓…とならない。
#xprtrdma

            ※OFED が openibd initscript を用意する訳だと納得
セットアップ:チューニングパラメータ
先の設定は「使える」だけで性能は出ない( IPoIB )。
今回は以下の追加パラメータも入れる。

=== /etc/sysctl.d/interfaces ===
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 250000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.optmem_max = 16777216
net.ipv4.tcp_mem = 16777216 16777216 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
セットアップ:チューニングパラメータ
続き。基本的なウィンドウサイズ、バッファサイズ、
MTU を大きくするという話だが、 IB にマップした際に
最大効率で転送する形も兼ねている。
=== /etc/network/interfaces ===
iface ib1 inet …
   …
   # メモ:
   # この順序で post-up しないとエラー。
   # 通常の mtu オプションは IPoIB をうまく扱えない
   post-up echo connected > /sys/class/net/ib1/mode
   post-up ip link set ib1 mtu 65520


※ 以上、 openibd initscript のやっている事の Debian 流実現。
  自分で openibd を持ってくるか、上の設定をする。
動作&性能確認
■IB 的確認方法
dst# ib_read_bw -F   -i 2 -a
src# ib_read_bw -F   -i 2 -a 10.254.1.17
#bytes #iterations   BW peak[MB/sec] BW average[MB/sec]
  512 1000           580.73          576.10
 1024 1000           868.08          867.74
 2048 1000           930.27          930.14
 4096 1000           933.33          933.31
■IP 的確認方法                                  確認目安は
                                           900+MB/s 位
dst# /etc/init.d/netperf start
src# netperf -H 10.254.1.17 -v 1
Recv   Send    Send
Socket Socket Message Elapsed
Size   Size    Size     Time     Throughput
bytes bytes    bytes    secs.    10^6bits/sec
 87380 65536 65536      10.01    7859.71
動作&性能確認 : おまけ
少しスペックの落ちる別機材の組み合わせでは
テストしたら非対称な傾向に。
→ 方向が違うと性能が全然違う(詳細は後述)
速機 # ib_read_bw -F -i 2 -a
遅機 # ib_read_bw -F -i 2 -a 10.253.1.9
#bytes #iterations BW peak[MB/sec] BW average[MB/sec]
  512 1000         496.16          493.09
 1024 1000         643.52          641.62 ← 遅いなりに
 2048 1000         718.14          716.74   頑張る
遅機 # ib_read_bw -F -i 2 -a
速機 # ib_read_bw -F -i 2 -a 10.253.1.8
#bytes #iterations BW peak[MB/sec] BW average[MB/sec]
  512 1000         456.12          453.39
 1024 1000         550.33          548.86 ← 早々に
 2048 1000         555.37          555.14   頭打ち
使ってみよう: SAN と NAS
使ってみよう: NFS on IB
NFS の下層を入れ替えることで高速化します。
2方式あるため、今回両方とも試して比較。
                NFSoIPoIB
                L7:NFS
  NFS           L4:TCP/IP (emu)
                L4:IB (via RDMA API?)
  L7:NFS
                L3:IB
  L4:UDP, TCP
                L2:IB
  L3:IP
  L2:Ethernet   NFSoRDMA
                L7:NFS
                L4:IB (via RDMA API)
                L3:IB
                L2:IB
NFSoRDMA
NFSoIPoIB は単なる TCP NFS なので、特別な設定は
NFSoRDMA の方のみ必要。
                          ※nfsd.ko の reload の度に必要
 NFS server
# modprobe svcrdma
# echo rdma 20049 > /proc/fs/nfsd/portlist

=== /etc/exports ===
/t -rw,insecure,... * 非標準ポートなので insecure 必須

 NFS client
# modprobe xprtrdma
# mount -o rdma,port=20049 10.253.1.9:/t /mnt

※NFSoIPoIB でなくても、 IPoIB なアドレスが必要(理由後述)
NFSoIPoIB vs NFSoRDMA
local access
# mount -t tmpfs none /t
# cstream -i - -o /t/big.bin -b 32k -B 1m -n 12G -T1
11605934080 B 10.8 GB 8.00 s 1450373012 B/s 1.35 GB/s
 NFSoIPoIB
# cstream -i big.bin -o - -b 32k -B 1m -n 12G -T1
6771310592 B 6.3 GB 8.04 s 842148123 B/s 803.14 MB/s

NFSoRDMA
# mount -o rdma,port=20049,rsize=4194304,
wsize=4194304 10.254.1.17:/t /t/rdma
# cstream -i big.bin -o - -b 32k -B 1m -n 12G -T1
6497370112 B 6.1 GB 7.00 s 927808176 B/s 884.83 MB/s
  ※TCP NFS と違い rsize/wsize は小さいままなので調整必須
NFSoIPoIB vs NFSoRDMA (2)
だがしかし、

 NFSoRDMA は超!不安定
このテストを流すだけなのに、いくどのハングアップと
リブートを繰り返したことか・・・(怒
そういうわけで、結論。

    幸せになるためには、
   NFSoIPoIB を使いましょう
              ※ 安定してくれば有望なのに…
使ってみよう: SCSI on IB
SCSI も NFS 同様に over IB(RDMA) ができる。
方式は3つ:

 1. iSCSI on IPoIB
 2. SCSI RDMA Protocol (SRP)
 3. iSCSI Extensions for RDMA (iSER)

各々に付き、 initiator と target の両側の実装が必要。
どの実装がどの方式のどちら側になれるかはマチマチ!
SCSI on Linux の現状
ターゲット機能
          ietd     stgt        SCST    LIO(→Linux)
  iSCSI    ○        ○           ○           ○
    SRP    ×        ×           ○           ○
   iSER    ×        ○           ×           ×

イニシエータ機能
          core-iscsi      open-iscsi      OFED
          (non-free)       (→Linux)     (→Linux)
  iSCSI       ○               ○            ×
    SRP       ×               ×            ○
   iSER       ×               ×            ○
※core-iscsi は商用とあるが LIO の所で言及多く、 OpenWRT
 移植などホントに純商用?と疑問なので掲載。情報緩募。
今回の対象
以下のセットで iSCSI と SRP をテスト( iSER は未遂…)
 iSCSI                 SRP
iscsitarget
      ietadm
        ietd                     SCST
  iscsi_trgt.ko                  scstadmin
SCST              open-iscsi        /sysfs
                    iscsiadm      ib_srpt.ko   LIO
scstadmin/sysfs                                   sysfs
                      iscsid     LIO
   iscsi-scstd                                  ib_srp.ko
                  iscsi_tcp.ko     targetcli
  iscsi-scst.ko                     /sysfs
                                     sysfs
LIO                               ib_srpt.ko
targetcli/sysfs
  iscsi_target
     _mod.ko

上図は各テスト構成で使う関係コマンドのまとめ。
大方が CLI+daemon+kernel module の構成になっている。
補足: SRP と iSER
・どちらも SCSI over Network でブロックを晒すもの

・ SRP はより古い「生 SCSI PDU を流すだけ」に近い形
   → 後でわかるが、認証などがかなり原始的
   → でも、古い分、より枯れている(模様)

・ iSER は iSCSI PDU を RDMA で転送する
   →iSCSI で整備された認証の枠組みなどが使える
   → 管理性で優れているため期待されている
   → ただ Linux 実装が手薄など SRP より開発途上

・管理性除けば、 SRP も iSER も性能は(基本的には )
 変わらない
IB-SAN の話の前に、各種 SCSI
target/initiator の構成を紹介します。

その上で IB-SAN の部分の差分を
見せる流れになります。
iscsitarget x open-iscsi (ターゲット側)
 インストール                for Linux-3.2+
# apt-get [-t experimental] install iscsitarget-dkms
  設定と利用
# cat /etc/iet/ietd.conf
Target iqn.2012-03.org.rakugaki:storage.pool
   Lun 0 Path=/dev/sdb,Type=fileio
   Lun 1 Blocks=262144,BlockSize=4096,Type=nullio

もしくは
# ietadm --op new --tid 2 
--params Name=iqn.2012-03.org.rakugaki:storage.null
# ietadm --op new --tid=2 --lun=0 
--params="Blocks=262144,BlockSize=4096,Type=nullio"
などと各 target/lun 毎に投入する。
iscsitarget x open-iscsi (ターゲット側)
設定と利用(続き)
# /etc/init.d/iscsitarget start
    状態確認
# ietadm --op show --tid 1
Wthreads=8
Type=0
...
# cat /proc/net/iet/volume
tid:2 name:iqn.2012-03.org.rakugaki:storage.null
  lun:0 state:0 iotype:nullio iomode:wt blocks:...
tid:1 name:iqn.2012-03.org.rakugaki:storage.pool
  lun:0 state:0 iotype:fileio iomode:wt blocks:...
  lun:1 state:0 iotype:nullio iomode:wt blocks:...
iscsitarget x open-iscsi( イニシエータ側 )
 インストール
# apt-get install open-iscsi
  設定と利用                               ターゲット側 IP
# iscsiadm -m discovery -D -p 10.253.0.8
10.253.0.8:3260,1 iqn.2012-03...:storage.pool
# iscsiadm -m node -T iqn.2012-03...:storage.pool -l
Logging in to [iface: iface0, target: iqn.2012-03...
               これを -u で呼ぶと unload で利用終了になる
   状態確認
# iscsiadm -m session
tcp: [1] 10.253.0.8:3260,1 iqn.2012-...:storage.pool
# ls /dev/disk/by-path/
ip-10.253.0.8:3260-iscsi-iqn.2...:storage.pool-lun-0
イニシエータ側は open-iscsi を
使っている限り、ターゲットによらず同様。
よって次ページからはターゲットのみ紹介。
SCST x open-iscsi           (ターゲット側)
 インストール
実は Debian package はない!自前ビルドして下さい…
機能的には SCST>LIO で現状も機能マージ中なので痛い。
  設定と利用
# cat scst.conf
HANDLER vdisk_blockio {
   DEVICE nd00 {
      filename /dev/pool/nd00
   }
}
TARGET_DRIVER iscsi {
   enabled 1
   TARGET iqn.2012-03.org.rakugaki:storage.nd00 {
      enabled 1
      LUN 0 nd00
SCST x open-iscsi          (ターゲット側)
設定と利用(続)
      (前ページからの続き)
   }
}
// 以下のコマンド群で設定が sysfs 経由で投入される
# iscsi-scstd          ← 連携デーモン起動
# modprobe scst_vdisk ← 利用するモジュールをロード
# modprobe iscsi_scst
# scstadmin -f scst.conf
     状態確認
# scstadmin -list_target
   Driver Target
   ---------------------------------------------
   iscsi   iqn.2012-03.org.rakugaki:storage.nd00

後は、 open-iscsi 側の先程と同じ手順で利用可能です。
LIO x open-iscsi         (ターゲット側)
 インストール
# apt-get install lio-utils targetcli
  設定と利用
# targetcli
/> ls  ↓管理シェルで階層に設定エントリを作るという方式
o- / ........................... [...]
   o- backstores ................ [...]
   | o- fileio .................. [0 Storage Object]
   | o- iblock .................. [0 Storage Object]
   | o- pscsi ................... [0 Storage Object]
   | o- rd_dr ................... [0 Storage Object]
   | o- rd_mcp .................. [0 Storage Object]
   o- iscsi ..................... [0 Target]
   o- loopback .................. [0 Target]
   o- tcm_fc .................... [0 Target]
/>
LIO x open-iscsi       (ターゲット側)
  設定と利用                        dmsetup で作成の ramdisk
# targetcli
/> cd /backstores/iblock
/backstores/iblock> create zero /dev/mapper/zero
/backstores/iblock/zero> cd /iscsi
/iscsi> create iqn.2003-01.org.linux-iscsi:zero
(以下3行では認証とデモモードの解除をしている)
/i.../tpgt1> set attribute authentication=0
/i.../tpgt1> set attribute generate_node_acls=1
/i.../tpgt1> set attribute demo_mode_write_protect=0
/i.../tpgt1> cd luns
/i.../tpgt1/luns> create /backstores/iblock/zero 0
/i.../tpgt1/luns/lun0> cd ../../portals
/i.../tpgt1/portals> create 10.254.0.17
/i.../tpgt1/portals/10.254.0.17:3260> cd /
/> saveconfig
/> exit
iSCSI ターゲットまとめ
1.イニシエータは open-iscsi の事実上一択

2.ターゲットは各種あり、それぞれ流儀が大きく違う

3.これからの主流は LIO だが、今なら SCST もよい

4.これらの手順は IPoIB 環境でならばそのまま有効
iSCSI-o-IPoIB の性能は?
ここまで、 IB を扱う前の段階まで各種ターゲット・
イニシエータの設定例を予習してきました。

この段階で IPoIB を組み合わせるとどれくらいの
性能が出るのか?

ISCSIoIPoIB (LIO)
# JOBS=4 OP=write DEV=/dev/sdd BS=1m fio bench.ini
Run status group 0 (all jobs):
WRITE: io=11950MB, aggrb=405514KB/s,
   minb=101188KB/s, maxb=109958KB/s,
   mint=30134msec, maxt=30176msec

    ざっと 400MB/s 程度。
    これを、次は SRP と比較してみます。
おまけ:今回使った bench.ini
# cat bench.ini
[global]
filename=${DEV}
blocksize=${BS}
size=128G

time_based
runtime=30

ioengine=libaio
iodepth=32
[tasks]
numjobs=${JOBS}
readwrite=${OP}
direct=1
SRP – SCSI RDMA Protocol
どちらがいいか?
   SCST
   scstadmin     LIO
      /sysfs        sysfs
    ib_srpt.ko    ib_srp.ko   (現在のお勧め)
   LIO
     targetcli   LIO
      /sysfs        sysfs     (未来の標準?)
    ib_srpt.ko    ib_srp.ko

→ 現状では機能的に上で設定もまともな SCST が
  お勧め。が、将来は LIO なのでまず先に紹介。
LIO for SRP (ターゲット側)
     事前準備
// ターゲット側の IPoIB I/F の Port GUID を確認
target# ibstat
   ....
   Port 2:
      ....
      Port GUID: 0x0008f1040399d832

// イニシエータ側の IPoIB I/F の Port GUID を確認
initiator# ibstat
   ....
   Port 2:
      ....
      Port GUID: 0x0008f1040399d85a

                     以降でアクセス先や認証対象の
                     ID として利用するポート固有 ID
LIO for SRP (ターゲット側)
   設定と利用                         ターゲット側 Port GUID
# targetcli
/> cd /backstores/iblock
/backstores/iblock> create zero /dev/mapper/zero
/> cd /ib_srpt
/ib_srpt> create 0xfe800000000000000008f1040399d832
/ib_srpt/0xfe...8f1040399d832> cd luns
/ib_srpt/0xfe...0399d832/luns> 
  create /backstores/iblock/zero 0
/ib_srpt/0xfe...832/luns/lun0> cd ../../acls
/ib_srpt/0xfe...0399d832/acls> 
  create 0x00000000000000000008f1040399d85a
/ib_srpt/0xfe...8f1040399d85a> cd /
/> saveconfig
/> exit
                              イニシエータ側 Port GUID
メモ: LIO for SRP (ターゲット側のバグ修正)
先程の例が
Invalid argument:
'/sys/kernel/config/target/srpt/0x0000000000000000
0008f1040399d859'
のように終わる場合は、以下を修正:
=== /var/target/fabric/ib_srpt.spec ===
 - wwn_from_files_filter = 
     "sed -e s/fe80/0x0000/ -e 's/://g'"
 + wwn_from_files_filter = 
     "sed -e s/fe80/0xfe80/ -e 's/://g'"
※ ib_srpt.ko が受け入れる prefix 形式が変更されたのが原因
LIO for SRP (イニシエータ側)
   インストール
# apt-get install srptools
   設定と利用                         ib1 経由で接続の場合
# modprobe ib_srp
# ibsrpdm -c -d /dev/infiniband/umad1
id_ext=0008f1040399d858,ioc_guid=0008f1040399d858,
dgid=fe800000000000000008f1040399d85a,pkey=ffff,
service_id=0008f1040399d858
                               ターゲットからの応答
// 上の応答が ib_srp.ko のパラメータなので、流し込む
# for i in $(ibsrpdm -c -d /dev/infiniband/umad1)
do
 echo $i 
 > /sys/class/infiniband_srp/srp-mlx4_0-2/add_target
done
                                    ib1 に対応する名称
SCST for SRP (ターゲット側)
さすがに LIO は開発途上感があるため、ターゲットは
SCST で構成するのがお勧めです。
  設定と利用
# cat scst.conf
HANDLER vdisk_blockio {
   DEVICE zero {
      filename /dev/mapper/zero
   }
}                          iscsi と iSCSI IQN だった部分が
TARGET_DRIVER ib_srpt {    SRP の名称になるだけ
   enabled 1
   TARGET ib_srpt_target_0 {
      enabled 1
      LUN 0 zero
   }
}             ( イニシエータ側は前述の LIO の方式で利用)
# scstadmin -config scst.conf
SRP (SCST x LIO) の性能は?
ISCSIoIPoIB (LIO)
# JOBS=4 OP=write DEV=/dev/sdd BS=1m fio bench.ini
Run status group 0 (all jobs):
WRITE: io=11950MB, aggrb=405514KB/s,
   minb=101188KB/s, maxb=109958KB/s,
   mint=30134msec, maxt=30176msec
SRP (SCST x LIO)
# JOBS=4 OP=write DEV=/dev/sdd BS=1m fio bench.ini
Run status group 0 (all jobs):
WRITE: io=24441MB, aggrb=832753KB/s,
   minb=202926KB/s, maxb=219979KB/s,
   mint=30027msec, maxt=30054msec
    他は同じ条件で 400MB/s→800+MB/s に倍増。
    IPoIB も詰める余地はあるが、これは魅力的!
今度は管理ツールの方を覗いてみます。
入門 IB :基本構成


            switch                      switch
              #1                          #2
ポート

  p1   p2            p1   p2   p1   p2           p1   p2
  HCA-0              HCA-0     HCA-0             HCA-0
  node#1             node#2    node#3            node#4
  IB ネットワークは HCA(TCA) とスイッチから通常
  構成されます(ルータもあるが、通常考慮外)。
入門 IB : ID とアドレシング

     10                           9      SM
       switch                      switch
         #1                          #2
                             subnet prefix (64bit)
1    2          3   4    5    6         7     8
 HCA-0          HCA-0    HCA-0           HCA-0
 node#1         node#2   node#3          node#4
 系内では Subnet Manager という管理役が選出
 され、個々のポートに L(ocal)ID を設定する他、
 subnet prefix を広報しています。
入門 IB : ID とアドレシング
LID : 1
GUID : 0x0008f1040399d819
GID : 0xfe800000000000000008f1040399d819
        10                          9      SM
          switch                     switch
            #1                         #2
                                  subnet prefix (64bit)
       2       3    4         5    6       7     8
  HCA-0         HCA-0         HCA-0         HCA-0
  node#1        node#2        node#3        node#4
  ポートには 64bit GUID もメーカで設定されており、
  広報された prefix と合成し、 128bit の GID が
  系内外で一意な ID としてセットされます (= IPv6) 。
  ※ 正式な IPv6 アドレスですが、 IPv6 表記はあまり見ない…
入門 IB : ID とアドレシング
LID : 1
GUID : 0x0008f1040399d819
GID : 0xfe800000000000000008f1040399d819
        10
          switch   Node GUID : 0x0005ad0000026dfc
            #1


       2
   HCA-0     Node GUID : 0x0002c90200289fc4
   node#1
 ポート以外でも、 HCA やスイッチ自体といった
 ノード自体でも 64bit GUID がメーカ設定されて
 います。これを ID で NW 内要素を識別・管理します
管理ツール : saquery
これら ID の存在、状態、接続状況、そして通信内容を
調べるために各種の管理ツールがあります。
$ sudo saquery
NodeRecord dump:                系内ノードのダンプ
  lid.....................0x1
  ....
  node_type...............Channel Adapter
  num_ports...............0x2
  sys_guid................0x0008f1040399d81b
  node_guid...............0x0008f1040399d818
  port_guid...............0x0008f1040399d819
  ....
  NodeDescription.........hn02 HCA-1
NodeRecord dump:
  lid.....................0x3
  ....
管理ツール : iblinkinfo
系内ノードの物理接続関係のダンプ
# iblinkinfo
Switch 0x0005ad0000018826 Topspin Switch TS120:
 6 1[ ] ==( … )==> 2 1[ ] "Topspin Switch" ()
     2[ ] ==( … )==>       [ ] "" ()
 6 8[ ] ==( … )==> 4 2[ ] "hn06-mlx4_0" ()
 6 9[ ] ==( … )==> 7 1[ ] "hn07-mlx4_0" ()
  10[ ] ==( … )==>         [ ] "" ()
 ...
     例:「本スイッチ (LID:6) の物理ポート #1 が
        別スイッチ (LID:2) の物理ポート #1 と接続している」

テキストだけでは接続関係が判り難いですが、
ibdiagui を使うと GUI で表示させることもできます。
が、 X が必要。
管理ツール : ib2dot.rb
そこで、物理接続図だけ作るツールを作ってみたり…
#   saquery > saquery.log
#   iblinkinfo > iblinkinfo.log
#   ib2dot.rb saquery.log iblinkinfo.log 
|   dot -Tpdf -ooutput.pdf




IB では SM に問い合わせて一括で情報が取れるので、
全体構成や状況の把握が比較的容易。
管理ツール : ibdiscover
変更前後の差や設計と実際の差を見るツール
// 作業前の状態をダンプ
# ibnetdiscover | ibdiscover > /dev/null
# mv ibdiscover.topo.new ibdiscover.topo
... 何か配線作業 ...
//
# ibnetdiscover | ibdiscover
...
Delta change in topo (change between … runs)
Link change: Local/Remote Port 1/ 5
   Local/Remote GUID: 5ad0000026dfc/5ad0000018826
           Locations: Local/Remote
Link change: Local/Remote Port 1/ 1
   Local/Remote GUID: 5ad0000026dfc/5ad0000018826
           Locations: Local/Remote
     → 記録されている状態との差分を報告してくれる
管理ツール : ibdiscover
「記録」は自分で作っても OK
# cat ibdiscover.topo
8|5ad0000026dfc|2|8f1040399d858
5|5ad0000026dfc|2|8f1040399d7e8
3|5ad0000026dfc|2|2c90200289fc4
1|5ad0000026dfc|5|5ad0000018826
9|5ad0000026dfc|1|8f1040399d830
9|5ad0000018826|1|8f1040399d858
単純な
  |port|NodeGUID| ←→ |port|NodeGUID|

という対応関係なので、例えば SNMP ifDesc に
対応すべきポート同士に同じキー文字を埋めて、
生成した「あるべき接続構成」と IB のディスカバリ
結果を付き合わせる、などが考えられる。
管理ツール : ibdump
tcpdump for IB
# ibdump -d -o ib.pcap
... 色々通信 ...
# tshark -V -r ib.pcap
...
クローズドバイナリなので迷ったが、どういう動作を
しているのか興味がある場合は外せない。

-b N:
  2^N 個までの連続したフレームは絶対に
  落とさない(ただし N は上限低い :15 とか)
--mem-mode:
  オンメモリキャプチャ
--src_qp <qpn>:
  QP 絞込みキャプチャ(これは未完 or 非公開かも)
管理ツール : その他色々
・シンプルだが便利な日常ツール
・あまりに深すぎて手が出ないツール
・特定用途のニーズピンポイントなツール

噛めば噛むほど…(面白い物があればぜひ知りたい)

シンプルな機能で高頻度で使うもの
ibstat, ibaddr, ibping, ib(nodes|switches|ibhosts)

Subnet Management 系
smdump, ibis, ibdmchk

Performance Counter 系
perfquery, ibdatacounts, ibclear(errors|counters)
次の話題:プロトコル& API
高速性の源泉: R(emote)DMA
   APP                APP
  OS                    OS
   HCA                HCA

 アプリケーション内の(仮想)メモリ領域を
 ダイレクトに HCA にアクセスさせ、メモリ間コピーが
 宛先側のメモリ領域に書くまで発生しない

 ■ 用語: OS バイパス
 データ転送部分で完全にバイパス、制御部分( HW
 アクセスや、 HCA が仮想アドレスを実アドレスに
 変換できるよう両アドレスペアを登録する部分など)は
 OS がそれでも関与する
データ転送ではなく指令の転送
 MEM M
       R
                 connection
           HCA

 CPU

CPU は HCA にデータを送らず、行って欲しい
処理を指令する= IB Verbs

IB と Verbs はリモートノード間での RDMA 転送に
必要なリソースセット(コネクションとは具体的には?、
リージョンとは?セキュアな利用に必要なものは?)や
利用モデルに適した命令セットを規定している。
※DMA って元々そういうものだよね、ではあるけど…
チャネル vs メモリセマンティクス
  SEND
   SEND                                 RECV
                                      RECV
      SEND                           RECV
             HCA               HCA

→RECV 命令が入らないと、 SEND を受信しない
② 一方的に命令発行
RDMA WRWR
  RDMA WR                      MEM
    RDMA
      RDMA WR
                   ① リージョン予約
         HCA           key     HCA

→ アクセス権を握ったら、相手のメモリは俺のもの
まとめると
1.そもそもコピーが発生せず、 CPU バスの
  ボトルネックが発生しにくい

2. Verb/Work Request を送り込む形式を生かし、
  非同期かつパイプライン化された処理になり、
  アイドル状態が発生しにくい

3.いずれのセマンティスクもゼロコピーだが、
  メモリセマンティスクではアプリレベルの調停が
  不要かつ更に処理を削減できる

    従来 IP に親しんでいた人には興味深い&
    面白い機能で一杯。安くて旨い IB オススメ

More Related Content

What's hot

“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~Brocade
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User NamespacesAkihiro Suda
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Etsuji Nakai
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
FCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイドFCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイドBrocade
 
IETF111 RATS: Remote Attestation ProcedureS 報告
IETF111 RATS: Remote Attestation ProcedureS 報告IETF111 RATS: Remote Attestation ProcedureS 報告
IETF111 RATS: Remote Attestation ProcedureS 報告Kuniyasu Suzaki
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較NaoyaFukuda
 
コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話Nobuhiro Fujita
 
コンテナ時代のOpenStack
コンテナ時代のOpenStackコンテナ時代のOpenStack
コンテナ時代のOpenStackAkira Yoshiyama
 
インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造Taiji Tsuchiya
 
KVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークKVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークVirtualTech Japan Inc.
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!Hirotaka Sato
 
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたYukiya Hayashi
 
DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所hdais
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門VirtualTech Japan Inc.
 
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理Akari Asai
 

What's hot (20)

“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
FCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイドFCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイド
 
IETF111 RATS: Remote Attestation ProcedureS 報告
IETF111 RATS: Remote Attestation ProcedureS 報告IETF111 RATS: Remote Attestation ProcedureS 報告
IETF111 RATS: Remote Attestation ProcedureS 報告
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較
 
コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話
 
コンテナ時代のOpenStack
コンテナ時代のOpenStackコンテナ時代のOpenStack
コンテナ時代のOpenStack
 
インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造
 
KVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークKVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマーク
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
 
DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
 
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
あなたのところに専用線が届くまで
あなたのところに専用線が届くまであなたのところに専用線が届くまで
あなたのところに専用線が届くまで
 

Similar to InfiniBand on Debian

OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)Satoshi Shimazaki
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例Naoto MATSUMOTO
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介Kentaro Mitsuyasu
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇Manabu Ori
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentookubo39
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119metamd
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)Satoshi Shimazaki
 
osoljp201105_ZFSjiman_nslope
osoljp201105_ZFSjiman_nslopeosoljp201105_ZFSjiman_nslope
osoljp201105_ZFSjiman_nslopeNoriyasu Sakaue
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話Takanori Sejima
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)Kazuyuki Sato
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Masahito Zembutsu
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pitokudahiroshi
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続Michiya Tominaga
 

Similar to InfiniBand on Debian (20)

OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentoo
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
osoljp201105_ZFSjiman_nslope
osoljp201105_ZFSjiman_nslopeosoljp201105_ZFSjiman_nslope
osoljp201105_ZFSjiman_nslope
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
 
Open VZ
Open VZOpen VZ
Open VZ
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pi
 
WalBの紹介
WalBの紹介WalBの紹介
WalBの紹介
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続
 

More from Taisuke Yamada

ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴Taisuke Yamada
 
DIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesDIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesTaisuke Yamada
 
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -Taisuke Yamada
 
Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Taisuke Yamada
 
IoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourIoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourTaisuke Yamada
 
Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Taisuke Yamada
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in PythonTaisuke Yamada
 
VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!Taisuke Yamada
 
Hacking Ruby with Python
Hacking Ruby with PythonHacking Ruby with Python
Hacking Ruby with PythonTaisuke Yamada
 
Invitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationInvitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationTaisuke Yamada
 
Charity Items from Debian JP Project
Charity Items from Debian JP ProjectCharity Items from Debian JP Project
Charity Items from Debian JP ProjectTaisuke Yamada
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdTaisuke Yamada
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutTaisuke Yamada
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateTaisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)Taisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)Taisuke Yamada
 
201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebianTaisuke Yamada
 
Nilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianNilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianTaisuke Yamada
 
Casual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXCasual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXTaisuke Yamada
 
Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -Taisuke Yamada
 

More from Taisuke Yamada (20)

ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴
 
DIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesDIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 Minutes
 
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
 
Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)
 
IoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourIoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an Hour
 
Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in Python
 
VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!
 
Hacking Ruby with Python
Hacking Ruby with PythonHacking Ruby with Python
Hacking Ruby with Python
 
Invitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationInvitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code Exploration
 
Charity Items from Debian JP Project
Charity Items from Debian JP ProjectCharity Items from Debian JP Project
Charity Items from Debian JP Project
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-update
 
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
 
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
 
201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian
 
Nilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianNilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebian
 
Casual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXCasual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUX
 
Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (10)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

InfiniBand on Debian

  • 1. 家庭内 LAN を高速に! ~ InfiniBand on Debian ~ for 大統一 Debian 勉強会 , 2012/6/23 @tyamadajp
  • 2. 今日の内容 1. InfiniBand とは?(概略) 2. Debian で使ってみよう(基本セットアップ) 3.で、どんな感じ?( SAN 、 NAS を立ててみよう) 4.管理ツールの使い方 5.プロトコル& API について
  • 3. 今日の内容 1. InfiniBand とは?(概略) 2. Debian で使ってみよう(基本セットアップ) 3.で、どんな感じ?( SAN 、 NAS を立ててみよう) 4.管理ツールの使い方 5.プロトコル& API について =話してる人(のレベル)= ・ eBay で wktk してぽちった。まるで反省していない… ・速さに wktk は満たされたが TLA 多すぎで涙目 ・それで何するんですか?→手段が目的です(キリ
  • 4. どんなもの? 1. かつて PCI/PCI-X の後継を目指した I/F XT→ISA→EISA/MCA→PCI/PCI-X→PCIe → 現在は 10+GbE と競合中 2. N[Gbps] のシリアルリンクを M 本束ねる N=2.5(SDR), 5.0(DDR), 10.0(QDR), … M=4, 12 → x4 な SDR (10Gbps), QDR(40Gbps) が手頃 3. ケーブルはカッパー・ファイバ各種。コネクタは SFF-8470=CX4 (x4) と SFF-8436=QSFP の 2 種。 10+GbE や SATA/SAS と共通(のものがある)。 → 困らないと思うけど距離は 1Km 程度まで OK → 最近距離を延ばす IB over WAN という話も…
  • 5. こんなもの 送料がアレなのでスイッチは オクの出物、 HCA は USA で 個人輸入業者経由がお勧め
  • 6. まずは使ってみよう 必要なもの → OFED (OpenFabrics Enterprise Distribution) OpenFabrics Alliance ・関係規格の参照実装のとりまとめ団体 ・元々 OpenIB Alliance と IB 専門だった ・今は IB に加え、 over Ethernet, over TCP/IP での   RDMA 通信方式の普及や参照実装の整備へ OFED ・ちゃんと動作するバージョンセットとしてのリリース ・これを元に各社が独自拡張するなどして製品化  →サーバやIBベンダから出ている。例: MLNX_OFED ・ OFED そのものは OSS(GPL, LGPL, BSDL)  → Debian のはこちらがベース
  • 7. 余談: OFED versioning これまで: ・ OFED-1.4 ・ OFED-1.5 これから: ・ OFED-3.2   # ←Linux-3.2 に合わせている ・ OFED-3.5   # ←Linux-3.4(LTS) はどうなるの…? 今後はカーネル部分はアップストリームをベースに 使う形で、 OFED バージョンはカーネルバージョンに 揃える。そして、その上で使える範囲のパッケージ群を 収録する。 (という流れで 3.2-rc1 が先日出て、今 3.5 の話中)
  • 8. IB on Debian ・ドライバ:  …はカーネル同梱。でもロードさせる設定が必要 ・ライブラリ  上位 API 提供用とデバイスアクセス用がある  両者は独立で、依存関係がないので入れ忘れ注意 ・管理ツール  ~ L4 まで見るネットワーク管理ツールと  ~ L7 まで絡む上位プロトコル関連のものがある  これも依存関係が相互にないもの多数なので  入れ忘れ注意 「入れ忘れ注意」ってそのための OFED じゃないの? → まさにその通りで、いま色々とメンドイ状態…
  • 9. IB on Debian どの OFED/ どこの repo を使う? linux-2.6 linux-3.0 linux-3.2 OFED-1.4 ○ △ (一部) △ (一部) OFED-1.5 ○ ○ △ (一部) OFED-3.2 ? ? ○ (開発中) ・ OFED-1.4 でいいなら pkg-ofed → これなら apt-get install ofed で全部入って楽 deb http://pkg-ofed.alioth.debian.org/apt/ofed ./ deb-src http://pkg-ofed.alioth.debian.org/apt/ofed ./ → かなり古いので sid 混在環境などで困ったり ・ OFED-1.5 は sid へのパッケージ化の途上 →ML に freeze ヤバス!ヤバス!とメールが…
  • 10. IB on Debian ・正直なところ、 RetHat より対応度で遅れている → コア開発者まで居るし伊達じゃない> RedHat → その関係からか OFED は基本 RPM 志向。 ソース配布が SRPM でされてるなど。 ・だが、実験環境として手元で使いたいのは Debian → なので OFED を元にしつつ頑張る → 基本部分は揃っているので、取り込めていない 周辺(例えば openibd など)を自前整備する 結局、 OFED-1.5 でも使えない機能が出つつあるので sid で入れ、更に OFED-3.2 に向かっている本家を git からセルフビルドするのが実験にはよい。 パッケージ作るなら pkg-ofed の svn も取り込むと○。 ただし面倒度が…
  • 11. 入れてみよう 理想: # apt-get install ofed 今回: # apt-get install ibverbs-utils infiniband-diags perftest libmlx4-1 libmthca1 mstflint ibutils rdmacm-utils libsdp1 libibumad-dev libibverbs-dev librdmacm-dev libibcm-dev ※ 今回使う分だけ。 MPI 等フルに入れる場合は    ofed の依存関係見つつ個別に取捨選択して入れる ※ プリント資料と若干違いますが、 L7 相当部分の   利用プロトコルの部分を少し変更しました>発表
  • 12. セットアップ : モジュール周り 素 OFED の場合は /etc/infiniband/openibd.conf での 各機能の有効・無効の選択設定となるが、以下と同じ === /etc/modules === なぜこんなに細かいか? mlx4_ib ib_mthca IB のスタックは L2 相当部から ib_uverbs ib_umad L7 相当部まで多岐にわたり、 ib_ucm さらに in-kernel/userland 、 rdma_ucm 使用 API セットの違いで必要な ib_ipoib 機能(モジュール)セットが別々。 #ib_srp なので上位の何かを入れたら #svcrdma 他の関連物も芋蔓…とならない。 #xprtrdma ※OFED が openibd initscript を用意する訳だと納得
  • 13. セットアップ:チューニングパラメータ 先の設定は「使える」だけで性能は出ない( IPoIB )。 今回は以下の追加パラメータも入れる。 === /etc/sysctl.d/interfaces === net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_sack = 0 net.core.netdev_max_backlog = 250000 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.rmem_default = 16777216 net.core.wmem_default = 16777216 net.core.optmem_max = 16777216 net.ipv4.tcp_mem = 16777216 16777216 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216
  • 14. セットアップ:チューニングパラメータ 続き。基本的なウィンドウサイズ、バッファサイズ、 MTU を大きくするという話だが、 IB にマップした際に 最大効率で転送する形も兼ねている。 === /etc/network/interfaces === iface ib1 inet … … # メモ: # この順序で post-up しないとエラー。 # 通常の mtu オプションは IPoIB をうまく扱えない post-up echo connected > /sys/class/net/ib1/mode post-up ip link set ib1 mtu 65520 ※ 以上、 openibd initscript のやっている事の Debian 流実現。 自分で openibd を持ってくるか、上の設定をする。
  • 15. 動作&性能確認 ■IB 的確認方法 dst# ib_read_bw -F -i 2 -a src# ib_read_bw -F -i 2 -a 10.254.1.17 #bytes #iterations BW peak[MB/sec] BW average[MB/sec] 512 1000 580.73 576.10 1024 1000 868.08 867.74 2048 1000 930.27 930.14 4096 1000 933.33 933.31 ■IP 的確認方法 確認目安は 900+MB/s 位 dst# /etc/init.d/netperf start src# netperf -H 10.254.1.17 -v 1 Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 87380 65536 65536 10.01 7859.71
  • 16. 動作&性能確認 : おまけ 少しスペックの落ちる別機材の組み合わせでは テストしたら非対称な傾向に。 → 方向が違うと性能が全然違う(詳細は後述) 速機 # ib_read_bw -F -i 2 -a 遅機 # ib_read_bw -F -i 2 -a 10.253.1.9 #bytes #iterations BW peak[MB/sec] BW average[MB/sec] 512 1000 496.16 493.09 1024 1000 643.52 641.62 ← 遅いなりに 2048 1000 718.14 716.74   頑張る 遅機 # ib_read_bw -F -i 2 -a 速機 # ib_read_bw -F -i 2 -a 10.253.1.8 #bytes #iterations BW peak[MB/sec] BW average[MB/sec] 512 1000 456.12 453.39 1024 1000 550.33 548.86 ← 早々に 2048 1000 555.37 555.14   頭打ち
  • 18. 使ってみよう: NFS on IB NFS の下層を入れ替えることで高速化します。 2方式あるため、今回両方とも試して比較。 NFSoIPoIB L7:NFS NFS L4:TCP/IP (emu) L4:IB (via RDMA API?) L7:NFS L3:IB L4:UDP, TCP L2:IB L3:IP L2:Ethernet NFSoRDMA L7:NFS L4:IB (via RDMA API) L3:IB L2:IB
  • 19. NFSoRDMA NFSoIPoIB は単なる TCP NFS なので、特別な設定は NFSoRDMA の方のみ必要。 ※nfsd.ko の reload の度に必要 NFS server # modprobe svcrdma # echo rdma 20049 > /proc/fs/nfsd/portlist === /etc/exports === /t -rw,insecure,... * 非標準ポートなので insecure 必須 NFS client # modprobe xprtrdma # mount -o rdma,port=20049 10.253.1.9:/t /mnt ※NFSoIPoIB でなくても、 IPoIB なアドレスが必要(理由後述)
  • 20. NFSoIPoIB vs NFSoRDMA local access # mount -t tmpfs none /t # cstream -i - -o /t/big.bin -b 32k -B 1m -n 12G -T1 11605934080 B 10.8 GB 8.00 s 1450373012 B/s 1.35 GB/s NFSoIPoIB # cstream -i big.bin -o - -b 32k -B 1m -n 12G -T1 6771310592 B 6.3 GB 8.04 s 842148123 B/s 803.14 MB/s NFSoRDMA # mount -o rdma,port=20049,rsize=4194304, wsize=4194304 10.254.1.17:/t /t/rdma # cstream -i big.bin -o - -b 32k -B 1m -n 12G -T1 6497370112 B 6.1 GB 7.00 s 927808176 B/s 884.83 MB/s ※TCP NFS と違い rsize/wsize は小さいままなので調整必須
  • 21. NFSoIPoIB vs NFSoRDMA (2) だがしかし、 NFSoRDMA は超!不安定 このテストを流すだけなのに、いくどのハングアップと リブートを繰り返したことか・・・(怒 そういうわけで、結論。 幸せになるためには、 NFSoIPoIB を使いましょう ※ 安定してくれば有望なのに…
  • 22. 使ってみよう: SCSI on IB SCSI も NFS 同様に over IB(RDMA) ができる。 方式は3つ: 1. iSCSI on IPoIB 2. SCSI RDMA Protocol (SRP) 3. iSCSI Extensions for RDMA (iSER) 各々に付き、 initiator と target の両側の実装が必要。 どの実装がどの方式のどちら側になれるかはマチマチ!
  • 23. SCSI on Linux の現状 ターゲット機能 ietd stgt SCST LIO(→Linux) iSCSI ○ ○ ○ ○ SRP × × ○ ○ iSER × ○ × × イニシエータ機能 core-iscsi open-iscsi OFED (non-free) (→Linux) (→Linux) iSCSI ○ ○ × SRP × × ○ iSER × × ○ ※core-iscsi は商用とあるが LIO の所で言及多く、 OpenWRT 移植などホントに純商用?と疑問なので掲載。情報緩募。
  • 24. 今回の対象 以下のセットで iSCSI と SRP をテスト( iSER は未遂…) iSCSI SRP iscsitarget ietadm ietd SCST iscsi_trgt.ko scstadmin SCST open-iscsi /sysfs iscsiadm ib_srpt.ko LIO scstadmin/sysfs sysfs iscsid LIO iscsi-scstd ib_srp.ko iscsi_tcp.ko targetcli iscsi-scst.ko /sysfs sysfs LIO ib_srpt.ko targetcli/sysfs iscsi_target _mod.ko 上図は各テスト構成で使う関係コマンドのまとめ。 大方が CLI+daemon+kernel module の構成になっている。
  • 25. 補足: SRP と iSER ・どちらも SCSI over Network でブロックを晒すもの ・ SRP はより古い「生 SCSI PDU を流すだけ」に近い形 → 後でわかるが、認証などがかなり原始的 → でも、古い分、より枯れている(模様) ・ iSER は iSCSI PDU を RDMA で転送する →iSCSI で整備された認証の枠組みなどが使える → 管理性で優れているため期待されている → ただ Linux 実装が手薄など SRP より開発途上 ・管理性除けば、 SRP も iSER も性能は(基本的には )  変わらない
  • 26. IB-SAN の話の前に、各種 SCSI target/initiator の構成を紹介します。 その上で IB-SAN の部分の差分を 見せる流れになります。
  • 27. iscsitarget x open-iscsi (ターゲット側) インストール for Linux-3.2+ # apt-get [-t experimental] install iscsitarget-dkms 設定と利用 # cat /etc/iet/ietd.conf Target iqn.2012-03.org.rakugaki:storage.pool Lun 0 Path=/dev/sdb,Type=fileio Lun 1 Blocks=262144,BlockSize=4096,Type=nullio もしくは # ietadm --op new --tid 2 --params Name=iqn.2012-03.org.rakugaki:storage.null # ietadm --op new --tid=2 --lun=0 --params="Blocks=262144,BlockSize=4096,Type=nullio" などと各 target/lun 毎に投入する。
  • 28. iscsitarget x open-iscsi (ターゲット側) 設定と利用(続き) # /etc/init.d/iscsitarget start 状態確認 # ietadm --op show --tid 1 Wthreads=8 Type=0 ... # cat /proc/net/iet/volume tid:2 name:iqn.2012-03.org.rakugaki:storage.null lun:0 state:0 iotype:nullio iomode:wt blocks:... tid:1 name:iqn.2012-03.org.rakugaki:storage.pool lun:0 state:0 iotype:fileio iomode:wt blocks:... lun:1 state:0 iotype:nullio iomode:wt blocks:...
  • 29. iscsitarget x open-iscsi( イニシエータ側 ) インストール # apt-get install open-iscsi 設定と利用 ターゲット側 IP # iscsiadm -m discovery -D -p 10.253.0.8 10.253.0.8:3260,1 iqn.2012-03...:storage.pool # iscsiadm -m node -T iqn.2012-03...:storage.pool -l Logging in to [iface: iface0, target: iqn.2012-03... これを -u で呼ぶと unload で利用終了になる 状態確認 # iscsiadm -m session tcp: [1] 10.253.0.8:3260,1 iqn.2012-...:storage.pool # ls /dev/disk/by-path/ ip-10.253.0.8:3260-iscsi-iqn.2...:storage.pool-lun-0
  • 31. SCST x open-iscsi (ターゲット側) インストール 実は Debian package はない!自前ビルドして下さい… 機能的には SCST>LIO で現状も機能マージ中なので痛い。 設定と利用 # cat scst.conf HANDLER vdisk_blockio { DEVICE nd00 { filename /dev/pool/nd00 } } TARGET_DRIVER iscsi { enabled 1 TARGET iqn.2012-03.org.rakugaki:storage.nd00 { enabled 1 LUN 0 nd00
  • 32. SCST x open-iscsi (ターゲット側) 設定と利用(続) (前ページからの続き) } } // 以下のコマンド群で設定が sysfs 経由で投入される # iscsi-scstd ← 連携デーモン起動 # modprobe scst_vdisk ← 利用するモジュールをロード # modprobe iscsi_scst # scstadmin -f scst.conf 状態確認 # scstadmin -list_target Driver Target --------------------------------------------- iscsi iqn.2012-03.org.rakugaki:storage.nd00 後は、 open-iscsi 側の先程と同じ手順で利用可能です。
  • 33. LIO x open-iscsi (ターゲット側) インストール # apt-get install lio-utils targetcli 設定と利用 # targetcli /> ls  ↓管理シェルで階層に設定エントリを作るという方式 o- / ........................... [...] o- backstores ................ [...] | o- fileio .................. [0 Storage Object] | o- iblock .................. [0 Storage Object] | o- pscsi ................... [0 Storage Object] | o- rd_dr ................... [0 Storage Object] | o- rd_mcp .................. [0 Storage Object] o- iscsi ..................... [0 Target] o- loopback .................. [0 Target] o- tcm_fc .................... [0 Target] />
  • 34. LIO x open-iscsi (ターゲット側) 設定と利用 dmsetup で作成の ramdisk # targetcli /> cd /backstores/iblock /backstores/iblock> create zero /dev/mapper/zero /backstores/iblock/zero> cd /iscsi /iscsi> create iqn.2003-01.org.linux-iscsi:zero (以下3行では認証とデモモードの解除をしている) /i.../tpgt1> set attribute authentication=0 /i.../tpgt1> set attribute generate_node_acls=1 /i.../tpgt1> set attribute demo_mode_write_protect=0 /i.../tpgt1> cd luns /i.../tpgt1/luns> create /backstores/iblock/zero 0 /i.../tpgt1/luns/lun0> cd ../../portals /i.../tpgt1/portals> create 10.254.0.17 /i.../tpgt1/portals/10.254.0.17:3260> cd / /> saveconfig /> exit
  • 35. iSCSI ターゲットまとめ 1.イニシエータは open-iscsi の事実上一択 2.ターゲットは各種あり、それぞれ流儀が大きく違う 3.これからの主流は LIO だが、今なら SCST もよい 4.これらの手順は IPoIB 環境でならばそのまま有効
  • 36. iSCSI-o-IPoIB の性能は? ここまで、 IB を扱う前の段階まで各種ターゲット・ イニシエータの設定例を予習してきました。 この段階で IPoIB を組み合わせるとどれくらいの 性能が出るのか? ISCSIoIPoIB (LIO) # JOBS=4 OP=write DEV=/dev/sdd BS=1m fio bench.ini Run status group 0 (all jobs): WRITE: io=11950MB, aggrb=405514KB/s, minb=101188KB/s, maxb=109958KB/s, mint=30134msec, maxt=30176msec ざっと 400MB/s 程度。 これを、次は SRP と比較してみます。
  • 37. おまけ:今回使った bench.ini # cat bench.ini [global] filename=${DEV} blocksize=${BS} size=128G time_based runtime=30 ioengine=libaio iodepth=32 [tasks] numjobs=${JOBS} readwrite=${OP} direct=1
  • 38. SRP – SCSI RDMA Protocol どちらがいいか? SCST scstadmin LIO /sysfs sysfs ib_srpt.ko ib_srp.ko (現在のお勧め) LIO targetcli LIO /sysfs sysfs (未来の標準?) ib_srpt.ko ib_srp.ko → 現状では機能的に上で設定もまともな SCST が お勧め。が、将来は LIO なのでまず先に紹介。
  • 39. LIO for SRP (ターゲット側) 事前準備 // ターゲット側の IPoIB I/F の Port GUID を確認 target# ibstat .... Port 2: .... Port GUID: 0x0008f1040399d832 // イニシエータ側の IPoIB I/F の Port GUID を確認 initiator# ibstat .... Port 2: .... Port GUID: 0x0008f1040399d85a 以降でアクセス先や認証対象の ID として利用するポート固有 ID
  • 40. LIO for SRP (ターゲット側) 設定と利用 ターゲット側 Port GUID # targetcli /> cd /backstores/iblock /backstores/iblock> create zero /dev/mapper/zero /> cd /ib_srpt /ib_srpt> create 0xfe800000000000000008f1040399d832 /ib_srpt/0xfe...8f1040399d832> cd luns /ib_srpt/0xfe...0399d832/luns> create /backstores/iblock/zero 0 /ib_srpt/0xfe...832/luns/lun0> cd ../../acls /ib_srpt/0xfe...0399d832/acls> create 0x00000000000000000008f1040399d85a /ib_srpt/0xfe...8f1040399d85a> cd / /> saveconfig /> exit イニシエータ側 Port GUID
  • 41. メモ: LIO for SRP (ターゲット側のバグ修正) 先程の例が Invalid argument: '/sys/kernel/config/target/srpt/0x0000000000000000 0008f1040399d859' のように終わる場合は、以下を修正: === /var/target/fabric/ib_srpt.spec === - wwn_from_files_filter = "sed -e s/fe80/0x0000/ -e 's/://g'" + wwn_from_files_filter = "sed -e s/fe80/0xfe80/ -e 's/://g'" ※ ib_srpt.ko が受け入れる prefix 形式が変更されたのが原因
  • 42. LIO for SRP (イニシエータ側) インストール # apt-get install srptools 設定と利用 ib1 経由で接続の場合 # modprobe ib_srp # ibsrpdm -c -d /dev/infiniband/umad1 id_ext=0008f1040399d858,ioc_guid=0008f1040399d858, dgid=fe800000000000000008f1040399d85a,pkey=ffff, service_id=0008f1040399d858 ターゲットからの応答 // 上の応答が ib_srp.ko のパラメータなので、流し込む # for i in $(ibsrpdm -c -d /dev/infiniband/umad1) do echo $i > /sys/class/infiniband_srp/srp-mlx4_0-2/add_target done ib1 に対応する名称
  • 43. SCST for SRP (ターゲット側) さすがに LIO は開発途上感があるため、ターゲットは SCST で構成するのがお勧めです。 設定と利用 # cat scst.conf HANDLER vdisk_blockio { DEVICE zero { filename /dev/mapper/zero } } iscsi と iSCSI IQN だった部分が TARGET_DRIVER ib_srpt { SRP の名称になるだけ enabled 1 TARGET ib_srpt_target_0 { enabled 1 LUN 0 zero } } ( イニシエータ側は前述の LIO の方式で利用) # scstadmin -config scst.conf
  • 44. SRP (SCST x LIO) の性能は? ISCSIoIPoIB (LIO) # JOBS=4 OP=write DEV=/dev/sdd BS=1m fio bench.ini Run status group 0 (all jobs): WRITE: io=11950MB, aggrb=405514KB/s, minb=101188KB/s, maxb=109958KB/s, mint=30134msec, maxt=30176msec SRP (SCST x LIO) # JOBS=4 OP=write DEV=/dev/sdd BS=1m fio bench.ini Run status group 0 (all jobs): WRITE: io=24441MB, aggrb=832753KB/s, minb=202926KB/s, maxb=219979KB/s, mint=30027msec, maxt=30054msec 他は同じ条件で 400MB/s→800+MB/s に倍増。 IPoIB も詰める余地はあるが、これは魅力的!
  • 46. 入門 IB :基本構成 switch switch #1 #2 ポート p1 p2 p1 p2 p1 p2 p1 p2 HCA-0 HCA-0 HCA-0 HCA-0 node#1 node#2 node#3 node#4 IB ネットワークは HCA(TCA) とスイッチから通常 構成されます(ルータもあるが、通常考慮外)。
  • 47. 入門 IB : ID とアドレシング 10 9 SM switch switch #1 #2 subnet prefix (64bit) 1 2 3 4 5 6 7 8 HCA-0 HCA-0 HCA-0 HCA-0 node#1 node#2 node#3 node#4 系内では Subnet Manager という管理役が選出 され、個々のポートに L(ocal)ID を設定する他、 subnet prefix を広報しています。
  • 48. 入門 IB : ID とアドレシング LID : 1 GUID : 0x0008f1040399d819 GID : 0xfe800000000000000008f1040399d819 10 9 SM switch switch #1 #2 subnet prefix (64bit) 2 3 4 5 6 7 8 HCA-0 HCA-0 HCA-0 HCA-0 node#1 node#2 node#3 node#4 ポートには 64bit GUID もメーカで設定されており、 広報された prefix と合成し、 128bit の GID が 系内外で一意な ID としてセットされます (= IPv6) 。 ※ 正式な IPv6 アドレスですが、 IPv6 表記はあまり見ない…
  • 49. 入門 IB : ID とアドレシング LID : 1 GUID : 0x0008f1040399d819 GID : 0xfe800000000000000008f1040399d819 10 switch Node GUID : 0x0005ad0000026dfc #1 2 HCA-0 Node GUID : 0x0002c90200289fc4 node#1 ポート以外でも、 HCA やスイッチ自体といった ノード自体でも 64bit GUID がメーカ設定されて います。これを ID で NW 内要素を識別・管理します
  • 50. 管理ツール : saquery これら ID の存在、状態、接続状況、そして通信内容を 調べるために各種の管理ツールがあります。 $ sudo saquery NodeRecord dump: 系内ノードのダンプ lid.....................0x1 .... node_type...............Channel Adapter num_ports...............0x2 sys_guid................0x0008f1040399d81b node_guid...............0x0008f1040399d818 port_guid...............0x0008f1040399d819 .... NodeDescription.........hn02 HCA-1 NodeRecord dump: lid.....................0x3 ....
  • 51. 管理ツール : iblinkinfo 系内ノードの物理接続関係のダンプ # iblinkinfo Switch 0x0005ad0000018826 Topspin Switch TS120: 6 1[ ] ==( … )==> 2 1[ ] "Topspin Switch" () 2[ ] ==( … )==> [ ] "" () 6 8[ ] ==( … )==> 4 2[ ] "hn06-mlx4_0" () 6 9[ ] ==( … )==> 7 1[ ] "hn07-mlx4_0" ()   10[ ] ==( … )==> [ ] "" () ... 例:「本スイッチ (LID:6) の物理ポート #1 が 別スイッチ (LID:2) の物理ポート #1 と接続している」 テキストだけでは接続関係が判り難いですが、 ibdiagui を使うと GUI で表示させることもできます。 が、 X が必要。
  • 52. 管理ツール : ib2dot.rb そこで、物理接続図だけ作るツールを作ってみたり… # saquery > saquery.log # iblinkinfo > iblinkinfo.log # ib2dot.rb saquery.log iblinkinfo.log | dot -Tpdf -ooutput.pdf IB では SM に問い合わせて一括で情報が取れるので、 全体構成や状況の把握が比較的容易。
  • 53. 管理ツール : ibdiscover 変更前後の差や設計と実際の差を見るツール // 作業前の状態をダンプ # ibnetdiscover | ibdiscover > /dev/null # mv ibdiscover.topo.new ibdiscover.topo ... 何か配線作業 ... // # ibnetdiscover | ibdiscover ... Delta change in topo (change between … runs) Link change: Local/Remote Port 1/ 5 Local/Remote GUID: 5ad0000026dfc/5ad0000018826 Locations: Local/Remote Link change: Local/Remote Port 1/ 1 Local/Remote GUID: 5ad0000026dfc/5ad0000018826 Locations: Local/Remote → 記録されている状態との差分を報告してくれる
  • 54. 管理ツール : ibdiscover 「記録」は自分で作っても OK # cat ibdiscover.topo 8|5ad0000026dfc|2|8f1040399d858 5|5ad0000026dfc|2|8f1040399d7e8 3|5ad0000026dfc|2|2c90200289fc4 1|5ad0000026dfc|5|5ad0000018826 9|5ad0000026dfc|1|8f1040399d830 9|5ad0000018826|1|8f1040399d858 単純な |port|NodeGUID| ←→ |port|NodeGUID| という対応関係なので、例えば SNMP ifDesc に 対応すべきポート同士に同じキー文字を埋めて、 生成した「あるべき接続構成」と IB のディスカバリ 結果を付き合わせる、などが考えられる。
  • 55. 管理ツール : ibdump tcpdump for IB # ibdump -d -o ib.pcap ... 色々通信 ... # tshark -V -r ib.pcap ... クローズドバイナリなので迷ったが、どういう動作を しているのか興味がある場合は外せない。 -b N: 2^N 個までの連続したフレームは絶対に 落とさない(ただし N は上限低い :15 とか) --mem-mode: オンメモリキャプチャ --src_qp <qpn>: QP 絞込みキャプチャ(これは未完 or 非公開かも)
  • 58. 高速性の源泉: R(emote)DMA APP APP OS OS HCA HCA アプリケーション内の(仮想)メモリ領域を ダイレクトに HCA にアクセスさせ、メモリ間コピーが 宛先側のメモリ領域に書くまで発生しない ■ 用語: OS バイパス データ転送部分で完全にバイパス、制御部分( HW アクセスや、 HCA が仮想アドレスを実アドレスに 変換できるよう両アドレスペアを登録する部分など)は OS がそれでも関与する
  • 59. データ転送ではなく指令の転送 MEM M R connection HCA CPU CPU は HCA にデータを送らず、行って欲しい 処理を指令する= IB Verbs IB と Verbs はリモートノード間での RDMA 転送に 必要なリソースセット(コネクションとは具体的には?、 リージョンとは?セキュアな利用に必要なものは?)や 利用モデルに適した命令セットを規定している。 ※DMA って元々そういうものだよね、ではあるけど…
  • 60. チャネル vs メモリセマンティクス SEND SEND RECV RECV SEND RECV HCA HCA →RECV 命令が入らないと、 SEND を受信しない ② 一方的に命令発行 RDMA WRWR RDMA WR MEM RDMA RDMA WR ① リージョン予約 HCA key HCA → アクセス権を握ったら、相手のメモリは俺のもの
  • 61. まとめると 1.そもそもコピーが発生せず、 CPU バスの   ボトルネックが発生しにくい 2. Verb/Work Request を送り込む形式を生かし、   非同期かつパイプライン化された処理になり、   アイドル状態が発生しにくい 3.いずれのセマンティスクもゼロコピーだが、   メモリセマンティスクではアプリレベルの調停が   不要かつ更に処理を削減できる 従来 IP に親しんでいた人には興味深い& 面白い機能で一杯。安くて旨い IB オススメ