Systems and methods for storing data in page stripes of a flash drive
First Claim
Patent Images
1. A method of storing data to an array of flash memory devices, the method comprising:
- maintaining one or more lists of page stripes indicating at least which page stripes are available to be programmed, the one or more lists of page stripes associating, for an available page stripe, the following;
one or more physical addresses of pages or integer fractions of pages for the page stripe, wherein each page stripe comprises a fixed number of the pages or the integer fractions of the pages; and
a gear setting for the page stripe, the gear setting indicating an error correction scheme and corresponding payload size assigned to the page stripe, wherein the gear setting that is assigned to the page stripe is selected from one of a plurality of gear settings, wherein different gear settings of the plurality of gear settings vary in error correction code strength and in payload size, wherein the gear setting is selected to compensate for degradation in the performance of underlying memory cells of the page stripe;
maintaining one or more lists associating at least virtual addresses with physical addresses for data stored within the array of flash memory devices, wherein a virtual address is associated with at least one physical address;
receiving an allocation block, a virtual address identifying the allocation block, and a request for storage of the allocation block into the array of flash memory devices;
determining, based at least partly on the gear assigned to a current page stripe and an amount of data, if any, already assigned to the current page stripe, an extent to which the allocation block can be stored within an available payload of the current page stripe, wherein the current page stripe corresponds to a page stripe selected from the one or more lists of page stripes that are available to be programmed;
assigning at least a first subset of the allocation block to the payload of the selected page stripe;
storing an association of the virtual address with (a) the physical address of the current page stripe, and with (b) a starting location of the allocation block within the current page stripe;
when enough data has been collected to consider the payload of the current page stripe as full;
performing or having error correction encoding performed for the data of the payload in accordance with the gear setting associated with the current page stripe;
programming the current page stripe to the array;
associating the current page stripe with programmed page stripes;
selecting a next page stripe from the one or more lists of available page stripes for subsequent programming;
if the allocation block had not been fully assigned to the payload of the current page stripe;
assigning a remainder of the allocation block to a payload of the next page stripe; and
storing an additional association of the virtual address with the physical address of the next page stripe;
wherein the method is performed by an integrated circuit.
5 Assignments
0 Petitions
Accused Products
Abstract
Apparatus and methods provide relatively low uncorrectable bit error rates, low write amplification, long life, fast and efficient retrieval, and efficient storage density such that a solid-state drive (SSD) can be implemented using relatively inexpensive MLC Flash for an enterprise storage application. Data is stored in page stripes. The page stripes can have varying amounts of payload capacity based on selected error correction code strength. Allocation blocks can be divided into journaling cells, correspond to minimum units of data for which a journaling engine or flash translation layer has a logical-to-physical mapping.
135 Citations
21 Claims
-
1. A method of storing data to an array of flash memory devices, the method comprising:
-
maintaining one or more lists of page stripes indicating at least which page stripes are available to be programmed, the one or more lists of page stripes associating, for an available page stripe, the following; one or more physical addresses of pages or integer fractions of pages for the page stripe, wherein each page stripe comprises a fixed number of the pages or the integer fractions of the pages; and a gear setting for the page stripe, the gear setting indicating an error correction scheme and corresponding payload size assigned to the page stripe, wherein the gear setting that is assigned to the page stripe is selected from one of a plurality of gear settings, wherein different gear settings of the plurality of gear settings vary in error correction code strength and in payload size, wherein the gear setting is selected to compensate for degradation in the performance of underlying memory cells of the page stripe; maintaining one or more lists associating at least virtual addresses with physical addresses for data stored within the array of flash memory devices, wherein a virtual address is associated with at least one physical address; receiving an allocation block, a virtual address identifying the allocation block, and a request for storage of the allocation block into the array of flash memory devices; determining, based at least partly on the gear assigned to a current page stripe and an amount of data, if any, already assigned to the current page stripe, an extent to which the allocation block can be stored within an available payload of the current page stripe, wherein the current page stripe corresponds to a page stripe selected from the one or more lists of page stripes that are available to be programmed; assigning at least a first subset of the allocation block to the payload of the selected page stripe; storing an association of the virtual address with (a) the physical address of the current page stripe, and with (b) a starting location of the allocation block within the current page stripe; when enough data has been collected to consider the payload of the current page stripe as full; performing or having error correction encoding performed for the data of the payload in accordance with the gear setting associated with the current page stripe; programming the current page stripe to the array; associating the current page stripe with programmed page stripes; selecting a next page stripe from the one or more lists of available page stripes for subsequent programming; if the allocation block had not been fully assigned to the payload of the current page stripe; assigning a remainder of the allocation block to a payload of the next page stripe; and storing an additional association of the virtual address with the physical address of the next page stripe; wherein the method is performed by an integrated circuit. - View Dependent Claims (2, 3, 4, 5, 6, 7)
-
-
8. An apparatus comprising:
-
a first circuit configured to maintain one or more lists of page stripes indicating at least which page stripes are available to be programmed, the one or more lists of page stripes associating, for an available page stripe, the following; one or more physical addresses of pages or integer fractions of pages for the page stripe, wherein each page stripe comprises a fixed number of the pages or the integer fractions of the pages; and a gear setting for the page stripe, the gear setting indicating an error correction scheme and corresponding payload size assigned to the page stripe, wherein the gear setting that is assigned to the page stripe is selected from one of a plurality of gear settings, wherein different gear settings of the plurality of gear settings vary in error correction code strength and in payload size, wherein the gear setting is selected to compensate for degradation in the performance of underlying memory cells of the page stripe; the first circuit further configured to maintain one or more lists associating at least virtual addresses with physical addresses for data stored within an array of flash memory devices, wherein a virtual address is associated with at least one physical address; the first circuit further configured to receive an allocation block, a virtual address identifying the allocation block, and a request for storage of the allocation block into the array of flash memory devices; the first circuit further configured to determine, based at least partly on the gear assigned to a current page stripe and an amount of data, if any, already assigned to the current page stripe, an extent to which the allocation block can be stored within an available payload of the current page stripe, wherein the current page stripe corresponds to a page stripe selected from the one or more lists of page stripes available for programming; the first circuit further configured to assign at least a first subset of the allocation block to the payload of the selected page stripe; the first circuit further configured to store an association of the virtual address with (a) the physical address of the current page stripe, and with (b) a starting location of the allocation block within the current page stripe; when enough data has been collected to consider the payload of the current page stripe as full; a second circuit is configured to perform error correction encoding performed for the data of the payload in accordance with the gear setting associated with the current page stripe; the first circuit is configured to program the current page stripe to the array; the first circuit is configured to associate the current page stripe with programmed page stripes; the first circuit is configured to select a next page stripe from the one or more lists of available page stripes for subsequent programming; if the allocation block had not been fully assigned to the payload of the current page stripe; the first circuit is configured to assign a remainder of the allocation block to a payload of the next page stripe; and the first circuit is configured to store an additional association of the virtual address with the physical address of the next page stripe. - View Dependent Claims (9, 10, 11, 12, 13, 14)
-
-
15. An apparatus for storing data to an array of flash memory devices, the apparatus comprising:
-
a means for maintaining one or more lists of page stripes indicating at least which page stripes are available to be programmed, the one or more lists of page stripes associating, for an available page stripe, the following; one or more physical addresses of pages or integer fractions of pages for the page stripe, wherein each page stripe comprises a fixed number of the pages or the integer fractions of the pages; and a gear setting for the page stripe, the gear setting indicating an error correction scheme and corresponding payload size assigned to the page stripe, wherein the gear setting that is assigned to the page stripe is selected from one of a plurality of gear settings, wherein different gear settings of the plurality of gear settings vary in error correction code strength and in payload size, wherein the gear setting is selected to compensate for degradation in the performance of underlying memory cells of the page stripe; the maintaining means further maintaining one or more lists associating at least virtual addresses with physical addresses for data stored within the array of flash memory devices, wherein a virtual address is associated with at least one physical address; a means for receiving an allocation block, a virtual address identifying the allocation block, and a request for storage of the allocation block into the array of flash memory devices; a means for determining, based at least partly on the gear assigned to a current page stripe and an amount of data, if any, already assigned to the current page stripe, an extent to which the allocation block can be stored within an available payload of the current page stripe, wherein the current page stripe corresponds to a page stripe selected from the one or more lists of page stripes that are available to be programmed; a means for assigning at least a first subset of the allocation block to the payload of the selected page stripe; a means for storing an association of the virtual address with (a) the physical address of the current page stripe, and with (b) a starting location of the allocation block within the current page stripe; when enough data has been collected to consider the payload of the current page stripe as full; a means for performing or having error correction encoding performed for the data of the payload in accordance with the gear setting associated with the current page stripe; a means for programming the current page stripe to the array; a means for associating the current page stripe with programmed page stripes; a means for selecting a next page stripe from the one or more lists of available page stripes for subsequent programming; if the allocation block had not been fully assigned to the payload of the current page stripe; the assigning means further assigning a remainder of the allocation block to a payload of the next page stripe; and the association storing means further storing an additional association of the virtual address with the physical address of the next page stripe. - View Dependent Claims (16, 17, 18, 19, 20, 21)
-
Specification