IP Library Granted Patent US 8,032,669
Granted Patent B2
US 8,032,669 · App. 12/017,039 · Granted Oct 4, 2011

Universal DMA (direct memory access) architecture

Assignee: Oracle America, Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,032,669
App. No.
12/017,039
Granted
Oct 4, 2011
Kind
B2
Abstract

A universal DMA (Direct Memory Access) engine can be dynamically configured to function in either a receive or transmit mode. DMAs are logically assembled and bound as needed, without limitation to a fixed, pre-determined number of receive engines and transmit engines. Because a DMA engine may be dynamically assembled to support the flow of data in either direction, varied usage models are enabled, and components used to assemble a receive DMA engine for one application may be subsequently used to assemble a transmit engine for a different application. An application may request a specific number of each type of engine, depending on the nature of its input/output traffic. The number of receive or transmit engines can be dynamically increased or decreased without suspending or rebooting the host. A universal DMA architecture provides a unified software framework, thereby decreasing the complexity of the software and the hardware gate count cost.

Claims (58)

1. A universal DMA (Direct Memory Access) engine architecture for processing either receive or transmit communications, wherein a DMA engine configured according to the architecture comprises:

a software interface for enabling software operating on a host to manage the DMA engine;

a client interface for interacting with either a receive client or a transmit client;

a data plane configured to perform direct memory access for either receive or transmit communications; and

a separate software-posted descriptor ring that is statically and uniquely bound to the DMA engine and, if the DMA engine is configured as a receiver, a hardware-posted descriptor ring bound to the DMA engine, wherein the hardware-posted descriptor ring is shared between the DMA engine and any other DMA engines that are configured as receivers, and wherein the hardware-posted descriptor ring is not bound to the DMA engine if the DMA engine is configured as a transmitter;

a control plane configured to fetch to a memory for the DMA engine software-posted descriptors from the software-posted descriptor ring in a memory for the host and to post hardware-posted descriptors to the hardware-posted descriptor ring;

wherein the software-posted descriptors include transmit packet and receive buffer information and the hardware-posted descriptors include receive packet information.

2. The universal DMA engine architecture of claim 1 , the DMA engine further comprising:

a status plane configured to report the status of the DMA engine to software.

3. The universal DMA engine architecture of claim 2 , wherein said status plane is further configured to detect the status of the receive client or transmit client.

4. The universal DMA engine architecture of claim 1 , wherein:

said universal DMA is dynamically constructed from a pool of DMA resources and allocated to a first application; and

said universal DMA is returned to said pool for reallocation to a second application when the first application terminates.

5. A universal DMA (Direct Memory Access) engine architecture for dynamically constructing a receive or transmit DMA engine from a pool of components by binding components in the pool of components to a DMA engine based on whether the DMA engine is configured as a receive or transmit DMA engine, the pool of components comprising;

a fetch data agent configured to issue data requests to a host computer;

a fetch response agent configured to receive the requested data from the host computer, for transmission via a transmit DMA engine;

a post data agent configured to post to the host computer data received via a receive DMA engine; and

a service arbiter configured to arbitrate between the transmit DMA engine and the receive DMA engine;

wherein the fetch response agent is configured to fetch to a memory for the DMA engine software-posted descriptor from a software-posted descriptor ring in a memory for the host computer, wherein the software-posted descriptor ring is a separate descriptor ring that is statically and uniquely bound to the DMA engine;

wherein the DMA engine is configured to post hardware-posted descriptors to a hardware-posted descriptor ring, wherein the hardware-posted descriptor ring is shared between the DMA engine and any other DMA engines that are configured as receivers, and wherein the hardware-posted descriptor ring is not bound to any DMA engine that is configured as a transmitter; and

wherein the software-posted descriptors include transmit packet and receive buffer information and the hardware-posted descriptors include receive packet information.

6. The universal DMA engine architecture of claim 5 , further comprising:

a post response agent configured to receive acknowledgement of the posted data from the host computer.

7. The universal DMA engine architecture of claim 5 , wherein a DMA engine configured according to the architecture comprises:

