InfinibandのMTUとか

![ib.png](https://qiita-image-store.s3.amazonaws.com/0/84474/7defd766-cc97-d741-b2d6-47cdc4c89f94.png)

# はじめに
twitter上のタイムラインでInfinbandの話しをする機会があり，IPoIB接続のMTUのことが話題になったので，少し気になったところを備忘録として残しておく。

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hanakara_milk">@hanakara_milk</a> <a href="https://twitter.com/neko6_tweet">@neko6_tweet</a> <a href="https://twitter.com/xmms">@xmms</a> だから、OpenSMの設定を4K MTU (mtu=5)にしておいて、クラインアントを順次繋ぐことでMTUが大きくできますよということのようです。</p>&mdash; hiroyuki sato (@hiroysato) <a href="https://twitter.com/hiroysato/status/643770374753091584">2015, 9月 15</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# InfinibandのIPoIBのMTUについて
InfinibandのMTU設定は，各Infinibandノード（HCA，スイッチ等）でバラバラでも問題なく通信できてるようだ。ただしフラグメントが発生してるかは不明。比較的新しいWindowsのMellanoxドライバであるWinOFでは，MTUはデフォルトで4096となっている。

一方であまり古くはないInfiniband Switch（ここではMellanox QDR36ポートスイッチIS5030Q）で，MTUの最大値は2044までとなっている。

ESXiでは，VMkernelのMTUは4096を設定できるものの，vSwitch側のMTUが最大2044までしか設定できないため，実質的にVMwareのInfinibandのMTU設定は，最大2044だと思われる。

# Twitter上のタイムラインでInfinibandのMTUについて会話の発端となった資料
http://www.neko6.info/archives/2139
>
WindowsだとMellanox版WinOFを使うかと思いますので調べてみた。
普通にネットワークの構築
Mellanox IPoIB
をデバイスの構成からみたら、
4092（-4バイト引くらしい）でした。
>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/xmms">@xmms</a> <a href="https://twitter.com/hanakara_milk">@hanakara_milk</a> ESXiとWin2012R2について書いてみました。<a href="http://t.co/SuKvPUd05J">http://t.co/SuKvPUd05J</a> <a href="http://t.co/sGXnBTVfOA">http://t.co/sGXnBTVfOA</a>　WinのOpenSMが上がらないけど通信は出来ているんですが、1対1だと必要ないんでしょうか</p>&mdash; ﾆｬﾊﾞｸﾗ客引き (@neko6_tweet) <a href="https://twitter.com/neko6_tweet/status/643060645986889729">2015, 9月 13</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## ibv_devinfo
### Windows 7のibv_devinfo
```lang:ibv_devinfo
PS C:\Windows\system32> ibv_devinfo
hca_id: ibv_device0
        fw_ver:                         2.9.8350
        node_guid:                      0002:c903:0009:16f8
        sys_image_guid:                 0002:c903:0009:16fb
        vendor_id:                      0x02c9
        vendor_part_id:                 26428
        hw_ver:                         0xB0
        phys_port_cnt:                  2
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             4096 (5)
                        sm_lid:                 1
                        port_lid:               5
                        port_lmc:               0x00
                        transport:              IB

                port:   2
                        state:                  PORT_DOWN (1)
                        max_mtu:                4096 (5)
                        active_mtu:             4096 (5)
                        sm_lid:                 0
                        port_lid:               0
                        port_lmc:               0x00
                        transport:              IB
```

### Windows Server 2012 R2のibv_devinfo
```lang:ibv_devinfo
PS C:\Users\administrator> ibv_devinfo
hca_id: ibv_device0
        fw_ver:                         2.9.8350
        node_guid:                      0002:c903:0009:656c
        sys_image_guid:                 0002:c903:0009:656f
        vendor_id:                      0x02c9
        vendor_part_id:                 26428
        hw_ver:                         0xB0
        phys_port_cnt:                  2
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             4096 (5)
                        sm_lid:                 1
                        port_lid:               11
                        port_lmc:               0x00
                        transport:              IB

                port:   2
                        state:                  PORT_DOWN (1)
                        max_mtu:                4096 (5)
                        active_mtu:             4096 (5)
                        sm_lid:                 0
                        port_lid:               0
                        port_lmc:               0x00
                        transport:              IB
```

### VMware ESXi 5.5のibstat
```lang:ibstat
/opt/opensm/bin # ./ibstat
CA 'mlx4_0'
        CA type: MT26428
        Number of ports: 1
        Firmware version: 2.9.1000
        Hardware version: b0
        Node GUID: 0x0002c903000b87f8
        System image GUID: 0x0002c903000b87fb
        Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 40
                Base lid: 4
                LMC: 0
                SM lid: 1
                Capability mask: 0x0251086a
                Port GUID: 0x0002c903000b87f9
                Link layer: InfiniBand
```
※うちのVMware環境には，ibv_devinfoのコマンドがインストールされていないため，一番近しいibstatを掲載

## sminfo
### Windows 7のsminfo
```lang:sminfo
PS C:\Windows\system32> sminfo
sminfo: sm lid 1 sm guid 0x2c9030008c997, activity count 8342 priority 0 state 3 SMINFO_MASTER
```

### Windows Server 2012 R2のsminfo
```lang:sminfo
PS C:\Users\administrator> sminfo
sminfo: sm lid 1 sm guid 0x2c9030008c997, activity count 7217 priority 0 state 3 SMINFO_MASTER
```

## smpquery
### Windows 7のsmpquery
```lang:smpquery
PS C:\Windows\system32> smpquery portinfo 2 1
# Port info: Lid 2 port 1
Mkey:............................0x0000000000000000
GidPrefix:.......................0xfe80000000000000
Lid:.............................2
SMLid:...........................1
CapMask:.........................0x2510868

DiagCode:........................0x0000
MkeyLeasePeriod:.................0
LocalPort:.......................1
LinkWidthEnabled:................1X or 4X
LinkWidthSupported:..............1X or 4X
LinkWidthActive:.................4X
LinkSpeedSupported:..............2.5 Gbps or 5.0 Gbps or 10.0 Gbps
LinkState:.......................Active
PhysLinkState:...................LinkUp
LinkDownDefState:................Polling
ProtectBits:.....................0
LMC:.............................0
LinkSpeedActive:.................10.0 Gbps
LinkSpeedEnabled:................2.5 Gbps or 5.0 Gbps or 10.0 Gbps
NeighborMTU:.....................2048
SMSL:............................0
VLCap:...........................VL0-3
InitType:........................0x00
VLHighLimit:.....................4
VLArbHighCap:....................8
VLArbLowCap:.....................8
InitReply:.......................0x00
MtuCap:..........................2048
VLStallCount:....................0
HoqLife:.........................31
OperVLs:.........................VL0-3
PartEnforceInb:..................0
PartEnforceOutb:.................0
FilterRawInb:....................0
FilterRawOutb:...................0
MkeyViolations:..................0
PkeyViolations:..................0
QkeyViolations:..................0
GuidCap:.........................128
ClientReregister:................0
McastPkeyTrapSuppressionEnabled:.0
SubnetTimeout:...................18
RespTimeVal:.....................16
LocalPhysErr:....................8
OverrunErr:......................8
MaxCreditHint:...................0
RoundTrip:.......................0
CapabilityMask2:.................0x0000
LinkSpeedExtActive:..............No Extended Speed
LinkSpeedExtSupported:...........0
LinkSpeedExtEnabled:.............0
```

### Windows Server 2012 R2のsmpquery
```lang:smpquery
PS C:\Users\administrator> smpquery portinfo 2 1
# Port info: Lid 2 port 1
Mkey:............................0x0000000000000000
GidPrefix:.......................0xfe80000000000000
Lid:.............................2
SMLid:...........................1
CapMask:.........................0x2510868

DiagCode:........................0x0000
MkeyLeasePeriod:.................0
LocalPort:.......................1
LinkWidthEnabled:................1X or 4X
LinkWidthSupported:..............1X or 4X
LinkWidthActive:.................4X
LinkSpeedSupported:..............2.5 Gbps or 5.0 Gbps or 10.0 Gbps
LinkState:.......................Active
PhysLinkState:...................LinkUp
LinkDownDefState:................Polling
ProtectBits:.....................0
LMC:.............................0
LinkSpeedActive:.................10.0 Gbps
LinkSpeedEnabled:................2.5 Gbps or 5.0 Gbps or 10.0 Gbps
NeighborMTU:.....................2048
SMSL:............................0
VLCap:...........................VL0-3
InitType:........................0x00
VLHighLimit:.....................4
VLArbHighCap:....................8
VLArbLowCap:.....................8
InitReply:.......................0x00
MtuCap:..........................2048
VLStallCount:....................0
HoqLife:.........................31
OperVLs:.........................VL0-3
PartEnforceInb:..................0
PartEnforceOutb:.................0
FilterRawInb:....................0
FilterRawOutb:...................0
MkeyViolations:..................0
PkeyViolations:..................0
QkeyViolations:..................0
GuidCap:.........................128
ClientReregister:................0
McastPkeyTrapSuppressionEnabled:.0
SubnetTimeout:...................18
RespTimeVal:.....................16
LocalPhysErr:....................8
OverrunErr:......................8
MaxCreditHint:...................0
RoundTrip:.......................0
CapabilityMask2:.................0x0000
LinkSpeedExtActive:..............No Extended Speed
LinkSpeedExtSupported:...........0
LinkSpeedExtEnabled:.............0
```

## 備考
ESXiでibstatを叩いているが，こちらのコマンド群はサードパーティ製というか，たぶんどこかのユーザーのお手製ビルドなESXi用のOpenSMをインストールすることで利用が可能となる。Windows用のWinOFやLinux用のOFEDと異なり，VMware ESXiでは，デフォルトでVMware ESXi用のInfinibandドライバをインストールしてもInfiniband用のコマンド群はインストールされない又は用意されていない模様。
https://vibsdepot.v-front.de/wiki/index.php/Ib-opensm
※vib形式になっているため，ドライバ等のインストールと同様にesxcliでインストールを行う

```lang:ESXiのOpenSM附属のコマンド群
/opt/opensm/bin # ls
ibping          ibportstate     ibstat          opensm-static   osmtest-static
```
VMwareのユーザーが提供しているOpenSMに含まれるibportstateやosmtest-staticは，自分の知識不足で叩くことができなかった。

# Infiniband環境のこと(チラシの裏)
## InfinibandのVMware事情
自宅のVMware環境は，ESXi 4.xの頃からストレージのインターコネクトにInfinibandを利用し，ESXi 5.5の今もその構成を保っている。あまりよく考えずに40Gbpsと言うキーワードだけに惹かれて導入したが，後にストレージが爆速じゃないと意味がないことに気づいて大いに凹んだ。その後MellanoxがEtherに力をいれるようになって，VMwareのInfinibandの対応もEhterに比べると徐々に減っているようで残念。

## InfinibandのSMB3.0事情
Windows Server 2012で実装されたSMB3.0は，InfinibandでRDMA転送が可能となり，それまでのSMB/CIFSのファイル転送性能を一変させたものの，対向側もSMB3.0が実装されている必要があり，事実上Windows 8/Windows Server 2012以降以外のOSには効果がなく，Linux等とのファイルシステムレベルでの通信においてRDMAを利用できない状況にある。

## InfinibandのRDMA Target(iSER)事情
LinuxではSCSTやLIOでTargetが提供でき，ブロックストレージで利用する場合にWindows側のInitiatorでiSERを利用したRDMA通信が可能だが，WindowsのiSERのターゲットを構築可能なパッケージが存在せず，Microsoft Software iSCSI Targetを利用したIPoIBでのターゲット構築しかできないため，WindowsとVMware間でRDMAを利用したストレージインターコネクトが構築できない。

## RoCE及びiWARP事情
ConnectX-3 Pro等では，WindowsにおいてRoCEを利用したRDMA接続を可能とするターゲットを提供可能なようだが，~~ConnectX-3 Pro及びDCB対応スイッチ等の価格がそれなりに高く~~，自宅で試すにはハードルが高すぎるため，残念ながら試していない…

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hanakara_milk">@hanakara_milk</a> Qiita読みました。ConnectX3とProの違いは、ProはRoCEv2サポートで、RoCE自体はRoCEサポートしています(はずです)。DCBスイッチも必須ではないみたい。誤家庭でのご利用は、ConnectX3でも良いかと思います。w</p>&mdash; hiroyuki sato (@hiroysato) <a href="https://twitter.com/hiroysato/status/644302048599523328">2015, 9月 17</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

RoCEを試すのにConnectX-3 Pro及びDCB対応スイッチは必須じゃないようでした。が，ConnectX-3は相変わらず高いです…　@hiroysatoさん情報ありがとうございます。