Writing volatile scattered memory metadata to flash device

Information

  • Patent Grant
  • 10055150
  • Patent Number
    10,055,150
  • Date Filed
    Wednesday, June 1, 2016
    8 years ago
  • Date Issued
    Tuesday, August 21, 2018
    6 years ago
Abstract
In an embodiment of the invention, a method comprises: requesting an update on a control data in at least one flash block in a storage memory; replicating, from the storage memory to a cache memory, the control data to be updated; moving a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update on the control data; and moving the dirty cache link list to a for-flush link list and writing an updated control data from the for-flush link list to a free flash page in the storage memory. In another embodiment of the invention, an apparatus comprises: a control data flushing system configured to: request an update on a control data in at least one flash block in a storage memory; replicate, from the storage memory to a cache memory, the control data to be updated; move a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update on the control data; and move the dirty cache link list to a for-flush link list and write an updated control data from the for-flush link list to a free flash page in the storage memory. In yet another embodiment of the invention, an article of manufacture, comprises a non-transient computer-readable medium having stored thereon instructions operable to permit an apparatus to: request an update on a control data in at least one flash block in a storage memory; replicate, from the storage memory to a cache memory, the control data to be updated; move a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update on the control data; and move the dirty cache link list to a for-flush link list and write an updated control data from the for-flush link list to a free flash page in the storage memory.
Description
FIELD

Embodiments of the invention relate generally to data storage systems. Embodiments of the invention also relate to writing scattered cache memory data to a flash device. Embodiments of the invention also relate to writing volatile scattered memory metadata to a flash device.


DESCRIPTION OF RELATED ART

The background description provided herein is for the purpose of generally presenting the context of the disclosure of the invention. Work of the presently named inventors, to the extent the work is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against this present disclosure of the invention.


In a typical data storage system, a minimum size of cache memory is used to read or write a data. Where that size is large enough for a small change, this conventional approach does not maximize the write amplification. This type of write process in a permanent storage limits some certain types of control data. As known to those skilled in the art, write amplification is an undesirable phenomenon associated with flash memory and solid-state drives (SSDs) where the actual amount of physical information written is a multiple of the logical amount intended to be written.


Additionally, in a typical data storage system, the size used for the cache allocation is the same as the flash page size. By this approach, the data will transfer with difficulty.


Therefore, there is a continuing need to overcome the constraints or disadvantages of current conventional systems.


SUMMARY

Embodiments of the invention relate generally to data storage systems. Embodiments of the invention also relate to writing scattered cache memory data to a flash device. Embodiments of the invention also relate to writing volatile scattered memory metadata to a flash device.


In an embodiment of the invention, a method and apparatus will update the data by using a temporary storage and will transfer the modified data to a new location in a permanent storage. This design or feature is used for write purposes of control data from cache memory to storage memory. By using the cache memory as a temporary location for modifying data, the design maximizes the write amplification.


In an embodiment of the invention, a method comprises: requesting an update on a control data in at least one flash block in a storage memory; replicating, from the storage memory to a cache memory, the control data to be updated; moving a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update on the control data; and moving the dirty cache link list to a for-flush link list and writing an updated control data from the for-flush link list to a free flash page in the storage memory.


In another embodiment of the invention, an apparatus comprises: a control data flushing system configured to: request an update on a control data in at least one flash block in a storage memory; replicate, from the storage memory to a cache memory, the control data to be updated; move a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update on the control data; and move the dirty cache link list to a for-flush link list and write an updated control data from the for-flush link list to a free flash page in the storage memory.


In yet another embodiment of the invention, an article of manufacture, comprises a non-transient computer-readable medium having stored thereon instructions operable to permit an apparatus to: request an update on a control data in at least one flash block in a storage memory; replicate, from the storage memory to a cache memory, the control data to be updated; move a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update on the control data; and move the dirty cache link list to a for-flush link list and write an updated control data from the for-flush link list to a free flash page in the storage memory.


In another embodiment of the invention, a method comprises: requesting an update or modification on a control data in at least one flash block in a storage memory; requesting a cache memory; replicating, from the storage memory to the cache memory, the control data to be updated or to be modified; moving a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update or modification on the control data; and moving the dirty cache link list to a for-flush link list and writing an updated control data from the for-flush link list to a free flash page in the storage memory.


In another embodiment of the invention, an article of manufacture comprises: a non-transient computer-readable medium having stored thereon instructions operable to permit an apparatus to: request an update or modification on a control data in at least one flash block in a storage memory; request a cache memory; replicate, from the storage memory to the cache memory, the control data to be updated or to be modified; move a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update or modification on the control data; and move the dirty cache link list to a for-flush link list and write an updated control data from the for-flush link list to a free flash page in the storage memory.


In another embodiment of the invention, apparatus comprises: a control data flushing system configured to: request an update or modification on a control data in at least one flash block in a storage memory; request a cache memory; replicate, from the storage memory to the cache memory, the control data to be updated or to be modified; move a clean cache link list to a dirty cache link list so that the dirty cache link list is changed to reflect the update or modification on the control data; and move the dirty cache link list to a for-flush link list and write an updated control data from the for-flush link list to a free flash page in the storage memory.


It is to be understood that both the foregoing general description and the following detailed description are exemplary and explanatory only and are not restrictive of the invention, as claimed.


The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate one (several) embodiment(s) of the invention and together with the description, serve to explain the principles of the invention.





BRIEF DESCRIPTION OF DRAWINGS

Non-limiting and non-exhaustive embodiments of the present invention are described with reference to the following figures, wherein like reference numerals refer to like parts throughout the various views unless otherwise specified.


It is to be noted, however, that the appended drawings illustrate only typical embodiments of this invention and are therefore not to be considered limiting of its scope, for the present invention may admit to other equally effective embodiments.



FIG. 1 is a block diagram of an example data storage system (or data storage apparatus) that can include an embodiment of the invention.



FIG. 2 is block diagram of a structure of a NAND flash system per FBX, in accordance with an embodiment of the invention.



FIG. 3 is a block diagram of a structure of a flash page with control data written to the flash page, in accordance with an embodiment of the invention.



FIG. 4 is a block diagram illustrating an initial state of a storage memory and a cache memory, wherein both memory areas in the storage memory and cache memory contain no data, in accordance with an embodiment of the invention.



FIG. 5 is a block diagram illustrating a subsequent state of the storage memory, wherein the storage memory contains control data, in accordance with an embodiment of the invention.



FIG. 6 is a block diagram illustrating a subsequent state of the storage memory, wherein updates or modification request on control data are performed, in accordance with an embodiment of the invention.



FIG. 7 is a block diagram illustrating a subsequent state of the storage memory and cache memory, wherein the control data is replicated from the storage memory to the cache memory, in accordance with an embodiment of the invention.



FIG. 8 is a block diagram illustrating a subsequent state of the storage memory and cache memory, wherein the control data is partially changed in the cache memory, in accordance with an embodiment of the invention.



FIG. 9 is a block diagram illustrating a subsequent state of the storage memory and cache memory, wherein the dirty cache link list is moved to the for flush link list in the cache memory, in accordance with an embodiment of the invention.



FIG. 10 is a block diagram illustrating a subsequent state of the storage memory and cache memory, wherein the updated control data is now written to the storage memory, in accordance with an embodiment of the invention.





DETAILED DESCRIPTION

In the following detailed description, for purposes of explanation, numerous specific details are set forth to provide a thorough understanding of the various embodiments of the present invention. Those of ordinary skill in the art will realize that these various embodiments of the present invention are illustrative only and are not intended to be limiting in any way. Other embodiments of the present invention will readily suggest themselves to such skilled persons having the benefit of this disclosure.


In addition, for clarity purposes, not all of the routine features of the embodiments described herein are shown or described. One of ordinary skill in the art would readily appreciate that in the development of any such actual implementation, numerous implementation-specific decisions may be required to achieve specific design objectives. These design objectives will vary from one implementation to another and from one developer to another. Moreover, it will be appreciated that such a development effort might be complex and time-consuming, but would nevertheless be a routine engineering undertaking for those of ordinary skill in the art having the benefit of this disclosure. The various embodiments disclosed herein are not intended to limit the scope and spirit of the herein disclosure.


