The disclosure describes implementations for accessing in parallel a plurality of banks across a plurality of dram devices. These implementations are suited for operation within a parallel packet processor. A data word in partitioned into data segments which are stored in the plurality of banks in accordance with an access scheme that hides pre-charging of rows behind data transfers. A storage distribution control module is communicatively coupled to a memory comprising a plurality of storage request queues, and a retrieval control module is communicatively coupled to a memory comprising a plurality of retrieval request queues. In one example, each request queue may be implemented as a first-in-first-out (FIFO) memory buffer. The plurality of storage request queues are subdivided into sets as are the plurality of retrieval queues. Each is set is associated with a respective dram device. A scheduler for each respective dram device schedules data transfer between its respective storage queue set and the dram device and between its retrieval queue set and the dram device independently of the scheduling of the other devices, but based on a shared criteria for queue service.
|
1. A method for accessing a plurality of dynamic random access:
memory (dram) devices in parallel, each dram device having at least one memory bank, the method comprising:
for each storage request for a data word, determining a distribution of data segments of the data word in a plurality of memory banks based on the usage of the memory banks, the plurality of memory banks being among the memory banks of the plurality of dram devices, wherein a first data segment of a first data word and a second data segment of a second data word are distributed to a same memory bank according to a distribution of data segments of the first and second data words;
determining a sequence of retrieving the data segments of the first and second data words, the sequence of retrieving the first data segment and the second data segment determined by retrieval of other data segments from the same memory bank;
retrieving the data segments of the first and second data words in parallel from the plurality of memory banks based on the distribution of the data segments of the first and second data words and the sequence; and
reassembling the retrieved data segments into the first and second data words.
13. A system for providing fast access to dynamic random access memory (dram) devices, the system comprising:
a plurality of dram devices, each dram device having at least one memory bank;
a processor; and
a memory unit comprising a computer usable medium that comprises microcode for execution by the processor to cause the processor to perform the operations of:
for each storage request for a data word, determining a distribution of data segments of a data word in a plurality of memory banks based on the usage of the memory banks, the plurality of memory banks being among the memory banks of the plurality of dram devices, wherein a first data segment of a first data word and a second data segment of a second data word are distributed to a same memory bank according to a distribution of data segments of the first and second data words;
determining a sequence of retrieving the data segments of the first and second data words, the sequence of retrieving the first data segment and the second data segment determined by retrieval of other data segments from the same memory bank;
retrieving the data segments of the first and second data words in parallel from the plurality of memory banks based on the distribution of the data segments of the first and second data words and the sequence; and
reassembling the retrieved data segments into the first and second data words.
15. A system for providing fast access to dynamic random access memory (dram) devices, the system comprising:
a plurality of dram devices, each dram device having at least one memory bank;
a storage distribution control module configured to partition a first data word and a second data word into data segments, to determine a distribution of data segments of a data word in a plurality of memory banks based on the usage of the memory banks responsive to each storage request for the data word, the plurality of memory banks being among the memory banks of the plurality of dram devices, wherein a first data segment of the first data word and a second data segment of the second data word are distributed to a same memory bank according to a distribution of data segments of the first and second data words;
a scheduler associated with each dram device, configured to determine a storage schedule to store the data segments of the first and second data words distributed to the associated dram device in the plurality of memory banks, and to determine a retrieval schedule to retrieve the data segments of the first and second data words stored in the associated dram device from the plurality of memory banks, the retrieval schedule of retrieving the first data segment and the second data segment determined by retrieval of other data segments from the same memory bank, the storage schedule and the retrieval schedule of one dram device being independent of the storage schedules and retrieval schedules of other dram devices; and
a retrieval control module configured to retrieve the data segments in parallel from the plurality of memory banks based on the distribution and the retrieval schedule, and to reassemble the retrieved data segments into the first and second data words.
2. The method of
receiving a retrieval request for the first data word and a retrieval request for the second data word, wherein the sequence of retrieving the first data segment and the second data segment can be different from the order of the retrieval requests received.
3. The method of
4. The method of
5. The method of
6. The method of
7. The method of
partitioning the first and second data words into the data segments; and
storing the data segments in parallel into the plurality of memory banks based on the distribution.
8. The method of
determining an in-bank burst length based upon a maximum word size, a total number of the plurality of memory banks, and a data width of an individual memory bank; and
storing the data segments in parallel into the plurality of memory banks based on the distribution in a burst having the in-bank burst length.
9. The method of
10. The method of
scheduling the storing of the data segments independently within a dram device.
11. The method of
determining a starting memory bank in each of the plurality of dram devices storing at least one of the data segments; and
retrieving the data segments in parallel from the starting memory banks.
12. The method of
14. The system of
partitioning the first and second data words into the data segments; and
storing the data segments in parallel into the plurality of memory banks based on the distribution.
|
This application claims the benefit of priority under 35 U.S.C. § 119(e) to U.S. provisional patent application No. 60/432,528, filed on Dec. 10, 2002, entitled “System and Method for High Bandwidth Memory Management,” which is hereby incorporated by reference.
The present invention relates to managing access to dynamic random access memory (DRAM) devices, particularly in a parallel packet processor in a data network.
Dynamic random access memories (DRAMs) provide tremendous benefits in terms of storage density and are capable of transferring large amounts of data very quickly if that data is carefully organized into long bursts of consecutive data transfers to and from adjacent memory locations. Since the data interfaces of these DRAMs are limited in their per-pin bandwidth, high bandwidths are achieved through very wide data interfaces.
Certain applications, such as network communications involve the storage and retrieval of relatively small units of data, for example 64 bytes, at bandwidths which exceed 40 Gigabits per second. Wide data interfaces make it impractical to achieve data bursts long enough to make the gaps between bursts insignificant. DRAM access cycles require that a particular row within the device be selected for access and then “precharged.” Within a row, column locations can be accessed for reads or writes in rapid sequence. Hence, short random accesses suffer from the precharge latency overhead on each cycle thereby significantly reducing the available bandwidth.
DRAMs can feature multiple independent banks which allow for the overlapping, or pipelining, of memory accesses. DRAMs which implement multiple banks can precharge each of the banks independently. For a read or write access to a bank, that bank is pre-charged independently of other banks. This allows the system designer to “hide” the precharge behind other precharge or data transfer operations. Hence, the presence of multiple banks can reduce precharge latency and increase the utilization of the DRAM's data bus.
However, if a sequence of DRAM accesses were all addressed to the same bank, the benefits of hiding the access latencies behind multiple, overlapping bank operations is lost. It is desirable that a sequence of random DRAM accesses not be targeted at the same banks in order to reduce the precharge latency.
The present invention provides overcomes the limitations discussed above by providing storage and retrieval of data segments of a data word distributed among a plurality of banks in a plurality of DRAM devices. In the embodiments discussed below, a data word can have a maximum size. An example of a data word is a cell of a packet. In one example, the data words can be fixed in size, and in another example, the data words can be variable in size.
In one aspect, the present invention provides an embodiment of a system for accessing in parallel a plurality of banks across a plurality of DRAM devices. This system embodiment can operate within a parallel packet processor. This system embodiment comprises a storage distribution control module for storing in parallel data segments of a data word into memory banks across a plurality of DRAM devices. Striping data, meaning to place a portion of a particular data word into several devices or data paths in parallel, is a version of storing in parallel data segments of a data word into memory banks across a plurality of DRAM devices. The storage distribution control module is communicatively coupled to a memory comprising a plurality of storage request queues. In one example, each storage request queue may be implemented as a first-in-first-out (FIFO) memory buffer. In another embodiment, the plurality of storage request queues can be further subdivided into sets wherein each set is communicatively coupled to a scheduler module for a respective DRAM device and to an interface for the respective DRAM device which is communicatively coupled to the memory banks of the respective DRAM device. In one example, the scheduler schedules data transfer between its respective storage request queues set and its respective DRAM device independently of the scheduling of the other devices.
This system embodiment can further comprise a retrieval control module for retrieving the data segments of a requested data word in parallel from the banks of the DRAM devices. The retrieval control module is communicatively coupled to memory comprising a plurality of retrieval request queues. In one example, each retrieval request queue may be implemented as a FIFO memory buffer. The plurality of retrieval request queues can be further subdivided into sets wherein each set is communicatively coupled to the scheduler module for a respective DRAM device and to an interface for the respective DRAM device. In one example, the scheduler schedules data transfer between the banks of its DRAM device and a reassembly buffer to which the device is communicatively coupled. In this embodiment, the scheduler schedules the data transfer independently of the scheduling performed by the other devices.
The retrieval control module further comprises a reassembly control module and is communicatively coupled to the reassembly buffer for storing the data segments. This embodiment can further comprise a data word sorting module for sorting a plurality of reassembled data words in the order of the sequence that their associated retrieval requests were received.
In one aspect, the present invention provides an embodiment of a method for accessing in parallel a plurality of memory banks, each bank being associated with a respective dynamic random access memory (DRAM) device of a plurality of DRAM devices. This method embodiment can operate within a parallel packet processor. This method embodiment comprises partitioning a data word into data segments and storing in parallel data segments of a data word into memory banks across a plurality of DRAM devices. This method embodiment further comprises retrieving the data segments of a requested data word in parallel from the banks of the DRAM devices, and reassembling the data segments into the data word. The storing or the retrieving of the data words can be performed in accordance with an access scheme. An example of an access scheme is a round robin scheme. In another embodiment, the method further comprises sorting a plurality of reassembled data words in the order in the sequence that their associated retrieval requests were received.
In another embodiment, storing in parallel data segments of a data word into memory banks across a plurality of DRAM devices further comprises determining an in-bank burst length based upon the word size bounded by a maximum word size, the total number of banks in the plurality of DRAM devices and the data width of an individual bank. This embodiment can further comprise selecting a bank in each DRAM device in accordance with an access scheme and storing a data segment of the data word in each selected bank in parallel. This embodiment can further comprise scheduling the storage of the data segments independently on a per storage device basis.
In another embodiment of a method for accessing in parallel a plurality of memory banks, retrieving the data segments of a requested data word in parallel from the banks of the DRAM devices comprises determining the starting bank in each DRAM device and retrieving the data segments of the data word in parallel from banks across the DRAM devices in accordance with an access scheme.
One example of a benefit provided by the various embodiments of the invention is achieving very high data storage and retrieval bandwidths, particularly with very short bursts or no bursts. Storing data segments of a data word in parallel into memory banks across a plurality of DRAM devices maximizes the performance of DRAM operations by minimizing the likelihood that a long sequence of accesses will be directed at a single bank, thereby avoiding the incumbent pre-charge latency associated with such a long sequence of accesses at a single bank.
The features and advantages described in this summary and the following detailed description are not all-inclusive, and particularly, many additional features and advantages will be apparent to one of ordinary skill in the art in view of the drawings, specification, and claims hereof. Moreover, it should be noted that the language used in the specification has been principally selected for readability and instructional purposes, and may not have been selected to delineate or circumscribe the inventive subject matter, resort to the claims being necessary to determine such inventive subject matter.
The figures depict embodiments of the present invention for purposes of illustration only. One skilled in the art will readily recognize from the following discussion that alternative embodiments of the structures and methods illustrated herein may be employed without departing from the principles of the invention described herein.
A data word can range in width from a single byte to several hundred bytes or several thousand bytes. In one embodiment in accordance with the present invention as illustrated in
For this illustrative example, the maximum word width size is a 512-byte word. A buffer manager (e.g., buffer manager 204, 206) determines the length of the “in-bank” burst 102 for each bank which is used to store and retrieve this 512-byte word. The burst length within a single bank is calculated to be L=W/(nB) where L is the burst length, W is the word size bounded by a maximum word width or size, n is the total number of banks (16 in this example) and B is the width of an individual bank. For this example, B is 4 bytes as each bank for this example has a 4-byte bank width. If necessary, L is rounded up to the next higher convenient integer, such as a power of 2. L=512 bytes/(16 banks)(4 bytes/bank); therefore, L=8 meaning 8 rows of each bank are pre-charged and written to simultaneously in this burst for this 512 byte word.
This example further illustrates storage of data segments according to a round robin scheme beginning with a starting bank in a starting device. For the 512 byte word, there are 64 data segments. A first subset of 16 data segments is illustrated in
The system 200 comprises a number of modules including a network adaptation layer 214, forwarding engines 2121, 2122, 2123 212N, an ingress buffer manager 204, an egress buffer manager 206, an ingress queue manger 208, an egress queue manager 210, a supervisor module 218, a supervisor access interface 220, a flow statistics accumulator 222, and a quality of service engine 224. The modules communicate through various communication interfaces. An example of a communication interface is a port connection. Another example of communication interface is a System Packet Interface (SPI). Another example of a communication interface is a connection between a processor executing one or more of the modules and a memory controller responsible for memory reads/writes. Another example is one module reading a parameter (e.g. a header field) stored in a memory location by another module. Another example of a communication interface is a message. Of course, other communication interfaces known to those of ordinary skill in the art may also be used.
The network adaptation module 214 receives and sends packets from and to the network 216 through a System Packet Interface Level 5 (SPI-5) interface. For packets received from the network 216, the network adaptation layer module 114 sends cells of packet data to the forwarding engines 2121 to 212N. In this example, a cell is has a fixed length cutting down on decision operations caused by size variability. The forwarding engines 2121 to 212N perform lookup functions with respect to the packet slice of one or more cells received. As part of its lookup process, a forwarding engine 212N may send information such as a communications flow identifier for a packet, its sequence number, and its length to a Flow Statistics Accumulator (FSA) module 222 through the flow statistics communication interface. This FSA module 222 may be either integrated with the Forwarding Engine or implemented separately. The FSA 222 gathers these statistics on a per-connection basis and enables traffic analysis and detailed billing capabilities. Similarly, each forwarding engine 212N communicates information such as byte count length to the Quality of Service (QoS) engine 224 over communication QoS interface as input for QoS algorithms.
One or more cells of a packet are forwarded to the ingress buffer manager 204 for storage. As there may be a target size for a cell, there may also be a target size for a buffer such as a certain number of cells or bytes so that the throughput from each of the slices is approximately the same. As the one or more packet cells are stored in buffers, the ingress buffer manager 204 maintains a buffer correlation data structure linking the buffers of a slice of data associated with the same packet. In this example, each packet slice is stored independently by the ingress buffer manager 204. Upon completion of the storage of a packet slice, the ingress buffer manager 204 sends an enqueue message to the ingress queue manager 208 for each slice of a common packet via the enqueue communication interface. One of the enqueue messages includes the packet reference.
The ingress buffer manager 204 further comprises a dequeue interface with the ingress queue manager 208 and a flow control interface 223 with the egress queue manager 210. When a packet reference is popped from the head of a queue for ingress retrieval, the ingress queue manager 208 sends a message on the communication dequeue interface to the ingress buffer manager 204 in order to initiate the retrieval and delivery of the desired packet. In one example, one such dequeue message is sent for each slice of the packet stored by the buffer manager.
The egress buffer manager 206 has is communicatively coupled via SPI-4 interfaces with the switch fabric 202 through which it receives each of the egress slices of packet data from the switch fabric 202. As the slices are transferred across the switch fabric, the cell headers are maintained. From the packet identifier and a slice position indicator in the cell header, the buffer manager 206 identifies the slices of the packet. The manager 206 stores each of the egress slices and sends enqueue messages to the egress queue manager 210 via an enqueue communication interface.
When the queue entry for this packet is selected for service, egress queue manager 210 sends a dequeue message via a dequeue communication interface for the packet to the network adaptation layer module 214. The network adaptation layer 214 formulates a packet request message based on the information in the dequeue message which it sends over the packet request communication interface. The packet request message initiates the retrieval of the packet from the egress buffer manager 206. The packet request message “opens” a packet and delivers its first cell. All subsequent cells are delivered in response to cell request messages from the network adaptation layer 214. In an example in which the cell request message does not specify a buffer number, it is implied that the cell request is for the next cell of the current packet within the same channel. In this example, no buffer numbers or other explicit pointers to packet data are included in the cell request message. The buffer correlation data structure maintained by the egress buffer manager 206 is used to locate the packet's cells within a slice. The egress buffer manager 206 has a packet communication interface with each of the forwarding engines 212N through which it forwards the cells of the packet. Each of the forwarding engines 2121 to 212N may add or delete a number of bytes from the packet and then forward the cells of the slice it processed via packet interfaces to the network adaptation layer 214.
In this embodiment, each buffer manager 104, 106 has a communication interface for each forwarding engine 212N whose memory it manages with a port of the multi-port switch fabric 202 that transfers the slice in a channel through the switch fabric 202 to an egress port from which a destination forwarding engine 212N′ receives the data on the other side of the switch fabric 202. Because an ingress buffer manager 204 is used to handle all of the ingress switch fabric bandwidth and an egress buffer manager 206 is used to handle all of the egress switch fabric bandwidth, load balancing between the buffer managers 204, 206 and the switch fabric 202 is not necessary. Increased transmission speed results from not having another adaptation layer with the switch fabric 202.
Each of the queue managers 204, 206 receives enqueuing related messages and generates dequeuing related messages as discussed above. In between these two activities, a queue manager 108, 110 performs a variety of processes. Some examples of these processes include maintaining a large number of queues, managing resources, managing flow control, and managing load balancing.
The supervisor module 218 performs one or more supervisory functions for the other modules in the system examples of which include initializing, monitoring or updating the various modules in the system. In the illustrated embodiment, each of the modules communicates with the supervisor module 218 through the supervisor access interface 220. The supervisor access interface 220 provides the supervisor module 218 with access to configuration and status registers as well as various internal and external memories for each module in the system for configuration and testing purposes. The supervisor network interface in this embodiment provides access for the supervisor module to the attached networks.
Each of the modules comprises logic which may be stored in one or more computer usable mediums and executed in a variety of device types, including combinations thereof, some examples of which are an integrated circuit, a programmable logic device (PLD) or a central processing unit (CPU). One or more of the elements shown in
The storage distribution control module 302 is communicatively coupled to an entity, for example, forwarding engines 2121 to 212N or a switch fabric 202, for receiving a storage request for a data word. In a parallel packet processor, the data word can be a packet, a plurality of packets, a portion of packet data or a combination of any of these examples. In one instance, a portion of a packet can be a cell of a packet having a fixed size. The storage distribution control module 302 comprises logic for partitioning a data word into data segments and allocating the data segments in memory banks across the plurality of DRAM devices 1100, 1101, 1102, 1103. Examples of logic include instructions embodied in software, hardware, firmware or a combination of any of these. The storage distribution control module 302 creates a storage request for each data segment including a storage address in one of the banks and the data segment to be stored at that storage address. The storage distribution control module 302 is communicatively coupled to a memory space 332 for storing storage information for each data word stored. Examples of storage information include a data word identifier, for example a packet identifier or a cell identifier, the starting address location in which the first data segment of the word is stored, the starting bank, the starting device and the size of the data word in a data size interval such as bytes, or data segments or cells. Alternatively, the address location of each data segment can also be stored as well. The storage distribution control module 302 is communicatively coupled to storage request queues 3120, to 3123, 3160, to 3163, 3200, to 3203, 3240, to 3243. In the illustrated example, each storage request queue is implemented as a FIFO memory buffer. In the illustrated example, there is a storage request queue for each bank in the DRAM devices. The output of the storage request queues is communicatively coupled to a scheduler 3400, 3401, 3402, 3403 and to a DRAM interface module 3420, 3421, 3422, 3423 which is communicatively coupled to a set of memory banks (e.g., 1120, to 1123) of its respective DRAM device (e.g., 1100).
The scheduler (e.g. 3403) determines the bank to store the data segment for each request based on the storage address of the request, and schedules the data to be transferred to that determined bank by the DRAM interface, preferably in a burst. In this embodiment, each scheduler 3400, 3401, 3402, 3403 schedules data transfer between its respective storage request queues set and its respective DRAM device independently of the scheduling of the schedulers of the other devices.
The retrieval control module 304 comprises logic for retrieving the data segments of a requested data word in parallel from the banks of the DRAM devices. The retrieval control module 304 is communicatively coupled to an entity, for example a queue manager 208, 210, to receive retrieval requests for a data word. In this embodiment, the retrieval control module 304 creates retrieval requests for each data segment including the storage address of each data segment. The retrieval control module 304 is communicatively coupled to a plurality of retrieval request queues 3140, 3141, 3142, 3143, 3180, 3181, 3182, 3183, 3220, 3221, 3222, 3223, and 3260, 3261, 3262, 3263 which are further subdivided into sets (e.g., 3140, to 3143) wherein each set is communicatively coupled to the scheduler module 3400, 3401, 3402, 3403, for a respective DRAM device 1100, 1101, 1102, 1103 and to an interface 3420, 3421, 3422, 3423, for the respective DRAM device. In one example, each retrieval request queue is implemented as a FIFO memory buffer. In the illustrated example, there is a retrieval request queue for each bank in the DRAM devices. The outputs of the retrieval request queues are communicatively coupled to the scheduler 3400 to 3403 and the DRAM interface module 3420, 3421, 3422, 3423 for its respective set. Each DRAM interface 3420, 3421, 3422, 3423 is communicatively coupled to the reassembly buffer 306. In one example, the size of the reassembly memory buffer 306 (i.e., the number of reassembly locations or contexts) is proportional to the capacity of the retrieval request queues implemented as FIFOs. Each data segment retrieval request created by the retrieval control module 304 includes a pointer to a data word reassembly location within the reassembly buffer. Each of the schedulers 3400, 3401, 3402, 3403 schedules data transfer between the banks of its DRAM device and the reassembly buffer 306 to which the device is communicatively coupled. When the burst for retrieving the data segments of the requested word is completed, each retrieved data segment is deposited into a corresponding column of the reassembly memory buffer at the address pointed to by the pointer included in the retrieval request. In this embodiment, the scheduler (e.g., 3400) schedules the data transfer independently of the scheduling performed by the other devices.
Although each of the per-device schedulers 3400, 3401, 3402, 3403, each selects the order in which the various request queues (FIFOs) are serviced based on the same criteria. In one example, using the current depth of the multiple storage request queue FIFOs, a per-device scheduler module (e.g. 3401) determines a starting point for the interleaved distribution of data word segments. This starting point indicates the starting device and starting bank. The request queues provide a smoothing function which tends to improve the efficiency of the overall memory system by giving the scheduler (e.g., 3401) more activities to choose from so that it might optimize the order of operations. The per-device scheduler module (e.g., 3401) examines the state of each of its associated retrieval request FIFOs. For those FIFOs which are non-empty and emphasizing the most full of the FIFOs, DRAM read cycles are scheduled and executed in a manner which is within the capabilities and limitations of the DRAM devices employed and which maximizes the utilization of the DRAM interface.
The reassembly module 334 comprises logic for reassembling data segments into their respective data word. If data sorting is implemented, the reassembly module 336 transfers reassembled words to the data word sorting memory buffer 328. The optional data sorting module 336 comprises logic for retrieving a plurality of reassembled data words in the order of the sequence that their associated retrieval requests were received from a queue manager. The reassembly module 334 and the data sorting module 336 also have access to the storage information of memory space 332.
In a number of applications, but notably in network communications, the preservation of the order of sequential data is important. The extent of the scrambling accesses over a relatively short temporal distance is proportional to the maximum depth of the request queues (e.g., FIFOs) and is bounded by the load balancing and scheduling techniques employed. In this embodiment of the present invention, to correct this scrambling of the order of data retrieval, the data sorting module 336 allows randomly addressed writes and strictly ordered reads to the data sorting buffer 328. The data sorting buffer 328 can be split up into multiple contexts to allow for multi-channel operations where each sequence of retrievals for a channel is independent from that of another channel.
Another goal of the scheduler is to minimize the frequency with which the DRAM interface must transition from performing storage operations to performing retrieval operations. Such transitions involve the insertion of dead cycles to allow bidirectional interfaces time to “turn around. Furthermore, since the posting of storage and retrieval requests to their FIFOs and the scheduling of DRAM read and write operations are largely decoupled in this embodiment, there is not a fixed relationship between the time an request is posted and the time it is executed. It is often very important to ensure that a write has actually been carried out at the DRAM prior to notifying a user of the data that it is available for retrieval. Failing to ensure this may lead to a read accidentally preceding a write and the read returning invalid data.
In this embodiment, the control modules 302, 304 use a combination of timers 352, 354 and markers to address this problem.
Timers are used to estimate the time required to complete a requested action. In one embodiment, when a request is posted to a queue, a timer 352, 354 is started to track that entry. The timer is set to an initial value which is proportional to the deepest (i.e., most full) of the FIFOs for the associated data word. This timer is set to a value for which the countdown time period is approximately the same time for the requested operation to complete. This timer counts down to its terminal count value of zero at the same time the requested operation is complete. At the expiration of the timer 352, 354 the control module 302, 304 that sent the request confirms that the operation has indeed been carried out by accessing the FIFOs and examining markers placed in the requests in the queue FIFOs. If service of the request has not been completed, the monitoring control module 302, 304 monitors the status of that request continuously and prevents the posting of any further operations of the same type until the service of the request is completed or a system error timeout is reached. Stalling the posting of operations in this way has the effect of synchronizing the posting of requests and their execution as well as minimizing the skew between request queue FIFOs.
For illustrative purposes, the method embodiments illustrated in
A respective scheduler (e.g., 3400) can optionally determine 414 whether there are adjacent storage address locations in separate bursts within a single storage request queue (e.g., 3120) for a bank (e.g., bank0 of device0 3120). Responsive 414 to the existence of the adjacent storage address locations, the respective scheduler rearranges 417 the storage request entries in the queue (e.g., 3120) having the adjacent address locations into a single burst for the associated bank. Each scheduler 3400, 3401, 3402, and 3403 having banks in which data segments are to be stored schedules 416 independently on a per-device basis, the set of in-bank bursts for banks of the same device, but based on the shared criteria for request queue service used by all the schedulers 3400, 3401, 3402, and 3403. The DRAM interfaces 3420, 3421, 3422, and 3423 write 418 the data segments in the sets of bursts as scheduled.
A respective scheduler (e.g., 3400) can optionally determine 514 whether there are adjacent storage address locations within a single retrieval request queue (e.g., 3120) for a bank (e.g., bank0 of device0). Responsive 514 to the existence of adjacent storage address locations, the respective scheduler rearranges 517 the retrieval request entries in the queue (e.g., 3120) having the adjacent address locations into a single burst for the associated bank. Each scheduler 3400, 3401, 3402, 3403 having banks from which data segments are to be retrieved schedules 516 independently on a per-device basis, the set of in-bank bursts for banks of the same device, but based on the shared criteria for request queue service used by all the schedulers 3400, 3401, 3402, and 3403. The DRAM interfaces 3420, 3421, 3422, and 3423 read 518 the data segments in the sets of bursts as scheduled.
The reassembly module 334 reassembles 520 the data segments into the data word. In this method embodiment, an optional data sorting of retrieved words can be performed. As soon as all of the pending data word segment retrievals have been performed, the completed data word is delivered to the requesting entity or is sorted into the sequence of receipt of its word retrieval request. For the system embodiment of
Either the storage distribution module 302 or the retrieval control module 304 sets 604 device index j=to a start device identifier, start device, which also can be an index of a device, sets 606 a bank index k=to a start bank identifier, start bank, which can also be an index of a bank within a device, and initializes 608 a data segment counter, i, to zero. In the illustrative example of
It should be understood by those of ordinary skill in the art that these examples have been presented by way of example only, and not limitation. Though the examples herein are described in certain specific examples regarding port counts, bandwidths, storage capacities and the like, it will be apparent to those of ordinary skill in the art in light of the teachings herein that each of these parameters may be readily scaled up or down and still remain consistent with the description. It will be understood by those of ordinary skill in the relevant art that various changes in form and the details of the examples described above may be made without departing from the spirit and scope of the present invention.
Devanagondi, Harish R., Yarlagadda, Ramesh, Desai, Shwetal
Patent | Priority | Assignee | Title |
10282170, | Mar 15 2013 | Intel Corporation | Method for a stage optimized high speed adder |
10303484, | Mar 15 2013 | Intel Corporation | Method for implementing a line speed interconnect structure |
10642612, | Nov 15 2017 | Samsung Electronics Co., Ltd. | Memory device performing parallel arithmetic processing and memory module including the same |
11003459, | Mar 15 2013 | Intel Corporation | Method for implementing a line speed interconnect structure |
11347652, | Aug 31 2020 | Microsoft Technology Licensing, LLC | Banked memory architecture for multiple parallel datapath channels in an accelerator |
11893239, | Sep 14 2017 | Samsung Electronics Co., Ltd. | Quasi-synchronous protocol for large bandwidth memory systems |
7634621, | Jul 13 2004 | Nvidia Corporation | Register file allocation |
7698498, | Dec 29 2005 | Intel Corporation | Memory controller with bank sorting and scheduling |
7761669, | Jul 10 2007 | International Business Machines Corporation | Memory controller granular read queue dynamic optimization of command selection |
7802064, | Mar 31 2006 | MOSAID TECHNOLOGIES INC | Flash memory system control scheme |
7996601, | Nov 27 2006 | Samsung Electronics Co., Ltd. | Apparatus and method of partially accessing dynamic random access memory |
8180975, | Feb 26 2008 | Microsoft Technology Licensing, LLC | Controlling interference in shared memory systems using parallelism-aware batch scheduling |
8225026, | Aug 13 2009 | Hewlett Packard Enterprise Development LP | Data packet access control apparatus and method thereof |
8271741, | Feb 26 2008 | Microsoft Technology Licensing, LLC | Prioritization of multiple concurrent threads for scheduling requests to shared memory |
8332511, | Jul 31 2010 | Cisco Technology, Inc. | System and method for providing a script-based collection for devices in a network environment |
8510496, | Apr 27 2009 | NetApp, Inc | Scheduling access requests for a multi-bank low-latency random read memory device |
8549216, | Jan 11 2010 | TELEFONAKTIEBOLAGET L M ERICSSON PUBL | Memory management using packet segmenting and forwarding |
8589544, | Jul 31 2010 | Cisco Technology, Inc. | System and method for providing a script-based collection for devices in a network environment |
8874822, | Apr 27 2009 | NetApp, Inc. | Scheduling access requests for a multi-bank low-latency random read memory device |
8990490, | Nov 29 2011 | Rambus Inc. | Memory controller with reconfigurable hardware |
9092470, | Aug 24 2012 | Software AG | Method and system for storing tabular data in a memory-efficient manner |
9195506, | Dec 21 2012 | International Business Machines Corporation | Processor provisioning by a middleware processing system for a plurality of logical processor partitions |
9280393, | Dec 21 2012 | International Business Machines Corporation | Processor provisioning by a middleware processing system for a plurality of logical processor partitions |
9298508, | Dec 21 2012 | International Business Machines Corporation | Processor provisioning by a middleware processing system |
9311149, | Dec 21 2012 | International Business Machines Corporation | Processor provisioning by a middleware processing system |
9378784, | Jan 23 2013 | PALO ALTO NETWORKS, INC | Security device using high latency memory to implement high update rate statistics for large number of events |
9811384, | Apr 26 2011 | International Business Machines Corporation | Dynamic data partitioning for optimal resource utilization in a parallel data processing system |
9817700, | Apr 26 2011 | International Business Machines Corporation | Dynamic data partitioning for optimal resource utilization in a parallel data processing system |
Patent | Priority | Assignee | Title |
5905725, | Dec 16 1996 | Juniper Networks | High speed switching device |
6006318, | Aug 16 1995 | Microunity Systems Engineering, Inc | General purpose, dynamic partitioning, programmable media processor |
6138219, | Mar 27 1998 | Nexabit Networks LLC | Method of and operating architectural enhancement for multi-port internally cached dynamic random access memory (AMPIC DRAM) systems, eliminating external control paths and random memory addressing, while providing zero bus contention for DRAM access |
6160819, | Feb 19 1998 | Raytheon BBN Technologies Corp | Method and apparatus for multiplexing bytes over parallel communications links using data slices |
6178517, | Jul 24 1998 | CAVIUM INTERNATIONAL; MARVELL ASIA PTE, LTD | High bandwidth DRAM with low operating power modes |
6405286, | Jul 31 1998 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Method and apparatus for determining interleaving schemes in a computer system that supports multiple interleaving schemes |
20020053001, | |||
20030052885, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Dec 10 2003 | Greenfield Networks, Inc. | (assignment on the face of the patent) | / | |||
Jun 30 2004 | YARLAGADDA, RAMESH | GREENFIELD NETWORKS, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014840 | /0924 | |
Jun 30 2004 | DESAI, SHWETAL | GREENFIELD NETWORKS, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014840 | /0924 | |
Jun 30 2004 | DEVANAGONDI, HARISH R | GREENFIELD NETWORKS, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014840 | /0924 | |
May 22 2008 | GREENFIELD NETWORKS, INC | GREENFIELD NETWORKS LLC | CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 024320 | /0761 | |
May 14 2009 | GREENFIELD NETWORKS LLC | Cisco Technology, Inc | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 024320 | /0575 |
Date | Maintenance Fee Events |
May 13 2011 | M2551: Payment of Maintenance Fee, 4th Yr, Small Entity. |
May 13 2015 | M2552: Payment of Maintenance Fee, 8th Yr, Small Entity. |
Jul 01 2019 | REM: Maintenance Fee Reminder Mailed. |
Jul 25 2019 | BIG: Entity status set to Undiscounted (note the period is included in the code). |
Dec 16 2019 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
Nov 13 2010 | 4 years fee payment window open |
May 13 2011 | 6 months grace period start (w surcharge) |
Nov 13 2011 | patent expiry (for year 4) |
Nov 13 2013 | 2 years to revive unintentionally abandoned end. (for year 4) |
Nov 13 2014 | 8 years fee payment window open |
May 13 2015 | 6 months grace period start (w surcharge) |
Nov 13 2015 | patent expiry (for year 8) |
Nov 13 2017 | 2 years to revive unintentionally abandoned end. (for year 8) |
Nov 13 2018 | 12 years fee payment window open |
May 13 2019 | 6 months grace period start (w surcharge) |
Nov 13 2019 | patent expiry (for year 12) |
Nov 13 2021 | 2 years to revive unintentionally abandoned end. (for year 12) |