適用於 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 中建立的傳輸介面檔案。