0円でできる自宅InfiniBandプ
ログラム
第九回 カーネル/VM探検隊
2013/12/8
自己紹介
•
•
•
•
•

名前:中村 実
所属:武蔵中原周辺のIT企業
Mail: nminoru@nminoru.jp
Twitter:@nminoru_jp
Web:http://www.nminoru.jp/~nminoru/

今日はInfiniBand(RDMA)プログラミングのさ
わりと、私が開発中のsoftware-based
InfiniBand driverの紹介をします。
InfiniBandとは?
• 高帯域・低遅延のネットワーク装置
– 高帯域
• 56Gbps(FDR)×2、Point-to-Pointの輻輳制御

– 低遅延
• 1スイッチレイテンシが2μ秒以下

– コピーゼロ
• 無駄なコピーがない!

– RDMA
(Remote Direct Memory Access)
誰がInfiniBandを作っているのか?
• InfiniBand Trade Association
– http://www.infinibandta.org/

• OpenFabrics Alliance
– IBのソフトウェアスタックの開発と配布
OpenFabrics Enterprise Distributes(OFED)
– https://www.openfabrics.org/

• 装置ベンダー
– Mellanox
– QLogic → IB部門はIntelに買収
– Xsigo → Oracleに買収
InfiniBandはどこで使われている
か?
• 用途
– HPC
• SC13で公開されたTOP500中207システムで利用

– 金融
• ニューヨーク証券取引所(NYSE)のバックボーン

– ストレージ、DB
• EMC Isilon IQ、Oracle Exadata

– データセンター
• さくらインターネット

– 自宅サーバ

• でも普通のエンジニアには関係なくね?
InfiniBandのプロトコルスタック
名称

用途

Verbs

IBの機能を直接使用可能なlow-level API

rmdacm

Verbsのうちコネクション確立の部分をラップしたAPI。
CMはCommunication Managementの略。

IPoIB

IBをIPとして使用(“ib0”、”ib1”、…)

MPI

Message Passing Interface

uDAPL

User Direct Access Programming Library(uDAPL)
http://www.datcollaborative.org/

iSER

iSCSI Extensions for RDMA

SRP

SCSI RDMA Protocol

RDS

Reliable Datagram Sockets。UDPソケットとほぼ同じシンタックスのラ
イブラリ。現在は標準OFEDから外された。

VMA

LD_PRELOADで既存プログラムのソケットインターフェイスを乗っ取
り通信をIB経由に変更する。
https://code.google.com/p/libvma/
Ethernet&IPとの対比
Ethernet

IB

カード

ネットワークカード
(NIC)

Host Channel Adaptor(HCA)

固有ID

MACアドレス(48ビッ
ト)

GUID(64ビット)

ネットワークアド
レス

IPアドレス

Local Identifier(LID) (16ビッ
ト)
(¾の49,152個まで利用可能)

通信インスタンス

ソケット

Queue Pair(QP)

インスタンスの区 ポート番号(16ビット) QP番号(24ビット)
• EthernetがMACアドレスを使ってL2スイッチを行う。他のノー
別 ドの存在はブロードキャストで調べる。

• IBはSubnet Manager(SM)がネットワーク初期化時にHCAの各
ポートにLIDを割り付ける。L2スイッチはLIDを使って行う。
SMはMADと呼ばれる特殊なプロトコルを使ってネットワーク
トポロジーの解析、LIDの割り当て、ルーティングテーブルの
配布を行う。
InfiniBandプログラミングに必要な
もの
• 標準的なLinuxディストリ
• パッケージ
– rdma
– libibverbs
– libibverbs-devel

• ヘッダーファイル
– #include <infiniband/verbs.h>

• ライブラリリンク
– -libverbs
Verbsの通信モデル
• Services
– RC(XRC)、RD、UC、UDの4(+1)種類
• Reliable(再送制御あり)、Unreliable(なし)
• Connection(送信順序あり)、Datagram(なし)

– RCはTCP、UDはUDに相当
• ただしconnectionでもメッセージ境界がある

– RDとUCは使われない

• Operations
–
–
–
–