a prefetch and cache control module configured to:

issue a data request to the host computer;

receive the requested data using a software descriptor ring; and

cache the requested data for transmission via a transmit client; and

a post and shadow control module configured to:

receive data from a communication link; and

post the received data to the host computer using a receive completion ring.

8. A method of configuring a DMA (Direct Memory Access) engine within a universal DMA architecture, the method comprising:

receiving a request from a first application program operating on a host for at least one DMA engine to perform input/output;

in response to the request, dynamically constructing one or more DMA engines from a pool of universal DMA components configurable as either receive or transmit DMA engines, wherein the universal DMA components include a memory for the DMA engine, wherein constructing the DMA engine includes:

binding a separate software-posted descriptor ring to the DMA engine, wherein the software-posted descriptor ring is statically and uniquely bound to the DMA engine and,

if the DMA engine is configured as a receiver, binding a hardware-posted descriptor ring to the DMA engine, wherein the hardware-posted descriptor ring is shared between the DMA engine and any other DMA engines that are configured as receivers, and wherein the hardware-posted descriptor ring is not bound to the DMA engine if the DMA engine is configured as a transmitter;

allocating the DMA engines to the first application program; and

binding the DMA engines to communication ports.

9. The method of claim 8 , further comprising:

de-allocating the one or more DMA engines;

returning the components of the DMA engines to the pool; and

dynamically constructing one or more other DMA engines from the returned components.

10. A non transitory computer readable medium storing instructions that, when executed by a computer, cause the computer to perform a method of configuring a DMA (Direct Memory Access) engine within a universal DMA architecture, the method comprising:

receiving a request from a first application program for at least one DMA engine to perform input/output;

in response to the request, dynamically constructing one or more DMA engines from a pool of universal DMA components configurable as either receive or transmit DMA engines, wherein the universal DMA components include a memory for the DMA engine, wherein constructing the DMA engine includes:

binding a separate software-posted descriptor ring to the DMA engine, wherein the software-posted descriptor ring is statically and uniquely bound to the DMA engine and,

if the DMA engine is configured as a receiver, binding a hardware-posted descriptor ring to the DMA engine, wherein the hardware-posted descriptor ring is shared between the DMA engine and any other DMA engines that are configured as receivers, and wherein the hardware-posted descriptor ring is not bound to the DMA engine if the DMA engine is configured as a transmitter;

allocating the DMA engines to the first application program; and

binding the DMA engines to communication ports.

11. the universal DMA engine architecture of claim 1 , wherein the DMA engine is dynamically assembled for a software application operating on the host;

wherein the software posts the software-posted descriptors to the descriptor ring; and

wherein the software reads the hardware-posted descriptors from the descriptor ring for processing received packets.

12. The universal DMA engine architecture of claim 11 , wherein the software operating on the host manages a pointer for writing the software-posted descriptors to the descriptor ring, and a pointer for reading the hardware-posted descriptors from the descriptor ring; and

wherein the control plane manages a pointer for reading the software-posted descriptors from the descriptor ring, and a pointer for writing the hardware-posted descriptors to the descriptor ring.

13. The method of claim 8 , further comprising:

receiving a request from a second application program for at least one DMA engine to perform input/output;

in response to the request received from the second application program, de-allocating one or more of the DMA engines for the first application program, and returning components of the de-allocated DMA engines to the pool;

dynamically constructing a DMA engine for the second application program from the returned components, wherein the returned components include resources for a completion ring, wherein the completion ring includes hardware-posted descriptors.

Assignments (2)
MERGER AND CHANGE OF NAME Recorded Dec 16, 2015
From: ORACLE USA, INC.; SUN MICROSYSTEMS, INC.; ORACLE AMERICA, INC.
To: ORACLE AMERICA, INC.
Reel/Frame 037311/0121 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 20, 2008
From: PURI, RAHOUL; SRINIVASAN, ARVIND; RODRIGUES, ELISA
To: SUN MICROSYSTEMS, INC.
Reel/Frame 020390/0225 →
Continuity (1)
Related Publication 20090187679A1 · Jul 23, 2009