Skip to content

Subsystem: RDMA transport

Alex Forencich edited this page Jul 28, 2021 · 2 revisions

RDMA transport service will be implemented as part of the Corundum transmit and receive engines. The transmit and receive engines are responsible for coordinating all of the operations required for transmitting and receiving packets. See Chapter 9 of Volume 1 of the Infiniband specification (https://cw.infinibandta.org/document/dl/8567) for detailed information on the transport services.

In the transmit direction, the transmit engine will wait for a transmit command from the scheduler. Upon receipt of the transmit command for a specific queue pair, the transmit engine will first check the queue pair state. If there is an ACK scheduled, the transmit engine will skip any descriptor and DMA operations and send an ACK packet directly using the header deparser, then it will return to idle. Otherwise, it will check for pending RDMA reads against the QP, if there is one pending it will perform the corresponding DMA read, send one packet, and return to idle. Otherwise, it will fetch a descriptor for the QP, perform any required DMA operation, send one packet, and return to idle. The transmit engine must be able to handle many (32+) pending operations in parallel to hide delays associated with descriptor fetching and DMA reads.

In the receive direction, the receive engine will accept incoming packets, process the header and sideband data to determine the destination queue pair, and then update the QP state and perform the requested operation, which may require fetching a descriptor and/or performing DMA writes. The receive engine must be able to handle many (32+) pending operations in parallel to hide delays associated with descriptor fetching and DMA writes.