In-order delivery of plurality of RDMA messages
View Patent ↗An RNIC implementation that performs direct data placement to memory where all segments of a particular connection are aligned, or moves data through reassembly buffers where all segments of a particular connection are non-aligned. The type of connection that cuts-through without accessing the reassembly buffers is referred to as a “Fast” connection because it is highly likely to be aligned, while the other type is referred to as a “Slow” connection. When a consumer establishes a connection, it specifies a connection type. The connection type can change from Fast to Slow and back. The invention reduces memory bandwidth, latency, error recovery using TCP retransmit and provides for a “graceful recovery” from an empty receive queue. The implementation also may conduct CRC validation for a majority of inbound DDP segments in the Fast connection before sending a TCP acknowledgement (Ack) confirming segment reception.
1. A method for delivering of a plurality of RDMA messages, the method comprising the steps of:
placing each out-of-order RDMA message to a reassembly buffer, wherein each in-order RDMA message bypasses the reassembly buffer and is sent to an internal data buffer for direct placement to a destination buffer;
storing information regarding each out-of-order RDMA message on a per TCP hole basis, wherein a TCP hole is a vacancy created in a TCP stream as a result of an out-of-order TCP segment, wherein the information stored for RDMA Read messages includes at least a number of pending RDMA Read Request messages waiting for a doorbell ring in a connection context on a per TCP hole basis or a number of completed RDMA Read Response messages on a per TCP hole basis; and
delivering the plurality of RDMA messages in-order, such that the out-of-order RDMA messages are reassembled in-order in the reassembly buffer, wherein, for RDMA Send type messages, the delivering includes, for each RDMA Send message of a TCP hold, placing a completion queue element (CQE), the CQE including RDMA Send message specific information, in a work queue element (WQE) associated with the respective RDMA Send message and keeping a number of RDMA Send messages in a connection context on a per TCP hole basis.
2. The method of claim 1 , wherein, for an RDMA Read Request message, the storing step includes:
ringing the doorbell of a network interface controller (NIC) that each of the number of pending RDMA read response messages have been posted to a respective work queue element (WQE) of a read queue upon closing of a respective TCP hole.
3. The method of claim 2 , further comprising the step of processing each WQE.
4. The method of claim 1 , further comprising the step of placing a completion queue element (CQE) to a completion queue (CQ) upon closing of the TCP hole.
5. The method of claim 1 , wherein a number of CQEs is equal to a number of RDMA Send messages of the TCP hole.
6. The method of claim 1 , wherein RDMA Send message specific information is retrieved from a respective WQE upon a Poll-for-Completion request by an RDMA verb interface.
7. The method of claim 1 , wherein, for RDMA Read Response type messages, the method further comprises the step of:
reporting completion of RDMA Read work requests upon closing of the TCP hole.
8. A system for delivering of a plurality of RDMA messages, the system comprising:
a processor; and
a memory, further comprising:
a system for placing each out-of-order RDMA message to a reassembly buffer, wherein each in-order RDMA message bypasses the reassembly buffer and is sent to an internal data buffer for direct placement to a destination buffer;
a system for storing information regarding each out-of-order RDMA message on a per TCP hole basis, wherein a TCP hole is a vacancy created in a TCP stream as a result of an out-of-order TCP segment, wherein the information stored for RDMA Read messages includes at least a number of pending RDMA Read Request messages waiting for a doorbell ring in a connection context on a per TCP hole basis or a number of completed RDMA Read Response messages on a per TCP hole basis; and
a system for delivering the plurality of RDMA messages in-order, such that the out-of-order RDMA messages are reassembled in-order in the reassembly buffer, wherein, for RDMA Send type messages, the delivering includes, for each RDMA Send message of a TCP hold, placing a completion queue element (CQE), the CQE including RDMA Send message specific information, in a work queue element (WQE) associated with the respective RDMA Send message and keeping a number of RDMA Send messages in a connection context on a per TCP hole basis.
9. The system of claim 8 , wherein, for an RDMA Read message, the storing means includes:
a system for ringing the doorbell of the delivery means that each of the number of pending RDMA Read Response messages have been posted to a respective work queue element (WQE) of a read queue upon closing of a respective TCP hole.
10. The system of claim 8 , further comprising means for placing a completion queue element (CQE) to a completion queue (CQ) upon closing of the TCP hole.
11. The system of claim 8 , wherein a number of CQEs is equal to a number of RDMA Send messages of the TCP hole.
12. The system of claim 8 , wherein the RDMA Send message specific information is retrieved from a respective WQE upon a Poll-for-Completion request by an RDMA verb interface.
13. The system of claim 8 , further comprising:
a system for reporting completion of RDMA Read work requests upon closing of the TCP hole.
14. A computer program product comprising a tangible computer useable storage medium having computer readable program code embodied therein for delivering of a plurality of RDMA messages, the program product comprising:
program code configured to place each out-of-order RDMA message to a reassembly buffer, wherein each in-order RDMA message bypasses the reassembly buffer and is sent to an internal data buffer for direct placement to a destination buffer;
program code configured to store information regarding each out-of-order RDMA message on a per TCP hole basis, wherein a TCP hole is a vacancy created in a TCP stream as a result of an out-of-order TCP segment, wherein the information stored for RDMA Read messages includes at least a number of pending RDMA Read Request messages waiting for a doorbell ring in a connection context on a per TCP hole basis or a number of completed RDMA Read Response messages on a per TCP hole basis; and
program code configured to deliver the plurality of RDMA messages in-order, such that the out-of-order RDMA messages are reassembled in-order in the reassembly buffer, wherein, for RDMA Send type messages, the delivering includes, for each RDMA Send message of a TCP hold, placing a completion queue element (CQE), the CQE including RDMA Send message specific information, in a work queue element (WQE) associated with the respective RDMA Send message and keeping a number of RDMA Send messages in a connection context on a per TCP hole basis.
15. The program product of claim 14 , wherein, for an RDMA Read message, the storing program code includes:
program code configured to ring the doorbell of a network interface controller (NIC) that each of the number of pending RDMA Read Response messages have been posted to a respective work queue element (WQE) of a read queue upon closing of a respective TCP hole.
16. The program product of claim 14 , further comprising program code configured to place a completion queue element (CQE) to a completion queue (CQ) upon closing of the TCP hole.
17. The program product of claim 14 , wherein a number of CQEs is equal to a number of RDMA Send messages of the TCP hole.
18. The program product of claim 14 , wherein the RDMA Send message specific information is retrieved from a respective WQE upon a Poll-for-Completion request by an RDMA verb interface.
19. The program product of claim 14 , further comprising:
program code configured to report completion of RDMA Read work requests upon closing of the TCP hole.