Re: RFC: Immediate data support for SRP

Sagi Grimberg
2015-07-21T09:17:36Z

On 7/21/2015 3:03 AM, Bart Van Assche wrote:
> On 07/19/2015 09:07 AM, Sagi Grimberg wrote:
>> On 7/16/2015 6:25 PM, Bart Van Assche wrote:
>>> As you probably know for write requests "immediate data" means sending
>>> the data in the same packet as the write command instead of sending it
>>> as a separate packet. This approach improves performance and reduces
>>> latency. Although support for immediate data has not been standardized,
>>
>> Has anyone tried to get it into the standard? It would seem beneficial
>> to just add it. I wouldn't want this to be a Linux compatible only
>> feature...
>
> Earlier today I have asked the SanDisk representative in the ANSI T10
> committee for his opinion about standardizing support for immediate data
> for the SRP protocol. I'm now waiting for his reply.

OK, I think that if we add it to upstream drivers we should be committed
to get that into the standards.

>
>>> it is easy to add to the SRP initiator and target drivers.
>>> Implementations exist in the ib_srp-backport initiator driver and the
>>> SCST SRP target driver (see also
>>> https://github.com/bvanassche/ib_srp-backport and
>>> http://sourceforge.net/p/scst/svn/HEAD/tree/trunk/srpt/). These
>>> implementations are available since considerable time, work reliably,
>>> are backwards compatible and support zero-copy. Since using immediate
>>> data provides a measurable performance improvement I'm wondering whether
>>> it would be acceptable to add support for immediate data to the SRP
>>> drivers in the Linux kernel tree (ib_srp and ib_srpt) ?
>>
>> Was this tested against any other array besides SCST and LIO? I know
>> people are using SRP against various arrays (Oracle ZFS, RamSan TMS,
>> DDN Fusion, NIMBUS, NetApp E5400A...). Their not running upstream
>> kernels, but they will catch up at some point...
>
> Not yet, but the existing implementation is backwards compatible. The
> SRP initiator sets a flag in the login request to request the target
> driver to enable immediate data (SRP_BUF_FORMAT_IMM), and only if the
> target driver sends a login response in which the same flag is set
> immediate data is enabled.

I understand, but if I'm not mistaken, setting a reserved field is also
a spec violation. Who knows what might happen if arrays will see a value
in that reserved.

Also, what is the imm_length? hard-coded? or do you specify that in the
login request as well? if so, is the target allowed to lower that value
(i.e. is it negotiable)?

This is why I think the standards is important here.

Having said that, I'm 100% on board with this feature.

Cheers,

Sagi.