[ofa-general] post_recv question
Steve Wise
swise at opengridcomputing.com
Thu Feb 21 07:41:27 PST 2008
Hey all:
I have a question regarding exactly _when_ a posted recv buffer is
available for the HW to use:
Consider that the post_recv methods usually just program a hw-specific
WR in the RQ, then ring a doorbell, then return. There is a delta
period between when the app returns from the post_recv call and when the
HW actually DMA's the WR and programs up the HW to enable that buffer.
(I'm assumming a specific HW design here, but I _think_ most HW behaves
this way?).
If this is all true, then from the apps point of view, the buffer isn't
really available when it returns from post_recv. This can lead to
conditions where the app advertises that recv buffer to the peer via
some out of band channel, and the peer posts a SEND which arrives
_before_ the HW has actually setup the RECV buffer.
Granted, this hole is small, but does it exist for nes, mthca, ehca, and
ipath libs/drivers? Or do they _not_ have this issue?
Does the IBTA spec discuss this at all? Most importantly, does the IBTA
spec and/or the iWARP verbs spec _mandate_ that the buffer is actually
available when the post_recv() method returns (I didn't find it in the
iWARP spec)? If such a mandate exists, then it would force post_recv()
methods to stall and/or somehow know when the HW has completed setting
up the recv buffer. This would kill performance IMO and I think no such
mandate exists, but I wanted to know what others think.
Maybe this isn't an issue with mthca/ehca/ipath/nes?
Thanks,
Steve.
More information about the general
mailing list