Solid-state memory is a type of digital memory used by many computers and electronic devices for data storage. The packaging of solid-state circuits generally provides solid-state memory with a greater durability and lower power consumption than magnetic disk drives. These characteristics coupled with the continual strides being made in increasing the storage capacity of solid-state memory devices and the relatively inexpensive cost of solid-state memory have contributed to the use of solid-state memory for a wide range of applications. In some applications, for example, nonvolatile solid-state memory may be used to replace magnetic hard disks or in regions of a processor's memory space that retain their contents when the processor is unpowered.
In most types of nonvolatile solid-state memory, including flash memory, write operations require a substantially greater amount of time to complete than read operations. Furthermore, because of the unidirectional nature of write operations in flash memory, data is typically only erased from flash memory periodically in large blocks. This type of erasure operation requires even more time to complete than a write operation.
The accompanying drawings illustrate various embodiments of the principles described herein and are a part of the specification. The illustrated embodiments are merely examples and do not limit the scope of the claims.
Throughout the drawings, identical reference numbers designate similar, but not necessarily identical, elements.
As described above, in some types of digital memory, including, but not limited to flash memory and other nonvolatile solid-state memory, the amount of time required to write data to the memory may be significantly longer than the amount of time required to read data from the memory. Moreover, erase operations may require longer amounts of time to complete than write operations or read operations.
For most of these types of memory, read operations cannot occur concurrently with write or erase operations on the same memory device, thereby requiring that a read operation be delayed until any write or erase operation currently performed on the device is complete. Therefore, the worst case read latency in such a memory device may be dominated by the time required by an erase operation on the device.
However, in some cases, it may be desirable to maintain uniformity in read latency of data stored in a memory device, regardless of whether the memory device is undergoing a write or erase operation. Furthermore, it may also be desirable to minimize the read latency in such a memory device.
In light of the above and other goals, the present specification discloses apparatus, systems and methods of digital storage having a substantially uniform read latency. Specifically, the present specification discloses apparatus, systems and methods utilizing a plurality of memory banks configured to redundantly store data that is otherwise inaccessible during a write or erase operation at its primary storage location. The data is read from the redundant storage in response to a query for the data when the primary storage location is undergoing a write or erase operation.
As used in the present specification and in the appended claims, the term “bank” refers to a physical, addressable memory module. By way of example, multiple banks may be incorporated into a single memory system or device and accessed in parallel.
As used in the present specification and in the appended claims, the term “read latency” refers to an amount of elapsed time between when an address is queried in a memory bank and when the data stored in that address is provided to the querying process.
As used in the present specification and in the appended claims, the term “memory system” refers broadly to any system of data storage and access wherein data may be written to and read from the system by one or more external processes. Memory systems include, but are not limited to, processor memory, solid-state disks, and the like.
In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present systems and methods. It will be apparent, however, to one skilled in the art that the present systems and methods may be practiced without these specific details. Reference in the specification to “an embodiment,” “an example” or similar language means that a particular feature, structure, or characteristic described in connection with the embodiment or example is included in at least that one embodiment, but not necessarily in other embodiments. The various instances of the phrase “in one embodiment” or similar phrases in various places in the specification are not necessarily all referring to the same embodiment.
The principles disclosed herein will now be discussed with respect to illustrative systems and illustrative methods.
Referring now to
The present example illustrates a simple application of the principles of the present specification. Flash memory banks (d0, m0) in a memory device may include a primary flash bank (d0) that serves as a primary storage location for data and a mirror bank (m0) that redundantly stores a copy of the data stored in the primary flash bank (d0). A write or erase operation would therefore require that each of the primary and the mirror banks (d0, m0) be updated to maintain consistent mirroring of data between the banks (d0, m0). A flash memory bank is typically inaccessible for external read queries while a write or erase operation is being performed. However, by staggering the write or erase operation such that the two flash memory banks (d0, m0) are never undergoing a write or erase operation concurrently, at least one of the primary data bank (d0) or the mirror data bank (m0) may be available to an external read query for the data stored in the banks (d0, m0). In the present example, new data is shown being written to the primary flash bank (d0) while the mirror flash bank (m0) services a read query. Conversely, while the mirror flash bank (m0) is undergoing a write or erase operation, the primary flash bank (d0) may service external read queries.
In certain embodiments, where both the primary flash bank (d0) and the mirror flash bank (m0) are available to service read queries, both flash banks (d0, m0) may service the queries. In alternative embodiments, only the primary flash bank (d0) may service read queries under such circumstances to preserve uniformity in read latency. Nonetheless, in every possible embodiment, the maximum read latency of the data stored in the primary and mirror flash banks (d0, m0) may be generally equivalent to that of the slower (if any) of the two flash banks (d0, m0).
Referring now to
However, as shown in
Referring now to
In the present example, the mirroring principles described in
In certain embodiments, particularly those in which a plurality of flash banks (d0 to d3, m0 to m3) are configured to be read simultaneously to provide a single word of data, a write buffer may be incorporated with the flash banks (d0 to d3, m0 to m3). The write buffer may store data for write operations that are currently being written or yet to be written to the flash banks (d0 to d3, m0 to m3). In this way, the most current data can be provided to an external read process. A write buffer may be used with any of the exemplary embodiments described in the present specification, and the operations of such a write buffer will be described in more detail below.
The present example illustrates a set of four primary flash banks (d0 to d3) and four corresponding mirror flash banks (m0 to m3). It should be understood, however, that any suitable number of flash banks (d0 to d3, m0 to m3) may be used to create redundant data storage according to the principles described herein, as may best suit a particular application.
Referring now to
Unlike the previous examples, however, the present memory apparatus (300) does not provide redundancy of data by duplicating data stored in each primary flash bank (d0 to d3) in a corresponding mirror flash bank. Rather, the present example incorporates a parity flash bank (p) that may store parity data for the data stored in the primary flash banks (d0 to d3). The parity data stored in the parity flash bank (p) may be used in conjunction with data read at given addresses from any three of the primary flash banks (d0 to d3) to determine the data stored in the remaining of the primary flash banks (d0 to d3) without actually performing a read operation on the remaining primary flash bank (d0 to d3).
For example, as shown in
This reconstruction may be, for example, performed by a reconstruction module (305) having logical gates configured to perform an exclusive-OR (EXOR) bit operation on the data portions received from the accessible flash banks (d0, d1, d3) to generate the data fragment stored in the occupied primary flash bank (d2). The output of the reconstruction module (305) may then be substituted for the output of the occupied primary flash bank (d2), thereby providing the external read process with the complete data requested. This substitution may be performed by a read multiplexer (not shown), as will be described in more detail below.
In the present example, only one of the primary flash banks (d0 to d3) may undergo a write or erase operation at a time if complete data is to be provided to the external read process. Alternatively, a plurality of parity flash banks (p) may enable parallel write or erase processes among the primary flash banks (d0 to d3).
Referring now to
Referring now to
A first of the parity flash banks (p0) stores parity data corresponding to fragmented data in the first two primary flash banks (d0, d1), and a second parity flash bank (p1) stores parity data corresponding to striped data in the remaining two primary flash banks (d2, d3). First and second reconstruction modules (505, 510) are configured to reconstruct primary flash bank data from the first parity flash bank (p0) and the second parity flash bank (p1), respectively. By utilizing multiple parity flash banks (p0, p1), the write bandwidth of the flash memory banks (d0 to d3, p0, p1) may be increased, due to the fact that write or erase operations need only be staggered among a first group of flash banks (d0, d1 , p0) and a second group of flash banks (d2, d3, p1), respectively. This property allows for each of the groups to support a concurrent writing or erase process in one of its flash banks (d0 to d3, p0, p1) while still making all of the data stored in the primary flash banks (d0 to d3) available to an external read process.
In the present example, a primary flash bank (d1) in the first group is shown undergoing a write operation concurrent to a primary flash bank (d2) in the second group also undergoing a write operation. In response to an external read process, the reconstruction modules (505, 510) use parity data stored in the panty flash banks (p0, p1, respectively) together with data from the accessible primary flash banks (d0, d3, respectively) to recover the data stored in inaccessible flash banks (d1, d2) and provide that data to the external read process together with the data from the accessible flash banks (d1, d2).
Referring now to
In contrast to the previous illustrative memory apparatus (500,
Referring now to
Referring now to
The illustrative data storage system (800) includes a plurality of NOR flash memory banks (d0 to d7, p) arranged in a fragmented data-striping/parity redundancy configuration similar to that described previously in
Each of the flash memory banks may be communicatively coupled to a management module (805) that includes a read multiplexer (810), a write buffer (815), a parity generation module (820), a reconstruction module (825), and control circuitry (830).
The system (800) may interact with external processes through input/output (i/o) pins that function as an address port (835), a control port (840), and a data port (845). In certain embodiments, the multi-bit address and data ports (835, 845) may be parallel data ports. Alternatively, the address and data ports (835, 845) may transport data serially. The control circuitry (830) may include a microcontroller or other type of processor or processing element that coordinates the functions and activities of the other components in the system (800).
An external process may write data to a certain address of the memory system (800) by providing that address at the address port (835), setting the control bit at the control port (840) to 1, and providing the data to be written at the data port (845). On a next clock cycle, control circuitry. (830) in the management module (805) may determine that the control bit at the control port (840) has been set to 1, store the address at the address port in a register of the control circuitry (830), and write the data to a temporary write buffer (815).
The temporary write buffer (815) may be useful in synchronous operations since the flash banks (d0 to d7, p) may require staggered writing to maintain a uniform read latency. The write buffer (815) may include DRAM or another type of synchronous memory to allow the data to be received synchronously from the external process and comply with DIMM protocol.
The control circuitry (830) may then write the data stored in the temporary write buffer (815) to the flash banks (d0 to d7, p), according to the staggered write requirement, by parsing the data in the write buffer (815) into fragments and allocating each fragment to one of the flash banks (d0 to d7) according to the address of the data and the fragmentation specifics of a particular application. The parity generation module (820) may update the parity flash bank (p) with new parity data corresponding to the newly written data in the primary flash banks (d0 to d7).
Similarly, an external process may read data by providing the address of the data being queried at the address port (835) to the management module (805) with the control bit at the control port (840) set to 0. The control circuitry (830) in the management module (805) may receive the address and determine from the control bit that a read is being requested from the external process. The control circuitry (830) may then query the portions of the flash memory banks (d0 to d7) that store the fragments of the data being at the address requested by the external process. If the control circuitry (830) determines that the address requested by the external process is currently being written or scheduled to be written, the control circuitry (830) may query the write buffer (815) and provide the requested data to the external process directly from the write buffer (815). However, if the data is not in the write buffer (815), but a staggered write or erase process is occurring to write data to the flash memory banks (d0 to d7, p) nonetheless, control circuitry (830) may use the reconstruction module (825) to reconstruct the requested data using data from the accessible primary flash banks (d0 to d7) and the parity flash bank (p). The control circuitry (830) may also provide a control signal to the read multiplexer (810) such that the read multiplexer (810) substitutes the output of the inaccessible flash bank (d0 to d7) with that of the reconstruction module (825). The read multiplexer (810) may be consistent with multiplexing principles known in the art, and employ a plurality of logical gates to perform this task.
Referring now to
The method includes receiving (step 910) a query for data. The query for data may be received from an external process. An evaluation may then be made (decision 915) of whether at least one primary storage location for the requested data is currently undergoing a write or erase operation. If so, at least a portion of the requested data is read (step 930) from redundant storage instead of the primary storage location. In the event that no primary storage location of the data in question is currently undergoing a write or an erase operation, the data is read (step 925) from the primary storage location. Finally, the data is provided (step 935) to the querying process.
Referring now to
The method (950) may include providing (955) an address of data being queried at an address port of the memory system. It may then be determined (decision 960) whether the requested data corresponding to the supplied address is currently being stored in a write buffer (e.g., the requested data is in the process of being written to its corresponding memory banks in the memory system at the time of the read). If so, the requested data may be simply read (step 965) from the write buffer and provided (step 990) to the requesting process.
If the data corresponding to the address provided by the external process is not determined (decision 960) to be in a write buffer, a determination may be made (decision 970) whether a write or erase process is being performed on at least one of the memory banks storing the requested data. Where a write or erase process is not being performed on at least one of the memory banks storing the requested data, all of the memory banks storing the requested data may be available, for the data to be read (step 985) directly from the primary storage location of the memory and provided (step 990) to the requesting process.
In the event that a write or erase process is being performed on at least one of the banks storing the requested data, fragments of the data may be read (975) from any available memory banks and the remaining data fragment(s) may be reconstructed (step 980) using parity data stored elsewhere. After reconstruction, the data may then be provided (step 990) to the requesting process under a read latency substantially similar to that of providing the requested data after reading the requested data directly from the primary memory banks.
The preceding description has been presented only to illustrate and describe embodiments and examples of the principles described. This description is not intended to be exhaustive or to limit these principles to any precise form disclosed. Many modifications and variations are possible in light of the above teaching.
Filing Document | Filing Date | Country | Kind | 371c Date |
---|---|---|---|---|
PCT/US2008/087632 | 12/19/2008 | WO | 00 | 6/17/2011 |