You may have noticed that in vSphere 4.1 you have an Advanced button available in the iSCSI Initiator Properties window.
Many of these advanced settings are just unknown to me so I started googling for more info and here are their meanings:
Header Digest – Can take values Prohibited, Discouraged, Preferred or Required. The setting increases data integrity by performing a checksum of each iSCSI Protocol Data Unit’s (PDU’s) header part using the CRC32C algorithm. Systems that use Intel Nehalem processors offload the iSCSI digest calculations, thus reducing the impact on performance. The default is Prohibited.
Data Digest – Can take values Prohibited, Discouraged, Preferred, or Required. Same as Header Digest, but for each PDU’s data part a checksum is performed using the CRC32C algorithm as well. Again systems that use Intel Nehalem processors offload the iSCSI digest calculations, thus reducing the impact on performance. The default is Prohibited.
ErrorRecoveryLevel – Can be set to 0, 1 or 2. By default it is set to zero (0) which means no error recovery level is done. There are two camps, those who say that TCP has its own mechanism or error check and correction and therefore no need to add an additional mechanism inside the iSCSI PDU. And then the other camp who says that this is two different things and actually setting the ErrorRecoveryLevel to 2 is the only way to not terminate and close all iSCSI sessions with the target(s) on network glitches. Instead the initiator will try to reconnect on ALL connections, pretty interesting in a multipath environment environment I guess. The default is 0.
LoginRetryMax – the maximum number of login attempts on iSCSI Target. The default is 4.
MaxOutstandingR2T – Defines the R2T (Ready to Transfer) PDUs that can be in transition before an acknowledge PDU is received. Setting a higher value means more data is transmitted before an acknowledge PDU is received, that also means an increase of the time before data loss is discovered as well. The default is 1.
FirstBurstLength – Specifies the maximum amount in bytes of unsolicited data an iSCSI initiator can send to the target during the execution of a single SCSI command. The default is 262144.
MaxBurstLength – Maximum SCSI data payload in a Data-In or a solicited Data-Out iSCSI sequence, in bytes. The default is 262144.
MaxRecvDataSegLen – Maximum data segment length, in bytes, that can be received in an iSCSI PDU. The default is 131072. This variable is half the size of MaxBurstLength and FirstBurstLength, that means whenever you want to change that value, you must also change accordingly the values of MaxBurstLength and FirstBurstLength.
MaxCommands – It is a number that the initiator shipped to the target to indicate the maximum number of commands the initiator can send (maxumum and remaining). This is the queuing capacity of the receiving iSCSI layer. The default is 128.
ARP Redirect – Allows storage systems to move iSCSI traffic dynamically from one port to another. ARP is required by storage systems that do array based failover. Configurable through vSphere CLI only and for hardware iSCSI HBA only.
DefaultTimeToWait – This is the minimum time, in seconds, to wait before attempting an explicit/implicit logout or active iSCSI task reassignment after an unexpected connection termination or a connection reset. When set to 0, reconnection happens immediately. The default is 2.
DefaultTimeToRetain – This is the maximum time, in seconds after an initial wait (DefaultTimeToWait), before an active iSCSI task reassignment is still possible after an unexpected connection termination or a connection reset. The default is 0.
LoginTimeout – Specify the time in seconds to wait for a login PDU (sent or received) before failing the login on a particular connection. If this entry is not present in the configuration file, a default value of 15 seconds is set by the driver. The default is 15.
LogoutTimeout – same thing, but for logging out. The default is 15.
NoopTimeout – Amount of time, in seconds, that can lapse before your host receives a NOP‐In message. The message is sent by the iSCSI target in response to the NOP‐Out request. When the
NoopTimeout limit is exceeded, the initiator terminates the current session and starts a new one. This is supported only at the initiator level. The default is 10.
NoopInterval – The Amount of time, in seconds, that can lapse while a session recovery is performed. If the timeout exceeds its limit, the iSCSI initiator terminates the session. The default is 15.
InitR2T – If set to true, indicates that the initiator MUST wait for an R2T before sending to the target. If set to false, the initiator MAY send data immediately, within limits set by FirstBurstLength and the expected data transfer length of the request. The default is false.
ImmediateData – Indicates whether the initiator and target have agreed to support immediate data on this session. The default is true.
DelayedAck – Allows systems to delay acknowledgment of received data packets. The default is true.
For the following blog post on this hot topic, I will come up with ‘trial and error’ tests and we will see if I could improve iSCSI in my home lab, so stay tuned!