Distributed in-storage computation-aware erasure coding system and method
A computation-aware erasure coding method aligns and chunks user data based on application-defined sizes, reducing synchronization overhead and ensuring accurate computation results in storage systems.
Patent Information
- Application Number
- JP2021089342
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2020-07-13
- Filing Date
- 2021-05-27
- Publication Date
- 2026-03-04
- Estimated Expiration
- 2041-05-27
AI Technical Summary
Existing storage systems inefficiently perform calculations due to unknown data distribution across multiple storage devices, leading to increased overhead and erroneous results in systems using erasure coding.
Implementing a computation-aware erasure coding method where user data is aligned and divided into chunks based on a chunk size setting at the application layer, with parity chunks generated and distributed efficiently, and metadata indexes are used to manage storage and computation commands.
This approach enhances in-storage computation efficiency by reducing data synchronization operations and ensuring accurate computation results by aligning data units with chunk sizes, thus improving overall system performance.
Smart Images

Figure 0007823809000001 
Figure 0007823809000002 
Figure 0007823809000003
Abstract
Description
[Technical Field]
[0001] The present invention relates to a system and method for distributed in-storage computation-aware erasure coding. [Background technology]
[0002] Storage systems use erasure coding (EC) techniques to improve reliability by protecting against accidental bit erasure. These EC techniques generate parity bits for user data that are used to regenerate the user data when it is partially erased. Storage systems implement these EC techniques in an erasure coding layer that is unknown and / or uncontrolled by the user applications that generate and / or store the user data. The EC layer is configured to divide received user data into data chunks and store the data chunks on one or more different storage devices in a manner unknown to the user applications. At the same time, storage devices configured to perform calculations on stored data are increasingly being used in storage systems. However, calculations performed on storage devices may be inefficient or produce erroneous results in systems that include an EC layer that stores user data on multiple storage devices in an unknown manner. For example, if data used for a particular calculation is stored by the EC layer across two storage devices, performing the particular calculation on one or more of the two storage devices may require data to be transmitted between the two storage devices, resulting in increased overhead associated with performing the particular calculation. Summary of the Invention [Problem to be solved by the invention]
[0003] The present invention has been made in view of the above-mentioned prior art, and an object of the present invention is to provide a system and method for performing erasure coding in a manner that is computation-in-storage aware. [Means for solving the problem]
[0004] To achieve the above object, a method according to one embodiment of the present invention includes the steps of: sending a chunk size setting from an application layer to an erasure coding layer; receiving user data at the application layer; sorting the user data based on the chunk size setting at the application layer; sending the sorted user data to the erasure coding layer; dividing the sorted user data into first data chunks and second data chunks at the erasure coding layer; generating parity chunks based on the first data chunks and the second data chunks at the erasure coding layer; and sending the first data chunks, the second data chunks, and the parity chunks from the erasure coding layer to a storage system.
[0005] In addition, a method according to one embodiment of the present invention made to achieve the above object includes a step of receiving user data at an application layer, a step of dividing the user data into first data chunks and second data chunks at the application layer, a step of generating a parity chunk based on the first data chunks and the second data chunks at the application layer, and a step of transmitting the first data chunks, the second data chunks, and the parity chunks from the application layer to a storage system.
[0006] In addition, a method according to one embodiment of the present invention made to achieve the above object includes the steps of receiving user data at an application layer, dividing the user data into first and second data chunks at the application layer, sending a notification from the application layer to an erasure coding layer, the notification identifying the first and second data chunks, generating parity chunks at the erasure coding layer based on the first and second data chunks, sending the first and second data chunks from the application layer to a storage system, and sending the parity chunks from the erasure coding layer to the storage system.
[0007] In various examples disclosed herein, a user application generates and stores metadata indexes that point to storage devices and data addresses. For example, the second and third methods include generating these metadata indexes. The user application uses the metadata indexes to generate memory accesses (including internal commands) that are sent to specific memory addresses in specific storage devices. [Effects of the Invention]
[0008] Systems and methods according to embodiments of the present invention can provide relatively more efficient in-storage computations than other systems and methods that implement erasure coding. [Brief explanation of the drawings]
[0009] [Figure 1] FIG. 1 is a diagram of a system that sets the length of data chunks, aligns data based on the length of the data chunks, and performs in-storage computation conscious erasure coding. [Figure 2]1 is a chart illustrating an example of a data hierarchy for use in a system that orders data based on chunk size. [Figure 3] FIG. 1 illustrates the distribution of in-storage compute commands in a system that aligns data based on chunk size. [Figure 4] FIG. 1 illustrates an example in which the application layer includes one or more applications. [Figure 5] FIG. 1 illustrates a method for performing in-storage computation-aware erasure coding. [Figure 6] FIG. 1 illustrates a system for performing in-storage computation-aware erasure coding in which an application layer partitions data and performs erasure coding. [Figure 7] FIG. 1 illustrates the distribution of in-storage compute commands in a system where the application layer partitions data and performs erasure coding. [Figure 8] FIG. 1 illustrates an example of a system that performs in-storage computation-aware erasure coding to generate a metadata index. [Figure 9] FIG. 10 is a diagram illustrating an example of a metadata index. [Figure 10] FIG. 10 illustrates computational commands issued to storage devices storing data chunks and devices storing parity chunks. [Figure 11] FIG. 1 illustrates a method for performing in-storage computation-aware erasure coding. [Figure 12] FIG. 1 illustrates a system for performing in-storage computation-aware erasure coding in which an application layer divides data into data chunks and an erasure coding layer generates parity chunks based on the data chunks. [Figure 13] FIG. 1 illustrates a storage method implemented by a system to perform in-storage computation-aware erasure coding. [Figure 14]FIG. 13 is a diagram of a modified version of the system of FIG. 12 in which a virtual device management layer including an EC layer is located between the application layer and the storage system. [Figure 15] FIG. 15 is a diagram of a modified version of the system of FIG. 14 in which the EC layer is located outside the Virtual Device Management layer. [Figure 16] FIG. 1 illustrates a method for performing in-storage computation-aware erasure coding. [Figure 17] FIG. 1 illustrates a computing device used to perform in-storage computation-aware erasure coding. DETAILED DESCRIPTION OF THE INVENTION
[0010] FIG. 1 is a diagram of a system that sets the length of data chunks, aligns data based on the length of the data chunks, and performs in-storage computation conscious erasure coding.
[0011] Referring to FIG. 1 , an embodiment of the present invention provides a system 100 for performing in-storage computation-aware erasure coding. The system 100 includes an application layer 102. The application layer 102 corresponds to one or more applications, a file system, or a combination thereof, executing on one or more computing devices. The system 100 further includes an erasure coding (EC) layer 104 in communication with the application layer 102. The EC layer 104 corresponds to software executing on the one or more computing devices and configured to perform EC operations, as described herein. The system 100 further includes a storage system 106 including multiple storage devices in communication with the EC layer 104. In the illustrated example, the storage system 106 includes a first storage device 106A, a second storage device 106B, a third storage device 106C, a fourth storage device 106D, a fifth storage device 106E, and a sixth storage device 106F. Each of the multiple storage devices in the storage system 106 is a computer-readable storage device including a processing unit configured to perform computations within the storage device. Examples of computer readable storage devices include solid state drives, hard drives, etc. Although six storage devices are shown in storage system 106, other examples of system 100 may include a different number of storage devices.
[0012] The application layer 102 is configured to send a chunk size setting 120 to the EC layer 104 and issue a memory access command to the EC layer 104. Examples of memory access commands include data writes, data reads, and in-storage computation commands. The EC layer 104 is configured to divide data received from the application layer 102 into data chunks based on the chunk size setting 120 received from the application layer 102 and store the chunks in the storage system 106. The EC layer 104 is further configured to store address translation data based on locations where the chunks are stored in the storage system 106. The EC layer 104 is further configured to generate parity bits based on the chunks and store the parity bits in the storage system 106. The EC layer 104 is also configured to translate addresses included in the memory access commands based on the stored address translation data. The storage system 106 is configured to store data received from the EC layer 104 , return data to the EC layer 104 in response to read requests, and perform in-storage computations based on commands received from the EC layer 104 .
[0013] In the illustrated example, the application layer 102 receives first user data 108, second user data 110, and third user data 112. The user data 108, 110, and 112 may be received via user input from an external computer system, from other sources generated by an application in the application layer 102, or a combination thereof. The application layer 102 is configured to perform data alignment on the received user data. In the illustrated example, the application layer 102 generates first aligned user data 114 based on the first user data 108, second aligned user data 116 based on the second user data 110, and third aligned user data 118 based on the third user data 112. The application layer 102 also sends a chunk size setting 120 to the EC layer 104. The chunk size setting 120 is set by the application layer 102 based on the size of data units typically operated on by the application layer 102 (or its particular application). For example, the chunk size setting 120 corresponds to the size of a page in the database (eg, 8 KB).
[0014] User data, such as the first user data 108, the second user data 110, and the third user data 112, may be larger than the size indicated by the chunk size setting 120. By aligning the user data, the application layer 102 controls how units of user data (e.g., pages, words, etc.) are divided into data chunks by the EC layer 104 (as described below). In some examples, performing data alignment includes adding padding (e.g., null values) to the user data so that one or more padded units (e.g., pages) of the user data are aligned with the chunk size setting 120. For example, the first user data 108 has a first page that is 7 KB in size and a second page that is 8 KB in size, and the chunk size setting 120 indicates a chunk size of 8 KB. Aligning the first user data 108 to generate the first aligned user data 114 includes padding the first page to a size of 8 KB (e.g., by adding null values). Thus, by dividing the first aligned user data 114 into data chunks (e.g., in the EC layer 104, as described below) based on the chunk size setting 120, a first data chunk containing a first page and a second data chunk containing a second page are obtained.
[0015] While the above example describes aligning the first user data 108 so that one padded unit (e.g., page) of user data 108 is the size of one data chunk, it should be noted that other ratios are possible. For example, the first page of user data 108 has a size of 7 KB, the second page of user data 114 has a size of 6 KB, and the third page of user data 114 has a size of 16 KB, while the chunk size setting 120 indicates a chunk size of 16 KB. Aligning the first user data 108 to generate the first aligned user data 114 includes padding the first and second pages to a size of 8 KB each, or padding the second page to a size of 9 KB so that the first and second pages are both 16 KB. Thus, by dividing the first aligned user data 114 into data chunks (e.g., at the EC layer 104) based on the chunk size setting 120, a first data chunk including a first page and a second page, and a second data chunk including a third page, are obtained.
[0016] In some examples, aligning the user data includes shifting (e.g., transposing) one or more units of user data, with or without adding padding. For example, the first user data 108 includes a first page of 4 KB, a second page of 8 KB, and a third page of 4 KB, where the chunk size is equal to 8 KB. The application layer 102 generates the first aligned user data 114 by placing the third page between the first and second pages. Thus, dividing the first aligned user data 114 into data chunks (e.g., in the EC layer 104) based on the chunk size setting 120 results in a first data chunk having the first and third pages and a second data chunk having the second data. Other data alignment methods according to the present invention are also possible.
[0017] Thus, by aligning input user data based on the chunk size setting 120, the application layer 102 controls how units of user data are divided into data chunks (e.g., by the EC layer 104, as described below) based on the chunk size setting 120. While preventing the division of data units (e.g., pages) into data chunks has been described, in some examples, data is aligned by the application layer 102 to control how data units are divided into data chunks. Padding user data input to the application layer 102 causes aligned user data output from the application layer 102 to be larger than the input user data. For example, first aligned user data 114 is larger than first user data 108. The chunk size setting 120 may be set based on application settings for applications executed by the application layer 102 based on user input, or based on some other input. Each application in the application layer 102 sends its chunk size setting 120 to the EC layer 104 for use by the EC layer 104 to divide user data from that application.
[0018] Accordingly, the EC layer 104 divides the first aligned user data 114, the second aligned user data 116, and the third aligned user data 118 based on the chunk size setting 120 to generate data aligned chunks. Each aligned data chunk has a size indicated by the chunk size setting 120. The EC layer 104 generates parity chunks based on the aligned data chunks using the EC technique and stores the parity chunks and the aligned data chunks in the storage system 106. In the illustrated example, the EC layer 104 is configured to establish a first reliability group 122, a second reliability group 124, and a third reliability group 126 in the storage system 106. In the first reliability group 122, the first aligned data chunk 128 of the first aligned user data 114 is stored in the first storage device 106A, the second aligned data chunk 130 of the first aligned user data 114 is stored in the second storage device 106B, the third aligned data chunk 132 of the first aligned user data 114 is stored in the third storage device 106C, the fourth aligned data chunk 134 of the first aligned user data 114 is stored in the fourth storage device 106D, the first parity chunk 136 is stored in the fifth storage device 106E, and the second parity chunk 138 is stored in the sixth storage device 106F. In the second reliability group 124, the second aligned data chunk 140 of the second aligned user data 116 is stored in the first storage device 106A, the third aligned data chunk 142 of the second aligned user data 116 is stored in the second storage device 106B, the first parity chunk 136 is stored in the third storage device 106C, the second parity chunk 138 is stored in the fourth storage device 106D, the first aligned data chunk 128 of the first aligned user data 114 is stored in the fifth storage device 106E, and the second aligned data chunk 130 of the first aligned user data 114 is stored in the sixth storage device 106F.In the third reliability group 126, the first parity chunk 136 is stored in the first storage device 106A, the second parity chunk 138 is stored in the second storage device 106B, the first aligned data chunk 144 of the second aligned user data 116 is stored in the third storage device 106C, the first aligned user data chunk 146 of the third aligned user data 118 is stored in the fourth storage device 106D, the second aligned data chunk 148 of the third aligned user data 118 is stored in the fifth storage device 106E, and the third aligned data chunk 150 of the third aligned user data 118 is stored in the sixth storage device 106F.
[0019] Accordingly, the application layer 102 is configured to set a chunk size setting and align user data based on the chunk size setting. The application layer 102 is configured to select a chunk size setting based on the type of processing performed by the application layer 102. For example, in response to the application layer 102 (or its application) configured to operate on page-aligned data, the application layer 102 is configured to set the chunk size setting to the page size of the data. Because the chunk size setting is selected by the application layer 102 and the user data is aligned based on the chunk size, related data is concentrated into fewer aligned data chunks (e.g., the EC layer prevents splitting a data page between two chunks). Therefore, intra-storage computation commands issued (e.g., by the EC layer 104) to the storage system 106 reduce data synchronization operations between storage devices in the storage system 106 compared to implementations in which data is not aligned based on the EC chunk size.
[0020] FIG. 2 is a chart illustrating an example of a data hierarchy for use in a system that orders data based on chunk size.
[0021] FIG. 2 illustrates an exemplary data hierarchy chart 200 for use in a system that organizes data based on chunk size. As illustrated in chart 200, database 202 is divided into multiple data files 204. Each data file 204 is further divided into multiple extents 206. Each extent is further divided into multiple pages 208. As illustrated, a system for performing in-storage computation-aware erasure coding, such as system 100, employs a chunk size 210 equal to the size of a page 208. Thus, pages of database 202 are not divided into system-generated data chunks for performing in-storage computation-aware erasure coding. Thus, in-storage computation commands (e.g., computations utilizing one or more entire data pages) result in fewer synchronization operations between storage devices, such as storage devices in storage system 106 of FIG. 1. In another example, chunk size 210 corresponds to the size of one of extents 206 or one of data files 204.
[0022] FIG. 3 is a diagram illustrating the distribution of in-storage computation commands in a system that aligns data based on chunk size.
[0023] Referring to FIG. 3, a distribution of in-storage compute commands in system 100 for performing in-storage compute-aware erasure coding is shown. In the illustrated example, application layer 102 sends a compute command 302 to EC layer 104. Computation command 302 specifies a command and an address range. EC layer 104 translates the address range into one or more translated address ranges recognized by storage devices in storage system 106. For example, EC layer 104 exposes a first virtual address space to application layer 102 and maps the virtual address range of the first virtual address space to a second virtual address range recognized by multiple storage devices in storage system 106 using offset calculations based on a chunk size configuration. Alternatively, EC layer 104 maintains a data structure that maps the virtual address range to the translated virtual address range recognized by storage system 106. The EC layer 104 updates the data structures as the data chunks 128 , 130 , 132 , 134 , 138 , 140 , 142 , 144 , 146 , 148 , 150 are stored in the storage system 106 .
[0024] The EC layer 104 generates modified commands 304, 306, 308 based on the computed command 302 by translating the address indicated by the command 302 into translated address ranges recognized by the storage devices of the storage system 106. The systems described herein use logical block addresses (LBA). In the illustrated example, the EC layer 104 maps the address range identified by the command 302 (LBAx, LBAy) to a first translated address range (LBAx', LBAa') recognized by the first storage device 106A, to a second translated address range (LBAa', LBAb') recognized by the second storage device 106B, and to a third translated address range (LBAg', LBAy') recognized by the third storage device 106C. The EC layer 104 generates a first modified command 304 by replacing the address range (LBAx', LBAy') indicated by the command 302 with a first translated address range (LBAx', LBAa') recognized by the first storage device 106A. The EC layer 104 generates a second modified command 306 by replacing the address range (LBAx, LBAy) indicated by the command 302 with a second translated address range (LBAa', LBAb') recognized by the second storage device 106B. The EC layer 104 further generates a third modified command 308 by replacing the address range (LBAx, LBAy) indicated by the command 302 with a third translated address range (LBAg', LBAy') recognized by the third storage device 106C.
[0025] It should be noted that the application layer 102 may include one or more applications. The EC layer 104 also implements multiple virtual EC devices, each exposing a different virtual address space to the application layer 102. The EC layer 104 is configured to map addresses (e.g., LBA addresses) associated with the virtual devices to addresses (e.g., LBA' addresses) recognized by the storage system 106. During operation, a particular virtual device may be mapped by the EC layer 104 to address one or more ranges of devices in the storage system 106. The EC layer 104 is configured to receive a chunk size setting (e.g., chunk size setting 120) for each virtual EC device and generate data chunks based on the chunk size setting for storage in the storage system 106, as shown in FIG. 1. Each chunk size setting is generated by a corresponding application (e.g., based on the data type on which the application operates, the type of operation the application performs, etc.).
[0026] FIG. 4 is a diagram illustrating an example in which the application layer includes one or more applications.
[0027] 4 illustrates an example in which the application layer 102 includes a first application 402, a second application 404, and a third application 406. The EC layer 104 includes a first virtual EC device 408 that exposes a first namespace 414 to the first application 402, a second virtual EC device 410 that exposes a second namespace 416 to the second application 404, and a third virtual EC device 412 that exposes a third namespace 418 to the third application 406. Each namespace 414, 416, and 418 corresponds to a translated address range in the storage system 106. Each of the virtual EC devices 408, 410, and 412 is configured to divide data into data chunks based on a data chunk size received from the application layer 102, as shown in FIG. 1. For example, the first virtual EC device 408 divides data chunks received from the first application 402 based on the chunk size setting received from the first application 402. It should be noted that although FIG. 4 shows a one-to-one correspondence between virtual devices and namespaces, in some instances, more than one virtual device is mapped to a single namespace.
[0028] Each of the virtual EC devices 408, 410, 412 is configured to translate an address range identified in an in-storage computation command into a translated address range recognized by the storage system 106, as described in Figure 3. For example, the first virtual EC device 408 receives an in-storage computation command from the first application 402 that specifies an address range within the first namespace 414. The first virtual EC device 408 translates the address range into one or more translated address ranges recognized by multiple storage devices in the storage system 106 and sends a modified version of the in-storage command (e.g., a version specifying the identified translated address) to the corresponding storage device.
[0029] Thus, Figure 4 illustrates how a system for performing in-storage computation-aware erasure coding supports multiple namespaces, each with an associated data chunk size. Other examples include a different number of applications and / or a different number of virtual EC devices. While applications 402, 404, and 406 and virtual EC devices 408, 410, and 412 are shown to have a one-to-one correspondence, it should be noted that more than one application may interact with a single virtual EC device. Similarly, a virtual EC device may interact with more than one application.
[0030] FIG. 5 illustrates a method for performing in-storage computation-aware erasure coding.
[0031] Referring to Figure 5, a method 500 for performing in-storage computation-aware erasure coding is shown. Method 500 is performed by a system for performing in-storage computation-aware erasure coding, such as system 100 of Figure 1. Method 500 includes, at 502, sending a chunk size setting from an application layer to an EC layer. For example, application layer 102 sends chunk size setting 120 to EC layer 104.
[0032] The method 500 further includes aligning data to the chunk size at the application layer and writing the aligned data to the EC layer at 504. For example, the application layer 102 aligns the first user data 108 to the chunk size indicated by the chunk size setting 120 to generate the first aligned user data 114. Aligning the first user data 108 to generate the aligned user data 114 includes having a padding data segment (e.g., a page or other data unit) within the first user data 108 to align with the chunk size indicated by the chunk size setting 120.
[0033] The method 500 further includes, at 506, dividing the aligned data into one or more data chunks at an EC layer based on the chunk size configuration, performing EC to generate parity chunks, and writing the parity chunks to a computational storage device. For example, the EC layer 104 divides the aligned user data 114 into a first data chunk 128, a second data chunk 130, and a fourth data chunk 134. The EC layer 104 writes the data chunks 128, 130, 132, and 134 to the storage system 106, generates parity chunks 136 and 138 based on the data chunks 128, 130, 132, and 134, and writes the parity chunks 136 and 138 to the storage system 106.
[0034] The method 500 further includes sending a calculation command identifying the address range from the application layer to the EC layer, at 508. For example, the application layer 102 sends the calculation command 302 to the EC layer 104. The calculation command 302 identifies the address range (e.g., LBAx, LBAy).
[0035] The method 500 further includes generating a modified command by converting the address range into one or more translated address ranges and sending the modified command to the computational storage device, at 510. For example, the EC layer 104 converts the address range LBAx, LBAy into several translated sub-ranges, including a first translated address range LBAx', LBAa' on the first storage device 106A, a second translated address range LBAa', LBAb' on the second storage device 106B, and a third translated address range LBAg', LBAy' on the third storage device 106C. The EC layer 104 sends a first modified command 304 (version) of the calculation command 302 that identifies the first translated address range to the first storage device 106A, a second modified command 306 (version) of the calculation command 302 that identifies the second translated address range to the second storage device 106B, and a third modified command 308 (version) of the calculation command 302 that identifies the third translated address range to the third storage device 106C.
[0036] Thus, the method 500 can be utilized to set a chunk size setting, to align data based on the chunk size setting, to split the aligned data into chunks based on the chunk size setting, for in-storage computations that utilize EC data chunks, and for sending computation commands to a storage device. The disclosed method 500 results in more efficient in-storage computations compared to methods that do not chunk data based on a chunk size setting set by an application layer that aligns the data.
[0037] FIG. 6 illustrates a system for performing erasure coding with in-storage computation awareness in which the application layer partitions the data and performs the erasure coding.
[0038] Referring to FIG. 6, another system 600 for performing in-storage computation-aware erasure coding is shown. The system 600 generally includes an application layer 602 corresponding to the application layer 102 of FIG. 1 and a storage system 606 corresponding to (e.g., having the same configuration as) the storage system 106 of FIG. 1. The application layer 602 is configured to divide user data into data chunks and perform EC on the data chunks rather than a separate EC layer. Because the application layer 602 divides the user data into data chunks rather than a separate EC layer, the application layer 602 generates the data chunks so that a unit of user data (e.g., a page, a word, etc.) is not split into two separate data chunks. The application layer 602 can also divide user data into unequal-sized data chunks. For example, the application layer 602 divides user data including a first 6 KB page and a second 5 KB page into a first data chunk including the first page and a second data chunk including the second page. Alternatively, the application layer 602 divides the user data into uniform-sized chunks based on a chunk size setting. The chunk size setting is set based on the size of data units (e.g., page size) frequently operated on by the application layer 602. Before dividing the user data, the application layer 602 aligns the user data based on the chunk size setting using one or more of the alignment techniques described above for the application layer 102.
[0039] In the illustrated example, the application layer 602 receives first user data 608, second user data 610, and third user data 612. The application layer 602 splits the first user data 608 into a first data chunk 628, a second data chunk 630, a third data chunk 632, and a fourth data chunk 634 and stores these data chunks 628, 630, 632, and 634 in the storage system 606. The application layer 602 further splits the second user data 610 into a first data chunk 644, a second data chunk 640, and a third data chunk 642 and stores these data chunks 644, 640, and 642 in the storage system 606. The application layer 602 further divides the third user data 612 into a first data chunk 646, a second data chunk 648, and a third data chunk 650, and stores the data chunks 646, 648, and 650 in the storage system 606. The application layer 602 also generates parity chunks 636 and 638 based on the data chunks 628, 630, 632, 634, 640, 642, 644, 646, 648, and 650, and stores the parity chunks 636 and 638 in the storage system 606.
[0040] Because the application layer 602 directly segments the data, the application layer 602 prevents data units from being split into data chunks. In the particular example shown, the application layer 602 stores and operates on text data. For example, the second user data 610 includes the text string "The Traditional EC task," and the application layer 602 is configured to issue text-based computational commands, such as a word count command, to the storage system 606 (e.g., to a particular storage device in the storage system 606) for in-storage computation. The application layer 602 generates the data chunks 644, 640, and 642 such that words are not split between the data chunks. For example, the application layer 602 splits "The" into a first data chunk 644, "Traditional EC" into a second data chunk 640, and "task" into a third data chunk 642. Thus, a word count command issued to storage system 606 for the address range corresponding to the string "The Traditional EC task" will correctly return four results because no words are double-counted as a result of being split into two chunks. In contrast, in a system including an EC layer that blindly splits unaligned data into data chunks, the string will be split into data chunks "The Traditional" and "tional EC task" and stored on two separate storage devices. A word count command issued to the two separate storage devices will yield five incorrect results because "Traditional" will be double-counted.
[0041] The system 100 can overcome this problem by aligning strings based on chunk size. For example, the application layer 102 inserts padding (e.g., null characters) into the string to generate an aligned string (e.g., second aligned user data 116) of "The\0\0\0\0\0" and "The Traditional EC task," which is then split by the EC layer 104 into a first data chunk containing "The\0\0\0\0\0" and a second data chunk containing "The Traditional EC task." Thus, an in-storage calculation of word counts performed on the data chunks by the system 100 or system 600 yields four correct results.
[0042] Figure 7 shows the distribution of in-storage compute commands in a system where the application layer partitions data and performs erasure coding.
[0043] 7, a distribution of in-storage computation commands in a system 600 for performing in-storage computation-aware erasure coding is shown. The application layer 602 is configured to issue in-storage computation commands directly to the storage system 606 (e.g., to one or more specific storage devices in the storage system 606), as shown. In the illustrated example, the application layer 602 issues a computation command 702 to a first storage device 606A for in-storage computation. The computation command 702 includes an address range of memory locations for the first storage device 606A.
[0044] The application layer 602 of the system 600 is further configured to generate and store a metadata index for the user data that is divided and stored among the storage devices 606A, 606B, 606C, .... The metadata index refers to a combination of a device identifier and an address.
[0045] FIG. 8 illustrates an example of a system that performs in-storage computation-aware erasure coding to generate a metadata index.
[0046] 8 illustrates an example of a system that performs in-storage computation-aware erasure coding to generate a metadata index. In the illustrated example, an application layer 602 generates a metadata index 802 for a first user data 608 and replicates (e.g., stores) the metadata index 802 at one or more known addresses on multiple devices 606A, 606B, 606C, .... In some embodiments, the metadata index 802 corresponds to a tree data structure or a table. Other structures are also used for the metadata index 802. In some embodiments, the application layer 602 replicates the metadata index 802 based on a hash of the index address.
[0047] In some embodiments, the application layer 602 divides the metadata index 802 into chunks and applies EC to the metadata index chunks to generate parity chunks for the metadata index 802. These metadata parity chunks are stored by the application layer 602 in the storage system 606.
[0048] In some embodiments in which the metadata index 802 corresponds to a tree structure, the application layer 602 generates parity chunks for leaf nodes of the metadata index and replicates non-leaf nodes in the storage system 606. For example, the application layer 602 combines erasure coding and replication of the metadata 902 index by erasure coding portions of the metadata 902 index (e.g., leaf nodes) that are not frequently modified and replicating portions of the metadata 902 index (e.g., non-leaf nodes) that are frequently modified.
[0049] FIG. 9 is a diagram showing an example of a metadata index.
[0050] Referring to FIG. 9, an example metadata index 802 entry structure is shown. As shown, an entry in the metadata index 802 includes metadata 902 linked to a combination of a device ID 904 and an address 906. The metadata 902 may include a file name, a database name, a database page identifier, a key name, an LBA, a virtual address, or other identifiers, or a combination thereof. The device ID 904 is an identifier for one of the storage systems 606, and the address 906 is an address within that storage device (the address may be a virtual address). Thus, the metadata index 802 identifies a device and a location within the device associated with the metadata 902. For example, the metadata 902 corresponds to the third user data 612, and the device ID 904 indicates that the first data chunk 646 of the third user data 612 is stored on the fourth device 606D. 9 illustrates an example of a metadata index used by a system for performing in-storage computation-aware erasure coding where an application layer partitions and stores data.
[0051] It should be noted that in order for the application layer to access parity chunks stored in storage system 606, application layer 602 may issue computational commands to the storage device containing the parity chunks. For example, the parity chunks generated by application layer 602 correspond to erasure codes that define code words as linear combinations of data words, and the computational commands correspond to linear calculations such as matrix multiplication. Thus, the computational commands are sent to both the data chunks and the parity chunks.
[0052] FIG. 10 is a diagram showing calculation commands issued to storage devices that store data chunks and devices that store parity chunks.
[0053] 10 illustrates an example in which the user application layer 602 stores a first user data chunk 1002 in a first storage device 606A, a second user data chunk 1004 in a second storage device 606B, and a parity chunk 1006 in a third storage device 606C. The parity chunk 1006 is used with one of the user data chunks 1002, 1004 to reconstruct the other user data chunk 1002, 1004 based on the user data chunks 1002, 1004. Thus, to perform an operation on the user data chunks 1002, 1004, the application layer 602 issues a computational command to the first storage device 606A and the second storage device 606B, to the first storage device 606A and the third storage device 606C, or to the second storage device 606B and the third storage device 606C. The application layer 602 determines the correct result of an operation on the user data chunks 1002, 1004 based on the combination of any two results.
[0054] The illustrated example shows the application layer 602 issuing a first command 1008 to a first storage device 606A, a second command 1010 to a second storage device 606B, and a third command 1012 to a third storage device 606C. The first command 1008 is sent to a first user data chunk 1002, the second command 1010 is sent to a second user data chunk 1004, and the third command 1012 is sent to a parity chunk 1006.
[0055] In some embodiments, in response to a data operation targeting particular user data, application layer 602 is configured to issue computational commands to all storage devices that store data chunks and / or parity chunks used to reconstruct the particular user data, and to use the fastest k results (e.g., the first k results returned to application layer 602) to generate the result of the data operation. For example, application layer 602 issues one or more of commands 1008, 1010, 1012 based on the relative speeds of storage devices 606A, 606B, 606C.
[0056] In some embodiments, in response to a data operation targeting particular user data, the application layer 602 is configured to issue computational commands to each storage device that stores the data chunks used and / or parity chunks that reconstruct the particular user data. For example, the application layer 602 issues a first command 1008, a second command 1010, and a third command 1012 in response to a data operation targeting user data corresponding to the first data chunk 1002 and the second data chunk 1004, and generates a result of the data operation based on the result that is returned to the application layer the fastest. For example, the application layer 602 generates a result of the data operation based on the results of the first command 1008 and the second command 1010, the results of the first command 1008 and the third command 1012, or the results of the second command 1010 and the third command 1012, in response to the result that is received first by the application layer 602.
[0057] In some embodiments, in response to a data operation targeting particular user data, the application layer 602 is configured to issue computational commands to one or more devices storing data chunks and / or parity chunks used to reconstruct the particular user data based on load. For example, in response to a data operation targeting user data corresponding to the first user data chunk 1002 and the second user data chunk 1004, the application layer 602 issues a first command 1008 to the first storage device 606A and a second command 1010 to the second storage device 606B, a first command 1008 to the first storage device 606A and a third command 1012 to the third storage device 606C, or a second command 1010 to the second storage device 606B and a third command 1012 to the third storage device 606C, based on the relative loads of the storage devices 606A, 606B, and 606C.
[0058] FIG. 11 illustrates a method for performing in-storage computation-aware erasure coding.
[0059] Referring to FIG. 11, a method 1100 for performing in-storage computation-aware erasure coding is shown. Method 1100 is performed by system 600 of FIG. 6. Method 1100 includes, at 1102, aligning data at an application layer, splitting the aligned data, performing EC to generate parity data, and writing the data and parity data to one or more computational storage devices. For example, application layer 602 aligns first user data 608 (e.g., by padding a segment of first user data 608 to a chunk size). Application layer 602 further splits first user data 608 into a first data chunk 628, a second data chunk 630, and a third data chunk 632, and generates parity chunks 636 and 638 based on the data chunks 628, 630, and 632. The application layer 602 further stores data chunks 628 , 630 , 632 and parity chunks 636 , 638 in the storage system 606 .
[0060] The method 1100 further includes generating and storing a metadata index, at 1104. For example, the application layer 602 generates the metadata index 802 that points to the device and an address (e.g., a virtual address translatable by the device) where the first data chunk 628 is stored on the device. The application layer 602 further stores the metadata index 802 in the storage system 606.
[0061] The method 1100 further includes sending one or more computational commands from the application layer to one or more computational storage devices, at 1106. For example, the application layer 602 generates one or more of the first computational command 1008, the second computational command 1010, and the third computational command 1012 in response to a data operation on the user data corresponding to the first data chunk 1002 and the second data chunk 1004. The application layer 602 processes the one or more computational commands based on the metadata index 802.
[0062] Thus, method 1100 is used to perform error coding of data and issue in-storage computation commands. Because method 1100 includes performing EC at an application layer, the application layer aligns data in data chunks generated by the EC operations in a manner that results in efficient in-storage computation. For example, the application layer aligns data in data chunks such that data segments (e.g., words, pages, etc.) are not split into chunks.
[0063] FIG. 12 illustrates a system for performing in-storage computation-aware erasure coding in which an application layer divides data into data chunks and an erasure coding layer generates parity chunks based on the data chunks.
[0064] 12, a system 1200 for performing in-storage computation-aware erasure coding is shown. In the system 1200, data is divided into chunks by an application layer, which writes the chunks to a storage device. The application layer sends notifications to the EC layer identifying the data chunks, and the EC layer generates parity chunks based on the notifications.
[0065] System 1200 includes an application layer 1202. Application layer 1202 corresponds to one or more applications and / or one or more file systems executed by one or more computing devices. System 1200 further includes an EC layer 1204. EC layer 1204 corresponds to software executing on one or more computing devices to perform the functions described herein. System 1200 further includes a storage system 1206 including multiple storage devices configured to perform in-storage computations. Storage system 1206 includes a first storage device 1206A, a second storage device 1206B, a third storage device 1206C, a fourth storage device 1206D, a fifth storage device 1206E, and a sixth storage device 1206F.
[0066] The application layer 1202 is configured to receive user data (e.g., via user input, from other applications, from other computing devices, or a combination thereof) and divide the user data into data chunks for storage. In some embodiments, the application layer 1202 is configured to align the user data before dividing. In some embodiments, the data chunks generated by the application layer 1202 are not uniform in size. For example, the application layer 1202 is configured to divide the user data based on boundaries between data units (e.g., pages) within the user data that have different lengths. The application layer 1202 is further configured to store the data chunks in the storage system 1206. The application layer 1202 is also configured to send write notifications to the EC layer 1204 indicating the data chunks to be written or written to the storage system 1206. The application layer 1202 is further configured to send computation commands to the storage system (e.g., in response to a data computation request). The application layer 1202 is also configured to send a repair request to the EC layer 1204 in response to detecting the erasure (or partial erasure) of a data chunk stored in the storage system 1206 .
[0067] The EC layer 1204 is configured to receive write notifications from the application layer 1202 and generate parity chunks based on the data chunks indicated by the write notifications. The EC layer 1204 is configured to store the parity chunks in the storage system 1206. The EC layer 1204 is also configured to regenerate data chunks identified by repair requests from the application layer 1202 based on the parity chunks.
[0068] In the illustrated example, the application layer 1202 receives first user data 1208, second user data 1210, and third user data 1212. The application layer 1202 divides the first user data 1208 into a first data chunk 1214, a second data chunk 1216, a third data chunk 1218, a fourth data chunk 1220, and a fifth data chunk 1222. As illustrated, the data chunks 1214, 1216, 1218, 1220, and 1222 are not uniform in size. The application layer 1202 is configured to divide the user data based on boundaries between data units within the user data. For example, the first user data 1208 has a first page that is 7 KB in size, a second page that is 8 KB in size, a third page that is 5 KB in size, a fourth page that is 5 KB in size, and a fifth page that is 5 KB in size. Instead of padding pages to a maximum page size (e.g., 8 KB), the application layer 1202 divides the first user data 1208 so that each page fits into chunks having the page size. For example, the first page corresponds to the first data chunk 1214, the second page corresponds to the second data chunk 1216, the third page corresponds to the third data chunk 1218, and the fourth page corresponds to the fourth data chunk 1220. The application layer 1202 writes the data chunks 1214, 1216, 1218, 1220, and 1222 to devices in the storage system 1206 using various allocation techniques (e.g., round robin, etc.).
[0069] The application layer 1202 divides the second user data 1210 into a first data chunk 1224 and a second data chunk 1226. The application layer 1202 further divides the third user data 1212 into a first data chunk 1228, a second data chunk 1230, and a third data chunk 1232. The application layer 1202 stores the data chunks 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, and 1232 in the storage system 1206. The application layer 1202 further sends one or more write notifications to the EC layer 1204 identifying the data chunks 1214, 1216, 1218, 1220, 1224, 1226, 1228, 1230, and 1232. In response to the one or more write notifications, the EC layer 1204 generates a first parity chunk 1234 and a second parity chunk 1236 based on the data chunks 1214, 1216, 1218, 1220, 1224, 1226, 1228, 1230, 1232 and stores the parity chunks 1234, 1236 in the storage system 1206. In some embodiments, the application layer 1202 is further configured to generate a metadata index, as described above with reference to Figures 8 and 9, and to store the metadata index in the storage system 1206.
[0070] If the application layer 1202 detects the erasure of one of the data chunks 1214, 1216, 1218, 1220, 1224, 1226, 1228, 1230, 1232, the application layer 1202 issues a repair request identifying the data chunk to the EC layer 1204. In response to the repair request, the EC layer 1204 recreates the erased data chunk based on one or more of the parity chunks 1234, 1236 and the remaining data chunks of the data chunk and returns the reconstructed data chunk to the application layer 1202 for storage in the storage system 1206.
[0071] Application layer 1202 is further configured to issue in-storage computation commands directly to storage system 1206 (e.g., to one or more specific storage devices within storage system 1206). As in system 600, application layer 1202 partitions (and potentially aligns) user data so that the user data is stored in storage system 1206 in a manner that enhances the efficiency of in-storage computation. For example, application layer 1202 prevents data segments (e.g., words, pages, etc.) of user data from being partitioned into data chunks stored in storage system 1206.
[0072] FIG. 13 illustrates a storage method implemented by a system for performing in-storage computation-aware erasure coding.
[0073] Referring to FIG. 13, although described and illustrated as being performed by the application layer 1202 and the EC layer 1204, the illustrated storage method may also be performed by the EC layer 104 or the application layer 602. In a first storage method, the application layer 1202 stores data chunks in a storage device dedicated to storing data chunks, and the EC layer 1204 stores parity chunks in a storage device dedicated to storing parity chunks. FIG. 13 includes a first diagram 1302 illustrating the first storage method. In the illustrated example, the application layer 1202 stores data chunks in a first storage device 1206A, a second storage device 1206B, a third storage device 1206C, and a fourth storage device 1206D. The EC layer 1204 stores parity chunks in a fifth storage device 1206E and a sixth storage device 1206F. One advantage of the first storage method is that the application layer 1202 can write data chunks to any block of the storage device dedicated to storing data chunks. Therefore, the application layer 1202 does not need to ensure that data chunks are confined to data block boundaries dedicated to storing the data chunks.
[0074] In a second storage method, the application layer 1202 and the EC layer 1204 distribute the data chunks and parity chunks (e.g., in a round-robin manner) among the storage systems 1206. An example of the second storage method is shown in a second diagram 1304 in FIG.
[0075] In some embodiments, the data chunks generated by application layer 1202 are Logical Block Addressing (LBA) aligned, while in other embodiments, the data chunks are not LBA aligned. Additionally, the storage devices of storage system 1206 are block devices or key-value devices. In embodiments in which the data chunks are not LBA aligned and the storage devices are block devices, application layer 1202 is configured to store the data chunks in a number of LBAs equal to an upper bound of the data chunk size divided by the LBA size. Alternatively, application layer 1202 is configured to pack data from different data chunks into the LBA size and generate byte-detailed index information.
[0076] Various modifications are made to the system 1200. For example, a virtual device management layer is added between the application layer 1202 and the storage system 1206.
[0077] FIG. 14 is a diagram of a modified version of the system of FIG. 12 in which a virtual device management layer including an EC layer is located between the application layer and the storage system.
[0078] Referring to FIG. 14, FIG. 14 illustrates an example of a modified version of the system of FIG. 12 (system 1400) in which a virtual device management layer 1402 is positioned between the application layer 1202 and the storage system 1206. The virtual device management layer 1402 is provided by software executing on one or more computing devices. The virtual device management layer 1402 is configured to configure the storage system 1206 by allocating a first set of blocks of the storage system as data blocks and a second set of blocks of the storage system as parity blocks. The virtual device management layer 1402 configures the storage system 1206 according to one of the storage methods described above with reference to FIG. 13. The virtual device management layer 1402 is further configured to provide access to expose one or more virtual storage devices to the application layer. The one or more virtual storage devices are mapped to the data blocks of the storage system 1206 by the virtual device management layer 1402. In the illustrated example, the virtual device management layer exposes a first virtual device 1404, a second virtual device 1406, and a third virtual device 1408 to the application layer 1202. The virtual device management layer 1402 is configured to map commands (e.g., read commands, write commands, compute commands, etc.) sent to the first virtual device 1404 to one or more data blocks in the storage system 1206. Similarly, the virtual device management layer 1402 is configured to map commands sent to the second virtual device 1406 and the third virtual device 1408 to corresponding data blocks in the storage system 1206.
[0079] The virtual device management layer 1402 further includes an EC layer 1410 that functions similarly to the EC layer 1204. As in the system 1200, the application layer 1202 is configured to divide data into data chunks and write the data chunks to the storage system 1206. However, in the system 1400, the application layer 1202 writes the data chunks to the storage system 1206 by sending a write command for one of the virtual devices 1404, 1406, or 1408 to the virtual device management layer 1402. The virtual device management layer 1402 translates the data into one or more address ranges on the storage system 1206 and notifies the EC layer 1410. The EC layer 1410 generates one or more parity chunks based on the data chunks and writes the parity chunks to one or more blocks on the storage system 1206 that are assigned to the parity blocks.
[0080] FIG. 15 is a diagram of a modified version of the system of FIG. 14 in which the EC layer is located outside the Virtual Device Management layer.
[0081] Referring to FIG. 15 , system 1500 is shown, which is a modified version of system 1400. In system 1500, EC layer 1502 is located outside virtual device management layer 1402. Virtual device management layer 1402 exposes a virtual parity device 1504 to EC layer 1502 and maps virtual addresses of virtual parity device 1504 to parity blocks in storage system 1206. Virtual device management layer 1402 is configured to send a notification to EC layer 1502 in response to a write command from application layer 1502. The notification identifies the data chunk written by the write command. EC layer 1502 is configured to generate a parity chunk based on the data chunk. EC layer 1502 is further configured to send a command to virtual device management layer 1402 to write the parity chunk to virtual parity device 1504. The virtual device management layer 1402 is configured to map commands from the EC layer 1502 to one or more parity blocks in the storage system 1206 and write parity chunks to the one or more parity blocks.
[0082] FIG. 16 illustrates a method for performing in-storage computation-aware erasure coding.
[0083] Referring to Figure 16, a method 1600 for performing in-storage computation-aware erasure coding is shown. Method 1600 is performed by system 1200 of Figure 12. Method 1600 includes, at 1602, configuring a layout of data and parity blocks on a storage device by an application layer. For example, application layer 1202 configures storage system 1206 (e.g., in a RAID configuration) to designate certain blocks of storage system 1206 as parity blocks and certain blocks as data blocks (e.g., as shown in Figure 13).
[0084] The method 1600 further includes, at 1604, ordering the data, splitting the data, and writing the data to blocks of a storage device. For example, the application layer 1202 receives the first user data 1208, orders the first user data 1208, and splits the first user data 1208 into a first data chunk 1214, a second data chunk 1216, a third data chunk 1218, a fourth data chunk 1220, and a fifth data chunk 1222. The application layer 1202 further stores the data chunks 1214, 1216, 1218, 1220, and 1222 directly on the storage system 1206.
[0085] The method 1600 further includes generating a metadata index, at 1605. For example, the application layer 1202 generates a metadata index (similar to the metadata index 802) that points to the device and address of the first data chunk 1214. The application layer 1202 stores the metadata index in multiple storage systems 1206.
[0086] The method 1600 further includes sending a notification from the application layer to the EC layer, at 1606. For example, the application layer 1202 sends a notification to the EC layer 1204 identifying the data chunks 1214, 1216, 1218, 1220, 1222.
[0087] The method 1600 further includes calculating and writing parity to a parity block at 1608. For example, the EC layer 1204 generates a first parity chunk 1234 and / or a second parity chunk 1236 based on the data chunks 1214, 1216, 1218, 1220, and 1222, and stores the first parity chunk 1234 and / or the second parity chunk 1236 in the storage system 1206.
[0088] The method 1600 further includes sending one or more computational commands from the application layer to the storage device, at 1610. For example, the application layer 1202 issues the one or more computational commands to one or more storage devices in the storage system 1206. The application layer 1202 addresses the one or more computational commands based on the metadata index.
[0089] Thus, method 1600 is used to perform error coding of data and issue in-storage computation commands. Method 1600 includes dividing data chunks at an application layer so that the application layer aligns the data in the data chunks in a manner that results in efficient in-storage computation. For example, the application layer aligns the data in the data chunks so that data segments (e.g., words, pages, etc.) are not separated by chunks.
[0090] FIG. 17 illustrates a computing device used to perform in-storage computation-aware erasure coding.
[0091] 17 illustrates a computing device 1700. One or more of the components described in the examples above may comprise a computing device, such as computing device 1700. For example, one or more of the application layers 102, 602, 1202, the EC layer 104, 1204, or a combination thereof may correspond to software executing on one or more computing devices, such as computing device 1700.
[0092] The computing device 1700 includes one or more computer-readable storage devices 1704 that store EC commands 1708. The one or more computer-readable storage devices 1704 may include a solid-state drive, a hard drive, an optical disk, random access memory, other types of computer storage, or a combination thereof. As used herein, a "computer-readable storage device" is an article of manufacture and not a transitory signal.
[0093] Computing device 1700 further includes one or more processors 1706. The one or more processors 1706 may include a central processing unit and / or other processors. EC commands 1708 are executed by the one or more processors 1706 to perform one or more of the operations described herein. Accordingly, computing device 1700 corresponds to the components (or portions thereof) described herein.
[0094] The foregoing is a description of exemplary embodiments and should not be construed as limiting thereof. While several exemplary embodiments have been described, those skilled in the art will readily appreciate that various modifications of the exemplary embodiments are possible without substantially departing from the novel teachings and advantages of the exemplary embodiments. Accordingly, all such modifications are intended to be included within the scope of the exemplary embodiments as defined in the claims. In the claims, means-plus-function clauses are intended to perform the recited function and include equivalent structures as well as structures and structural equivalents described herein. Accordingly, the foregoing is a description of exemplary embodiments and should not be construed as limited to the particular embodiments disclosed. Modifications to the disclosed exemplary embodiments and other exemplary embodiments should be understood to have the same intent as being included within the scope of the appended claims.
[0095] The terms used herein are used to describe particular embodiments only and are not intended to limit the present invention. As used herein, the singular forms "a," "an," and "the" include the plural forms unless the context clearly dictates otherwise. As used herein, the terms "comprise," "have," and the like specify the presence of disclosed features, numbers, steps, operations, elements, and / or components, but do not exclude the presence or addition of one or more other features, numbers, steps, operations, elements, components, and / or combinations thereof. As used herein, the term "and / or" includes any and all combinations of one or more associated listed items.
[0096] As used herein, when describing embodiments of the present invention, the use of "capable" refers to "one or more embodiments of the present invention." As used herein, the terms "use" and "using" can each be considered synonymous with the term "utilize."
[0097] When implementing particular embodiments differently, the order of certain processes may be different from the order described. For example, two process or method actions described in succession may be performed substantially simultaneously or may be performed in a different order than described.
[0098] Electronic or electrical devices according to embodiments of the invention described herein, and / or any other related devices or components, may be implemented using any suitable hardware, firmware (e.g., application-specific integrated circuits), software, or a combination of software, firmware, and hardware. For example, various components of these devices may be formed on a single integrated circuit (IC) chip or separate IC chips. Also, various components of these devices may be implemented on a flexible printed circuit film, tape carrier package (TCP), printed circuit board (PCB), or formed on a single substrate. Also, various components of these devices may be processes or threads running on one or more processes of one or more computing devices, executing computer program instructions and interacting with other system components to perform various functions described herein. The computer program instructions may be stored in memory implemented within the computing device using standard memory devices such as random access memory (RAM). Also, the computer program instructions may be stored on other non-transitory computer-readable media such as a CD-ROM, flash drive, etc. Furthermore, those skilled in the art should recognize that functionality of various computing devices may be combined or integrated into a single computing device, or functionality of a particular computing device may be distributed across one or more other computing devices, without departing from the spirit or scope of embodiments of the present invention.
[0099] Unless otherwise defined, all terms, including technical and scientific terms, used herein have the same meaning as commonly understood by a person of ordinary skill in the art to which the present invention belongs. Furthermore, terms defined in commonly used dictionaries are interpreted as being consistent with the meaning in the context of the relevant art and / or this specification, and are not interpreted in an ideal or overly formal sense unless clearly defined herein. [Explanation of symbols]
[0100] 100 systems 102 Application Layer 104 EC layer 106 Storage Systems 108 First User Data 110 Secondary User Data 112 Third User Data 114 First sorted user data 116 Second Sorting User Data 118 3rd Alignment User Data 120 Chunk Size Settings 122 First Reliability Group 124 Second Reliability Group 126 Third Reliability Group 128 First Data Chunk 130 Second Data Chunk 136 1st parity chunk 138 Second Parity Chunk 146 First Aligned User Data Chunk 200 charts 202 Database 204 Data Files 402, 404, 406 applications 408, 410, 412 Virtual EC device 414, 416, 418 Namespaces
Claims
1. 1. A method executed by a processor of a computing device, comprising: sending a chunk size configuration from the application layer to the erasure coding layer; receiving user data at the application layer; determining, at the application layer, data units of the user data that are to be stored together in the same chunk of a storage system; at the application layer, aligning the user data based on the chunk size setting and by padding data units determined to be stored together, the padded data units corresponding to a size indicated by the chunk size setting; transmitting the aligned user data to the erasure coding layer; Dividing the aligned user data into first data chunks and second data chunks in the erasure coding layer; generating a parity chunk based on the first data chunk and the second data chunk in the erasure coding layer; transmitting the first data chunk, the second data chunk, and the parity chunk from the erasure coding layer to the storage system; A method comprising:
2. the chunk size setting is associated with a first application; The method further comprises, by the processor: sending a second chunk size configuration from the application layer to the erasure coding layer, the second chunk size configuration associated with a second application; receiving, at the application layer, second user data associated with the second application; arranging the second user data based on the second chunk size setting in the application layer; transmitting the aligned second user data to the erasure coding layer; Dividing the aligned second user data into third data chunks and fourth data chunks in the erasure coding layer; generating a second parity chunk based on the third data chunk and the fourth data chunk in the erasure coding layer; transmitting the third data chunk, the fourth data chunk, and the second parity chunk from the erasure coding layer to the storage system; 2. The method of claim 1, comprising:
3. transmitting the first data chunk, the second data chunk, and the parity chunk from the erasure coding layer to the storage system includes transmitting the first data chunk and the parity chunk to a first storage device of the storage system. The method according to claim 1 or 2.
4. The method further comprises, by the processor: sending a calculation command from the application layer to the first storage device; the computation command includes instructing the first storage device to perform an in-storage computation based on the first data chunk. The method of claim 3.
5. transmitting the first data chunk, the second data chunk, and the parity chunk from the erasure coding layer to the storage system, transmitting the parity chunks to a storage device dedicated to storing the parity chunks; The method of claim 1.
6. The chunk size setting is selected based on the size of the data units operated on by the application layer. The method of claim 1.
7. the data unit is a database page; The method of claim 6.
8. 1. A method executed by a processor of a computing device, comprising: receiving user data at an application layer; determining, at the application layer, data units of the user data that are to be stored together in the same chunk of a storage system; padding the data units determined to be stored together, the padded data units corresponding to a size indicated by a chunk size setting; Dividing the user data into first data chunks and second data chunks at the application layer; generating a parity chunk based on the first data chunk and the second data chunk at the application layer; transmitting the first data chunk, the second data chunk, and the parity chunk from the application layer to the storage system; A method comprising:
9. the application layer stores a metadata index indicating a storage device of the storage system in which the first data chunk is stored and an address of the storage device in which the first data chunk is stored; The method of claim 8.
10. The method further comprises, by the processor: sending a computation command from the application layer to a first storage device; the computation command includes instructing the first storage device to perform an in-storage computation based on the first data chunk; 10. The method of claim 9.
11. The method further comprises, by the processor: addressing the computational command at the application layer based on the metadata index; The method of claim 10.
12. The step of transmitting the first data chunk, the second data chunk, and the parity chunk from the application layer to the storage system includes: transmitting the first data chunk and the parity chunk to a first storage device of the storage system; The method of claim 8.
13. The step of transmitting the first data chunk, the second data chunk, and the parity chunk from the application layer to the storage system includes: transmitting the parity chunks to a storage device dedicated to storing the parity chunks; The method of claim 8.
14. 1. A method executed by a processor of a computing device, comprising: receiving user data at an application layer; determining, at the application layer, data units of the user data that are to be stored together in the same chunk of a storage system; padding the data units determined to be stored together, the padded data units corresponding to a size indicated by a chunk size setting; Dividing the user data into first data chunks and second data chunks at the application layer; sending a notification from the application layer to an erasure coding layer identifying the first data chunk and the second data chunk; generating a parity chunk based on the first data chunk and the second data chunk in the erasure coding layer; transmitting the first data chunk and the second data chunk from the application layer to the storage system; transmitting the parity chunks from the erasure coding layer to the storage system; A method comprising:
15. the application layer stores a metadata index indicating a storage device of the storage system in which the first data chunk is stored and an address of the storage device in which the first data chunk is stored; 15. The method of claim 14.
16. The method further comprises, by the processor: sending a computation command from the application layer to the storage device; the computation command instructs the storage device to perform an in-storage computation based on the first data chunk; 16. The method of claim 15.
17. The method further comprises, by the processor: addressing the computational command at the application layer based on the metadata index; 17. The method of claim 16.
18. the parity chunk and the first data chunk are sent to a first storage device of the storage system.
15. The method of claim 14.
19. the parity chunks are sent to a storage device dedicated to storing parity chunks; 15. The method of claim 14.
Citation Information
Patent Citations
Method and device for file management
JP1995230361A
Information storage device
JP2003150323A
Information processing apparatus, raid control method, and raid control program
JP2017191430A
Methods of utilizing virtual device layer to store and read objects in virtual device including plural memory devices, and storage device employing the same
JP2018156656A
Error detection using data block mapping
US20030221155A1