Exemplary embodiments for carrying out the principles of the present invention are described herein with reference to the drawings. However, the present invention is not limited to the specifically described and illustrated embodiments. A person skilled in the art will appreciate that many other embodiments are possible without deviating from the basic concept of the invention. Therefore, the principles of the present invention extend to any work that falls within the scope of the appended claims.


As used herein, the terms “a” and “an” herein do not denote a limitation of quantity, but rather denote the presence of at least one of the referenced items.


In the following description and in the claims, the terms “include” and “comprise” are used in an open-ended fashion, and thus should be interpreted to mean “include, but not limited to . . . ”. Also, the term “couple” (or “coupled”) is intended to mean either an indirect or direct electrical connection (or an indirect or direct optical connection). Accordingly, if one device is coupled to another device, then that connection may be through a direct electrical (or optical) connection, or through an indirect electrical (or optical) connection via other devices and/or other connections.



FIG. 1 is a block diagram of an example data storage system 100 (or data storage apparatus 100) that can include an embodiment of the invention. Those skilled in the art with the benefit of this disclosure will realize that an embodiment of the invention can be included in other suitable types of computing systems or data storage systems.


When the system 100 has initialized and is under normal operation, a software/program 101 (run by the processor requests for the SSD access), for example, will do a read transaction to read data from one or more non-volatile memory devices 102 (e.g., flash devices 102 or flash memory devices 102) in the flash storage module 103 or do a write transaction to write data to one or more non-volatile memory devices 102 in the flash storage module 103. Typically, the one or more memory devices 102 form a memory device array 104 in the flash module 103. The memory device array 104 is coupled via a flash interface 105 to a flash memory controller 106.


The flash storage module 103 is coupled via a flash bus 107 (or memory bus 107) to a Direct Memory Access (DMA) controller 108. The DMA controller 108 is coupled via a DMA bus interface 114 to a system bus 109.


A processor 110, system memory 111, and software/program 101 are all coupled to the system bus 109. The system 100 can include more than one software/program 101, more than one processor 110, and/or more than one system memory 111. Additionally or alternatively, the system 100 can include more than one DMA controller 108 and more than one flash storage module 103. In an embodiment of the invention that includes a plurality of flash storage modules 103 and a plurality of DMA controllers 108, wherein each flash storage module 103 is coupled via a respective flash bus 107 to a respective DMA controller 108, the plurality of flash storage modules 103 will form an array (not shown) of flash storage modules 103.


System bus 109 is a conduit or data path for transferring data between DMA controller 108, processor 110, system memory 111, and software/program 101. Processor 110, DMA controller 108, and software/program 101 may access system memory 111 via system bus 109 as needed. System memory 111 may be implemented using any form of memory, such as, for example, various types of DRAM (dynamic random access memory), non-volatile memory, or other types of memory devices.


A request 115 for a memory transaction (e.g., read or write transaction) from a software/program 101, typically in the form of an input-output descriptor command, is destined for the processor 110. Descriptor commands are detailed instructions to be executed by an engine or a module. The processor 110 interprets that the input-output descriptor command intends to read from memory devices 102 in the flash storage module 103 or intends to write to memory devices 102 in the flash storage module 103. The processor 110 is in-charge of issuing all the needed descriptors to one or more Direct Memory Access (DMA) controllers 108 to execute a read memory transaction or write memory transaction in response to the request 115. Therefore, the DMA controller 108, flash memory controller 106, and processor 110 allow at least one software/program 101, to communicate with memory devices 102 within the data storage apparatus 100. Operating under a program control (such as a control by software or firmware), the processor 110 analyzes and responds to a memory transaction request 115 by generating DMA instructions that will cause the DMA controller 108 to read data from or write data to the flash devices 102 in a flash storage module 103 through the flash memory controller 106. If this data is available, the flash memory controller 106 retrieves this data, which is transferred to the system memory 111 by the DMA controller 108, and eventually transferred to the software/program 101 via system bus 109. Data obtained during this memory read transaction request is hereinafter named “read data”. Similarly, write data from the software/program 101 will cause the DMA controller 108 to write data to the flash devices 102 through the flash memory controller 106.


A non-volatile memory device 102 in the flash storage module 103 may be, for example, a flash device. This flash device may be implemented by using a flash memory device that complies with the Open NAND Flash Interface Specification, commonly referred to as ONFI Specification. The term “ONFI Specification” is a known device interface standard created by a consortium of technology companies known as the “ONFI Workgroup”. The ONFI Workgroup develops open standards for NAND Flash memory devices and for devices that communicate with these NAND flash memory devices. The ONFI Workgroup is headquartered in Hillsboro, Oreg. Using a flash device that complies with the ONFI Specification is not intended to limit the embodiment(s) disclosed herein. One of ordinary skill in the art having the benefit of this disclosure would readily recognize that other types of flash devices employing different device interface protocols may be used, such as protocols that are compatible with the standards created through the Non-Volatile Memory Host Controller Interface (NVMHCI) working group. Members of the NVMHCI working group include Intel Corporation of Santa Clara, Calif., Dell Inc. of Round Rock, Tex., and Microsoft Corporation of Redmond, Wash.


Those skilled in the art with the benefit of this disclosure will realize that there can be multiple components in the system 100 such as, for example, multiple processors, multiple memory arrays, multiple DMA controllers, and/or multiple flash controllers.



FIG. 2 is block diagram showing a boundary 200 (apparatus 200 or system 200) which is also illustrated as a box 200 that represents NAND Flash dies per FBX, in accordance with an embodiment of the invention. As known to those skilled in the art, FBX is a Flash Box which is similar to a Disk Chassis. The box 200 is the box or boundary of flash memory devices. The boundary 200 of flash memory is set as per FBX.


Box (or boundary) 200 shows a plurality of flash blocks arranged according to flash dies. The box 200 can be one of the flash memory devices 102 that are shown in the example data storage system 100 of FIG. 1. For example, flash blocks 201a through 201j are included in a flash die 201. Similarly, flash blocks 202a through 202j are also included in a flash die 202. Similarly, each of the flash die 203, flash die 204, flash die 205, flash die 206, and flash die 207 comprises a plurality of flash blocks. For example, the flash blocks 203a through 203j are in a flash die 203. The flash blocks 204a through 204j are in a flash die 204. The flash blocks 205a through 205j are in a flash die 205. The flash blocks 206a through 206j are in a flash die 206. The flash blocks 207a through 207j are in a flash die 207. The flash blocks 210a through 210j are in a flash die 210. The flash blocks in a flash die can vary in number. For example, the flash blocks in each of the flash die 201 through 210 can vary in number as noted by, for example, the dots symbols 212. The flash dies in the FBX structure 200 can vary in number as noted by, for example, the dot symbols 213. For example, there can be more flash dies in the FBX structure 200 in addition to the flash dies 201, 202, through 210. Alternatively, there can be less flash dies in the FBX structure 200 than the flash dies 201, 202, through 210.


Box 214 (or boundary 214) shows which portion within the flash memory 200 from which the control data will be flushed. In the example of FIG. 1, control data will be flushed from all flash blocks that are included within box 214 such as, for example, (1) flash blocks 201b, 201c, 201d, through 201e (in flash die 201); (2) flash blocks 210b, 210c, 210d, through 210e (in flash die 210); (3) flash blocks 202b, 202c, 202d, through 202e (in flash die 202); (4) flash blocks 203b through 203e (in flash die 203); (5) flash blocks 204b through 204e (in flash die 204); (6) flash blocks 205b through 205e (in flash die 205); (7) flash blocks 206b through 206e (in flash die 206); (8) flash blocks 207b through 207e (in flash die 207); and (9) flash blocks 210b through 210e (in flash die 210). The flash blocks that will have control data to be flushed in the box 214 may vary in number as noted by, for example, the dot symbols 211 (in boundary 214) and dot symbols 213 (in boundary 200).


Each flash block is subdivided into flash pages. For example, the flash block 210e in box 214 is subdivided into flash pages 210e1 through 210e8. The flash pages in a flash block may vary in number. For example, the flash block 210e is subdivided into flash pages 210e1 through 210e8, but can have more flash pages or less flash pages. In typical implementations, a flash block is subdivided into more flash pages in addition to the flash pages 210e1 through 210e8.


