はじめに
twitter上のタイムラインでInfinbandの話しをする機会があり,IPoIB接続のMTUのことが話題になったので,少し気になったところを備忘録として残しておく。
@hanakara_milk @neko6_tweet @xmms だから、OpenSMの設定を4K MTU (mtu=5)にしておいて、クラインアントを順次繋ぐことでMTUが大きくできますよということのようです。
— hiroyuki sato (@hiroysato) 2015, 9月 15
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について会話の発端となった資料
WindowsだとMellanox版WinOFを使うかと思いますので調べてみた。
普通にネットワークの構築
Mellanox IPoIB
をデバイスの構成からみたら、
4092(-4バイト引くらしい)でした。
@xmms @hanakara_milk ESXiとWin2012R2について書いてみました。http://t.co/SuKvPUd05J http://t.co/sGXnBTVfOA WinのOpenSMが上がらないけど通信は出来ているんですが、1対1だと必要ないんでしょうか
— ニャバクラ客引き (@neko6_tweet) 2015, 9月 13
ibv_devinfo
Windows 7の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
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
/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
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
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
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
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でインストールを行う
/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対応スイッチ等の価格がそれなりに高く,自宅で試すにはハードルが高すぎるため,残念ながら試していない…
@hanakara_milk Qiita読みました。ConnectX3とProの違いは、ProはRoCEv2サポートで、RoCE自体はRoCEサポートしています(はずです)。DCBスイッチも必須ではないみたい。誤家庭でのご利用は、ConnectX3でも良いかと思います。w
— hiroyuki sato (@hiroysato) 2015, 9月 17
RoCEを試すのにConnectX-3 Pro及びDCB対応スイッチは必須じゃないようでした。が,ConnectX-3は相変わらず高いです… @hiroysatoさん情報ありがとうございます。