Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1276685 > unrolled thread
| Started by | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| First post | 2015-11-24 19:00 +0100 |
| Last post | 2015-11-25 07:30 +0100 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCH 2/9] IB: add a proper completion queue abstraction Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2015-11-24 19:00 +0100
Re: [PATCH 2/9] IB: add a proper completion queue abstraction Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2015-11-25 07:30 +0100
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2015-11-24 19:00 +0100 |
| Subject | Re: [PATCH 2/9] IB: add a proper completion queue abstraction |
| Message-ID | <qyq2K-2S4-3@gated-at.bofh.it> |
On Tue, Nov 24, 2015 at 10:08:39AM -0700, cait@asomi.com wrote: > >> My recollection of the IB verbs is that they were unlikely to have > >> overlooked something like that. If it did slip through then there > >> should be an errata. > >verbs reflects the wire protocol and the wire protocol has no way to > >create a linkage between the send and recv sides of a RC QP. It is not > >a spec bug, there is no errata. > > No, verbs do not reflect the link layer. Verbs fulfill the contract > with the end user - especially when the hardware cannot. Are you serious? You think verbs should specify things that cannot actually be implemented? IB verbs doesn't do that. > Reporting a completion of a receive without having guaranteed > that the acknowledgement will be sent before anything > subsequently submitted is failing to implement a reliable > connection. As I've said repeatedly, the side receiving the request has no impact on this issue. Requiring it to generate an ack before delivering the recv completion *does nothing* to guarantee ordering on the other side in IB. The network can always drop the ack, and the receiver cannot tell. I disagree that RC has anything to do with this causal ordering issue, this is not a property described in the IB spec for RC. > One of the hardware designs I worked with over a decade ago > actually had *two* completion queues, one from the left brain (receive) > and the other from the right brain (transmit). Nevertheless we > presented All verbs hardware has to have these two flows. > a unified completion queue that followed ordering rules. We were not > "reflecting" the hardware, we were implementing an interface in a > combination of hardware and software. And how did you detect lost acks at the reciever to make this an actual guarentee? Maybe TCP can do this but IB cannot. I honestly don't know why you think verbs has this requirement. It is not in the IB spec, and can't be implemented by IB hardware. If one of the other flavours of verbs has this, then fine, but it is not part of the *Linux* verbs flavour. > I cannot think of a reason why that would not work here. Simply do > not report a completion to the user before guaranteeing that the > acks will be transmitted. I've already explained three times why this is not enough for IB. > What would you do if the next user action had been to close the > connection? Would the acks have been lost? No acks will be lost. The IB termination process requires the closing side to drain it's sendq and stop injecting new traffic before sending the CM close message. The other must also drain the sendq before replying. This handshake ensures the QP is quiescent and all in flight traffic completed before the QP is destroyed. IB basically shifts the lingering close into the CM arena, where it costs less, and allows the QP and associated HW resources to be destroyed quickly. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
|---|---|
| Date | 2015-11-25 07:30 +0100 |
| Message-ID | <qyBKy-2oi-1@gated-at.bofh.it> |
| In reply to | #1276685 |
On Tue, Nov 24, 2015 at 06:47:14PM -0800, Caitlin Bestler wrote:
> Acknowledge packet for the last packet of the request has been
> committed to the wire (including the appropriate fields for RDMA
> READ response).
> The target side cannot generate a response before it receives the request.
> The target side verbs cannot generate the completion before the acknowledge
> packet has been
> committed to the wire.
Sure, but, I keep saying this, the responder behavior is largely
irrelevant to what the target is able/required to do.
> Therefore the initiating side cannot receive a response before the write
> operation has completed.
Wrong. The ladder diagram would be
Requestor Responder Responder Verbs
SEND1 -----------> Process
X--------- ACK (lost)
--------> recv1 CQ
<------- send2 WQE
recv2 CQE <-------- SEND2 Packet
[..]
send1 CQE <-------- ACK (resent)
The Ack may be lost, causing the send CQE to arrive after the recv
CQE, even though the responder did everything in a specific order.
The fundamental issue is that the responder cannot detect the lost
ACK. The PSN of the ACK packet is part of the Requestor's PSN space,
not part of the Responders:
9.7.5.1.1 GENERATING PSNs FOR ACKNOWLEDGE MESSAGES
C9-95: For responses to SEND requests or RDMA WRITE requests the
responder shall insert in the PSN field of the response the PSN of the
most recent request packet being acknowledged.
Or stated another way, the value of the AckReq bit in SEND1 has no
impact on the contents of the SEND2 packet - thus there is no way for
the requestor to detect the loss of the ACK and hold off delivering
recv2 CQE.
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web