Remote direct memory access based networking gateway
A system includes a memory including a plurality of rings, an endpoint associated with a ring of the plurality of rings, and a gateway. The gateway is configured to receive a notification from the endpoint regarding a packet made available in the ring associated with the endpoint, access the ring with an RDMA read request, retrieve the packet made available in the ring, and forward the packet on an external network.
1. A system comprising:
a memory including a first plurality of rings;
an endpoint associated with a ring of the plurality of rings; and
a gateway configured to:
receive a packet address of a packet;
locate the endpoint, wherein the endpoint is associated with the packet based on destination address information in the packet;
issuing, by the gateway, an RDMA read request to the endpoint to retrieve the packet, wherein the packet is made available in a slot in the ring at the endpoint;
temporarily storing the packet at the gateway; and
issuing, by the gateway, an RDMA write request to indicate that the slot can be reused.
2. The system of claim 1 , wherein the rings are virtIO rings.
3. The system of claim 1 , wherein the destination address information is stored in a packet header.
4. The system of claim 1 , wherein an endpoint address of the endpoint is a MAC address.
5. The system of claim 1 , wherein the gateway is further configured to notify the endpoint that the packet has been sent.
6. The method of claim 5 , wherein notifying the endpoint includes issuing, by the gateway, a SEND message to the endpoint.
7. The system of claim 1 , further comprising a second endpoint and wherein each endpoint is assigned a unique MAC address or MAC layer.
8. A non-transitory machine-readable medium storing code, which when executed by a gateway, is configured to cause the gateway to:
receive a notification from an endpoint regarding a packet made available in a ring associated with the endpoint;
access the ring with an RDMA read request;
retrieve the packet made available in the ring; and
forward the packet on an external network.
9. The non-transitory machine-readable medium of claim 8 , wherein the gateway is configured to store the packet in a slot of the ring, and wherein the ring is an available virtIO ring.
10. The non-transitory machine-readable medium of claim 9 , wherein the gateway is configured to write the packet into a used virtIO ring to notify the endpoint that packet in the slot has been transferred.
11. The non-transitory machine-readable medium of claim 10 , wherein the gateway is configured to store a different packet in the slot.
12. The non-transitory machine-readable medium of claim 8 , wherein the gateway is configured to detect a state of the endpoint.
13. The non-transitory machine-readable medium of claim 12 , wherein the state is an idle state.
14. The non-transitory machine-readable medium of claim 13 , wherein the gateway is configured to enable notifications responsive to detecting that the endpoint is in an idle state.
15. The non-transitory machine-readable medium of claim 13 , wherein the gateway is configured to stop polling the ring associated with the endpoint responsive to detecting that the endpoint is in an idle state.
16. The non-transitory machine-readable medium of claim 13 , wherein the gateway is configured to wake up the endpoint in the idle state.
17. The non-transitory machine-readable medium of claim 16 , wherein waking up the endpoint includes sending a message to the endpoint.
18. The non-transitory machine-readable medium of claim 8 , wherein the gateway is configured to poll the ring associated with the endpoint.
19. A non-transitory machine-readable medium storing code, which when executed by a gateway, is configured to cause the gateway to:
receive a packet address of a packet;
locate an endpoint, wherein the endpoint is associated with the packet based on destination address information in the packet;
issue an RDMA read request to the endpoint to retrieve the packet, wherein the packet is made available in a slot in a ring at the endpoint;
temporarily store the packet at the gateway; and
issue an RDMA write request to indicate that the slot can be reused.
20. The non-transitory machine-readable medium of claim 19 , wherein at least one of the rings are virtIO rings, the destination address information is stored in a packet header, an endpoint address of the endpoint is a MAC address, or the RDMA read request is issued to a used virtIO ring.