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 发起程序

  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 文件名>” 选项。 <iface 文件名> 是在步骤 2 中创建的传输接口文件。