SEND-RECV
RDMA WRITE
RDMA READ
Atomic operations
Verbsの通信モデル(cont.)
• Queue Pair(QP)
– 内部にSend Queue(SQ)とReceive Queue(RQ)
– ibv_create_qpで作成
QP

QP

ibv_post_send

SQ(Send Queue)

SQ

ibv_post_recv

RQ(Send Queue)

RQ
SEND-RECV
• Receiverあらかじめ登録した受信バッファへ
転送
ibv_post_send

QP

SQ

RQ

QP

SQ

RQ

ibv_post_recv

• 制限
– Senderが送信する前にReceiverが受信バッファを
登録しないとエラー。
– Senderが送信したメッセージよりも受信バッファ
が短いとエラー
SEND-RECV(cont.)
• メモリをどう扱うか?
– ユーザプログラムがmallocやmmapしたメモリ
をibv_reg_mrで登録
– ibv_reg_mrで登録したメモリはカーネルがpin
して仮想メモリ→物理メモリのマップを固定
化

• 制限
– プロセスを跨いだInfiniBandリソースの共有は
できない。
SEND-RECV(cont.)
• どのようにして完了を検知するか?
– Completion Queue(CQ)
• ibv_poll_cqでWork Completion(WC)が取り出せる

– Completion Channel
• CQにWCが到着したことをselect/pollなどで検知で
きる

– メモリ管理
• RDMA WRITEでリモートのフラグを書き換えればい
い!
QP

SQ

CQ

RQ

CQ
RDMA WRITE
• リモートのメモリアドレスを指定して
WRITE
– リモート側は自分のメモリがWRITEされたこ
とを検知できない

ibv_post_send

QP

SQ

RQ

QP

SQ

RQ

Remote
Memory
RDMA WRITE with Immediate
• RDMA WRITEと同じだが書込み完了をRQを
使って通知する
– 4バイトの即値も一緒に送れる

ibv_post_send

QP

SQ

RQ

QP

SQ

RQ

Remote
Memory
RDMA READ
• リモートのメモリアドレスを指定して
READ
– リモート側は自分のメモリがREADされたこと
を検知できない

ibv_post_send

QP

SQ

RQ

QP

Remote
Memory
SQ
RQ
Atomic操作
• リモートのメモリ空間に対して、8バイト
境界に沿う8バイトに対してアトミック操
作が可能。
– Compare-and-Swap
– Fetch-and-Add

• リモートは操作を受けたことを検知でき
ない。
• Fetch-and-Addはリモート側のネイティブ
インディアンに従う
• 古いメモリの値はローカル側に送り返さ
How much?
• 機器のお値段
–
–
–
–

1ポートHCA(97,900 円)
2ポートHCA(153,200円)
QSFPケーブル(14,050円)
8ポートスイッチ(288,400円)

• InfiniBandプログラムをはじめる最小構成
– 2ポートHCAを1枚+ケーブル1本=167,250円
– 1ポートHCAを2枚+ケーブル1本=209,850円

• 高いわ!!
Pseudo InfiniBand (pib)
• 実機ハードが不要の疑似IBドライバ
• UDPを使ってIBをエミュレーション
• 現状では1ノード内だけで動作

• リンク
– http://www.nminoru.jp/~nminoru/network/infini
band/pib.html
– https://github.com/nminoru/pib
参考ページ
• InfiniBand Trade Association
– http://www.infinibandta.org/
– レジストするとIBの仕様書(InfiniBand Architecture Specification
Volume 1 Release 1.2.1)がダウンロード可能。

• OpenFabrics Alliance
– https://www.openfabrics.org/
– 最新のOFEDがダウンロードできる。

• RDMA Aware Networks Programming User Manual
– http://www.mellanox.com/relateddocs/prod_software/RDMA_Aware_Programming_user_manual.pdf
– Mellanox社が出しているVerbsとRDMA CM APIのプログラムマ
ニュアル

• RDMAmojo
– http://www.rdmamojo.com/
– Dotan Barak氏の個人ブログ。世界で一番詳しいRMDAプログラム
テクニックの初回ページ。manを見るよりはこちらを見た方が
よい。

0円でできる自宅InfiniBandプログラム