Each flash page is subdivided into segments. For example, the flash page 210e1 in flash block 210e is subdivided into flash segments 210e11 through 210e18. The flash segments in a flash page may vary in number. For example, the flash page 210e1 is subdivided into flash segments 210e11 through 210e18, but can have more flash segments or less flash segments. In typical implementations, a flash page is subdivided into more flash segments in addition to the segments 210e11 through 210e18.


The notations 250 indicate possible example notations representative of the elements (e.g., control blocks area 214, flash memory 200 per FBX, flash dies 201 through 210, flash blocks, flash pages, and flash segments) shown in FIG. 2. However, the notations 250 may be varied since the number of elements in FIG. 2 may increase in number and so the notations 250 are not necessarily a limiting format or not necessarily a limiting symbolic convention in an embodiment of the invention.



FIG. 3 is a block diagram of a structure 300 of a flash page with control data written to the flash page, in accordance with an embodiment of the invention. Box 301 (which is a sample die 301) includes arbitrary flash blocks 302 for control data flushing. Flash blocks include flash pages with valid control data flushed on the flash pages. For example, these arbitrary flash blocks comprise a flash block 301a that is a block that contains valid control data and a flash block 301b is a block that partially contains valid control data. Flash block 301c and flash block 301d are flash blocks that are erased or do not contain valid control data. The number of flash blocks in a sample die 301 may vary in number as denoted by the dot symbols 330.


A flash block contains flash pages. For example, flash block 301a includes flash pages 301a1 through 301a8, wherein valid control data is flushed on or written to each of the flash pages 301a1 through 301a8. The number of flash pages in the flash block 301a may vary in number. Therefore, there may be more flash pages (or less flash pages) than the flash pages 301a1 through 301a8.


The next flash block 301b includes flash pages 301b1 through 301b8, wherein valid control data is flushed on or written to each of the flash pages 301b1 through 301b4 and wherein the flash pages 301b5 through 301b8 are erased or do not contain valid control data. The number of flash pages in the flash block 301b may vary in number. Therefore, there may be more flash pages (or less flash pages) than the flash pages 301b1 through 301b8. The number of flash pages that is flushed with or written with control data may vary in number. Therefore, there may be more flash pages (or less flash pages) that is flushed with or written with control data.


Flash page 301a1 includes a plurality of flash segments 301a11 through 301a18. First segment 301a11 of flash page 301a1 contains control data identifier information that identifies the flash page 301a1 as containing a control data and information concerning the succeeding flash segments 301a12 through 301a18 of the flash page 301a1. Flash segments 301a12 through 301a18 are flash segments within a flash page that contains control data. The number of flash segments in the flash page 301a1 may vary in number. Therefore, there may be more flash segments (or less flash segments) than the flash segments 301a11 through 301a18.


Block 303 shows the information found in the first flash segment 301a11. This information 303 comprises the signature 305 which identifies the flash page 301a1 as a control data page, the sequence number SQN 306 that is used to track control data updates, and the array of identities (e.g., Identity1307, Identity2308, Identity3309, Identity4310, and IdentityN 311) wherein N is a suitable integer value and wherein the array describes the control data written from flash segments 301a12 up to the last flash segment 301a18 of the flash page 301a1. Since the flash segments in a flash page 301a1 can vary in number, the identities can vary in number as noted by, for example, the dot symbols 304.


The notations 350 indicate the notations representative of the elements (e.g., sample die 301, flash blocks, flash pages, flash segments, sample flash control blocks area 214, flash memory 200 per FBX, flash dies 201 through 210, flash blocks, flash pages, and flash segments) shown in FIG. 3. Page information 351 is, for example, contained in the first flash segment 301a11 and is shown in detail in block 303. Control data 352 is in, for example, the flash page 301a1 as similarly discussed above in the example of FIG. 3. The data 353 is in, for example, the flash pages 301a1 through 301a8 and flash pages 301b1 through 301b4 as similarly discussed above in the example of FIG. 3. The page 354, which has no data and is an erased area, is similarly discussed above at pages 301b5 through 301b8 of flash block 301b and all pages of flash block 301a and all pages of flash block 301d.


A flash block 302 is filled with control data as similarly described above. However, the notations 350 may be varied since the number of elements in FIG. 3 may increase in number and so the notations 350 are not necessarily a limiting format or not necessarily a limiting symbolic convention in an embodiment of the invention.


Reference is now made to FIGS. 4 through 10 which disclose a process of writing a control data with the collection of a modified cache line using a combination technique. The process performed in FIGS. 4 through 10 may be executed by, for example, the DMA controller 108 through the flash memory controller 106 which accesses the flash memory device 102. Therefore, a control data flushing system 200 in an embodiment of the invention can include the DMA controller 108, flash memory controller 106, and as storage device 102 which may be, for example, a flash memory device 102 or a solid state drive (SSD) 102.



FIG. 4 is a block diagram illustrating an initial state of a storage memory 409 and a cache memory 410, wherein both memory areas in the storage memory 410 and cache memory 410 contain no data, in accordance with an embodiment of the invention. As an example, the storage memory 409 is one or more of the flash memory devices 102 (FIG. 1) and the cache memory 410 can be a memory area in one of the flash devices 102, a memory area in the flash controller 106, or a memory area in another part of the flash storage module 103 (FIG. 1).


The Cache memory 410 is divided into a segment size, which is the same size as a flash segment (e.g., flash segment 204). The initial state of both memory areas 409 and 410 contains no data in FIG. 4, until the system 200 undergoes a constructing process. The size of the storage memory 409 and/or size of the cache memory 410 can be set to other suitable sizes.



FIG. 5 is a block diagram illustrating a subsequent state of the storage memory 409, wherein the storage memory 409 contains control data (generally shown as control data 505) in a plurality of flash blocks 506 in the storage memory 409, in accordance with an embodiment of the invention. The control data (or metadata) can be scattered in the storage memory 409 and would be in a volatile stored form in the cache memory 410.



FIG. 6 is a block diagram illustrating a subsequent state of the storage memory 409, wherein updates or modification request on control data are performed, in accordance with an embodiment of the invention. Updates or modifications requests are performed on the control data 611, 612, 613, and 614 in the storage memory 409. The system 200 will ask for a vacant cache memory area 615 in the cache memory 410, and the next block is identified as a Clean Cache Link List 616 in the cache memory 410.



FIG. 7 is a block diagram illustrating a subsequent state of the storage memory 409 and cache memory 410, wherein the control data is replicated from the storage memory to the cache memory, in accordance with an embodiment of the invention. Control data 717, 718, 719, and 720 (also shown as control data 611, 612, 613, and 614 in FIG. 6, respectively) is replicated from storage memory 409 to cache memory 410. As an example, control data 717, 718, 719, and 720 are symbolically represented as, “g”, “l”, “aj”, and “ap”. The Cache memory 410 holds the target data (control data that is modified) in this operation. The previous clean cache link list 616 is moved (722) to the dirty cache link list 721 so that the dirty cache link list 721 is partially changed by moving (722) the previous clean cache link list 616 to the dirty cache link list 721. Therefore, the dirty cache link list 721 in the cache memory 410 will first contain the example control data sets 723 that are symbolically represented as “aj”, “g”, “l”, and “ap”, and when the control data 717-720 are updated or modified, the previous clean link list 616 is moved (722) to the dirty cache link list 721 so that the dirty cache link list 721 is changed into the updated control data 823 of FIG. 8. Therefore, the cache memory 410 is used to update or modify the control data.



FIG. 8 is a block diagram illustrating a subsequent state of the storage memory 409 and cache memory 410, wherein the control data 823 is partially changed in the cache memory 409, in accordance with an embodiment of the invention. As discussed above, the control data 823 (in the dirty cache link list 721) has been partially changed after moving (722) the clean cache link list 616 in the cache memory 410 to the dirty cache link list 721.



