Linux 的 Chelsio S3 iSCSI 驱动程序¶
简介¶
基于 Chelsio T3 ASIC 的适配器(S310、S320、S302、S304、夹层卡等系列产品)支持 iSCSI 加速和 iSCSI 直接数据放置 (DDP),硬件负责处理代价高昂的字节操作,如 CRC 计算和验证,以及直接 DMA 到最终主机内存目的地
iSCSI PDU 摘要生成和验证
在发送时,Chelsio S3 硬件计算并将头和数据摘要插入到 PDU 中。在接收时,Chelsio S3 硬件计算并验证 PDU 的头和数据摘要。
直接数据放置 (DDP)
S3 硬件可以根据 Data-In 中的发起程序任务标签 (ITT) 或 Data-Out PDU 中的目标任务标签 (TTT),将 iSCSI Data-In 或 Data-Out PDU 的有效负载直接放置到预先发布的最终目标主机内存缓冲区中。
PDU 传输和恢复
在发送时,S3 硬件从主机驱动程序接收完整的 PDU(头 + 数据),计算并插入摘要,必要时将 PDU 分解为多个 TCP 段,并将所有 TCP 段传输到网络上。它会处理需要的 TCP 重传。
在接收时,S3 硬件通过重新组装 TCP 段来恢复 iSCSI PDU,分离头部和数据,计算并验证摘要,然后将头部转发到主机。如果可能,有效负载数据将直接放置到预先发布的主机 DDP 缓冲区中。否则,有效负载数据也将被发送到主机。
cxgb3i 驱动程序与 open-iscsi 发起程序接口,并在适用的情况下通过 Chelsio 硬件提供 iSCSI 加速。
使用 cxgb3i 驱动程序¶
需要执行以下步骤来加速 open-iscsi 发起程序
加载 cxgb3i 驱动程序:“modprobe cxgb3i”
cxgb3i 模块向 open-iscsi 注册一个新的传输类“cxgb3i”。
在重新编译内核的情况下,cxgb3i 的选择位于
Device Drivers SCSI device support ---> [*] SCSI low-level drivers ---> <M> Chelsio S3xx iSCSI support
为新的传输类“cxgb3i”创建一个位于 /etc/iscsi/ifaces/ 下的接口文件。
该文件的内容应采用以下格式
iface.transport_name = cxgb3i iface.net_ifacename = <ethX> iface.ipaddress = <iscsi ip address>
如果指定了 iface.ipaddress,则 <iscsi ip address> 需要与 ethX 的 ip 地址相同,或位于同一子网上的地址。请确保 ip 地址在网络中是唯一的。
编辑 /etc/iscsi/iscsid.conf MaxRecvDataSegmentLength 的默认设置 (131072) 太大;将其替换为不大于 15360 的值(例如 8192)
node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192
如果 MaxRecvDataSegmentLength 太大,则正常会话的登录将失败。格式为 “cxgb3i: ERR! MaxRecvSegmentLength <X> too big. Need to be <= <Y>.” 的错误消息将被记录到 dmesg。
要将 open-iscsi 流量导向通过 cxgb3i 的加速路径,大多数 iscsiadm 命令都需要指定 “-I <iface 文件名>” 选项。 <iface 文件名> 是在步骤 2 中创建的传输接口文件。