mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	Link: https://lore.kernel.org/r/0708b62b6ec4f0dddc581e412bb02ba6476f4523.1583136624.git.mchehab+huawei@kernel.org Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
.. SPDX-License-Identifier: GPL-2.0
 | 
						|
 | 
						|
=================================
 | 
						|
Chelsio S3 iSCSI Driver for Linux
 | 
						|
=================================
 | 
						|
 | 
						|
Introduction
 | 
						|
============
 | 
						|
 | 
						|
The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc.
 | 
						|
series of products) support 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 receiving, S3 h/w recovers the iSCSI PDU by reassembling TCP
 | 
						|
	  segments, separating the header and data, calculating and verifying
 | 
						|
	  the digests, then forwarding 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 with 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.
 |