[SCSI] cxgb3i: Add cxgb3i iSCSI driver.
This patch implements the cxgb3i iscsi connection acceleration for the open-iscsi initiator. The cxgb3i driver offers the iscsi PDU based offload: - digest insertion and verification - payload direct-placement into host memory buffer. Signed-off-by: Karen Xie <kxie@chelsio.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
committed by
James Bottomley
parent
b632ade282
commit
c3673464eb
85
Documentation/scsi/cxgb3i.txt
Normal file
85
Documentation/scsi/cxgb3i.txt
Normal file
@ -0,0 +1,85 @@
|
||||
Chelsio S3 iSCSI Driver for Linux
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc.
|
||||
series of products) supports iSCSI acceleration and iSCSI Direct Data Placement
|
||||
(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.
|
||||
|
||||
On receving, S3 h/w recovers the iSCSI PDU by reassembling TCP
|
||||
segments, separating the header and data, calculating and verifying
|
||||
the digests, then forwards the header to the host. The payload data,
|
||||
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
|
||||
The default setting for MaxRecvDataSegmentLength (131072) is too big,
|
||||
replace "node.conn[0].iscsi.MaxRecvDataSegmentLength" to be a value no
|
||||
bigger than 15360 (for example 8192):
|
||||
|
||||
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.
|
Reference in New Issue
Block a user