适用于 Linux 的 Chelsio S3 iSCSI 驱动程序

简介

基于 Chelsio T3 ASIC 的适配器(S310、S320、S302、S304、Mezz 卡等系列产品)支持 iSCSI 加速和 iSCSI 直接数据放置 (DDP),其中硬件处理昂贵的字节触摸操作,例如 CRC 计算和验证,以及直接 DMA 到最终主机内存目标。

  • iSCSI PDU 摘要生成和验证

    在传输时,Chelsio S3 硬件计算并将标头和数据摘要插入 PDU。在接收时,Chelsio S3 硬件计算并验证 PDU 的标头和数据摘要。

  • 直接数据放置 (DDP)

    S3 硬件可以直接将 iSCSI Data-In 或 Data-Out PDU 的有效负载放置到预先发布的目的主机内存缓冲区中,基于 Data-In 中的 Initiator Task Tag (ITT) 或 Data-Out PDU 中的 Target Task Tag (TTT)。

  • PDU 传输和恢复

    在传输时,S3 硬件从主机驱动程序接受完整的 PDU(标头 + 数据),计算并插入摘要,如有必要将 PDU 分解为多个 TCP 段,并将所有 TCP 段传输到线路上。 它会根据需要处理 TCP 重传。

    在接收时,S3 硬件通过重新组装 TCP 段、分离标头和数据、计算和验证摘要来恢复 iSCSI PDU,然后将标头转发到主机。 如果可能,有效负载数据将直接放置到预先发布的主机 DDP 缓冲区中。 否则,有效负载数据也将发送到主机。

cxgb3i 驱动程序与 open-iscsi 发起程序接口,并通过 Chelsio 硬件提供 iSCSI 加速(如果适用)。

使用 cxgb3i 驱动程序

需要采取以下步骤来加速 open-iscsi 发起程序

  1. 加载 cxgb3i 驱动程序:“modprobe cxgb3i”

    cxgb3i 模块向 open-iscsi 注册一个新的传输类“cxgb3i”。

    • 在重新编译内核的情况下,cxgb3i 选择位于

      Device Drivers
              SCSI device support --->
                      [*] SCSI low-level drivers  --->
                              <M>   Chelsio S3xx iSCSI support
      
  2. 为新的传输类“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 地址在网络中是唯一的。

  3. 编辑 /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。

  4. 要将 open-iscsi 流量直接发送到 cxgb3i 的加速路径,需要使用大多数 iscsiadm 命令指定“-I <iface file name>”选项。 <iface file name> 是在步骤 2 中创建的传输接口文件。