Systems, methods, and media for processing sub-indirection-unit data in solid-state drives
Mechanisms, including systems, methods, and media, for processing sub-indirection unit sized data in a solid-state drive (SSD) are provided, the methods including: identifying, in a first portion of storage of the SSD, a plurality of indirection units each containing sub-indirection-unit-sized data and padding; combining the plurality of indirection units into a page-size data structure using a hardware processor; copying contents of the page-sized data structure to a second portion of storage of the SSD; and updating a data structure relating logical address of data to physical locations of data so that an entry corresponding to the sub-indirection-unit-sized data of one of the plurality of indirection units changes from having a physical address in the first portion of storage to having a physical address in the second portion of storage.
1 . A system for processing sub-indirection unit sized data in a solid-state drive (SSD), comprising:
memory; and
at least one hardware processor coupled to the memory and collectively configured to at least:
receive, from a host, a read request to read sub-indirection-unit-sized data;
in response to receiving the read request from the host, provide the sub-indirection-unit-sized data from a first portion of the storage of the SSD to the host;
after providing the sub-indirection-unit-sized data to the host:
pad the sub-indirection-unit-sized data in the first portion of the storage of the SSD;
identify, in the first portion of storage of the SSD, a plurality of indirection units each containing a corresponding set of sub-indirection-unit-sized data and padding, wherein the sub-indirection-unit-sized data is stored in the one of the plurality of indirection units;
combine the plurality of indirection units into a page-size data structure;
copy contents of the page-sized data structure to a second portion of storage of the SSD; and
update a data structure relating logical address of data to physical locations of data so that an entry corresponding to the corresponding set of sub-indirection-unit-sized data of one of the plurality of indirection units changes from having a physical address in the first portion of storage to having a physical address in the second portion of storage.
2 . The system of claim 1 , wherein the at least one hardware processor is also configured to:
receive a write request having sub-indirection-unit-sized data;
determine that the sub-indirection-unit-sized data in the write request has a size that is less than a size of an indirection unit; and
in response to determining that the sub-indirection-unit-sized data in the write request has a size that is less than the size of an indirection unit:
store the sub-indirection-unit-sized data in the first portion of the storage; and
create an entry in the data structure relating a logical address of the sub-indirection-unit-sized data in the write request to the physical address in the first portion of storage.
3 . The system of claim 2 , where storing the sub-indirection-unit-sized data in the first portion of the storage comprises copying the sub-indirection-unit-sized data from a cache of the SSD to the first portion of storage.
4 . The system of claim 3 , wherein the at least one hardware processor is also configured to pad the sub-indirection-unit-sized data after copying the sub-indirection-unit-sized data from the cache of the SSD to the first portion of storage.
5 . The system of claim 1 , wherein the first portion of the storage is random access memory.
6 . The system of claim 1 , wherein the first portion of the storage has a lower storage density than the second portion of the storage.
7 . The system of claim 1 , wherein the first portion of the storage has a faster write speed than the second portion of the storage.
8 . A method for processing sub-indirection unit sized data in a solid-state drive (SSD), comprising:
receiving, from a host, a read request to read sub-indirection-unit-sized data;
in response to receiving the read request from the host, providing the sub-indirection-unit-sized data from a first portion of the storage of the SSD to the host; and
after providing the sub-indirection-unit-sized data to the host:
pad the sub-indirection-unit-sized data in the first portion of the storage of the SSD;
identifying, in the first portion of storage of the SSD, a plurality of indirection units each containing a corresponding set of sub-indirection-unit-sized data and padding, wherein the sub-indirection-unit-sized data is stored in the one of the plurality of indirection units;
combining the plurality of indirection units into a page-size data structure using a hardware processor;
copying contents of the page-sized data structure to a second portion of storage of the SSD; and
updating a data structure relating logical address of data to physical locations of data so that an entry corresponding to the corresponding set of sub-indirection-unit-sized data of one of the plurality of indirection units changes from having a physical address in the first portion of storage to having a physical address in the second portion of storage.
9 . The method of claim 8 , further comprising:
receiving a write request having sub-indirection-unit-sized data;
determining that the sub-indirection-unit-sized data in the write request has a size that is less than a size of an indirection unit; and
in response to determining that the sub-indirection-unit-sized data in the write request has a size that is less than the size of an indirection unit:
storing the sub-indirection-unit-sized data in the first portion of the storage; and
creating an entry in the data structure relating a logical address of the sub-indirection-unit-sized data in the write request to the physical address in the first portion of storage.
10 . The method of claim 9 , where storing the sub-indirection-unit-sized data in the first portion of the storage comprises copying the sub-indirection-unit-sized data from a cache of the SSD to the first portion of storage.
11 . The method of claim 10 , further comprising padding the sub-indirection-unit-sized data after copying the sub-indirection-unit-sized data from the cache of the SSD to the first portion of storage.
12 . The method of claim 8 , wherein the first portion of the storage is random access memory.
13 . The method of claim 8 , wherein the first portion of the storage has a lower storage density than the second portion of the storage.
14 . The method of claim 8 , wherein the first portion of the storage has a faster write speed than the second portion of the storage.
15 . A non-transitory computer-readable medium containing computer executable instructions that, when executed by a processor, cause the processor to perform a method for processing sub-indirection unit sized data in a solid-state drive (SSD), the method comprising:
receiving, from a host, a read request to read sub-indirection-unit-sized data;
in response to receiving the read request from the host, providing the sub-indirection-unit-sized data from a first portion of the storage of the SSD to the host; and
after providing the sub-indirection-unit-sized data to the host:
pad the sub-indirection-unit-sized data in the first portion of the storage of the SSD;
identifying, in the first portion of storage of the SSD, a plurality of indirection units each containing a corresponding set of sub-indirection-unit-sized data and padding, wherein the sub-indirection-unit-sized data is stored in the one of the plurality of indirection units;
combining the plurality of indirection units into a page-size data structure;
copying contents of the page-sized data structure to a second portion of storage of the SSD; and
updating a data structure relating logical address of data to physical locations of data so that an entry corresponding to the corresponding set of sub-indirection-unit-sized data of one of the plurality of indirection units changes from having a physical address in the first portion of storage to having a physical address in the second portion of storage.
16 . The non-transitory computer-readable medium of claim 15 , wherein the method further comprises:
receiving a write request having sub-indirection-unit-sized data;
determining that the sub-indirection-unit-sized data in the write request has a size that is less than a size of an indirection unit; and
in response to determining that the sub-indirection-unit-sized data in the write request has a size that is less than the size of an indirection unit:
storing the sub-indirection-unit-sized data in the first portion of the storage; and
creating an entry in the data structure relating a logical address of the sub-indirection-unit-sized data in the write request to the physical address in the first portion of storage.
17 . The non-transitory computer-readable medium of claim 16 , where storing the sub-indirection-unit-sized data in the first portion of the storage comprises copying the sub-indirection-unit-sized data from a cache of the SSD to the first portion of storage.
18 . The non-transitory computer-readable medium of claim 17 , wherein the method further comprises padding the sub-indirection-unit-sized data after copying the sub-indirection-unit-sized data from the cache of the SSD to the first portion of storage.
19 . The non-transitory computer-readable medium of claim 15 , wherein the first portion of the storage is random access memory.
20 . The non-transitory computer-readable medium of claim 15 , wherein the first portion of the storage has a lower storage density than the second portion of the storage.
21 . The non-transitory computer-readable medium of claim 15 , wherein the first portion of the storage has a faster write speed than the second portion of the storage.