2008-12-09 23:15:32 +01:00
|
|
|
Chelsio S3 iSCSI Driver for Linux
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
============
|
|
|
|
|
|
|
|
The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc.
|
2009-02-14 06:39:04 +01:00
|
|
|
series of products) support iSCSI acceleration and iSCSI Direct Data Placement
|
2008-12-09 23:15:32 +01:00
|
|
|
(DDP) where the hardware handles the expensive byte touching operations, such
|
|
|
|
as CRC computation and verification, and direct DMA to the final host memory
|
|
|
|
destination:
|
|
|
|
|
|
|
|
- iSCSI PDU digest generation and verification
|
|
|
|
|
|
|
|
On transmitting, Chelsio S3 h/w computes and inserts the Header and
|
|
|
|
Data digest into the PDUs.
|
|
|
|
On receiving, Chelsio S3 h/w computes and verifies the Header and
|
|
|
|
Data digest of the PDUs.
|
|
|
|
|
|
|
|
- Direct Data Placement (DDP)
|
|
|
|
|
|
|
|
S3 h/w can directly place the iSCSI Data-In or Data-Out PDU's
|
|
|
|
payload into pre-posted final destination host-memory buffers based
|
|
|
|
on the Initiator Task Tag (ITT) in Data-In or Target Task Tag (TTT)
|
|
|
|
in Data-Out PDUs.
|
|
|
|
|
|
|
|
- PDU Transmit and Recovery
|
|
|
|
|
|
|
|
On transmitting, S3 h/w accepts the complete PDU (header + data)
|
|
|
|
from the host driver, computes and inserts the digests, decomposes
|
|
|
|
the PDU into multiple TCP segments if necessary, and transmit all
|
|
|
|
the TCP segments onto the wire. It handles TCP retransmission if
|
|
|
|
needed.
|
|
|
|
|
2009-02-14 06:39:04 +01:00
|
|
|
On receiving, S3 h/w recovers the iSCSI PDU by reassembling TCP
|
2008-12-09 23:15:32 +01:00
|
|
|
segments, separating the header and data, calculating and verifying
|
2009-02-14 06:39:04 +01:00
|
|
|
the digests, then forwarding the header to the host. The payload data,
|
2008-12-09 23:15:32 +01:00
|
|
|
if possible, will be directly placed into the pre-posted host DDP
|
|
|
|
buffer. Otherwise, the payload data will be sent to the host too.
|
|
|
|
|
|
|
|
The cxgb3i driver interfaces with open-iscsi initiator and provides the iSCSI
|
|
|
|
acceleration through Chelsio hardware wherever applicable.
|
|
|
|
|
|
|
|
Using the cxgb3i Driver
|
|
|
|
=======================
|
|
|
|
|
|
|
|
The following steps need to be taken to accelerates the open-iscsi initiator:
|
|
|
|
|
|
|
|
1. Load the cxgb3i driver: "modprobe cxgb3i"
|
|
|
|
|
|
|
|
The cxgb3i module registers a new transport class "cxgb3i" with open-iscsi.
|
|
|
|
|
|
|
|
* in the case of recompiling the kernel, the cxgb3i selection is located at
|
|
|
|
Device Drivers
|
|
|
|
SCSI device support --->
|
|
|
|
[*] SCSI low-level drivers --->
|
|
|
|
<M> Chelsio S3xx iSCSI support
|
|
|
|
|
|
|
|
2. Create an interface file located under /etc/iscsi/ifaces/ for the new
|
|
|
|
transport class "cxgb3i".
|
|
|
|
|
|
|
|
The content of the file should be in the following format:
|
|
|
|
iface.transport_name = cxgb3i
|
|
|
|
iface.net_ifacename = <ethX>
|
|
|
|
iface.ipaddress = <iscsi ip address>
|
|
|
|
|
|
|
|
* if iface.ipaddress is specified, <iscsi ip address> needs to be either the
|
|
|
|
same as the ethX's ip address or an address on the same subnet. Make
|
|
|
|
sure the ip address is unique in the network.
|
|
|
|
|
|
|
|
3. edit /etc/iscsi/iscsid.conf
|
2009-02-14 06:39:04 +01:00
|
|
|
The default setting for MaxRecvDataSegmentLength (131072) is too big;
|
|
|
|
replace with a value no bigger than 15360 (for example 8192):
|
2008-12-09 23:15:32 +01:00
|
|
|
|
|
|
|
node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192
|
|
|
|
|
|
|
|
* The login would fail for a normal session if MaxRecvDataSegmentLength is
|
|
|
|
too big. A error message in the format of
|
|
|
|
"cxgb3i: ERR! MaxRecvSegmentLength <X> too big. Need to be <= <Y>."
|
|
|
|
would be logged to dmesg.
|
|
|
|
|
|
|
|
4. To direct open-iscsi traffic to go through cxgb3i's accelerated path,
|
|
|
|
"-I <iface file name>" option needs to be specified with most of the
|
|
|
|
iscsiadm command. <iface file name> is the transport interface file created
|
|
|
|
in step 2.
|