我正在尝试弄清楚如何设置一个简单的存储系统,使用 SRP 或 iSER 通过 Infiniband 导出块存储。
我还处于这个过程的早期阶段,目前我基本上只是在寻找一个类似这样的教程:“您的架构上有两个服务器:下面介绍如何将块存储设备从一台服务器导出到另一台服务器。”最好是在 RHEL 或其变体上。有什么提示吗?
答案1
嗯,坦率地说,我选择了简单的路线,愉快地使用了 iSCSI over IP over IB,它运行起来很轻松,性能也很好:
Infiniband IP 设置超快速入门。
第一的...
- 安装 opensm、infiniband-diags、rds-tools、sdpnetstat、srptools、perftest(用于基准测试)
- 加载 IB 驱动模块,ib_umad、ib_ipoib
- 现在您有一个新的网络接口需要配置。
性能设置:
- 连接模式,将 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。
答案2
我最近在 Linux 上配置了 SRP 目标/启动器对,与传统的 iSCSI-over-IPoIB 配置(SDR 上为 300MB/s)相比,性能提高了约 100%(10Gbps SDR 上为 580MB/s)。
设置:
- 发行版:Debian sid
- Linux 内核:3.4.0-rc1(内核 SRP 需要 3.3 或更高版本)
- Infiniband 堆栈:OFED-1.4(Debian 附带)
- SRP/iSCSI 目标:带有内核 ib_srpt.ko 的 Linux-iSCSI
- SRP 启动器:内核中的 ib_srp.ko
注意:据我所知,SCST 现已过时,因为 Linux(内核)正在使用 Linux-iSCSI(LIO),同时也淘汰了 STGT(以前的内核实现)。计划将 SCST 功能合并到 LIO 中。
InfiniBand 配置:
- 将 IB 卡设置为“已连接”模式 (echo Connected > /sys/class/net/ib0/mode)
- 配置 sysctl 参数(与上面的帖子相同)
- 将 MTU 设置为最大值(ip link set dev ib0 mtu 65520)
SRP 配置:这个有点难以理解,所以我直接从我的工作日志中粘贴即可。
=== 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... 样式和 0x0000xxx 样式之间变化,但我认为两者可以互换使用。您可以通过编辑 /var/target/fabric/ib_srpt.spec(或安装 Python rtslib 库(Linux-iSCSI 工具使用)的任何位置)来配置规范化规则。
=== 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 都还有些不成熟。它们都运行良好,但断开连接等功能似乎尚未实现。因此,一旦连接了 SCSI 块设备,就无法将其断开连接。但是,它们的性能非常出色。
答案3
稳定性是关键。Mellanox 销售硬件时主要关注性能。收购 Voltaire 后,他们正在推广 iSER,因为其 IB 到以太网网关。
ProfitBricks 使用 iSER 和 Solaris 11 作为 IaaS 2.0 云的目标。但是,当我们遇到严重的 ZFS 性能问题以及 IPoIB 和 open-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
它还展示了如何建立 SRP 连接。