[openib-general] basic IB doubt
Michael Krause
krause at cup.hp.com
Mon Aug 28 20:18:19 PDT 2006
At 10:14 AM 8/23/2006, Ralph Campbell wrote:
>On Wed, 2006-08-23 at 09:47 -0700, Caitlin Bestler wrote:
> > openib-general-bounces at openib.org wrote:
> > > Quoting r. john t <johnt1johnt2 at gmail.com>:
> > >> Subject: basic IB doubt
> > >>
> > >> Hi
> > >>
> > >> I have a very basic doubt. Suppose Host A is doing RDMA write (say 8
> > >> MB) to Host B. When data is copied into Host B's local
> > > buffer, is it guaranteed that data will be copied starting
> > > from the first location (first buffer address) to the last
> > > location (last buffer address)? or it could be in any order?
> > >
> > > Once B gets a completion (e.g. of a subsequent send), data in
> > > its buffer matches that of A, byte for byte.
> >
> > An excellent and concise answer. That is exactly what the application
> > should rely upon, and nothing else. With iWARP this is very explicit,
> > because portions of the message not only MAY be placed out of
> > order, they SHOULD be when packets have been re-ordered by the
> > network. But for *any* RDMA adapter there is no guarantee on
> > what order the adapter flushes things to host memory or particularly
> > when old contents that may be cached are invalidated or updated.
> > The role of the completion is to limit the frequency with which
> > the RDMA adapter MUST guarantee coherency with application visible
> > buffers. The completion not only indicates that the entire message
> > was received, but that it has been entirely delivered to host memory.
>
>Actually, A knows the data is in B's memory when A gets the completion
>notice.
This is incorrect for both iWARP and IB. A completion by A only means that
the receiving HCA / RNIC has the data and has generated an
acknowledgement. It does not indicate that B has flushed the data to host
memory. Hence, the fault zone remains the HCA / RNIC and while A may free
the associated buffer for other usage, it should not rely upon the data
being delivered to host memory on B. This is one of the fault scenarios I
raised during the initial RDS transparent recovery assertions. If A were
to issue a RDMA Read to the B targeting the associated RDMA Write memory
location, then it can know the data has been placed in B's memory.
> B can't rely on anything unless A uses the RDMA write with
>immediate which puts a completion event in B's CQ.
>Most applications on B ignore this requirement and test for the last
>memory location being modified which usually works but doesn't
>guarantee that all the data is in memory.
B cannot rely on anything until a completion is seen either through an
immediate or a subsequent Send. It is not wise to rely upon IHV-specific
behaviors when designing an application as even an IHV can change things
over time or due to interoperability requirements, things may not work as
desired which is definitely a customer complaint that many would like to avoid.
BTW, the reason immediate data is 4 bytes in length is that was what was
defined in VIA. Many within the IBTA wanted to get rid of immediate data
but due to the requirement to support legacy VIA applications, the
immediate value was left in place. The need to support a larger value was
not apparent. One needs to keep in mind where the immediate resides within
the wire protocol and its usage model. The past usage was to signal a PID
or some other unique identifier that could be used to comprehend which
thread of execution should be informed of a particular completion
event. Four bytes is sufficient to communicate such information without
significantly complicating or making the wire protocol too inefficient.
Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/general/attachments/20060828/85d7eb99/attachment.html>
More information about the general
mailing list