设置简单的Infiniband块存储(SRP或iSER)

我想弄清楚如何build立一个简单的存储系统,通过使用SRP或iSER导出在Infiniband上的块存储。

我在这个过程中很早,现在我基本上只是在寻找一个教程,“你的架构上有两台服务器:这里是如何将块存储设备从一个存储设备导出到另一个。 “ 优选在RHEL上或其变体上。 任何指针?

那么坦率地说,我走了一条简单的路线,高兴地在IB上使用了iSCSI over IP,它的工作很简单,而且performance良好:

Infiniband IP设置超快速底漆。

第一…

  • 安装opensm,infiniband-diags,rds-tools,sdpnetstat,srptools,perftest(用于基准testing)
  • 加载IB驱动程序模块ib_umad,ib_ipoib
  • 现在你有一个新的networking接口来configuration。

性能设置:

  • 连接模式,将MTU设置为65520
  • 数据报模式,将MTU设置为2044
  • 数据报性能:〜5 Gb / s
  • 连接模式性能:〜6.3 Gb / s

YMMV与IB控制器型号,驱动程序等

IP设置:

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" 

一些文件:

http://support.systemfabricworks.com/lxr/#ofed+OFED-1.5/ofed-docs-1.5/ipoib_release_notes.txt

http://www.mjmwired.net/kernel/Documentation/infiniband/ipoib.txt

iperf,4个线程:

 [ 3] local 192.168.1.2 port 50585 connected with 192.168.1.3 port 5003 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 2.75 GBytes 2.36 Gbits/sec [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 2.79 GBytes 2.40 Gbits/sec [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 3.31 GBytes 2.84 Gbits/sec [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 3.51 GBytes 3.02 Gbits/sec 

总带宽总计为1.3 GB / s,绝对优于10 GigE。

我最近在Linux上configuration了SRP目标/启动器对,与传统的iSCSI-over-IPoIBconfiguration(SDR为300MB / s)相比,性能提高了约100%(10Gbps SDR为580MB / s)。

build立:

  • 分布:Debian sid
  • Linux内核:3.4.0-rc1(内核SRP需要3.3或更高版本)
  • Infiniband堆栈:OFED-1.4(Debian附带)
  • SRP / iSCSI目标:使用in-kernel ib_srpt.ko的Linux-iSCSI
  • SRP启动器:in-kernel ib_srp.ko

注意:AFAIK,SCST现在已经过时了,因为Linux(内核)正在使用Linux-iSCSI(LIO),而STGT(之前的内核实现)也被淘汰了。 计划是将SCSTfunction合并到LIO中。

InfiniBandconfiguration:

  • 设置IB卡为“连接”模式(echo连接> / sys / class / net / ib0 / mode)
  • configurationsysctl参数(和上面一样)
  • 将MTU设置为最大值(ip link set dev ib0 mtu 65520)

SRPconfiguration:这个有点混乱,所以我只是从我的工作日志粘贴。

 === SRP target configuration === // NOTE: This is GUID of your IB interface on target-side. You can check it with ibstatus(1) # targecli /> cd /ib_srpt /ib_srpt> create 0xfe800000000000000008f1040399d85a Created target 0xfe800000000000000008f1040399d85a. Entering new node /ib_srpt/0xfe800000000000000008f1040399d85a /ib_srpt/0xfe...8f1040399d85a> cd luns // This is just a dm-zero mapped "/dev/zero"-like block device /ib_srpt/0xfe...0399d85a/luns> create /backstores/iblock/zero /ib_srpt/0xfe...85a/luns/lun0> cd ../../acls // This is GUID of your IB interface on initiator-side /ib_srpt/0xfe...0399d85a/acls> create 0x00000000000000000008f1040399d832 

在上面的(实际的)例子中,GUID在0xfe80 … style和0x0000xxx风格之间变化,但是我认为两者可以互换使用。 您可以通过编辑/var/target/fabric/ib_srpt.spec(或安装Python rtslib库(使用Linux-iSCSI工具))来configuration规范化规则。

 === SRP initiator configuration === // uMAD device must match with IB interface being used # ibsrpdm -c -d /dev/infiniband/umad1 id_ext=0008f1040399d858,ioc_guid=0008f1040399d858,dgid=fe800000000000000008f1040399d85a,pkey=ffff,service_id=0008f1040399d858 // Supply above string to ib_srp.ko, in order to setup SRP connection # for i in $(ibsrpdm -c -d /dev/infiniband/umad1); \ do echo $i > /sys/class/infiniband_srp/srp-mlx4_0-2/add_target; done 

如果一切顺利,您将在dmesg中看到类似于以下的消息:

 [10713.616495] scsi host9: ib_srp: new target: id_ext 0008f1040399d858 ioc_guid 0008f1040399d858 pkey ffff service_id 0008f1040399d858 dgid fe80:0000:0000:0000:0008:f104:0399:d85a [10713.815843] scsi9 : SRP.T10:0008F1040399D858 [10713.891557] scsi 9:0:0:0: Direct-Access LIO-ORG IBLOCK 4.0 PQ: 0 ANSI: 5 [10713.988846] sd 9:0:0:0: [sde] 2147483648 512-byte logical blocks: (1.09 TB/1.00 TiB) ... 

最后要说明的是,ib_srp.ko / ib_srpt.ko仍然有些不成熟。 他们都工作正常,但像断线function似乎未实现。 所以一旦连接了SCSI块设备,就无法拆卸它。 但是,他们的performance非常好。

稳定性使差异。 Mellanox在销售硬件时主要关心性能。 当他们买了Voltaire时,他们正在推动iSER,因为他们的IB到以太网网关。

我们在ProfitBricks使用iSER和Solaris 11作为我们的IaaS 2.0云的目标。 但是,由于我们的主要ZFS性能以及IPoIB和开放的iscsi稳定性问题,我们切换到SCST和SRP的Linux存储。 我们通过linux-rdma邮件列表和我们自己的ib_srp补丁来帮助改进这项技术。 对我们来说稳定性要求简单 所以我们要用SRP,因为我们有InfiniBand。 RDMA是InfiniBand原生的,SRP是RDMA专用的。

我今年在LinuxTag上做了关于这个主题的介绍:用于存储的InfiniBand / RDMA – SRP与iSER http://www.slideshare.net/SebastianRiemer/infini-band-rdmaforstoragesrpvsiser-21791250

它还显示了如何build立SRP连接。

我们自己的补丁包括详细的SRPtesting以及一些非常简单的shell脚本: https : //github.com/sriemer/ib_srp

通过tgt项目可以获得用于Linux的iSER实施,并且可以通过SCST项目提供Linux的SRP实施。 关于Windows支持:目前没有可用于Windows的iSER启动器驱动程序。 但是,winOFED软件包中提供了一个用于Windows的SRP启动程序驱动程序(另请参阅openfabrics.org网站)。