FIG. 9 is a block diagram illustrating a subsequent state of the storage memory 409 and cache memory 410, wherein the dirty cache link list 721 is moved (926) to the for flush link list 925 in the cache memory 410, in accordance with an embodiment of the invention. Therefore, the cache line 922 in the for flush link list 925 (in cache memory 410) will contain the updated control data 950. Once the cache line 922 (which has the updated control data 950 is ready to be written into the storage memory 409, the dirty cache link list 721 will be moved (926) to the flush link list 725. The control data flushing system 200 will ask for a free page 924 in storage memory 409 in order to write the updated control data 950 in cache memory 410 from the for flush link list 925.



FIG. 10 is a block diagram illustrating a subsequent state of the storage memory 409 and cache memory 410, wherein the updated control data 950 is now written to the storage memory 409, in accordance with an embodiment of the invention. Control data 1027, 1028, 1029, and 1030 are the old control data that was previously modified, and the updated control data 950 are written to the new flash page 1031 in the storage memory 409. The used cache line 922 retains its control data 932 (which is also the updated control data 950 of FIG. 9) and the system 200 returns (933) to the for flush link list 925 to the clean cache memory link list 721.


An embodiment of the invention advantageously avoids the need to save the next level pointer because in this method embodiment (or algorithm) of the invention, an indicator/header representing each page is provided. During power-on and/or boot-up, the algorithm searches every page in the system so that the method determines what is represented in each header. The system performance in run-time will be faster because the algorithm does not need to update the high level pointer. In contrast with regard to a previous approach, during run-time, there is a domino effect wherein if a directory zero section is saved, the directory DIR1 (which is a pointer to the directory zero section) will also need to be updated and the DIR1 section will need to be saved because of the update to DIR1. In an algorithm in an embodiment of the invention, at I/O (input/output) time, after the directory zero section is saved, there is no need to update the DIR1 entry. The algorithm reads a small segment of each flash page where the control header is stored and thus the algorithm identifies the content of each flash page. During boot-up, the algorithm reads the control header (block 306) and during boot-up, the algorithm compares the sequence numbers and the higher sequence number is updated control data version and thus the newest directory section will have a higher SQN number. An algorithm in one embodiment of the invention advantageously avoids the logging (journaling) of a saved directory section.


Foregoing described embodiments of the invention are provided as illustrations and descriptions. They are not intended to limit the invention to precise form described. In particular, it is contemplated that functional implementation of invention described herein may be implemented equivalently in hardware, software, firmware, and/or other available functional components or building blocks, and that networks may be wired, wireless, or a combination of wired and wireless.


It is also within the scope of the present invention to implement a program or code that can be stored in a non-transient machine-readable (or non-transient computer-readable medium) having stored thereon instructions that permit a method (or that permit a computer) to perform any of the inventive techniques described above, or a program or code that can be stored in an article of manufacture that includes a non-transient computer readable medium on which computer-readable instructions for carrying out embodiments of the inventive techniques are stored. Other variations and modifications of the above-described embodiments and methods are possible in light of the teaching discussed herein.


The above description of illustrated embodiments of the invention, including what is described in the Abstract, is not intended to be exhaustive or to limit the invention to the precise forms disclosed. While specific embodiments of, and examples for, the invention are described herein for illustrative purposes, various equivalent modifications are possible within the scope of the invention, as those skilled in the relevant art will recognize.


These modifications can be made to the invention in light of the above detailed description. The terms used in the following claims should not be construed to limit the invention to the specific embodiments disclosed in the specification and the claims. Rather, the scope of the invention is to be determined entirely by the following claims, which are to be construed in accordance with established doctrines of claim interpretation.

Claims
  • 1. A method, comprising: requesting an update on a control data in at least one flash block in a storage memory;replicating, from the storage memory to a cache memory, the control data to be updated;moving a clean cache link list in the cache memory to a dirty cache link list in the cache memory so that the dirty cache link list is changed to reflect the update on the control data, wherein the dirty cache link list will first contain the control data without the update prior to moving the clean cache link list to the dirty cache link list, and wherein the dirty cache link list is changed into an updated control data after the control data is updated and the clean cache link list is moved to the dirty cache link list;moving the dirty cache link list to a for-flush link list in the cache memory so that the for-flush link list will contain the updated control data; andasking for a free flash page in the storage memory;
  • 2. The method of claim 1, wherein the cache memory is used as a temporary location for modifying the control data.
  • 3. The method of claim 1, wherein the at least one flash block comprises at least one flash page and wherein the at least one flash page comprises a control data identifier information and a control data information.
  • 4. The method of claim 1, further comprising: returning the for-flush link list to the clean cache link list in the cache memory.
  • 5. The method of claim 1, wherein the dirty cache link list is moved to the for-flush link list prior to writing the updated control data to the storage memory.
  • 6. The method of claim 1, wherein the storage memory comprises at least one solid state drive (SSD).
  • 7. The method of claim 1, wherein the storage memory comprises at least one flash memory device.
  • 8. An apparatus, comprising: a control data flushing system configured to:request an update on a control data in at least one flash block in a storage memory;replicate, from the storage memory to a cache memory, the control data to be updated;move a clean cache link list in the cache memory to a dirty cache link list in the cache memory so that the dirty cache link list is changed to reflect the update on the control data, wherein the dirty cache link list will first contain the control data without the update prior to moving the clean cache link list to the dirty cache link list, and wherein the dirty cache link list is changed into an updated control data after the control data is updated and the clean cache link list is moved to the dirty cache link list;move the dirty cache link list to a for-flush link list in the cache memory so that the for-flush link list will contain the updated control data;ask for a free flash page in the storage memory; andwrite the updated control data from the for-flush link list to the free flash page in the storage memory.
  • 9. The apparatus of claim 8, wherein the cache memory is used as a temporary location for modifying the control data.
  • 10. The apparatus of claim 8, wherein the at least one flash block comprises at least one flash page and wherein the at least one flash page comprises a control data identifier information and a control data information.
  • 11. The apparatus of claim 8, wherein the control data flushing system is configured to return the for-flush link list to the clean cache link list in the cache memory.
  • 12. The apparatus of claim 8, wherein the dirty cache link list is moved to the for-flush link list prior to writing the updated control data to the storage memory.
  • 13. The apparatus of claim 8, wherein the storage memory comprises at least one solid state drive (SSD).
  • 14. The apparatus of claim 8, wherein the storage memory comprises at least one flash memory device.
  • 15. An article of manufacture, comprising: a non-transitory computer-readable medium having stored thereon instructions operable to permit an apparatus to perform a method comprising:requesting an update on a control data in at least one flash block in a storage memory;replicating, from the storage memory to a cache memory, the control data to be updated;moving a clean cache link list in the cache memory to a dirty cache link list in the cache memory so that the dirty cache link list is changed to reflect the update on the control data, wherein the dirty cache link list will first contain the control data without the update prior to moving the clean cache link list to the dirty cache link list, and wherein the dirty cache link list is changed into an updated control data after the control data is updated and the clean cache link list is moved to the dirty cache link list;moving the dirty cache link list to a for-flush link list in the cache memory so that the for-flush link list will contain the updated control data;asking for a free flash page in the storage memory; andwriting the updated control data from the for-flush link list to the free flash page in the storage memory.
  • 16. The article of manufacture of claim 15, wherein the instructions are operable to permit the apparatus to perform a method further comprising: returning the for-flush link list to the clean cache link list in the cache memory.
  • 17. The article of manufacture of claim 15, wherein the dirty cache link list is moved to the for-flush link list prior to writing the updated control data to the storage memory.
  • 18. The article of manufacture of claim 15, wherein the storage memory comprises at least one solid state drive (SSD).
  • 19. The article of manufacture of claim 15, wherein the storage memory comprises at least one flash memory device.
  • 20. The article of manufacture of claim 15, wherein the cache memory is used as a temporary location for modifying the control data.
CROSS-REFERENCE(S) TO RELATED APPLICATIONS

This application is a continuation in part of U.S. application Ser. No. 14/690,370 which claims the benefit of and priority to U.S. Provisional Application 61/981,165, filed 17 Apr. 2014. This U.S. Provisional Application 61/981,165 and U.S. application Ser. No. 14/690,370 are hereby fully incorporated herein by reference.

US Referenced Citations (359)
Number Name Date Kind
4402040 Evett Aug 1983 A
4403283 Myntii et al. Sep 1983 A
4752871 Sparks Jun 1988 A
4967344 Scavezze et al. Oct 1990 A
5111058 Martin May 1992 A
RE34100 Hartness Oct 1992 E
5222046 Kreifels et al. Jun 1993 A
5297148 Harari et al. Mar 1994 A
5339404 Vandling, III Aug 1994 A
5341339 Wells Aug 1994 A
5371709 Fisher et al. Dec 1994 A
5379401 Robinson et al. Jan 1995 A
5388083 Assar et al. Feb 1995 A
5396468 Harari et al. Mar 1995 A
5406529 Asano Apr 1995 A
5432748 Hsu et al. Jul 1995 A
5448577 Wells et al. Sep 1995 A
5459850 Clay et al. Oct 1995 A
5479638 Assar et al. Dec 1995 A
5485595 Assar et al. Jan 1996 A
5488711 Hewitt et al. Jan 1996 A
5500826 Hsu et al. Mar 1996 A
5509134 Fandrich et al. Apr 1996 A
5513138 Manabe et al. Apr 1996 A
5524231 Brown Jun 1996 A
5530828 Kaki et al. Jun 1996 A
5535328 Harari et al. Jul 1996 A
5535356 Kim et al. Jul 1996 A
5542042 Manson Jul 1996 A
5542082 Solhjell Jul 1996 A
5548741 Watanabe Aug 1996 A
5559956 Sukegawa Sep 1996 A
5568423 Jou et al. Oct 1996 A
5568439 Harari Oct 1996 A
5572466 Sukegawa Nov 1996 A
5594883 Pricer Jan 1997 A
5602987 Harari Feb 1997 A
5603001 Sukegawa et al. Feb 1997 A
5606529 Honma et al. Feb 1997 A
5606532 Lambrache et al. Feb 1997 A
5619470 Fukumoto Apr 1997 A
5627783 Miyauchi May 1997 A
5640349 Kakinuma et al. Jun 1997 A
5644784 Peek Jul 1997 A
5682509 Kabenjian Oct 1997 A
5737742 Achiwa et al. Apr 1998 A
5765023 Leger et al. Jun 1998 A
5787466 Berliner Jul 1998 A
5796182 Martin Aug 1998 A
5799200 Brant et al. Aug 1998 A
5802554 Caceres Sep 1998 A
5818029 Thomson Oct 1998 A
5819307 Iwamoto et al. Oct 1998 A
5822251 Bruce et al. Oct 1998 A
5864653 Tavallaei et al. Jan 1999 A
5870627 O'Toole et al. Feb 1999 A
5875351 Riley Feb 1999 A
5881264 Kurosawa Mar 1999 A
5913215 Rubinstein et al. Jun 1999 A
5918033 Heeb Jun 1999 A
5930481 Benhase Jul 1999 A
5933849 Srbljic et al. Aug 1999 A
5943421 Grabon Aug 1999 A
5956743 Bruce et al. Sep 1999 A
5978866 Nain Nov 1999 A
5987621 Duso Nov 1999 A
6000006 Bruce et al. Dec 1999 A
6014709 Gulick et al. Jan 2000 A
6076137 Asnaashari Jun 2000 A
6098119 Surugucchi et al. Aug 2000 A
6128303 Bergantino Oct 2000 A
6138200 Ogilvie Oct 2000 A
6138247 McKay et al. Oct 2000 A
6151641 Herbert Nov 2000 A
6215875 Nohda Apr 2001 B1
6230269 Spies et al. May 2001 B1
6298071 Taylor et al. Oct 2001 B1
6341342 Thompson et al. Jan 2002 B1
6363441 Beniz et al. Mar 2002 B1
6363444 Platko et al. Mar 2002 B1
6397267 Chong, Jr. May 2002 B1
6404772 Beach et al. Jun 2002 B1
6452602 Morein Sep 2002 B1
6496939 Portman et al. Dec 2002 B2
6526506 Lewis Feb 2003 B1
6529416 Bruce et al. Mar 2003 B2
6557095 Henstrom Apr 2003 B1
6574142 Gelke Jun 2003 B2
6601126 Zaidi et al. Jul 2003 B1
6678754 Soulier Jan 2004 B1
6728840 Shatil Apr 2004 B1
6744635 Portman et al. Jun 2004 B2
6785746 Mahmoud et al. Aug 2004 B1
6757845 Bruce Dec 2004 B2
6857076 Klein Feb 2005 B1
6901499 Aasheim et al. May 2005 B2
6922391 King et al. Jul 2005 B1
6961805 Lakhani et al. Nov 2005 B2
6970446 Krischar et al. Nov 2005 B2
6970890 Bruce et al. Nov 2005 B1
6973546 Johnson Dec 2005 B2
6980795 Hermann et al. Dec 2005 B1
7103684 Chen et al. Sep 2006 B2
7174438 Homma et al. Feb 2007 B2
7194766 Noehring et al. Mar 2007 B2
7263006 Aritome Aug 2007 B2
7283629 Kaler et al. Oct 2007 B2
7305548 Pierce et al. Dec 2007 B2
7330954 Nangle Feb 2008 B2
7372962 Fujimoto et al. Jun 2008 B2
7386662 Kekre et al. Jun 2008 B1
7412631 Uddenberg et al. Aug 2008 B2
7415549 Vemula et al. Aug 2008 B2
7424553 Borrelli et al. Sep 2008 B1
7430650 Ross Sep 2008 B1
7474926 Carr et al. Jan 2009 B1
7478186 Onufryk et al. Jan 2009 B1
7490177 Kao Feb 2009 B2
7496699 Pope et al. Feb 2009 B2
7500063 Zohar et al. Mar 2009 B2
7506098 Arcedera et al. Mar 2009 B2
7613876 Bruce et al. Nov 2009 B2
7620748 Bruce et al. Nov 2009 B1
7620749 Biran et al. Nov 2009 B2
7624239 Bennett et al. Nov 2009 B2
7636801 Kekre et al. Dec 2009 B1
7660941 Lee et al. Feb 2010 B2
7668925 Liao et al. Feb 2010 B1
7676640 Chow Mar 2010 B2
7681188 Tirumalai et al. Mar 2010 B1
7716389 Bruce et al. May 2010 B1
7719287 Marks et al. May 2010 B2
7729370 Orcine Jun 2010 B1
7729730 Orcine et al. Jun 2010 B2
7743202 Tsai et al. Jun 2010 B2
7765359 Kang Jul 2010 B2
7877639 Hoang Jan 2011 B2
7913073 Choi Mar 2011 B2
7921237 Holland et al. Apr 2011 B1
7934052 Prins et al. Apr 2011 B2
7958295 Liao et al. Jun 2011 B1
7979614 Yang Jul 2011 B1
7996581 Bond et al. Aug 2011 B2
8010740 Arcedera et al. Oct 2011 B2
8032700 Bruce et al. Oct 2011 B2
8156279 Tanaka et al. Apr 2012 B2
8156320 Borras Apr 2012 B2
8161223 Chamseddine et al. Apr 2012 B1
8165301 Bruce et al. Apr 2012 B1
8200879 Falik et al. Jun 2012 B1
8219719 Parry et al. Jul 2012 B1
8225022 Caulkins Jul 2012 B2
8341300 Karamcheti Dec 2012 B1
8341311 Szewerenko et al. Dec 2012 B1
8375257 Hong Feb 2013 B2
8447908 Bruce et al. Apr 2013 B2
8489914 Cagno Jul 2013 B2
8510631 Wu et al. Aug 2013 B2
8560804 Bruce et al. Oct 2013 B2
8583868 Belluomini et al. Nov 2013 B2
8677042 Gupta et al. Mar 2014 B2
8707134 Takahashi et al. Apr 2014 B2
8713417 Jo Apr 2014 B2
8762609 Lam et al. Jun 2014 B1
8788725 Bruce et al. Jul 2014 B2
8832371 Uehara et al. Sep 2014 B2
8856392 Myrah et al. Oct 2014 B2
8959307 Bruce et al. Feb 2015 B1
9043669 Bruce et al. May 2015 B1
9099187 Bruce et al. Aug 2015 B2
9135190 Bruce et al. Sep 2015 B1
9147500 Kim et al. Sep 2015 B2
9158661 Blaine et al. Oct 2015 B2
9201790 Keeler Dec 2015 B2
9400617 Ponce et al. Jul 2016 B2
20010010066 Chin et al. Jul 2001 A1
20020011607 Gelke et al. Jan 2002 A1
20020013880 Gappisch et al. Jan 2002 A1
20020044486 Chan et al. Apr 2002 A1
20020073324 Hsu et al. Jun 2002 A1
20020083262 Fukuzumi Jun 2002 A1
20020083264 Coulson Jun 2002 A1
20020141244 Bruce et al. Oct 2002 A1
20030023817 Rowlands et al. Jan 2003 A1
20030065836 Pecone Apr 2003 A1
20030097248 Terashima et al. May 2003 A1
20030120864 Lee et al. Jun 2003 A1
20030126451 Gorobets Jul 2003 A1
20030131201 Khare et al. Jul 2003 A1
20030161355 Falcomato et al. Aug 2003 A1
20030163624 Matsui et al. Aug 2003 A1
20030163647 Cameron et al. Aug 2003 A1
20030163649 Kapur et al. Aug 2003 A1
20030182576 Morlang et al. Sep 2003 A1
20030188100 Solomon et al. Oct 2003 A1
20030204675 Dover et al. Oct 2003 A1
20030217202 Zilberman et al. Nov 2003 A1
20030223585 Tardo et al. Dec 2003 A1
20040073721 Goff et al. Apr 2004 A1
20040078632 Infante et al. Apr 2004 A1
20040128553 Buer et al. Jul 2004 A1
20040215868 Solomon Oct 2004 A1
20050050245 Miller et al. Mar 2005 A1
20050055481 Chou et al. Mar 2005 A1
20050078016 Neff Apr 2005 A1
20050097368 Peinado et al. May 2005 A1
20050120146 Chen et al. Jun 2005 A1
20050210149 Kimball Sep 2005 A1
20050210159 Voorhees et al. Sep 2005 A1
20050226407 Kasuya et al. Oct 2005 A1
20050240707 Hayashi et al. Oct 2005 A1
20050243610 Guha et al. Nov 2005 A1
20050289361 Sutardja Dec 2005 A1
20060004957 Hand, III et al. Jan 2006 A1
20060026329 Yu Feb 2006 A1
20060031450 Unrau et al. Feb 2006 A1
20060039406 Day et al. Feb 2006 A1
20060064520 Anand et al. Mar 2006 A1
20060095709 Achiwa May 2006 A1
20060112251 Karr et al. May 2006 A1
20060129876 Uemura Jun 2006 A1
20060173970 Pope et al. Aug 2006 A1
20060184723 Sinclair et al. Aug 2006 A1
20070019573 Nishimura Jan 2007 A1
20070028040 Sinclair Feb 2007 A1
20070058478 Murayama Mar 2007 A1
20070073922 Go et al. Mar 2007 A1
20070079017 Brink et al. Apr 2007 A1
20070083680 King et al. Apr 2007 A1
20070088864 Foster Apr 2007 A1
20070093124 Varney et al. Apr 2007 A1
20070094450 VanderWiel Apr 2007 A1
20070096785 Maeda May 2007 A1
20070121499 Pal et al. May 2007 A1
20070130439 Andersson et al. Jun 2007 A1
20070159885 Gorobets Jul 2007 A1
20070168754 Zohar et al. Jul 2007 A1
20070174493 Irish et al. Jul 2007 A1
20070174506 Tsuruta Jul 2007 A1
20070195957 Arulambalam et al. Aug 2007 A1
20070288686 Arcedera et al. Dec 2007 A1
20070288692 Bruce et al. Dec 2007 A1
20070294572 Kalwitz et al. Dec 2007 A1
20080005481 Walker Jan 2008 A1
20080052456 Ash et al. Feb 2008 A1
20080052585 LaBerge Feb 2008 A1
20080072031 Choi Mar 2008 A1
20080104264 Duerk et al. May 2008 A1
20080140724 Flynn et al. Jun 2008 A1
20080147963 Tsai et al. Jun 2008 A1
20080189466 Hemmi Aug 2008 A1
20080195800 Lee et al. Aug 2008 A1
20080218230 Shim Sep 2008 A1
20080228959 Wang Sep 2008 A1
20080276037 Chang et al. Nov 2008 A1
20080301256 McWilliams et al. Dec 2008 A1
20090028229 Cagno et al. Jan 2009 A1
20090037565 Andresen et al. Feb 2009 A1
20090055573 Ito Feb 2009 A1
20090077306 Arcedera et al. Mar 2009 A1
20090083022 Bin Mohd Nordin et al. Mar 2009 A1
20090094411 Que Apr 2009 A1
20090132620 Arakawa May 2009 A1
20090132752 Poo et al. May 2009 A1
20090150643 Jones et al. Jun 2009 A1
20090158085 Kern et al. Jun 2009 A1
20090172250 Allen et al. Jul 2009 A1
20090172261 Prins et al. Jul 2009 A1
20090172466 Royer et al. Jul 2009 A1
20090240873 Yu et al. Sep 2009 A1
20100058045 Borras et al. Mar 2010 A1
20100095053 Bruce et al. Apr 2010 A1
20100125695 Wu et al. May 2010 A1
20100250806 Devilla et al. Sep 2010 A1
20100268904 Sheffield et al. Oct 2010 A1
20100299538 Miller Nov 2010 A1
20100318706 Kobayashi Dec 2010 A1
20110022778 Schibilla et al. Jan 2011 A1
20110022783 Moshayedi Jan 2011 A1
20110022801 Flynn Jan 2011 A1
20110087833 Jones Apr 2011 A1
20110093648 Belluomini et al. Apr 2011 A1
20110113186 Bruce et al. May 2011 A1
20110133826 Jones et al. Jun 2011 A1
20110145479 Talagala et al. Jun 2011 A1
20110161568 Bruce et al. Jun 2011 A1
20110167204 Estakhri et al. Jul 2011 A1
20110173383 Gorobets Jul 2011 A1
20110197011 Suzuki et al. Aug 2011 A1
20110202709 Rychlik Aug 2011 A1
20110208901 Kim et al. Aug 2011 A1
20110208914 Winokur Aug 2011 A1
20110219150 Piccirillo et al. Sep 2011 A1
20110258405 Asaki et al. Oct 2011 A1
20110264884 Kim Oct 2011 A1
20110264949 Ikeuchi et al. Oct 2011 A1
20110270979 Schlansker et al. Nov 2011 A1
20120005405 Wu et al. Jan 2012 A1
20120005410 Ikeuchi Jan 2012 A1
20120017037 Riddle et al. Jan 2012 A1
20120079352 Frost et al. Mar 2012 A1
20120102263 Aswadhati Apr 2012 A1
20120102268 Smith et al. Apr 2012 A1
20120137050 Wang et al. May 2012 A1
20120159029 Krishnan et al. Jun 2012 A1
20120161568 Umemoto et al. Jun 2012 A1
20120173795 Schuette et al. Jul 2012 A1
20120215973 Cagno et al. Aug 2012 A1
20120249302 Szu Oct 2012 A1
20120260102 Zaks et al. Oct 2012 A1
20120271967 Hirschman Oct 2012 A1
20120303924 Ross Nov 2012 A1
20120311197 Larson et al. Dec 2012 A1
20120324277 Weston-Lewis et al. Dec 2012 A1
20130010058 Pmeroy Jan 2013 A1
20130019053 Somanache et al. Jan 2013 A1
20130073821 Flynn et al. Mar 2013 A1
20130094312 Jang et al. Apr 2013 A1
20130099838 Kim Apr 2013 A1
20130111135 Bell, Jr. et al. May 2013 A1
20130206837 Szu Aug 2013 A1
20130208546 Kim et al. Aug 2013 A1
20130212337 Maruyama Aug 2013 A1
20130212349 Maruyama Aug 2013 A1
20130212425 Blaine et al. Aug 2013 A1
20130246694 Bruce et al. Sep 2013 A1
20130254435 Shapiro et al. Sep 2013 A1
20130262750 Yamasaki et al. Oct 2013 A1
20130282933 Jokinen et al. Oct 2013 A1
20130304775 Davis et al. Nov 2013 A1
20130339578 Ohya et al. Dec 2013 A1
20130339582 Olbrich et al. Dec 2013 A1
20130346672 Sengupta et al. Dec 2013 A1
20140068177 Raghavan Mar 2014 A1
20140095803 Kim et al. Apr 2014 A1
20140104949 Bruce et al. Apr 2014 A1
20140108869 Brewerton et al. Apr 2014 A1
20140189203 Suzuki et al. Jul 2014 A1
20140258788 Maruyama Sep 2014 A1
20140285211 Raffinan Sep 2014 A1
20140331034 Ponce et al. Nov 2014 A1
20150006766 Ponce et al. Jan 2015 A1
20150012690 Bruce et al. Jan 2015 A1
20150032937 Salessi Jan 2015 A1
20150032938 Salessi Jan 2015 A1
20150067243 Salessi et al. Mar 2015 A1
20150149697 Salessi et al. May 2015 A1
20150149706 Salessi et al. May 2015 A1
20150153962 Salessi et al. Jun 2015 A1
20150169021 Salessi et al. Jun 2015 A1
20150261456 Alcantara et al. Sep 2015 A1
20150261475 Alcantara et al. Sep 2015 A1
20150261797 Alcantara et al. Sep 2015 A1
20150370670 Lu Dec 2015 A1
20150371684 Mataya Dec 2015 A1
20150378932 Souri et al. Dec 2015 A1
20160026402 Alcantara et al. Jan 2016 A1
20160027521 Lu Jan 2016 A1
20160041596 Alcantara et al. Feb 2016 A1
Foreign Referenced Citations (8)
Number Date Country
2005142859 Jun 2005 JP
2005-309847 Nov 2005 JP
436689 Dec 2005 TV
489308 Jun 2002 TW
200428219 Dec 2004 TW
I420316 Dec 2013 TW
WO 9406210 Mar 1994 WO
WO 9838568 Sep 1998 WO
Non-Patent Literature Citations (143)
Entry
Office Action for U.S. Appl. No. 13/475,878, dated Jun. 23, 2014.
Office Action for U.S. Appl. No. 13/253,912 dated Jul. 16, 2014.
Office Action for U.S. Appl. No. 12/876,113 dated Jul. 11, 2014.
Office Action for U.S. Appl. No. 12/270,626 dated Feb. 3, 2012.
Office Action for U.S. Appl. No. 12/270,626 dated Apr. 4, 2011.
Office Action for U.S. Appl. No. 12/270,626 dated Mar. 15, 2013.
Notice of Allowance/Allowability for U.S. Appl. No. 12/270,626 dated Oct. 3, 2014.
Advisory Action for U.S. Appl. No. 12/876,113 dated Oct. 16, 2014.
Office Action for U.S. Appl. No. 14/297,628 dated Jul. 17, 2015.
Office Action for U.S. Appl. No. 13/475,878 dated Dec. 4, 2014.
USPTO Notice of Allowability & attachment(s) dated Jan. 7, 2013 for U.S. Appl. No. 12/876,247.
Office Action dated Sep. 14, 2012 for U.S. Appl. No. 12/876,247.
Office Action dated Feb. 1, 2012 for U.S. Appl. No. 12/876,247.
Notice of Allowance/Allowability dated Mar. 31, 2015 for U.S. Appl. No. 13/475,878.
Office Action dated May 22, 2015 for U.S. Appl. No. 13/253,912.
Office Action for U.S. Appl. No. 12/876,113 dated Mar. 13, 2014.
Advisory Action for U.S. Appl. No. 12/876,113 dated Sep. 6, 2013.
Office Action for U.S. Appl. No. 12/876,113 dated May 14, 2013.
Office Action for U.S. Appl. No. 12/876,113 dated Dec. 21, 2012.
Security Comes to SNMP: The New SNMPv3 Proposed Internet Standard, The Internet Protocol Journal, vol. 1, No. 3, Dec. 1998.
Notice of Allowability for U.S. Appl. No. 12/882,059 dated May 30, 2013.
Notice of Allowability for U.S. Appl. No. 12/882,059 dated Feb. 14, 2013.
Office Action for U.S. Appl. No. 12/882,059 dated May 11, 2012.
Notice of Allowability for U.S. Appl. No. 14/038,684 dated Aug. 1, 2014.
Office Action for U.S. Appl. No. 14/038,684 dated Mar. 17, 2014.
Notice of Allowance/Allowability for U.S. Appl. No. 13/890,229 dated Feb. 20, 2014.
Office Action for U.S. Appl. No. 13/890,229 dated Oct. 8, 2013.
Office Action for U.S. Appl. No. 12/876,113 dated Dec. 5, 2014.
Notice of Allowance/Allowabilty for U.S. Appl. No. 12/876,113 dated Jun. 22, 2015.
Office Action for U.S. Appl. No. 14/217,249 dated Apr. 23, 2015.
Office Action for U.S. Appl. No. 14/217,467 dated Apr. 27, 2015.
Office Action for U.S. Appl. No. 14/616,700 dated Apr. 30, 2015.
Office Action for U.S. Appl. No. 14/217,436 dated Sep. 11, 2015.
Office Action for U.S. Appl. No. 13/475,878 dated Jun. 23, 2014.
Office Action for U.S. Appl. No. 12/876,113 dated Oct. 16, 2014.
Notice of Allowance for U.S. Appl. No. 12/270,626 dated Oct. 3, 2014.
Office Action for U.S. Appl. No. 12/270,626 dated May 23, 2014.
Office Action for U.S. Appl. No. 12/270,626 dated Dec. 18, 2013.
Office Action for U.S. Appl. No. 12/270,626 dated Aug. 23, 2012.
Office Action dated Sep. 11, 2015 for U.S. Appl. No. 14/217,436.
Office Action dated Sep. 24, 2015 for U.S. Appl. No. 14/217,334.
Office Action dated Sep. 18, 2015 for Taiwanese Patent Application No. 102144165.
Office Action dated Sep. 29, 2015 for U.S. Appl. No. 14/217,316.
Office Action dated Sep. 28, 2015 for U.S. Appl. No. 14/689,045.
Office Action dated Dec. 5, 2014 for U.S. Appl. No. 14/038,684.
Office Action dated Oct. 8, 2015 for U.S. Appl. No. 14/217,291.
Final Office Action dated Nov. 19, 2015 for U.S. Appl. No. 14/217,249.
Final Office Action dated Nov. 18, 2015 for U.S. Appl. No. 14/217,467.
Office Action dated Nov. 25, 2015 for U.S. Appl. No. 14/217,041.
Office Action dated Oct. 5, 2015 for Taiwanese Application No. 103105076.
Office Action dated Nov. 19, 2015 for U.S. Appl. No. 14/217,249.
Office Action dated Nov. 18, 2015 for U.S. Appl. No. 14/217,467.
Office Action dated Dec. 4, 2015 for U.S. Appl. No. 14/616,700.
Office Action dated Jun. 4, 2015 for U.S. Appl. No. 14/215,414.
Office Action dated Dec. 15, 2015 for U.S. Appl. No. 13/253,912.
Office Action dated Dec. 17, 2015 for U.S. Appl. No. 14/214,216.
Office Action dated Dec. 17, 2015 for U.S. Appl. No. 14/215,414.
Office Action dated Dec. 17, 2015 for U.S. Appl. No. 14/803,107.
Office Action dated Jan. 15, 2016 for U.S. Appl. No. 14/866,946.
Office Action dated Jan. 11, 2016 for U.S. Appl. No. 14/217,399.
Office Action dated Jan. 15, 2016 for U.S. Appl. No. 14/216,937.
Notice of Allowance and Examiner-Initiated Interview Summary, dated Jan. 29, 2016 for U.S. Appl. No. 14/297,628.
National Science Fountation,Award Abstract #1548968, SBIR Phase I: SSD In-Situ Processing, http://www.nsf.gov/awardsearch/showAward?AWD_ID=1548968 printed on Feb. 13, 2016.
http://www.design-reuse.com/news/35111/nxgn-data-intelligent-solutions.html, printed on Feb. 13, 2016.
Office Action for U.S. Appl. No. 14/217,365 dated Feb. 18, 2016.
Office Action for U.S. Appl. No. 14/217,365 dated Mar. 2, 2016.
Office Action for U.S. Appl. No. 14/690,305 dated Feb. 25, 2016.
Office Action for U.S. Appl. No. 14/217,436 dated Feb. 25, 2016.
Office Action for U.S. Appl. No. 14/217,316 dated Feb. 26, 2016.
Office Action for U.S. Appl. No. 14/215,414 dated Mar. 1, 2016.
Office Action for U.S. Appl. No. 14/616,700 dated Mar. 8, 2016.
Notice of allowance/allowability for U.S. Appl. No. 13/253,912 dated Mar. 21, 2016.
Notice of allowance/allowability for U.S. Appl. No. 14/803,107 dated Mar. 28, 2016.
Office Action for U.S. Appl. No. 14/217,334 dated Apr. 4, 2016.
Notice of allowance/allowability for U.S. Appl. No. 14/217,041 dated Apr. 11, 2016.
Office Action for U.S. Appl. No. 14/217,249 dated Apr. 21, 2016.
Notice of allowance/allowability for U.S. Appl. No. 14/217,467 dated Apr. 20, 2016.
Notice of allowance/allowability for U.S. Appl. No. 14/214,216 dated Apr. 27, 2016.
Notice of allowance/allowability for U.S. Appl. No. 14/217,436 dated May 6, 2016.
Office Action for U.S. Appl. No. 14/215,414 dated May 20, 2016.
Office Action for U.S. Appl. No. 14/616,700 dated May 20, 2016.
Office Action for U.S. Appl. No. 14/689,019 dated May 20, 2016.
Advisory Action for U.S. Appl. No. 14/217,316 dated May 19, 2016.
Advisory Action for U.S. Appl. No. 14/217,334 dated Jun. 13, 2016.
Office Action for U.S. Appl. No. 14/217,291 dated Jun. 15, 2016.
Office Action for U.S. Appl. No. 14/217,096 dated Jul. 12, 2016.
Notice of Allowance for U.S. Appl. No. 14/217,399 dated Jul. 20, 2016 (Mailed in this current application).
Office Action for U.S. Appl. No. 14/866,946 dated Jul. 29, 2016.
Notice of Allowance for U.S. Appl. No. 14/217,334 dated Jul. 29, 2016.
Office Action for U.S. Appl. No. 14/690,243 dated Aug. 11, 2016.
Office Action for U.S. Appl. No. 14/690,370 dated Aug. 12, 2016.
Office Action for U.S. Appl. No. 14/216,937 dated Aug. 15, 2016.
Working Draft American National Standard Project T10/1601-D Information Technology Serial Attached SCSI—1.1 (SAS—1.1), Mar. 13, 2004 Revision 4.
Office Action for U.S. Appl. No. 14/217,316 dated Aug. 25, 2016.
Office Action for U.S. Appl. No. 14/690,305 dated Aug. 26, 2016.
Advisory Action for U.S. Appl. No. 14/217,291 dated Sep. 9, 2016.
Advisory Action for U.S. Appl. No. 14/689,045 dated Sep. 16, 2016.
Notice of Allowance for U.S. Appl. No. 14/182,303 dated Sep. 12, 2016.
Advisory Action for U.S. Appl. No. 14/690,114 dated Sep. 12, 2016.
Notice of Allowance for U.S. Appl. No. 14/215,414 dated Sep. 23, 2016.
Advisory Action for U.S. Appl. No. 14/866,946 dated Oct. 13, 2016.
Office Action for U.S. Appl. No. 14/687,700 dated Sep. 26, 2016.
Office Action for U.S. Appl. No. 15/170,768 dated Oct. 6, 2016.
Notice of allowance/allowability for U.S. Appl. No. 14/217,365 dated Oct. 18, 2016.
Office Action for U.S. Appl. No. 14/616,700 dated Oct. 20, 2016.
Office Action for U.S. Appl. No. 14/855,245 dated Oct. 26, 2016.
Office Action for U.S. Appl. No. 14/217,249 dated Oct. 28, 2016.
Office Action for U.S. Appl. No. 14/217,399 dated Nov. 1, 2016.
Office Action for U.S. Appl. No. 14/217,291 dated Nov. 3, 2016.
Office Action for U.S. Appl. No. 14/217,947 dated Nov. 4, 2016.
Office Action for U.S. Appl. No. 14/216,627 dated Nov. 7, 2016.
Office Action for U.S. Appl. No. 14/689,019 dated Nov. 18, 2016.
Office Action for U.S. Appl. No. 14/684,399 dated Nov. 21, 2016.
Notice of Allowance for U.S. Appl. No. 14/689,045 dated Nov. 21, 2016.
Notice of Allowance for U.S. Appl. No. 14/217,334 dated Nov. 23, 2016.
Advisory Action for U.S. Appl. No. 14/690,305 dated Nov. 25, 2016.
Notice of Allowance for U.S. Appl. No. 14/217,096 dated Dec. 5, 2016.
Notice of Allowance for U.S. Appl. No. 14/217,161 dated Dec. 30, 2016.
Office Action for U.S. Appl. No. 14/866,946 dated Jan. 5, 2017.
Office Action for U.S. Appl. No. 14/688,209 dated Jan. 11, 2017.
Amazon Route 53 Developer Guide API Version Apr. 1, 2013, copyright 2017 by Amazon Web Services.
Host Bus Adapters (HBAs): What you need to know about networking workhorse by Alan Earls, Feb. 2003.
Office Action for U.S. Appl. No. 14/690,243 dated Jan. 13, 2017.
Office Action for U.S. Appl. No. 14/232,801 dated Jan. 19, 2017.
Notice of Allowance for U.S. Appl. No. 14/215,414 dated Jan. 20, 2017.
Advisory Action for U.S. Appl. No. 14/217,249 dated Jan. 26, 2017.
Notice of Allowance for U.S. Appl. No. 14/687,700 dated Jan. 27, 2016.
Office Action for U.S. Appl. No. 14/690,339 dated Feb. 3, 2017.
Office Action for U.S. Appl. No. 14/616,700 dated Feb. 9, 2017.
Notice of Allowance for U.S. Appl. No. 14/217,365 dated Feb. 10, 2017.
Office Action for U.S. Appl. No. 14/690,305 dated Feb. 10, 2017.
Office Action for U.S. Appl.No. 14/690,349 dated Feb. 8, 2017.
Advisory Action for U.S. Appl. No. 14/689,019 dated Feb. 17, 2017.
Office Action for U.S. Appl. No. 14/690,349 dated Feb. 27, 2017.
Robert Cooksey et al., A Stateless, Content-Directed Data Prefetching Mechanism, Copyright 2002 ACM.
Office Action for U.S. Appl. No. 14/866,946 dated Jul. 27 2017.
Office Action for U.S. Appl. No. 14/616,700 dated Jun. 2, 2017.
Office Action for U.S. Appl. No. 15/268,533 dated Jun. 2, 2017.
Office Action for U.S. Appl. No. 15/268,536 dated Apr. 27, 2017.
Office Action for U.S. Appl. No. 15/368,598 dated May 19, 2017.
Corrected Notice of allowability for U.S. Appl. No. 14/690,370 dated Aug. 8, 2017.
Notice of allowance/allowability for U.S. Appl. No. 14/690,370 dated Jul. 3, 2017.
Office Action for U.S. Appl. No. 14/690,370 dated Mar. 23, 2017.
Provisional Applications (4)
Number Date Country
61981165 Apr 2014 US
61981150 Apr 2014 US
61980634 Apr 2014 US
61980594 Apr 2014 US
Continuation in Parts (1)
Number Date Country
Parent 14690370 Apr 2015 US
Child 15170768 US