Patent Publication Number: US-7584335-B2

Title: Methods and arrangements for hybrid data storage

Description:
FIELD 
   The present disclosure relates generally to data storage devices. More particularly, the present disclosure relates to methods and arrangements for hybrid data storage to balance low latency accesses with high-density data storage. 
   BACKGROUND 
   Memory bottlenecks are significant issues with respect to speed and processing capacity of modern computer systems. Manufacturers continue to increase processor clock speeds, bus speeds and widths, and memory sizes to improve system performance, but the processor cannot execute commands any faster than the memory can access the commands to transmit the commands to the processor. Thus, if the memory cannot be accessed as quickly as the processor can execute the commands, the processors will stall in spite of the increased clock and bus speeds and bus width, significantly impacting the system&#39;s overall performance. 
   Cache memories, or caches, are often used in many such systems to alleviate this problem and increase performance in a relatively cost-effective manner. Two main types of solid-state memories employed today are static random access memory (SRAM) and dynamic random access memory (DRAM). Conceptually, SRAM is implemented using a flip-flop as a storage device and DRAM is implemented using a capacitor as a storage device. SRAM is regarded as static because it does not need to be refreshed like DRAM. Leakage currents reduce charges stored by DRAM so DRAM needs to be refreshed periodically. 
   Both SRAM and DRAM offer random access capability and appear substantially identical to other system components, however, SRAM has a significantly lower, initial latency. For instance, SRAM may offer initial access times that are approximately ten times faster than the initial access times for DRAM. In addition, the cycle time for SRAM is much shorter than that of DRAM because SRAM does not need to pause between accesses. However, this lower, initial latency and shorter cycle time comes at the expense of a much lower storage density and much higher power dissipation. SRAM, for example, can have approximately ten times the power dissipation of DRAM. Furthermore, SRAM is significantly more expensive than DRAM, e.g., approximately ten times more expensive per bit. 
   The decision between implementation of SRAM or DRAM is usually a compromise between the speed requirements on one side and the storage density, physical space, power constraints, and the cost, on the other. In general, SRAM is implemented in systems for which access speed outweighs other considerations such as for cache memories and DRAM is implemented in systems for which high storage density outweighs other considerations such as main memory systems. 
   At present, computer systems, from servers to low-power embedded processors, typically incorporate SRAM as a first level cache L1 and often as second and third levels of cache, L2 and L3. L1 and L2 cache memory are typically incorporated on the die of or near a processor, enabling storage of frequently accessed data and instructions close to the execution units of the processor to minimize access latency. Ideally, as the time for execution of an instruction nears, the instruction and corresponding data are moved to the L2 cache from the more distant, main memory or L3 cache. Incorporation of SRAM as cache, however, sacrifices higher density storage. 
   Computer systems also incorporate DRAM as the main memory. The main memory acts as a buffer for data and instructions accessed from even higher latency, large capacity or bulk storage devices such as hard drives, compact disks, remote systems, or the like. While many improvements have increased data bursting speeds from DRAM devices, the initial latencies can be very large so incorporation of DRAM for the main memory sacrifices lower initial access times for higher density storage, which can significantly impact the overall system performance. 
   SUMMARY OF THE INVENTION 
   The problems identified above are in large part addressed by methods and arrangements provided herein to collect data from a system in response to an event. One embodiment comprises a method to access data in memory. The method may involve identifying, by a memory controller, a first portion of the data associated with a write request; storing, by the memory controller, the first portion of the data in a first memory device; and storing, by the memory controller, a second portion of the data in a second memory device. The first memory device has an initial access latency that is shorter than an initial access latency of the second memory device and memory locations of the first portion and the second portion have consecutive memory addresses. The method may also involve receiving a read request for the data; accessing, by the memory controller, the first memory device to retrieve the first portion of the data; accessing, by the memory controller, the second memory device to retrieve a second portion of the data during the and accessing of the first memory device. The method may then transmit the first and second portions of the data in response to the read request. 
   Another embodiment comprises an apparatus to access data. The apparatus may comprise a first type of memory device; a second type of memory device; and a memory controller coupled with the first type of memory device and the second type of memory device. The memory controller is to be responsive to a write request to write data associated with the write request to the first type of memory device and the second type of memory device. The memory controller is also responsive to a read request for the data to read a first portion of the data from the first type of memory device during an initial latency associated with access to a second portion of the data in the second type of memory device, to read the second portion of the data in the second type of memory device during the read of the first portion of the data from the first type of memory device, and to transmit the first and second portions of the data in response to the read request. The memory locations for the first portion of the data and the second portion of the data are assigned consecutive memory addresses. 
   Another embodiment includes a system. The system may comprise a processor; a static random access memory (SRAM) device; a dynamic random access memory (DRAM) device; and a memory controller coupled with the processor via a bus. The memory controller may store data of a write request from the processor in the SRAM and DRAM devices and may comprise logic to split the data into at least a first portion to store in the SRAM device and a second portion to store in the DRAM device In response to a read request for the data, the memory controller may read the first portion of the data from the SRAM device and read the second portion of the data from the DRAM device during the read of the first portion of the data from the SRAM device. The memory controller may also transmit the first and second portions of the data in response to the read request. Memory locations of the first portion and the second portion have consecutive memory addresses. 
   Yet another embodiment includes a device to couple with a memory controller. The device may comprise a first memory device with a low initial access latency; a second memory device with a high initial access latency; and address-decoding logic interconnected with the first memory device and the second memory device. The address-decoding logic may associate a first, consecutive physical address range with the first memory device and a second, consecutive physical address range with the second memory device, wherein the first, consecutive physical address range is consecutive with the second, consecutive physical address range. Furthermore, the address-decoding logic is responsive to a write command to write data from the memory controller to the memory devices. The address-decoding logic may decode an address of the write command to write a first portion of the data to the first memory device and a second portion of the data to the second memory device. The address-decoding logic is also responsive to a read command for the data from the memory controller to decode an address of the read command to read the first portion of the data from the first memory device and to read the second portion of the data from the second memory device, to transmit the data to the memory controller. 

   
     BRIEF DESCRIPTION OF THE DRAWINGS 
     Aspects of the invention will become apparent upon reading the following detailed description and upon reference to the accompanying drawings in which like references may indicate similar elements: 
       FIG. 1  depicts a processing system comprising hybrid memory controllers and hybrid memory devices; 
       FIG. 2  depicts a timing diagram for response to a read request from a hybrid memory device; 
       FIG. 3A  illustrates a hybrid memory controller comprising logic to access static random access memory (SRAM) and dynamic random access memory (DRAM) to reduce or substantially hide the initial latency of access to data stored in the DRAM; 
       FIG. 3B  depicts an embodiment of hybrid memory device comprising address-decoding logic interconnected with SRAM devices and DRAM devices to provide consecutive physical addresses for groups of the SRAM and DRAM devices; 
       FIG. 4  illustrates a flow chart of an embodiment to respond to a write request via a hybrid memory controller; and 
       FIG. 5  illustrates a flow chart of an embodiment to respond to a read request to retrieve data via a hybrid memory controller. 
   

   DETAILED DESCRIPTION OF EMBODIMENTS 
   The following is a detailed description of novel embodiments depicted in the accompanying drawings. The embodiments are in such detail as to clearly communicate the subject matter. However, the amount of detail offered is not intended to limit anticipated variations of the described embodiments; on the contrary, the claims and detailed description are to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the present teachings as defined by the appended claims. The detailed descriptions below are designed to make such embodiments understandable to a person having ordinary skill in the art. 
   Generally, methods and arrangements for hybrid data storage for a processing system are described herein. Embodiments may comprise a hybrid memory controller to facilitate accesses of hybrid memory, i.e., more than one type of memory device. For convenience, the hybrid memory is referred to below generally as a hybrid memory device and sometimes more specifically as a hybrid cache device, which is indicative of the role of the memory in the system. A hybrid memory device may be a device specifically designed to assign consecutive addresses to the hybrid memory or loosely coupled memory devices at a common location or in various locations of the processing system. 
   The hybrid memory controller may include split logic to determine whether to split data of a write request into more than one portion and to store each portion in a different type of data storage device. For example, one embodiment comprises a hybrid memory controller to store data in both SRAM and DRAM devices. The SRAM and DRAM devices may include distinct circuits on a die, distinct dies within a chip, distinct chips on a memory module, distinct memory modules, or the like. 
   The hybrid memory controller may be one or more chips and may comprise memory array controllers for each type of memory device such as an array controller for an SRAM device and an array controller for a DRAM device. Furthermore, the hybrid memory controller may comprise an address translator and an address table to track portions of data split between more than one memory devices and, in some embodiments, assign consecutive, logical addresses to the data split between more than one memory devices. 
   Further embodiments comprise a hybrid memory device with address-decoding logic to associate consecutive addresses with more than one types of memory. The hybrid memory device may include more than one types of memory interleaved and coupled with address-decoding logic. The address-decoding logic may assign consecutive addresses to the different types of memory to substantially hide an initial access latency associated with high initial access latency memory devices such as DRAM. For instance, the a first portion of data received with a write request may be written to a low initial access latency memory device such as SRAM and the remainder of the data may be written in consecutive memory addresses of the high initial access latency memory device. In many embodiments, the hybrid memory device may replace contemporary memory modules without implementation of special logic in the corresponding memory controller. 
   While specific embodiments will be described below with reference to specific memory devices, circuits, queue configurations, or logic configurations, those of skill in the art will realize that embodiments of the present disclosure may advantageously be implemented with other memory devices, circuits, queue configurations, and logic configurations. 
   Turning now to  FIG. 1 , there is shown a processing system  100  comprising hybrid memory controllers such as hybrid cache controller  120 , hybrid video memory controller  140 , cache controller  155 , and hybrid memory controller  165 , to access hybrid memory devices such as hybrid level two (L2) cache  125 , hybrid level three (L3) cache  160 , hybrid video memory  145 , and hybrid system memory  170 . Processing system  100  may be a computer system such as a distributed computing system, supercomputer, high-performance computing system, computing cluster, mainframe computer, mini-computer, client-server system, personal computer (PC), workstation, server, portable computer, laptop computer, tablet computer, handheld device such as a personal digital assistant (PDA), or other device for processing or transmitting information. Similar embodiments are implemented as, e.g., entertainment devices such as a portable music player or a portable video player, a smart phone or other cellular phone, a telephone, a digital video camera, a digital still camera, an external storage device, or the like. Further embodiments implement larger scale server configurations such as server systems. 
   Processing system  100  comprises components such as a processor  105  coupled with a memory controller hub (MCH)  135  and input-output (I/O) controller hub (ICH)  150  via a host bus  130 , a video controller  137 , memory controllers, and memory mounted on the planar such as a motherboard. Processing system  100  comprises components such as processor  105 , which comprises a processor core  110  coupled with a hybrid cache controller  120  and a hybrid level two (L2) cache  125 . Processor  105  may be an International Business Machines PowerPC® processor, Intel® Pentium® processor, Cyrix processor or Advanced Micro Devices 8486 processor or any other suitable processor. In further embodiments, processor  105  may be one of multiple processors coupled with host bus  130 . In many embodiments, level one (L1) cache may be incorporated into processor core  110 . 
   Hybrid memory devices may provide fine granularity to balance between low latency memory and bulk memory and, in some embodiments, even an adjustable granularity after deployment. For instance, hybrid L2 cache  125  may comprise predominantly low latency memory  126  for data storage such as static random access memory (SRAM) devices to provide low latency access. However, hybrid L2 cache  125  may also include a bulk memory  127  such as dynamic random access memory (DRAM) devices to increase the amount of data that can be stored at a relatively lower cost per byte, a lower power consumption level, and/or a relatively higher density to reduce the impact on the silicon area on the die of processor  105 . The SRAM and DRAM devices may include distinct circuits on a die, distinct dies within a chip, distinct chips on a memory module, distinct memory modules, or the like. 
   Hybrid cache controller  120  may offer cache algorithms and other such functionality along with low latency access to instructions and data for processor core  110 . Furthermore, hybrid cache controller  120 , may include split logic that divides write data into portions to store in low latency memory  126  and bulk memory  127 , tracks the portions of the data, and retrieves the portions of the data from both low latency memory  126  and bulk memory  127 . In some embodiments, hybrid cache controller  120  may be designed to split the data into predefined portions based upon anticipated or heuristically determined sizes for data reads. In many embodiments, the predefined portions vary based upon the application(s) executing on processing system  100 . For instance, servers execute different applications than desktop computers and may operate more efficiently when larger sizes of data are accessed, on average, per read request to hybrid L2 cache  125 . Thus, in some server embodiments, the size of the portion stored in bulk memory  127  may be larger, on average, than corresponding portions for desktop embodiments. 
   The predefined portion of low latency memory  126  may be defined based upon the amount of data that can be read from low latency memory  126  while bulk memory  127  is preparing to burst the remainder of the data. In many embodiments, this portion accounts for the initial latency associated with low latency memory  126  as well as the initial latency associated with access to bulk memory  127 . Thus, the predefined portion of low latency memory  126  may substantially hide the high initial access latency of the bulk memory  127 . 
   The predefined portion of bulk memory  127  may be determined based upon the amount of data anticipated for a typical, mean, or average read request and the predefined portion of low latency memory  126 . In other embodiments, the predefined portion of bulk memory  127  may be determined based upon the expected maximum, typical maximum, or mean maximum size of a read request. In several embodiments, the ratio of low latency memory  126  to bulk memory  127 , e.g., SRAM to DRAM, in hybrid L2 cache  125  is determined based upon these predefined portions. In further embodiments, hybrid cache controller  120  may be designed to learn or refine the size of the portions to place in low latency memory  126  and bulk memory  127  to meet one or more indicated or predefined goals. In such embodiments, the ratio may be primarily based upon other factors. 
   In response to a read request from processor core  110 , hybrid cache controller  120  may read data from low latency memory  126  first to return data to processor core  110  quickly. Around the time hybrid cache controller  120  initiates access to the portion of the data in low latency memory  126 , hybrid cache controller  120  may initiate a read of the portion of the data stored in bulk memory  127 . Hybrid cache controller  120  may then respond to processor core  110  with the portion of the data retrieved from low latency memory  126  followed by the portion of the data retrieved from bulk memory  127  in one substantially continual burst or two distinct bursts. In some embodiments, the burst speed for data from bulk memory  127  is comparable to or substantially the same as the burst speed of low latency memory  126  but the initial latency of low latency memory  126  is lower than the initial latency of bulk memory  127 . 
   MCH  135  and ICH  150  represent part of processing system&#39;s  100  core logic chipset, facilitating access to/from processor  105  from/to memory devices and I/O devices, respectively. MCH  135  may include a bus  149  adapted for direct memory access (DMA) by video controller  137 . In some embodiments the bus  149  may be an accelerated graphics port (AGP). The AGP may be a high-speed port that is designed for video controller  137  and may provide a direct communications between video controller  137  and hybrid system memory  170 . AGP may use, e.g., a 32-bit bus to provide data transfer rates such as 264 Megabytes per second, 528 Megabytes per second, one Gigabyte per second, and two Gigabytes per second. In other embodiments, bus  149  may be a peripheral component interconnect (PCI) bus such as a PCI-Express (PCI-E) bus. 
   Video controller  137  may generate and refresh a display for processing system  100  such as a liquid crystal display (LCD). Video controller  137  may comprise a hybrid video memory controller  140  and a hybrid video memory  145 . Hybrid video memory controller  140  may comprise a memory controller designed to split write data between one or more types of memory devices such as low latency memory  146  (e.g., a dual-ported SRAM) and bulk memory  147  (e.g., a VRAM, which is essentially a dual ported DRAM designed especially for video processing). Similar to hybrid cache controller  120 , hybrid video memory controller  140  may divide data from write requests into portions to store in low latency memory  146  and bulk memory  127 . However, the relative sizes of low latency memory  146  and bulk memory  147 , as well as the relative sizes of the portions of the data stored in low latency memory  146  and bulk memory  147  may be based upon algorithms and functionality associated with video controller  137 . 
   MCH  135  also provides access to level three (L3) cache  160  via a cache controller  155  and hybrid system memory  170  via a hybrid memory controller  165 . Hybrid L3 cache  160  may store instructions and data repeatedly accessed by processor  105 , including instructions and data that is not accessed often enough to be promoted to hybrid L2 cache  125 . Hybrid L3 cache  160  comprises two types of memory devices, a low latency memory  162  and a bulk memory  163 . In some embodiments, hybrid L3 cache  160  may comprise interleaved banks of low latency memory  162  and bulk memory  163 . In other embodiments, hybrid L3 cache  160  may comprise one or more modules of low latency memory  162  and bulk memory  163 . 
   Cache controller  155  is a standard memory controller designed to access L3 cache. When cache controller  155  writes to a consecutive address range in hybrid L3 cache  160 , address-decoding logic  161  of hybrid L3 cache  160  may write a first portion of the data to low latency memory  162  and a second portion of the data to bulk memory  163 . Thereafter, in response to a read request for that address range, address-decoding logic  161  may retrieve the first portion of data to burst an initial response to the read request. Substantially simultaneously, address-decoding logic  161  may retrieve the second portion of data from bulk memory  163  to burst the remainder of the response to the read request. In further embodiments, the operating system or other memory management code may be aware of hybrid L3 cache  160  and select addresses for storage of data in a manner to gain further advantages from the two memory types in hybrid L3 cache  160 . In other embodiments, implementation of a hybrid memory controller for cache controller  155  may gain further advantages from hybrid L3 cache  160 . 
   Hybrid system memory  170  may include low latency memory modules such as SRAM and bulk memory modules such as double data rate (DDR) synchronous dynamic random access memory (SDRAM). Hybrid system memory  170  is composed of one or more memory modules and hybrid memory controller  165  includes an address translator for mapping addresses to and from processor  105  to particular areas of hybrid system memory  170  such as areas within low latency memory  172  and areas within bulk memory  173 . 
   Hybrid memory controller  165  may comprise split logic to determine whether to split write data into portions for storage in low latency memory  172  and bulk memory  173 . For example, if the size of the write data does not meet or exceed a threshold size, then the split logic may store all of the data in bulk memory  173  or in low latency memory  172 . For example, the threshold may be a size at which the bulk of the data would be stored in higher density, bulk memory  173  rather than in low latency memory  172 . In several embodiments, the threshold is determined dynamically, while in further embodiments, the threshold, or at least a default threshold, is predefined. In some embodiments, the selection of write data to split between low latency memory  172  and bulk memory  173  may be based upon priorities associated with the data, a threshold size of for the data, the amount of space left in low latency memory  172 , fragmentation of low latency memory  172  or bulk memory  173 , and/or other factors. 
   ICH  150  is designed to coordinate communications with various I/O devices. For instance, ICH  150  may couple with a local area network (LAN) adapter, universal serial bus (USB) ports, a redundant array of independent disks (RAID) controller, an integrated drive electronics (IDE) bus, a PCI-E bus, PCI bus, and low pin count (LPC) bus. The LAN adapter can be coupled to either the PCI bus or directly to ICH  150  to facilitate communication with a remote computer or server over a LAN. The LAN adapter may also be known as a network interface card (NIC). 
     FIG. 2  depicts a timing diagram  200  for an embodiment of a response to a read request for data by a hybrid memory controller such as hybrid cache controller  120 , hybrid video memory controller  140 , and hybrid memory controller  165 . In this embodiment, the hybridmemory controller bursts the first portion of the data  220  from SRAM  210  after an initial latency for SRAM  210 , which is between t 0  and tSRAM. After bursting the first portion of the data  220 , the hybrid memory controller bursts a second portion of the data  260  from DRAM  250 . The initial latency for bursting the second portion of the data  260  from DRAM  250  is between t 0  and tDRAM. 
   In some cache embodiments, the first portion of the data  220  burst from SRAM  210  may be larger than the second portion of the data  260  burst from DRAM  250 . However, in many system memory embodiments, the second portion of the data  260  burst from DRAM  250  is larger than the first portion of the data  220  burst from SRAM  210 . 
   In a number of embodiments, the end of the burst of the first portion of the data may not be at the end of the initial latency period for DRAM  250  so the dashed lines  270  indicate a range of potential times at which the SRAM  210  burst may end. In several of these embodiments, the burst of the second portion of the data  260  may start at or after the end of the burst of the first portion of the data  220 . In other embodiments, a pause may occur between the bursts or the bursts may overlap. 
   Referring to  FIG. 3A , there is shown an embodiment of a hybrid memory controller  300  comprising a split logic  310  to access an SRAM device and a DRAM device to reduce or substantially hide the initial latency of access to data stored in the DRAM device. Hybrid memory controller  300  may include a microcontroller, a specific purpose system such as a state machine or specific purpose processor, a general purpose machine configured by code, combinations of the two, or the like. In particular, hybrid memory controller  300  may receive commands, also referred to as requests, to access hybrid memory such as read (or load) commands and write (or store) commands. In some embodiments, hybrid memory controller  300  may re-order the commands based upon latencies associated with servicing the commands and priorities associated with the commands, to reduce latencies involved with accessing memory. Hybrid memory controller  300  includes split logic  310 , an arbiter  330 , DRAM queue(s)  340  coupled with DRAM array controller  345 , and SRAM queue(s)  350  coupled with SRAM array controller  355 . Hybrid memory controller  300  may also include a burst coordinator  360 . 
   Split logic  310  may receive incoming commands from a requester, e.g., a processor such as processor  105  in  FIG. 1  and respond to the commands with data or transaction acknowledgements. For example, split logic  310  may process read commands and respond by returning the data to the requester. Split logic  310  may process write commands by storing the data associated with the write commands in the DRAM device and/or SRAM device and respond to the requester with a completion to acknowledge that the data has been written or is in the process of being written to the DRAM device and/or SRAM device. 
   Split logic  310  may comprise incoming queue(s)  312 , an address translator  314 , an address table  316 , and selection logic  318 . Incoming queue(s)  312  may comprise one or more queues within which to store commands to be processed. In some embodiments, incoming queue(s)  312  may comprise a single queue that receives all incoming commands. Split logic  310  may then separate the commands into a read command queue and a write command queue. In further embodiments, incoming queue(s)  312  may have a second stage comprising one or more queues to maintain processed commands until arbiter  330  transmits the commands to DRAM queue(s)  340  or SRAM queue(s)  350 . 
   Address translator  314  translates the address targeted by commands received by split logic  310 . In particular, a physical (or real) address is appended or otherwise associated with incoming commands based upon address indications of the commands. Address translator  314  couples with address table  316  to convert the logical address indications of the commands into physical addresses that describe the memory extent(s) and bank(s) for which the commands are intended to perform an operation. For read commands, if the data is split between the DRAM device and the SRAM device, address translator  314  may return a physical address for the DRAM device and a physical address for the SRAM device and associate those physical addresses with consecutive logical addresses in address table  316 . In further embodiments, physical addresses within the SRAM device and the DRAM device may be associated in other ways such as physical associations or predetermined logical associations. Operations may include, for instance, loading data from the memory location or writing data to the memory location. In many embodiments, address translator  314  also verifies that the memory addresses associated with the commands are valid addresses. 
   Selection logic  318  may identify write commands for which data will be split into portions to store in the SRAM device and the DRAM device. In some embodiments, selection logic  318  may determine whether the data is suitable for division into the first and second portions. For instance, selection logic  318  may comprise a default or predefined threshold size for the data. In such embodiments, if the data associated with a write command meets or exceeds the threshold size, the data may be split. 
   In some embodiments, selection logic  318  may split data based upon a priority associated with the write command. For instance, the command may include an indication to split the data or may comprise an indication of a priority level associated with the data. In such situations, selection logic  318  may split the data based upon the indication or split the data if sufficient space is available in, e.g., the SRAM device based upon the priority. In many of these embodiments, an allocation may be provided for some or each of the priority levels and selection logic  318  may split the data if sufficient space is available. 
   In several embodiments, selection logic  318  may also determine the size of a first portion of the data to store in the SRAM device. Selection logic  318  may determine the size based upon the amount of data associated with the write command, a priority associated with the data of the write command, an amount of space available for the data based upon a priority associated with the data, an amount of space available within the SRAM device, a heuristically determined size, a predetermined size, a default size, or the like. 
   Selection logic  318  may associate an indication of the decision to split or not with the write command, as well as possibly the size of the first portion of the data, and address translator  314  may associate one or more physical addresses with the write command accordingly. In one embodiment, the size of the first portion of the data is predefined to be a size that can be burst during the initial latency associated with bursting the second portion of the data from the DRAM device. In such embodiments, address translator  314  may assign addresses to write commands based upon an indication from selection logic  318  regarding whether the data associated with the write command meets or exceeds a threshold size. 
   Arbiter  330  may transfer commands from incoming queue(s)  312  to corresponding DRAM queue(s)  340  and/or SRAM queue(s)  350  after the commands are assigned physical addresses by address translator  314 . In some embodiments, arbiter  330  may transmit a command to DRAM queue(s)  340  when space becomes available within the DRAM queue(s)  340  to receive the command. Similarly, arbiter  330  may transmit a command to SRAM queue(s)  350  when space becomes available. 
   DRAM queue(s)  340  may comprise one or more queues such as first in, first out (FIFO) queues. In some embodiments, DRAM queue(s)  340  may include logic to fast track some commands based upon priority or the nature of the command. For example, read commands may be performed prior to write commands at least until the number of pending write commands reaches a threshold number. In many embodiments, DRAM queue(s)  340  may comprise separate queues for read commands and write commands. In such embodiments, DRAM queue(s)  340  may comprise logic to compare addresses associated with reads and writes to assure that a read is not processed prior to a previously received write to the same address. 
   DRAM queue(s)  340  couples with DRAM array controller  345  to access DRAM banks of the DRAM device to read data from or write data to the banks. DRAM array controller  345  may comprise one or more sequencers to access the DRAM device. 
   SRAM queue(s)  350  may comprise one or more queues and, similar to DRAM queue(s)  340 , some embodiments provide SRAM queue(s)  350  with logic to fast track some commands based upon priority or the nature of the command. In many embodiments, SRAM queue(s)  350  may comprise separate queues for read commands and write commands. In such embodiments, SRAM queue(s)  350  may comprise logic to compare addresses associated with reads and writes to assure that a read is not processed prior to a previously received write to the same address. SRAM queue(s)  350  couples with SRAM array controller  355  to access the SRAM device. 
   Burst coordinator  360  may coordinate bursts of data read from the DRAM device and the SRAM device to return the data in a single response to a read command or as a series of packets associated with the same response. In some embodiments, burst coordinator  360  may dynamically affect priorities of commands in queues to coordinate a response to a request. In further embodiments, burst coordinator  360  may include a buffer to facilitate coordination of a response to a read command, wherein a first portion of the data for the response is stored in the SRAM device and a second portion of the data is stored in the DRAM device. 
     FIG. 3B  depicts an embodiment of a hybrid memory device  365  such as a hybrid memory device that might couple with hybrid memory controller  300  in  FIG. 3A . Hybrid memory device  365  may comprise address-decoding logic  370  interconnected with SRAM devices  374 ,  384 , and  394 , and DRAM devices  376 ,  386 , and  396 , to provide consecutive physical addresses for groups of the SRAM and DRAM devices to reduce or substantially hide the initial latency of access to data stored in the DRAM devices. One alternative embodiment utilizes logical address assignments to provide consecutive memory addresses. Other embodiments may comprise a memory device with a fast initial access other than an SRAM device and/or a memory device with a slow initial access other than a DRAM device. Further embodiments comprise combinations of more than two types of memory devices, wherein each combination is assigned a range of consecutive memory addresses. 
   Address-decoding logic  370  may be a higher-level logic to associate physical addresses with modules or chips, and/or may provide a lower-level address-decoding for extents and banks. Address-decoding logic  370  is interconnected with, e.g., SRAM device  374  and the DRAM device  376  via connection  372  to associate a first, consecutive physical address range for SRAM device  374  and a second, consecutive physical address range for DRAM device  376 . In many embodiments, the first, consecutive physical address range is consecutive with the second, consecutive physical address range. 
   Similarly, address-decoding logic  370  couples with SRAM device  384  and DRAM device  386  via connection  382  and couples with SRAM device  394  and DRAM device  396  via connection  392 . Connections  372 ,  382 , and  392  may each comprise a line in some embodiments, or a bus in other embodiments. 
   SRAM devices  374 ,  384 , and  394  may each comprise a bank, an extent, a group of banks, a die, a chip, a group of chips, a module, a group of modules, or the like of SRAM. Similarly, DRAM devices  376 ,  386 , and  396  may each comprise a bank, an extent, a group of banks, a die, a chip, a group of chips, a module, a group of modules, or the like of DRAM. Furthermore, the group of SRAM device  374  and DRAM device  376 , like the other groups of SRAM and DRAM, may comprise an extent, a group of banks, a die, a chip, a group of chips, a module, a group of modules, or the like of a combination of SRAM and DRAM. For example, the SRAM device  374  may be a first die of SRAM, the DRAM device  376  may be a second die of DRAM, and, in some embodiments, the dies may reside in a single chip package. 
     FIG. 4  illustrates a flow chart  400  of an embodiment to respond to a write request via a hybrid memory controller. Flow chart  400  begins with receiving a write request (element  410 ). For example, the hybrid memory controller may receive a transaction from a processor comprising a write request with an address indication and the data to write. In some embodiments, the processor may be a general processor for a processing system such as processor  105  of processing system  100 . In further embodiments, the processor may be a video processor on a video or graphics card and the hybrid memory controller may be a video memory controller for memory mounted on the video card. 
   A decision is then made regarding whether to split the data of the write request into portions to store in a lower initial latency device such as SRAM and a higher initial latency device such as extended data out (EDO) DRAM (element  415 ). In some embodiments, more than two types of memory devices may be available and the selection of the number and types of devices within which the data is written may depend upon the amount and nature of the data to write. For instance, a large amount of data that the processor will periodically execute or manipulate may be given a high priority and written to more than two devices to increase the effective bandwidth of the hybrid memory device. On the other hand, a smaller amount of data with a lower priority may be written into one or two memory devices. 
   If the hybrid memory controller determines that the data will not be split into portions, the data may be transmitted to a selected memory device for storage (element  420 ) and an address indication may be stored in an address table to facilitate retrieval of the data in response to a subsequent read request (element  450 ). If the hybrid memory controller determines that the data will be split into portions, a first portion of the data may be transmitted to a low latency memory device for storage (element  440 ) and a second portion of the data may be transmitted to a higher initial latency memory device for storage (element  445 ). The first and second portions of the data may then be written to the corresponding memory devices as the devices become available to write the data and address location indications for the data may be stored in an address table and associated with consecutive logical addresses to facilitate retrieval for a subsequent read request (element  450 ). 
     FIG. 5  illustrates a flow chart  500  of an embodiment to respond to a read request to retrieve data via a hybrid memory controller. The method begins by receiving a read request for data (element  510 ). The read request may comprise a logical address to indicate the data to read from memory. The hybrid memory controller may then translate the logical address (element  515 ) to determine a physical address within an SRAM device for a first portion of the data and a physical address within a DRAM device for a second portion of the data. 
   In response to determining the address for the first portion of the data, the hybrid memory controller may retrieve the first portion of the data for preparing a response to the read request from the SRAM device (element  520 ) and transmit the response to the requester associated with the read request (element  525 ). 
   In response to determining the address for the second portion of the data within the DRAM device, the hybrid memory controller may retrieve the second portion of the data (element  530 ) and transmit the second portion of the data in response to the read request (element  535 ). In many embodiments, the amount of data stored in the SRAM device may be determined to be approximately the amount necessary to substantially hide the initial latency involved with bursting the second portion of the data from the DRAM device. 
   Another embodiment of the invention is implemented as a program product for implementing data collection logic such as systems and methods described with reference to  FIGS. 1-5 . The invention can take the form of an entirely hardware embodiment, an entirely software embodiment, or an embodiment containing both hardware and software elements. In one embodiment, the invention is implemented in software, which includes but is not limited to firmware, resident software, microcode, etc. 
   Furthermore, the invention can take the form of a computer program product accessible from a computer-usable or computer-readable medium providing program code for use by or in connection with a computer or any instruction execution system. For the purposes of this description, a computer-usable or computer readable medium can be any apparatus that can contain, store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device. 
   The medium can be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device) or a propagation medium. Examples of a computer-readable medium include a semiconductor or solid state memory, magnetic tape, a removable computer diskette, a random access memory (RAM), a read-only memory (ROM), a rigid magnetic disk, and an optical disk. Current examples of optical disks include compact disk-read only memory (CD-ROM), compact disk-read/write (CD-R/W), and DVD. 
   A data processing system suitable for storing and/or executing program code will include at least one processor coupled directly or indirectly to memory elements through a system bus. The memory elements can include local memory employed during actual execution of the program code, bulk storage, and cache memories which provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution. 
   Input/output or I/O devices (including but not limited to keyboards, displays, pointing devices, etc.) can be coupled to the system either directly or through intervening I/O controllers. Network adapters may also be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks. Modems, cable modem, and Ethernet adapter cards are just a few of the currently available types of network adapters. 
   The logic as described above may be part of the design for an integrated circuit chip. The chip design is created in a graphical computer programming language, and stored in a computer storage medium (such as a disk, tape, physical hard drive, or virtual hard drive such as in a storage access network). If the designer does not fabricate chips or the photolithographic masks used to fabricate chips, the designer transmits the resulting design by physical means (e.g., by providing a copy of the storage medium storing the design) or electronically (e.g., through the Internet) to such entities, directly or indirectly. The stored design is then converted into the appropriate format (e.g., GDSII) for the fabrication of photolithographic masks, which typically include multiple copies of the chip design in question that are to be formed on a wafer. The photolithographic masks are utilized to define areas of the wafer (and/or the layers thereon) to be etched or otherwise processed. 
   The resulting integrated circuit chips can be distributed by the fabricator in raw wafer form (that is, as a single wafer that has multiple unpackaged chips), as a bare die, or in a packaged form. In the latter case, the chip is mounted in a single chip package (such as a plastic carrier, with leads that are affixed to a motherboard or other higher level carrier) or in a multichip package (such as a ceramic carrier that has either or both surface interconnections or buried interconnections). In any case, the chip is then integrated with other chips, discrete circuit elements, and/or other signal processing devices as part of either (a) an intermediate product, such as a motherboard, or (b) an end product. The end product can be any product that includes integrated circuit chips, ranging from toys and other low-end applications to advanced computer products having a display, a keyboard or other input device, and a central processor. 
   It will be apparent to those skilled in the art having the benefit of this disclosure that the present disclosure contemplates methods and arrangements for hybrid memory storage. It is understood that the form of the embodiments shown and described in the detailed description and the drawings are to be taken merely as examples. It is intended that the following claims be interpreted broadly to embrace all variations of the example embodiments disclosed. 
   Although the present disclosure and some of its advantages have been described in detail for some embodiments, it should be understood that various changes, substitutions, and alterations can be made herein without departing from the spirit and scope of the disclosure as defined by the appended claims. Although specific embodiments of the invention may achieve multiple objectives, not every embodiment falling within the scope of the attached claims will achieve every objective. Moreover, the scope of the present application is not intended to be limited to the particular embodiments of the process, machine, manufacture, composition of matter, means, methods, and steps described in the specification. As one of ordinary skill in the art will readily appreciate from the disclosure of the present invention, processes, machines, manufacture, compositions of matter, means, methods, or steps presently existing or later to be developed that perform substantially the same function or achieve substantially the same result as the corresponding embodiments described herein may be utilized according to the present invention. Accordingly, the appended claims are intended to include within their scope such processes, machines, manufacture, compositions of matter, means, methods, or steps.