Flash interface for processing dataset

Information

  • Patent Grant
  • 11106373
  • Patent Number
    11,106,373
  • Date Filed
    Friday, June 7, 2019
    5 years ago
  • Date Issued
    Tuesday, August 31, 2021
    3 years ago
Abstract
Systems and methods for managing content in a flash memory. Content or data in a flash memory is overwritten when the write operation only requires bits to be set. This improves performance of the flash and extends the life of the flash memory.
Description
FIELD OF THE INVENTION

Embodiments of the invention relate to systems and methods for processing large datasets. More particularly, embodiments of the invention relate to systems and methods for interfacing and interacting with a memory device such as a flash memory device.


BACKGROUND

As the amount of data in computing systems continues to increase, there is a strong desire for improvements that allows the datasets to be efficiently processed. DRAM (Dynamic Random Access Memory) and the like are often too small to efficiently process large data sets. Algorithms that process the data out-of-core (using Hard Disk Drives (HDDs) tend to be slow.


One potential solution is to introduce flash memory into the computing systems. Flash memory is faster than HDDs and has the capacity to accelerate dataset analysis. Even though flash memory can improve the processing capability of computing systems, flash memory has several problems that impact performance.


For example, conventional data structures are designed assuming that random changes or random edits can be performed quickly and without penalty. Flash, memory, however, has a penalty associated with small edits. Small edits in a flash memory require the edited page to be copied forward to a new page. The previous page must be eventually erased before it can be reused. More specifically, data in a used area or page of a flash memory cannot be simply overwritten in a conventional flash memory. Rather, it is necessary to erase the page before writing the data. This is the reason that small edits to a page in the flash memory are simply written as a new page.


This process causes both a performance penalty and a lifespan penalty. This process results in multiple reads and writes (thus the performance penalty). The lifespan penalty occurs because flash memory can only be written or erased a limited number of times before wearing out. Further, flash memory is typically erased in large units. Systems and methods are needed to improve the performance of flash memory and to improve the lifespan of the flash memory.





BRIEF DESCRIPTION OF THE DRAWINGS

In order to describe the manner in which at least some aspects of this disclosure can be obtained, a more particular description will be rendered by reference to specific embodiments thereof which are illustrated in the appended drawings. Understanding that these drawings depict only example embodiments of the invention and are not therefore to be considered to be limiting of its scope, embodiments of the invention will be described and explained with additional specificity and detail through the use of the accompanying drawings, in which:



FIG. 1 illustrates an example of a computing system that is configured to perform overwrites in a flash memory;



FIG. 2 illustrates an example of a flash memory that is configured to perform overwrites;



FIG. 3 illustrates an example of internal logic for overwriting portions of a flash memory; and



FIG. 4 illustrates an example of an external interface for overwriting portions of a flash memory and for locking portions of the flash memory when performing overwrites.





DETAILED DESCRIPTION OF SOME EXAMPLE EMBODIMENTS

Embodiments of the invention relate to systems and methods for processing large datasets. Embodiments of the invention further relate to systems and methods for processing large datasets in a flash memory (e.g., SSD (solid state drive)). Embodiments of the invention further relate to systems and methods for controlling or managing flash memory and to interfacing with flash memory.


In a conventional flash memory, the ability to set a bit (i.e., change from a logical 0 to a logical 1) may be supported. However, changing a bit from a logical 1 to a logical 0 (unset the bit) is not supported at this level (e.g., the bit level). Rather, it is necessary to erase a larger unit in the flash memory. By way of example, flash memory may be erased in 1 megabyte units. As a result, it is not generally possible to overwrite existing data in flash. Instead, the data is written to a new location (which may have been previously erased) and the old location is marked for erasure. Embodiments of the invention enable overwrites of existing data in some instances and in various data structures. Embodiments of the invention allow data structures to be implemented in flash while reducing the number of associated erasures by overwriting some of the data.


A flash memory may include a controller and an interface (e.g., API (application programming interface)) associated with the flash memory controller. In one example, the logic of the flash memory controller is configured to perform writes to existing data (overwriting the existing data) rather than write the data to a new location and mark the old location for deletion. If necessary, the controller may cause the data to be simply written to a new location. For an overwrite operation, the controller may initially read the previous version of the page or block being written. If the changes being written only result in the setting of more logical is (or changing 0s to 1s), then the existing page or block can be overwritten. If some bits need to be unset (changed from 1s to 0s) in the flash memory, then the write may be performed normally to a new page. During this process (read-check-overwrite), the page or block may be locked.


In another example, an overwrite can be achieved using calls to a flash memory API. Calls include, by way of example, a logical-OR and a Compare-and-Swap.


During a logical-OR call, a client may provide a block of data and an address. The page (or pages depending on the size of the block of data) at that address is modified to the logical OR of its current contents with the provided block. This only requires setting additional bits. As a result, an overwrite may be performed on the current page or pages without the need to write to a new page or pages. The logical OR changes 0s in the target block that correspond to 1s in the new data to be set. It may not be necessary to perform an OR operation for each bit in the overwrite operation. It may only be necessary to identify the 0s that need to be changed to 1 s.


An overwrite may occur in flash memory by performing a logical OR operation. This operation ensures that 1 s located in a target block are unaffected while 0s are potentially changed to 1 s. The change occurs when the data being overwritten to the target block contains a 1 where the target block contains a 0. A logical OR operation between bits A and B has the possible outcomes:














A
B
OR Result

















0
0
0


0
1
1


1
0
1


1
1
1









A Compare-and-Swap call may be used for locking and thread synchronization when performing overwrites. A client provides the previous version of the block and the new version of the block. More bits are set in the new version. The flash memory, in response to the call, may atomically read the page and compare the read page/block with the previous version provided by the client. If the previous version provided by the client matches the page read from the flash memory, then the page/block is overwritten with the new version provided by the client in the call using, for example, a logical OR. Other compare-and-swap operations to the same page are blocked until the current call completes.


Embodiments of the invention further implement data structures in the flash memory such that the data structure can be updated using overwrites. This prolongs the life of the flash memory by limiting or reducing the number of erasures and can improve the performance of the flash memory. Examples of data structures include, but are not limited to, bloom filters, linked lists, hash tables, locking data structures, trees, graphs, and the like or combinations thereof.



FIG. 1 illustrates an example of a computing system that includes a flash memory and that enables pages to be overwritten from an internal perspective and an external perspective. Overwrites to existing pages (without erasing the data first) can be achieved using internal logic. An external interface, which provides access to an API, allows similar abilities to be invoked by a client. As discussed herein, changing a bit from 0 to 1 is setting a bit and changing a bit from 1 to 0 is unsetting a bit. Unsetting bits can typically only be performed by erasing an erasure unit at a time and an erasure unit may include multiple pages.



FIG. 1 illustrates a computing system 100 that includes processors 102, DRAM 104, flash memory 106, and storage 114. The computing system 100 may be configured to provide computing services such as backup services, document management, contact management, or the like. The computing system 100 can be formed of network connected devices or may be implemented as an integrated unit. The computing system 100 can be connected to a computing network.


The storage 114 may include various hardware storage devices (e.g., magnetic, optical, etc.) such as HDDs. The storage 114 can be arranged in different manners. The DRAM 104 and the flash 106 can be used as caches in the computing system 100. The DRAM, which is the fastest memory, is typically smaller than the flash memory 106. The flash memory 106 is typically smaller than the storage 114. In other embodiments, the flash 106 may be the primary storage and the storage 114 could be omitted. The flash memory 106 can be large (e.g., terabytes or larger). The computing system 100 may be configured for processing large data sets such as backup data, data lake data, or the like.


The flash memory 106 is associated with a flash controller 108 and a flash API 110. The flash controller 108 typically controls operations occurring within the flash 106 and may include its own processor and memory. The flash API 110 allows clients to make specific calls to the flash memory 106, which may be executed by the flash controller 108. The client may be any device or component (e.g., processor, memory controller, process) that interacts with the flash memory 106.


The flash controller 108 is associated with logic 112 that may be configured to interact with the data stored in the flash memory 106. The logic 112, for example, may perform overwrites, logical-ORs, compare-and-swaps, or the like.



FIG. 2 illustrates an example of a flash memory and illustrates how data may be arranged in the flash memory. FIG. 2 illustrates a flash memory 200, which is an example of the flash memory 106 shown in FIG. 1. The flash memory 200 includes erasure units, such as erasure units 202 and 212. Each erasure unit is associated with pages. Pages 204, 206, 208, and 210 are associated with the erasure unit 202 and the pages 214, 216, 218, and 220 are associated with the erasure unit 212. One of skill in the art can appreciate that the flash memory is typically much larger than illustrated.


The pages 204, 206, 208, and 210 are smaller than the erasure unit 202. By way of example only, the pages 204, 206, 208, and 210 may be 4 KB each. The erasure units 202 and 212 may be 1 MB each. Data stored in the flash memory 200 may also be arranged in containers or using other storage arrangements. However, when data is written to the flash memory 200, the data is written in pages and the pages are usually written in sequence.


In order to overwrite a page in a conventional flash, it is necessary to erase all pages in the erasure unit before writing the pages in the newly erased erasure unit or write the new page to a new location. For example, the page 208 includes data. Because the page 208 contains data, a conventional flash cannot simply write new data to the page 208. Rather, it is necessary to erase all pages 204, 206, 208, and 210 in the erasure unit 202 before new data can be written to the page 208. In fact, all pages in the erasure unit 202 would be erased. The new data could alternatively be written to a new location and the existing page or erasure unit marked for erasure.


Embodiments of the invention, in contrast, allow data to be written to the page 208 by performing an overwrite operation. In particular, embodiments of the invention allow data to be written to the page 208 or any other page in the erasure unit 202 as long as the write makes no changes so specific cells (or bits) become unset, but only changes 0 bits to 1s. This is because the flash memory 200 may allow more electrons to be stored in an individual cell (representing one bit) thus semantically changing the value from 0 to 1. Reducing the electrons to change a 1 to a 0, however, involves erasing an entire erasure unit due to the hardware constraints. Thus, data such as 0000 can be overwritten as 0101 because only 0s are being changed to 1 s. An overwrite is not permitted when attempting to change 1110 to 0010 because this involves changing 1s to 0s for this type of flash memory. In this case when changing 1s to 0s, it may be necessary to follow conventional flash memory writing procedures, which may involve writing the data to a new page and erasing the pages in the erasure unit.



FIG. 3 illustrates an example of a flash memory that includes a controller and illustrates an example of logic associated with performing an overwrite in the flash memory. FIG. 3 illustrates that the flash memory 300 may receive a write block 302 from a client (e.g., a thread, process, or the like). When the write block 302 is received, the controller may perform controller logic 304 to perform the write operation in the flash memory 300.


The write operation may include performing a method 310. The write block 302 may write to more than one page in the flash memory 300. In box 312, the controller 320 may read the target block 306. The target block 306 may be, by way of example, a previous version of the write block 302. The target block 306 may be located at a destination address included in the write request received along with the write block 302.


After reading the target block 306, the controller 320 may compare the target block 306 with the write block 302. The result of the comparison determines, in one example, whether the target block 306 can be overwritten with the write block 302 or whether the write block is written to a new location as the new block 308. The comparison may identify which bits need to be changed from 0s to 1s.


In one example, if the comparison in box 314 determines that writing the write block 302 to the target block 306 would only set bits from 0 to 1, then the target block 306 is overwritten with the write block 302 in box 316. If the comparison determines that it is necessary to reset 1s to 0s, then the write block 302 is written to a new location as the new block 308 in box 318. The target block 306 may be marked for deletion or erasure.


The logic performed in the method 310 is internal to the flash memory 300 in this example. The client associated with the write operation may not be aware of the overwrite method performed in the flash memory 300.


During the method 310 and in particular while reading the target block, comparing the target block with the write block and overwriting the target block, the page or pages associated with the target block are locked at 320 so that another client does not interfere with the method 310. A lock may be used during the overwrite method 310. The controller 320 may set aside some memory to track which regions of the flash memory 300 are locked.



FIG. 4 illustrates an example of an external interface for overwrites in a flash memory. FIG. 4 illustrates a flash memory 400, which is an example of the flash memory 106 in FIG. 1. The flash memory 400 includes a controller 406 and an API 408. The API 408 includes calls 410 including, by way of example, a logical-OR 412 and a Compare and Swap 414.


In contrast to the internal logic illustrated in FIG. 3, the API allows a client to explicitly call the API 408. The logical-OR call 412 allows a client 402 to provide a block of data and an address 404. A logical OR is performed between the page or pages at the address provided in the client request 402 with the block 416 at the specified address. This call compares or performs a logical OR with each respective bit. A logical OR has the property that it never changes a one to a zero, but zeros may be changed to one if they are ORed with a one. This operation is an overwrite that potentially replaces 0s in the block 416 to 1s. The client may be aware, prior to making the call, that the necessary updates to the block 416 can be achieved with the logical OR operation. Depending on hardware capabilities, a logical OR operation may not be required for each bit. Rather, the logical OR effectively changes 0s in to the block 416 to 1s based on the contents of the block provided in the client request 402. Thus, the logical OR may simply identify the bits to be changed to 1s and make those changes. If the hardware is configured such that an entire page is written at a time, then the page is written such that the relevant 0s are changed to 1s.


The compare and swap call 414 can be used for locking and for thread synchronization when performing overwrites. When making a compare and swap call 414, the client may provide a previous version of a block and a new version of the block. The new version may have new bits set. The controller 406 may then compare the previous version included in the request with the block 416 to insure that another client has not changed the block. If the comparison is equal, the block 416 can be overwritten (e.g., by using logical-OR operation) with the new version included in the client request 402. Other callers attempting to impact or alter block 416 will be blocked until these compare and swap operation completes. Thus, the controller 406 may also lock locations in the flash memory 400 that are being updated or changed in accordance with the controller logic or API calls 410.


The calls and logic discussed herein may be implemented with computer executable instructions and the controller 406 and/or the flash memory 400 are examples of a computing device. The calls and logic discussed herein may also be used when interacting (e.g., read/write/update) with data structures implemented in a flash memory.


The embodiments disclosed herein may include the use of a special purpose or general-purpose computer including various computer hardware or software modules, as discussed in greater detail below. A computer may include a processor and computer storage media carrying instructions that, when executed by the processor and/or caused to be executed by the processor, perform any one or more of the methods disclosed herein.


As indicated above, embodiments within the scope of the present invention also include computer storage media, which are physical media for carrying or having computer-executable instructions or data structures stored thereon. Such computer storage media can be any available physical media that can be accessed by a general purpose or special purpose computer.


By way of example, and not limitation, such computer storage media can comprise hardware such as solid state disk (SSD), RAM, ROM, EEPROM, CD-ROM, flash memory, DRAM, phase-change memory (“PCM”), or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other hardware storage devices which can be used to store program code in the form of computer-executable instructions or data structures, which can be accessed and executed by a general-purpose or special-purpose computer system to implement the disclosed functionality of the invention. Combinations of the above should also be included within the scope of computer storage media. Such media are also examples of non-transitory storage media, and non-transitory storage media also embraces cloud-based storage systems and structures, although the scope of the invention is not limited to these examples of non-transitory storage media.


Computer-executable instructions comprise, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts disclosed herein are disclosed as example forms of implementing the claims.


As used herein, the term ‘module’ or ‘component’ can refer to software objects or routines that execute on the computing system. The different components, modules, engines, and services described herein may be implemented as objects or processes that execute on the computing system, for example, as separate threads. While the system and methods described herein can be implemented in software, implementations in hardware or a combination of software and hardware are also possible and contemplated. In the present disclosure, a ‘computing entity’ may be any computing system as previously defined herein, or any module or combination of modules running on a computing system.


In at least some instances, a hardware processor is provided that is operable to carry out executable instructions for performing a method or process, such as the methods and processes disclosed herein. The hardware processor may or may not comprise an element of other hardware, such as the computing devices and systems disclosed herein. A controller may include a processor and memory and/or other computing chips.


In terms of computing environments, embodiments of the invention can be performed in client-server environments, whether network or local environments, or in any other suitable environment. Suitable operating environments for at least some embodiments of the invention include cloud computing environments where one or more of a client, server, or target virtual machine may reside and operate in a cloud environment.


The present invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.

Claims
  • 1. A device comprising: a flash memory; anda controller that includes a processor, wherein the controller is configured to write to the flash memory and to read from the flash memory;wherein the controller is configured to perform an overwrite operation is the flash memory by performing controller logic without input from a client;wherein the controller is configured to provide an interface to the client that allows the client to specify how to perform the overwrite operation in the flash memory.
  • 2. A device comprising: a flash memory; anda controller that includes a processor, wherein the controller is configured to write to the flash memory and to read from the flash memory;wherein the controller is configured to perform an overwrite operation is the flash memory by performing controller logic without input from a client;wherein the controller is configured to provide an interface to the client that allows the client to specify how to perform the overwrite operation in the flash memory;wherein the controller is configured to lock a location in the flash memory associated with an overwrite operation in the flash memory using a locking structure.
  • 3. The device of claim 2, wherein the controller is configured to overwrite the locking structure with the controller logic when locking the location.
  • 4. The device of claim 2, wherein the controller is configured to lock the location by performing a compare and swap operation after determining that data at the location has not changed been changed by comparing the data with a previous version of the data.
  • 5. The device of claim 4, wherein the controller is configured to receive the previous version of the data and a new version of the data for the overwrite operation from the client.
  • 6. The device of claim 1, wherein the controller is configured to perform a write operation to a table in memory when the overwrite operation cannot be performed.
  • 7. The device of claim 1, wherein the controller includes an external interface, wherein the controller is configured to receive a call from the client at the external interface.
  • 8. The device of claim 7, wherein the external interface comprises an application programming interface.
  • 9. The device of claim 7, wherein the call includes a data block and an address and wherein the call identifies a specific overwrite operation, the specific overwrite operation including at least one of a compare and swap operation or a logical OR operation.
  • 10. The device of claim 9, wherein the controller is configured to read the target block, compare a write block with the target block, and overwrite the target block with the write block.
  • 11. The device of claim 1, wherein the overwrite operation is performed only when sets are needed to overwrite a target block with a write block.
  • 12. The device of claim 2, wherein the controller is configured to receive a call from the client via the interface, wherein the call includes a data block and an address, and wherein the call specifies how to perform the overwrite operation.
  • 13. The device of claim 12, wherein the controller is configured to overwrite a target block with the data block.
  • 14. The device of claim 13, wherein the controller is configured to read the target block, compare the target block with the data block and overwrite the target block based on the comparison, wherein the comparison identifies bits to set.
  • 15. The device of claim 12, further comprising writing the data block to a table in a memory or to a new location in the flash memory when the overwrite operation cannot be performed.
  • 16. A method for managing a flash memory, the method comprising: performing operations on the data blocks in the flash memory by: performing an overwrite operation in the flash memory by overwriting a target block with a write block in accordance with input from a client, wherein the input specifies how to perform the overwrite operation on the target block in the flash memory;performing the overwrite operation in the flash memory on the target block by a controller when the input is not received from the client, wherein the controller determines how to perform the overwrite operation on the target block in the flash memory; andperforming a write operation to write the write block to a new location in the flash memory or to a table in a memory separate from the flash memory when the overwrite operation in the flash memory cannot be performed.
  • 17. The method of claim 16, further comprising receiving a call from the client at an external interface, wherein the call identifies the overwrite operation and includes the write block and an address of the target block.
  • 18. The method of claim 16, further comprising locking the target block such that other threads cannot access the target block until the overwrite operation is completed.
  • 19. The method of claim 16, further comprising locking the target block using a locking structure stored in the flash memory, locking the target block includes performing an overwrite operation on the locking structure stored in the flash memory.
  • 20. The method of claim 16, wherein the overwrite operation is one of a compare and swap operation or a logical OR operation, wherein the overwrite operation includes only setting bits in the target block.
US Referenced Citations (236)
Number Name Date Kind
4410946 Spencer Oct 1983 A
4513367 Chan et al. Apr 1985 A
4785395 Keeley Nov 1988 A
4905188 Chuang et al. Feb 1990 A
4942520 Langendorf Jul 1990 A
5333318 Wolf Jul 1994 A
5590320 Maxey Dec 1996 A
5630093 Holzhammer May 1997 A
5644701 Takewaki Jul 1997 A
5682497 Robinson Oct 1997 A
5684976 Soheili-Arasi Nov 1997 A
5740349 Hasbun Apr 1998 A
5761501 Lubbers Jun 1998 A
5838614 Estakhri Nov 1998 A
5907856 Estakhri May 1999 A
5909694 Gregor Jun 1999 A
5913226 Sato Jun 1999 A
5966726 Sokolov Oct 1999 A
6046936 Tsujikawa Apr 2000 A
6049672 Shiell Apr 2000 A
6058038 Osada et al. May 2000 A
6119209 Bauman Sep 2000 A
6128623 Mattis Oct 2000 A
6138209 Krolak et al. Oct 2000 A
6192450 Bauman Feb 2001 B1
6216199 DeKoning Apr 2001 B1
6272593 Dujari Aug 2001 B1
6351788 Yamazaki et al. Feb 2002 B1
6356990 Aoki et al. Mar 2002 B1
6360293 Unno Mar 2002 B1
6397292 Venkatesh et al. May 2002 B1
6510083 See Jan 2003 B1
6535949 Parker Mar 2003 B1
6594723 Chapman Jul 2003 B1
6636950 Mithal Oct 2003 B1
6807615 Wong Oct 2004 B1
6851015 Akahane Feb 2005 B2
6901499 Aasheim May 2005 B2
6965970 Mosur Nov 2005 B2
6978342 Estakhri Dec 2005 B1
7076599 Aasheim et al. Jul 2006 B2
7079448 Leconte Jul 2006 B2
7124249 Darcy Oct 2006 B1
7290109 Horil Oct 2007 B2
7325097 Darcy Jan 2008 B1
7356641 Venkiteswaran Apr 2008 B2
7433245 Otsuka Oct 2008 B2
7472205 Abe Dec 2008 B2
7533214 Aasheim May 2009 B2
7640262 Beaverson Dec 2009 B1
7652948 Lee Jan 2010 B2
7673099 Beaverson Mar 2010 B1
7702628 Luchangco Apr 2010 B1
7711923 Rogers May 2010 B2
7720892 Healey, Jr. May 2010 B1
7793047 Asano Sep 2010 B2
7870325 Joukan et al. Jan 2011 B2
7930559 Beaverson Apr 2011 B1
7996605 Koga Aug 2011 B2
8250282 Confalonieri Aug 2012 B2
8300465 Jeon Oct 2012 B2
8370575 Eichenberger et al. Feb 2013 B2
8533395 O'Connor Sep 2013 B2
8581876 Wickes et al. Nov 2013 B1
8583854 Ji Nov 2013 B2
8606604 Huber Dec 2013 B1
8634248 Sprouse Jan 2014 B1
8688650 Mutalik Apr 2014 B2
8688913 Benhase Apr 2014 B2
8738841 Olbrich May 2014 B2
8738857 Clark May 2014 B1
8793543 Tai Jul 2014 B2
8811074 Goss Aug 2014 B2
8817541 Li Aug 2014 B2
8904117 Kalekar Dec 2014 B1
8910020 Frayer Dec 2014 B2
8917559 Bisen Dec 2014 B2
8935446 Shilane Jan 2015 B1
8943282 Armangau Jan 2015 B1
9026737 Armangau May 2015 B1
9043517 Sprouse May 2015 B1
9053015 Vasilyuk Jun 2015 B2
9098420 Bulut Aug 2015 B2
9116793 Kandiraju Aug 2015 B2
9122584 Kandiraju et al. Sep 2015 B2
9135123 Armangau Sep 2015 B1
9152496 Kanade Oct 2015 B2
9171629 Kokubun Oct 2015 B1
9189402 Smaldone Nov 2015 B1
9189414 Shim Nov 2015 B1
9213603 Tiziani Dec 2015 B2
9213642 Chiu Dec 2015 B2
9251063 Nakamura Feb 2016 B2
9274954 Bairavasundaram Mar 2016 B1
9281063 Xiang Mar 2016 B2
9313271 Venkat Apr 2016 B2
9317218 Botelho Apr 2016 B1
9405682 Meshchaninov et al. Aug 2016 B2
9436403 Zhang Sep 2016 B1
9442662 Dancho Sep 2016 B2
9442670 Kruger Sep 2016 B2
9524235 Sprouse Dec 2016 B1
9535856 Coronado Jan 2017 B2
9542118 Lercari et al. Jan 2017 B1
9690507 Matthews et al. Jun 2017 B2
9690713 Khermosh Jun 2017 B1
9697267 Kadayam Jul 2017 B2
9703816 George Jul 2017 B2
9753660 Mani Sep 2017 B2
9811276 Taylor Nov 2017 B1
9870830 Jeon Jan 2018 B1
9921954 Sabbag Mar 2018 B1
9952769 Badam Apr 2018 B2
9959058 O'Brien May 2018 B1
10002073 Cai Jun 2018 B2
10037164 Wallace Jul 2018 B1
10055150 Fenol Aug 2018 B1
10055351 Wallace et al. Aug 2018 B1
10089025 Wallace et al. Oct 2018 B1
10146438 Shilane et al. Dec 2018 B1
10146851 Tee et al. Dec 2018 B2
10169122 Tee et al. Jan 2019 B2
10235397 Shilane et al. Mar 2019 B1
10243779 Tee et al. Mar 2019 B2
10261704 Shilane et al. Apr 2019 B1
10318201 Wallace Jun 2019 B2
10331561 Shilane et al. Jun 2019 B1
10353607 Wallace et al. Jul 2019 B2
10353820 Wallace et al. Jul 2019 B2
10379932 Tee et al. Aug 2019 B2
10521123 Shilane et al. Dec 2019 B2
10585610 Wallace et al. Mar 2020 B1
10628066 Wu et al. Apr 2020 B2
11048676 Shilane Jun 2021 B2
20010029564 Estakhri Oct 2001 A1
20030009623 Arimilli Jan 2003 A1
20030009637 Arimilli Jan 2003 A1
20030009639 Arimilli Jan 2003 A1
20030009641 Arimilli Jan 2003 A1
20030009643 Arimilli Jan 2003 A1
20030217227 Parthasarathy Nov 2003 A1
20040123270 Zhuang Jun 2004 A1
20050120180 Schornbach Jun 2005 A1
20050165828 Lango Jul 2005 A1
20060015768 Valine Jan 2006 A1
20060059171 Borthakur Mar 2006 A1
20060101200 Doi May 2006 A1
20060143390 Kottapalli Jun 2006 A1
20060179174 Bockhaus Aug 2006 A1
20060184744 Langston Aug 2006 A1
20070005928 Trika Jan 2007 A1
20070061504 Lee Mar 2007 A1
20070156842 Vermeulen Jul 2007 A1
20070180328 Cornwell Aug 2007 A1
20070192530 Pedersen et al. Aug 2007 A1
20070300037 Rogers Dec 2007 A1
20080046655 Bhanoo Feb 2008 A1
20080065809 Eichenberger Mar 2008 A1
20080077782 Lataille Mar 2008 A1
20080120469 Kornegay May 2008 A1
20080147714 Breternitz Jun 2008 A1
20080177700 Li Jul 2008 A1
20080183955 Yang Jul 2008 A1
20080263114 Nath Oct 2008 A1
20080266962 Jeon Oct 2008 A1
20080273400 La Rosa Nov 2008 A1
20080313132 Hao Dec 2008 A1
20090063508 Yamato Mar 2009 A1
20090216788 Rao Aug 2009 A1
20090222626 Ingle Sep 2009 A1
20090240871 Yano Sep 2009 A1
20090300265 Vyssotski Dec 2009 A1
20100023697 Kapoor Jan 2010 A1
20100070715 Waltermann Mar 2010 A1
20100082886 Kwon Apr 2010 A1
20100115182 Murugesan May 2010 A1
20100165715 Donze Jul 2010 A1
20100185807 Meng Jul 2010 A1
20100199027 Pucheral Aug 2010 A1
20100211744 Morrow Aug 2010 A1
20100229005 Herman Sep 2010 A1
20100306448 Chen Dec 2010 A1
20100332952 Chung Dec 2010 A1
20110010698 Byom Jan 2011 A1
20110022778 Schibilla Jan 2011 A1
20110072217 Hoang Mar 2011 A1
20110138105 Franceschini Jun 2011 A1
20110138132 Brueggen Jun 2011 A1
20110153953 Khemani Jun 2011 A1
20110225141 Chaudhry Sep 2011 A1
20110264865 Mobarak Oct 2011 A1
20110276780 Sengupta Nov 2011 A1
20110276781 Sengupta Nov 2011 A1
20110296110 Lilly Dec 2011 A1
20120054414 Tsai Mar 2012 A1
20120084484 Post Apr 2012 A1
20120102268 Smith Apr 2012 A1
20120110247 Eleftheriou May 2012 A1
20120215970 Shats Aug 2012 A1
20120275466 Bhadra Nov 2012 A1
20130036418 Yadappanavar Feb 2013 A1
20130103911 Bulut Apr 2013 A1
20130205089 Soerensen Aug 2013 A1
20130282964 Sengupta Oct 2013 A1
20130325817 Whitehouse Dec 2013 A1
20130339576 Liu Dec 2013 A1
20140013027 Jannyavula Venkata Jan 2014 A1
20140098619 Nazarian Apr 2014 A1
20140122818 Hayasaka May 2014 A1
20140136762 Li May 2014 A1
20140143505 Sim May 2014 A1
20140149401 Liu May 2014 A1
20140173330 Samanta Jun 2014 A1
20140215129 Kuzmin Jul 2014 A1
20140281167 Danilak Sep 2014 A1
20140281824 Oh Sep 2014 A1
20150127889 Hwang May 2015 A1
20150205722 Chiu Jul 2015 A1
20150277786 Rostock Oct 2015 A1
20150331807 Lie Nov 2015 A1
20150347291 Choi Dec 2015 A1
20150363285 Delaney Dec 2015 A1
20160041927 Jung Feb 2016 A1
20160147669 Huang May 2016 A1
20160274819 Choi Sep 2016 A1
20170060439 Harawasa Mar 2017 A1
20170091054 Delaney Mar 2017 A1
20180335948 Wallace et al. Nov 2018 A1
20190004957 Wallace et al. Jan 2019 A1
20190034100 Wallace et al. Jan 2019 A1
20190107946 Shilane et al. Apr 2019 A1
20190243565 Shilane et al. Aug 2019 A1
20190294545 Shilane et al. Sep 2019 A1
20190339882 Wallace et al. Nov 2019 A1
20190340128 Wallace et al. Nov 2019 A1
20200117359 Shilane et al. Apr 2020 A1
Non-Patent Literature Citations (50)
Entry
D. Wang, J. Tang, M. Jia, Z. Xu and H. Han, “Review of NAND Flash Information Erasure Based on Overwrite Technology,” 2020 39th Chinese Control Conference (CCC), 2020, pp. 1150-1155 (Year: 2020).
A. Berman and Y. Birk, “Integrating de-duplication and write for increased performance and endurance of Solid-State Drives,” 2010 IEEE 26-th Convention of Electrical and Electronics Engineers in Israel, 2010, p. 000821-000823 (Year: 2010).
S. Hardock, I. Petrovy, R. Gottstein and A. Buchmann, “Selective In-Place Appends for Real: Reducing Erases on Wear-prone DBMS Storage,” 2017 IEEE 33rd International Conference on Data Engineering (ICDE), 2017, pp. 1375-1376. (Year: 2017).
K. Terazono and Y. Okada, “An extended delta compression algorithm and the recovery of failed updating in embedded systems,” Data Compression Conference, 2004. Proceedings. DCC 2004, 2004, p. 570. (Year: 2004).
U.S. Appl. No. 15/196,150, filed Jun. 29, 2016, Shilane, et al.
U.S. Appl. No. 15/196,261, filed Jun. 29, 2016, Shilane, et al.
U.S. Appl. No. 16/384,591, filed Apr. 15, 2019, Shilane, et al.
CAFTL: A Content-Aware Flash Translation Layer Enhancing the Lifespan of Flash Memory based Solid State Drives; Chen et al; Proceedings of the 9th USENIX conference on File and storage technologies; Feb. 15-17, 2011; retrieved from Proceedings of the 9th USENIX conference on File and storage technologies on Jul. 15, 2017 (14 pages).
A Forest-structured Bloom Filter with flash memory; Lu et al; IEEE 27th Symposium on Mass Storage Systems and Technologies; May 23-27, 2011 (6 pages).
Algorithms in Java, Third Edition; Sedgewick, Robert; ISBN 0-201-36120-5; 2003; pp. 91-94 (4 pages).
Skip lists: a probabilistic alternative to balanced trees; Pugh, William; Communications of the ACM, vol. 33, iss. 6; 6/19990; pp. 668-676 (9 pages).
NAND Flash Memory: Challenges and Opportunities; Li et al; IEEE Computer, vol. 46, iss. 8; Aug. 2013; pp. 23-29 (Year: 2013).
Dysource: a high performance and scalable NAND flash controller architecture based on source synchronous interface; Wu et al; Proceedings of the 12th ACM International Conference on Computing Frontiers, Article No. 25; May 18-21, 2015 (Year: 2015).
Hardware/software architecture for flash memory storage systems; Min et al; Proceedings of the 14th international conference on Compilers, architectures and synthesis for embedded systems; Oct. 9-14, 2011; pp. 235-236 (Year: 2011).
A self-adjusting flash translation layer for resource-limited embedded systems; Wu, Chin-Hsien; ACM Transactions on Embedded Computing Systems, vol. 9, iss. 4, Article No. 31; Mar. 2010 (Year: 2010).
DHash: A cache-friendly TCP lookup algorithm for fast network processing; Zhang et al; 38th Conference on Local Computer Networks; Oct. 21-24, 2013; pp. 484-491 (8 pages) (Year: 2013).
A comparison of adaptive radix trees and hash tables; Alvarez et al; 31st International Conference on Data Engineering; Apr. 13-17, 2015; pp. 1227-1238 (12 pages) (Year: 2015).
A Workload-Aware Adaptive Hybrid Flash Translation Layer with an Efficient Caching Strategy; Park et al; 19th International Symposium on Modeling, Analysis & Simulation of Computer and Telecommunication Systems; Jul. 25-27, 2011; pp. 248-255 (8 pages) (Year: 2011).
B-tree indexes and CPU caches; Graefe et al; 17th International Conference on Data Engineering; Apr. 2-6, 2001; pp. 349-358 (10 pages) (Year: 2001).
History-aware page replacement algorithm for NAND flash-based consumer electronics; Lin etal.; IEEE Transactions on Consumer Electronics, vol. 62, iss. 1; Feb. 2016; pp. 23-39 (Year: 2016).
A novel hot data identification mechanism for NAND flash memory; Liu et al.; IEEE Transactions on Consumer Electronics, vol. 61, iss. 4; Nov. 2015; pp. 463-469 (Year: 2015).
Hot data identification for flash-based storage systems using multiple bloom filters; Park et al.; 27th Symposium on Mass Storage Systems and Technologies; May 23-27, 2011 (Year: 2011).
BloomFlash: Bloom Filter on Flash-Based Storage; Debnath et al.; 2011 31st International Conference on Distributed Computing Systems; Jun. 20-24, 2011; pp. 635-644 (Year: 2011).
Software Support Inside and Outside Solid-State Devices for High Performance and High Efficiency; Chen etal.; Proceedings of the IEEE, vol. 105, iss. 3; Sep. 2017; pp. 1650-1665 (Year: 2017).
A performance model and file system space allocation scheme for SSDs; Hyun etal.; IEEE 26th Symposium on Mass Storage Systems and Technologies; Mar. 3-7, 2010 (Year: 2010).
A multi-level elaborate least frequently/recently used buffer cache for flash storage systems; Noh et al.; Proceedings of the 2009 International Conference on Hybrid Information Technology , pp. 34-41; Aug. 27-29, 2009.
Implementing personal home controllers on smartphones for service-oriented home network; Tokuda et al.; IEEE 8th International Conference on Wireless and Mobile Computing, Networking and Communications, pp. 769-776; Aug. 8-10, 2012 (Year: 2012).
BloomStream: Data Temperature Identification for Flash Based Memory Storage Using Bloom Filters; Bhimani et al.; IEEE 11th International Conference on Cloud Computing; Jul. 2-7, 2018 (Year: 2018).
Optimal Bloom Filters and Adaptive Merging for LSM-Trees; Dayan et al.; ACM Transactions on Database Systems (TODS)—Best of SIGMOD 2017 Papers, vol. 43, iss. 4, Article No. 16; Dec. 2018 (Year: 2018).
Sergey Hardock, Ilia Petrov, Robert Gottstein, and Alejandro Buchmann. 2017. From In-Place Updates to In-Place Appends: Revisiting Out-of-Place Updates on Flash. ACM International Conference on Management of Data, pp. 1571-1586 (Year: 2017).
U.S. Appl. No. 15/196,110, filed Jun. 29, 2016, Wallace, et al.
U.S. Appl. No. 15/196,163, filed Jun. 29, 2016, Wallace, et al.
U.S. Appl. No. 15/196,283, filed Jun. 29, 2016, Shilane, et al.
U.S. Appl. No. 16/049,891, filed Jul. 31, 2018, Wallace, et al.
U.S. Appl. No. 16/103,499, filed Aug. 14, 2018, Wallace et al.
U.S. Appl. No. 16/146,584, filed Sep. 28, 2018, Wallace et al.
U.S. Appl. No. 16/209,054, filed Dec. 4, 2018, Shilane, et al.
U.S. Appl. No. 16/440,457, filed Jun. 13, 2019, Shilane et al.
U.S. Appl. No. 16/511,256, filed Jul. 15, 2019, Wallace, et al.
U.S. Appl. No. 16/511,261, filed Jul. 15, 2019, Wallace, et al.
Algorithms and data structures for flash memories; Gal et al.; ACM Computing Surveys, vol. 37, iss. 2, pp. 138-163; Jun. 2005 (Year: 2005).
Design and implementation of NAND Flash files system based on the double linked list; Wang et al.; 2011 International Conference on Electrical and Control Engineering; Sep. 16-18, 2011 (Year: 2011).
Hydra: A Block-Mapped Parallel Flash Memory Solid-State Disk Architecture; Seong etal.; IEEE Transactions on Computers, vol. 59, iss. 7, pp. 905-921; Jul. 2010 (Year: 2010).
A DRAM-flash index for native flash file systems; Ho et al.; 2013 International Conference on Hardware/Software Codesign and System Synthesis, pp. 1-10; Sep. 29, 2013-Oct. 4, 2013.
A sequential indexing scheme for flash-based embedded systems; Yin et al.; Proceedings of the 12th International Conference on Extending Database Technology: Advances in Database Technology, pp. 588-599; Mar. 24-26, 2009.
FlashStore: high throughput persistent key-value store; Debnath et al.; Proceedings of the VLDB Endowment, vol. 3, iss. 1-2, pp. 1414-1425; Sep. 2010.
SkimpyStash: RAM space skimpy key-value store on flash-based storage; Debnath et al.; Proceedings of the 2011 ACM SIGMOD International Conference on Management of data, pp. 25-36; Jun. 12-16, 2011.
RwHash: Rewritable Hash table for Fast Network Processing with Dynamic Membership Updates; Song et al.: ADM/IEEE Symposium on Architectures for Networking and Communications Systems; May 18-19, 2017.
A. Arelakis and P. Stenstrom, “A Case for a Value-Aware Cache,” in IEEE Computer Architecture Letters, vol. 13, No. 1, pp. 1-4, Jan.-Jun. 21, 2014, doi: 10.1109/L-CA.2012.31. (Year: 2014).
W. Jianpo, Y. Liqun and X. Qing, “Research on hash algorithm for retrieval of global multi-resolution terrain cache data,” 2010 International Conference on Audio, Language and Image Processing, 2010, pp. 980-984 (Year: 2010), Jun. 30, 2021.
Related Publications (1)
Number Date Country
20190286329 A1 Sep 2019 US
Continuations (2)
Number Date Country
Parent 16049891 Jul 2018 US
Child 16434470 US
Parent 15196110 Jun 2016 US
Child 16049891 US