Subject: [rddp] More Thoughts on CRCs

From: "Williams, Jim" <[email-masked]>
Date: Thu, 21 Nov 2002 20:38:46 -0500

Under the MPA proposal, there is a single CRC covering
an entire DDP PDU.  Although MPA recommends that the 
sender align PDUs with TCP segments, this is not a
requirement.  The protocol should run with reduced
performance, but not break, if alignment is not
observed.

But how does the RNIC handle this non-aligned case?

One possible solution is that 
if a partial PDU arrives, the RNIC must buffer this
partial PDU and wait for the second half to arrive
before the CRC can be checked and any
DDP layer processing can take place.
This implies that the buffering required on the
RNIC is proportional to the number of connections
supported, since each connection may have a partial
PDU waiting.

An alternative is to provide a separate CRC to 
cover the DDP header.  This allows verifying
the placement info and placing the unverified data.
When the remainder of the PDU arrives, it is placed
and verified.  If the payload verification fails,
the data is not delivered to the ULP, and the
connection closed in error.

Placing data using unverified placement info is
a serious concern since it may result in a 
buffer currently owned by the ULP being erroneously
overwritten.

A third alternative is for MPA to only work 
when PDUs are aligned.  Prehaps all unaligned
PDUs would be punted to the host to sort out.

Anyway, I would be interested in what the current
thinking is on how RNICs should handle unaligned
PDUs.
_______________________________________________
rddp mailing list
[email-masked]
https://www1.ietf.org/mailman/listinfo/rddp

---

From: Caitlin Bestler <[email-masked]>
Date: Thu, 21 Nov 2002 22:46:08 -0600

On 11/21/02, Williams, Jim wrote:

>
>One possible solution is that if a partial PDU arrives,
>the RNIC must buffer this partial PDU and wait for the
>second half to arrive before the CRC can be checked and
>any DDP layer processing can take place. This implies that
>the buffering required on the RNIC is proportional to the
>number of connections supported, since each connection may
>have a partial PDU waiting.
>

I believe the general assumption is that performance under
this scenario is not critical, only compliance. The goal
would be to perform no worse than a raw LLP connection would
have, but to willingly sacrifice the performance benefits of
DDP in this scenario if doing so improves performance in the
normal scenario.

This strikes me as a valid tradeoff, but it should be made
explicitly. It also depends on the assumption that
re-segmentation, when it happens, will tend to come in
streaks for a given connection. Semi-frequent short losses
of alignment would be a very different matter.

The goal of merely maintaining conformance and adequate
performance when alignment is lost could be met without
requiring RNIC buffering for every connection.

When the allotted RNIC buffering is exceeded, the RNIC
starts kicking connections to a host based software stack.
At that point performance truly will crash, but it should
still be on par with host software based TCP performance.

When alignment is not broken the benefit of a single CRC is
ultimately the extra four bytes of ULP payload. The extra
gates are trivial compared to finding the start of the DDP
segment anyway.

Admittedly, the benefit for the normal case is slight, and
the penalty for the exceptional case is heavy. So this
tradeoff is only justified if the exceptional case is truly
exceptional.

Caitlin Bestler
http://asomi.com/CaitlinBestler/
_______________________________________________
rddp mailing list
[email-masked]
https://www1.ietf.org/mailman/listinfo/rddp