Systems and methods for supporting redundant arrays of independent disks (RAID)

By introducing a cache coherence interconnect protocol and an HDM decoder into the storage device, the problem of inaccurate data access under RAID configuration is solved, data consistency management of RAID level 0 and RAID level 1 is realized, and the accuracy and reliability of data access are improved.

CN117234415BActive Publication Date: 2026-04-21SAMSUNG ELECTRONICS CO LTD
View PDF 2 Cites 0 Cited by

Patent Information

Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
SAMSUNG ELECTRONICS CO LTD
Filing Date
2023-05-22
Publication Date
2026-04-21

AI Technical Summary

Technical Problem

In existing technologies, bypassing the RAID controller may result in inaccurate or corrupted data, and data access under RAID configuration cannot be effectively managed.

Method used

By employing storage devices that support the cache coherent interconnect protocol, and managing the RAID address range through a host-managed device memory decoder (HDM), the correct processing of byte-level protocol requests is ensured, enabling data access for RAID level 0 and RAID level 1.

Benefits of technology

It improves the accuracy and reliability of data access under RAID configuration, ensures data consistency during mirroring or striping between storage devices, and prevents data loss and corruption.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN117234415B_ABST
    Figure CN117234415B_ABST
Patent Text Reader

Abstract

Systems and methods for supporting Redundant Array of Independent Disks (RAID) are disclosed. The system may include a processor capable of issuing byte-level protocol requests including byte addresses. The system may also include a first storage device and a second storage device. The first and second storage devices may support a cache coherent interconnect protocol, which includes block-level and byte-level protocols. The first and second storage devices are included in a Redundant Array of Independent Disks (RAID). The first storage device may include a first address range, and the second storage device may include a second address range. The second storage device can provide a RAID address range associated with the first and second address ranges. A decoder associated with the second storage device may be configured to receive the request from the processor. The decoder can determine that a byte address in the RAID address range is associated with a target address range.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] This application claims the benefit of U.S. Provisional Patent Application No. 63 / 352,630, filed June 15, 2022, and U.S. Patent Application No. 17 / 885,520, filed August 10, 2022, both of which are incorporated herein by reference for all purposes. Technical Field

[0002] This disclosure generally relates to storage devices, and more specifically, to using storage devices that support cache coherent interconnect protocols to support redundant arrays of independent disks (RAID). Background Technology

[0003] Redundant Array of Independent Disks (RAID) combines a collection of two or more storage devices into a single storage device. RAID configurations can support striping (using the storage space of two or more storage devices as if they were a single storage device), parity (providing a mechanism to double-check data correctness), or both. However, to take advantage of the benefits of RAID, data access can be achieved through the RAID controller (hardware or software). Bypassing the RAID controller can lead to data inaccuracy or corruption.

[0004] A method is still needed to improve data access under RAID configurations. Summary of the Invention

[0005] The disclosed embodiments include a system. The system may include two or more storage devices supporting a cache-coherent interconnect protocol. A decoder in one of the storage devices may expose a range of addresses “that can be issued to the storage device when using a redundant array of independent disks (RAID) configuration” for byte-level protocol requests, and may manage the storage device’s processing of requests.

[0006] Disclosed embodiments include a system. The system may include: a processor; a first storage device supporting a cache coherent interconnect protocol, the cache coherent interconnect protocol including block-level and byte-level protocols, the first storage device including a first address range; a second storage device supporting the cache coherent interconnect protocol, the second storage device including a second address range, the second storage device providing a redundant array of disks (RAID) address range associated with the first and second address ranges; and a decoder associated with the second storage device, the decoder being configured to: receive a request from the processor and determine that a byte address in the RAID address range is associated with a target address range, the request using a byte-level protocol and including a byte address in the RAID address range, wherein the first and second storage devices are included in a RAID.

[0007] The disclosed embodiments include a method. The method may include: identifying a first storage device supporting a cache coherent interconnect protocol, the cache coherent interconnect protocol including a block-level protocol and a byte-level protocol, the first storage device including a first address range; identifying a second storage device supporting the cache coherent interconnect protocol, the second storage device including a second address range; constructing a redundant array of independent disks (RAID) from the first and second storage devices; generating a RAID address range at least in part based on the first and second address ranges; and configuring a decoder of the second storage device to process a request, the request using the byte-level protocol and including byte addresses from the RAID address range.

[0008] The disclosed embodiments include a method. The method may include: receiving a request from a processor at a decoder, the request using a byte-level protocol and including byte addresses of a Redundant Array of Independent Disks (RAID) address range; determining that the byte addresses of the RAID address range are associated with a first address range of a first storage device; and using the first storage device to process the request, wherein the RAID address range is associated with the first address range of the first storage device and a second address range of a second storage device, the first storage device supporting a cache coherent interconnect protocol, the cache coherent interconnect protocol including block-level and byte-level protocols, and the second storage device supporting the cache coherent interconnect protocol. Attached Figure Description

[0009] The accompanying drawings described below are examples of how the disclosed embodiments may be implemented and are not intended to limit the disclosed embodiments. Independent embodiments may include elements not shown in certain drawings and / or elements shown in certain drawings may be omitted. The drawings are intended to provide illustration and may not be to scale.

[0010] Figure 1 A machine is shown that includes a cache-coherent interconnect storage device, which can be configured as a redundant array of independent disks (RAID), according to a disclosed embodiment.

[0011] Figure 2 The following is illustrated according to the disclosed embodiments. Figure 1 Some additional details about the machine.

[0012] Figure 3 The use according to the disclosed embodiments is shown. Figure 1 An implementation of a RAID level 1 configuration for a storage device.

[0013] Figure 4 The use according to the disclosed embodiments is shown. Figure 1 An implementation method for RAID level 0 configuration of a storage device.

[0014] Figure 5A The following describes the actions according to the disclosed embodiments. Figure 1 This is a flowchart illustrating an example process for initializing a RAID configuration, which is part of the RAID initialization process.

[0015] Figure 5B Continuing with the actions based on the disclosed embodiments Figure 1 This is a flowchart illustrating an example process for initializing a RAID configuration, which is part of the RAID initialization process.

[0016] Figure 6 The following is illustrated according to the disclosed embodiments. Figure 1 machine use Figure 1 storage device generation Figures 3 to 4 A flowchart illustrating an example process for RAID address ranges.

[0017] Figure 7 The use according to the disclosed embodiments is shown. Figures 3 to 4 A flowchart of an example process for a host-managed device memory (HDM) decoder.

[0018] Figure 8 The use according to the disclosed embodiments is shown. Figure 1 RAID to handle Figures 3 to 4 A flowchart of an example process for a byte-level protocol request.

[0019] Figure 9 The illustration shows a method for use according to the disclosed embodiments. Figure 1 RAID from and Figures 3 to 4 The request is associated with Figures 3 to 4 The flowchart shows an example process of generating the second byte address from the first byte address.

[0020] Figure 10 The following is illustrated according to the disclosed embodiments. Figure 1 Storage device processing Figures 3 to 4 A flowchart of an example process for a byte-level protocol request. Detailed Implementation

[0021] Reference will now be made in detail to the disclosed embodiments, examples of which are illustrated in the accompanying drawings. Numerous specific details are set forth in the following detailed description to enable a thorough understanding of the disclosure. However, it should be understood that those skilled in the art can practice the disclosure without these specific details. In other instances, well-known methods, processes, components, circuits, and networks have not been described in detail so as not to unnecessarily obscure aspects of the embodiments.

[0022] It will be understood that although the terms first, second, etc., may be used herein to describe various elements, these elements should not be limited by these terms. These terms are used only to distinguish one element from another. For example, without departing from the scope of disclosure, the first module may be referred to as the second module, and similarly, the second module may be referred to as the first module.

[0023] The terminology used in the disclosed description is for the purpose of describing particular embodiments only and is not intended to be limiting. As used in the disclosed description and appended claims, the singular form is intended to include the plural form as well, unless the context clearly indicates otherwise. It will also be understood that the term “and / or” as used herein means and includes any and all possible combinations of one or more of the associated listed items. It will also be understood that when the terms “comprising” and / or “including” are used in this specification, they indicate the presence of the described features, integrals, steps, operations, elements, and / or components, but do not exclude the presence or addition of one or more other features, integrals, steps, operations, elements, components, and / or groups thereof. Components and features in the drawings are not necessarily drawn to scale.

[0024] Storage devices that support cache-coherent interconnect protocols are becoming increasingly common. Such storage devices allow data to be accessed using different protocols with different granularities. Data can be accessed in blocks like other storage devices, or in bytes like memory devices.

[0025] Redundant Array of Independent Disks (RAID) allows two or more disks to function as a single, larger disk. Different RAID levels can provide increased storage on individual devices, redundancy to prevent data loss due to storage device failure, or both.

[0026] RAID technology was developed before the introduction of storage devices with cache-coherent interconnect protocols. RAID typically only supports block-level access to the storage device. If an application will use a byte-level protocol to access data on the storage device, such access can bypass RAID technology.

[0027] However, for some RAID levels (such as RAID level 0 (striping) and RAID level 1 (mirroring)), managing byte-level access to data is feasible. Disclosed embodiments utilize this capability using a host-managed device memory (HDM) decoder. For a RAID level 0 configuration, a storage device can expose memory that spans two storage devices. The HDM decoder can determine whether a specific address is on that storage device or another, and bootstrap the request accordingly. Which storage device contains the specific address can be, for example, a function of the stripe size and / or block size on the storage device.

[0028] In a RAID 1 configuration, the first storage device can expose memory. This storage device can act as the primary storage device in the mirror. The HDM decoder can broadcast writes to the secondary storage device and perform cyclic reads from the mirrored storage device. RAID 1 configuration provides increased data integrity.

[0029] Figure 1 A machine is shown that includes a cache-coherent interconnect storage device, which can be configured as a redundant array of independent disks (RAID), according to a disclosed embodiment. Figure 1 In this embodiment, machine 105 (which may also be referred to as a host or system) may include processor 110, memory 115, and storage devices 120-1 and 120-2 (which may be collectively referred to as storage device 120). Processor 110 may be any type of processor. (For ease of illustration, processor 110 and other components discussed below are shown external to the machine: the disclosed embodiments may include these components internally.) Although Figure 1 A single processor 110 is shown, but the machine 105 may include any number of processors, each of which may be a single-core or multi-core processor, each of which may implement a Reduced Instruction Set Computer (RISC) architecture or a Complex Instruction Set Computer (CISC) architecture (and other possibilities), and may be mixed in any desired combination.

[0030] Processor 110 may be incorporated into memory 115. Memory 115 may be any type of memory (such as flash memory, dynamic random access memory (DRAM), static random access memory (SRAM), permanent random access memory, ferroelectric random access memory (FRAM), or non-volatile random access memory (NVRAM) (such as magnetoresistive random access memory (MRAM)). Depending on preference, memory 115 may be volatile or non-volatile memory. Memory 115 may also be any desired combination of different memory types and may be managed by memory controller 125. Memory 115 may be used to store data that can be termed "short-term": that is, data that is not expected to be stored for a long period of time. Examples of short-term data may include temporary files, data used locally by the application (which may have been copied from other storage locations), etc.

[0031] In some disclosed embodiments, machine 105 may include a persistent memory device ( Figure 1 (Not shown in the image). This persistent memory device may be used in place of memory 115, or in addition to memory 115.

[0032] Processor 110 and memory 115 may also support various applications running on top of them. These applications may issue requests (also referred to as commands) to read data from or write data to any memory 115. When storage devices 120-1 and / or storage devices 120-2 (collectively referred to as storage device 120) are used to support applications reading or writing data via a file system, storage device 120 may be accessed using device driver 130. Although Figure 1 Two storage devices 120-1 and 120-2 are shown, but (although RAID configurations are typically not used when only one storage device 120 is present) any number of storage devices may be present in machine 105. Storage devices 120 may each support any desired one or more protocols (including, for example, the Non-Volatile Memory Fast (NVMe) protocol). Different storage devices 120 may support different protocols and / or interfaces. In particular, storage devices 120 may support a cache coherent interconnect protocol that supports both block-level (or any other higher-level granularity) and byte-level (or any other lower-level granularity) access to data on storage devices 120. An example of such a cache coherent interconnect protocol is the Compute Fast Link (CXL) protocol, which supports block-level data access using the cxl.io protocol and byte-level data access using the cxl.mem protocol.

[0033] Figure 1 The term "storage device" is used, and the disclosed embodiments may include any storage device format that supports a cache-coherent interconnect protocol. Examples of storage devices may include hard disk drives (HDDs) and solid-state drives (SSDs). Any references to "SSD," "hard disk drive," or "storage device" below should be understood to include such other embodiments disclosed. Furthermore, different types of storage devices may be mixed. For example, one storage device 120 may be a hard disk drive, and another storage device 120 may be an SSD.

[0034] As described above, storage device 120 can be configured as a RAID. When RAID is used, the underlying hardware (storage device 120) can be hidden from processor 110. Instead, a RAID configuration presents a "virtual" device that appears as a single storage device, but includes storage devices across various storage devices 120 included in the RAID configuration. (Some storage devices 120 may be part of a RAID, while others are not: storage devices 120 not included in a RAID can be accessed using device drivers 130 and conventional access technologies.)

[0035] There are several different ways to use RAID. These different ways are called “levels,” where different numbers represent different ways of using storage devices 120. RAID level 0 (also known as a striped set or striped volume) does not actually provide any redundancy. Instead, data is written across storage devices 120. In a disclosed embodiment with two storage devices, half of the data is written to storage device 120-1, and the other half is written to storage device 120-2. The total available storage space in RAID level 0 is generally equal to the size of the smallest storage device multiplied by the number of storage devices in the RAID: mixing storage devices of different sizes may cause some storage to become inaccessible due to how RAID level 0 operates. RAID level 0 improves performance: because each storage device 120 only writes and reads a portion of the data, each storage device 120 can access its portion in parallel with the other storage devices 120 in the RAID, resulting in faster reads and / or writes. However, because data is split across multiple storage devices, the failure of any single storage device in the system may result in the loss of all stored data.

[0036] RAID 1 (also known as mirroring) stores the same data across multiple storage devices. That is, data stored on storage device 120-1 is also stored on storage device 120-2, and vice versa. The total available storage space in RAID 1 is typically the size of the smallest storage device: including other storage devices in the RAID does not increase the available storage capacity (because the other storage devices are mirrored). Read performance is improved because data can be read from all the storage devices in the RAID. However, write performance remains constant because write requests result in all data being written to each storage device. Redundancy is provided by maintaining two (or more) copies of the data. If any single storage device 120 fails, the data can be accessed from any other storage device 120 in the RAID.

[0037] RAID 5 provides block-level striping with distributed parity. That is, when data is to be written to a stripe across storage devices 120, the data is written to all but one of the storage devices 120: the last storage device 120 stores parity data (e.g., parity information) based on the data stored on the other storage devices for that stripe. No single storage device 120 is dedicated to storing parity data: parity data can be rotated across all storage devices 120. (Dedicated storage device 120 to storing parity data is RAID 4.) RAID 5 uses at least three storage devices 120: the total available storage space is typically the size of the smallest storage device multiplied by the total number of storage devices in the RAID minus one. Therefore, for example, if the RAID includes three 500GB storage devices, the total available storage space is approximately (3-1) × 500GB = 1000GB = 1TB. Read performance is improved because data can be read from various storage devices in the RAID (except for the storage device storing parity information used for striping). Write performance is also improved because data can be written across storage devices 120. However, some additional time may be required to generate parity information because it can be generated from data written to other storage devices 120. In the event of a storage device failure, the lost data can be recalculated using data from other storage devices (because parity information can be used to reconstruct data from the failed storage device).

[0038] RAID 6 is similar to RAID 5, except that parity information is stored on two storage devices in the RAID. Therefore, RAID 6 uses at least four storage devices, but it can tolerate the failure of two storage devices in the RAID. The total available storage space is typically the size of the smallest storage device multiplied by the total number of storage devices in the RAID minus two. Therefore, for example, if the RAID includes four 500GB storage devices, the total available storage space is approximately (4-2) × 500GB = 1000GB = 1TB. Read and write performance is similar to RAID 5.

[0039] RAID levels 0, 1, 5, and 6 are among the more common RAID levels, but others also exist. Furthermore, it is feasible to configure storage device 120 in combinations of these levels. For example, RAID level 10 is a mirrored stripe. That is, a set of storage devices can be configured as RAID level 1, where a RAID level 0 stripe comprises various sets of mirrored images. RAID level 10 offers the benefits of both mirroring and striping, but at the cost of requiring additional storage devices: for example, RAID level 10 uses at least four storage devices, where the total capacity (e.g., total available storage space) is simply the size of the minimum storage device multiplied by the number of sets of mirrored images used in the stripe.

[0040] For the purposes of this disclosure, the term "parity information" should be understood to include any form of redundancy in information used for RAID, whether as parity information (as may be used in, for example, RAID level 5 or RAID level 6) or as a mirror of data (as may be used in, for example, RAID level 1).

[0041] Some RAID implementations offer the ability to add additional storage devices to the RAID. However, whether adding a storage device increases the total available storage space depends on the RAID level being used. For example, adding another storage device to RAID level 0 increases storage capacity (but still doesn't provide redundancy), while adding another storage device to RAID level 1 increases redundancy but doesn't increase total storage capacity. Adding an additional storage device to RAID level 5 or RAID level 6 can increase the total available storage space to some extent. Whether a new storage device can be added to a RAID without disabling the RAID depends on the RAID implementation.

[0042] RAID can be implemented using hardware or software. Hardware RAID implementations may include hardware specifically designed to support storage devices 120 in a RAID configuration. Software RAID implementations can achieve similar results using software. Hardware RAID implementations typically offer more options (such as additional RAID levels) and faster implementation of RAID functionality than software RAID implementations, and avoid potential negative impacts on processor 110, but may be more expensive to implement. The remainder of this document will focus on software RAID implementations, particularly RAID levels 0 and RAID level 1.

[0043] Figure 1A circuit board is not shown. This circuit board (which may be a motherboard, backplane, or middleboard) may include slots into which processor 110, memory 115, and / or storage device 120 may be mounted. Note that, depending on the implementation, one or more of these components may be mounted directly onto the circuit board without being mounted in slots. Alternatively, the disclosed embodiments may include multiple interconnected circuit boards, with components mounted across these circuit boards.

[0044] Figure 2 The following is illustrated according to the disclosed embodiments. Figure 1 Details of the machine. Figure 2 Typically, machine 105 includes one or more processors 110, which may include a memory controller 125 and a clock 205 for coordinating the operation of the machine's components. Processor 110 may also be coupled to memory 115, which, for example, may include random access memory (RAM), read-only memory (ROM), or other state-saving media. Processor 110 may also be coupled to storage device 120 and to network connector 210, which may be, for example, an Ethernet connector or a wireless connector. Processor 110 may also be connected to bus 215, to which user interface 220 and input / output (I / O) interface ports may be attached. I / O interface ports may be managed using I / O engine 225 and other components.

[0045] Figure 3 The use according to the disclosed embodiments is shown. Figure 1 The implementation method of RAID level 1 configuration for storage devices. Figure 3 In China, the application of 305 can be used Figure 1 The application 305 runs on the processor 110. The application 305 can issue various requests to access data from the storage device 120. For example, the application 305 can issue a block-level protocol request 310 (such as a read or write request) to access one or more data blocks from the storage device 120. This request can be made, for example, via... Figure 1 The file system implemented on system 105 issues a request for file access. The software (S / W) RAID 315 (which can function as a device drive or as...) Figure 1 (Running as part of the operating system on system 105) can receive requests and interpret them appropriately to access the requested data from storage device 120.

[0046] However, as described above, storage device 120 can implement a cache coherence interface protocol, which can support both block-level and byte-level protocols. To support the use of the byte-level protocol, storage device 120 can typically expose address ranges (such as address ranges 320-1 and 320-2, which can be collectively referred to as address range 320)). For example, address range 320-1 may include addresses spanning blocks 325-1, 325-3, and 325-5, while address range 320-2 may include addresses spanning blocks 325-2, 325-4, and 325-6 (blocks 325-1 to 325-6 can be collectively referred to as block 325). The disclosed embodiments may have address ranges 320 that include different addresses.

[0047] Address range 320 can be exposed to application 305 as if it were part of the available memory of system 105. That is, address range 320 can be presented to the application as if it were part of the available memory of system 105. Figure 1 The memory 115 exposes an extension of the address range. Therefore, application 305 can issue a byte-level protocol request 330 (such as a load or store request) to access data from address range 320. Byte-level protocol request 330 may include a byte address 335, which identifies a specific address within address range 320 that will be accessed. (Byte-level protocol request 330 can specify byte address 335 in any desired manner. For example, byte address 335 may be the actual address of interest, or byte address 335 may include an identifier (e.g., a base address) of the block containing the data of interest and an offset from the start of the data in that block. Additionally, byte-level protocol request 330 may include other data (such as the number of bytes to be accessed and / or the data to be stored at that address for a store request). Therefore, data stored on storage device 120 can be accessed using block-level protocol request 310 or byte-level protocol request 330.

[0048] Storage device 120-1 may include a host-managed device memory (HDM) decoder 340-1. Similarly, storage device 120-2 may include an HDM decoder 340-2. (HDM decoder 340-1 and HDM decoder 340-2 may be collectively referred to as HDM decoder 340, or simply as decoder 340.) HDM decoder 340 may be responsible for receiving byte address 335 in byte-level protocol request 330 and converting byte address 335 into information identifying where the data to be accessed is actually stored on storage device 120.

[0049] When storage device 120 is not part of a RAID implementation, accessing data using block-level protocol request 310 or byte-level protocol request 330 may not make a difference. However, when storage device 120 is part of a RAID implementation, accessing data directly from the storage device using byte-level protocol request 330 may result in data being altered in a way that breaks the RAID. For example, consider the case where storage device 120 is used in a RAID 1 configuration: that is, data is mirrored between storage devices 120. If application 305 issues a block-level protocol request to modify, for example, data on storage device 120-1, but the corresponding data is not modified on storage device 120-2, the data may no longer be correctly mirrored. If block-level protocol request 310 subsequently attempts to access the block containing that data, software RAID 315 may be unable to determine which data is correct.

[0050] To address this concern, storage device 120 is operable to expose a single address range ( Figure 3 (The RAID address range marked in the text is 345). Since storage device 120 can be part of a RAID 1 configuration, one storage device can be considered a primary storage device, while other storage devices are considered secondary storage devices (storing mirrored data). For example, storage device 120-1 can be marked as a primary storage device, and storage device 120-2 can be marked as a secondary storage device.

[0051] HDM decoder 340 of the main storage device (in) Figure 3 In the storage device 120-1, the HDM decoder 340-1 is responsible for exposing the RAID address range 345 to... Figure 1 System 105. HDM decoder 340-1 determines the address range 320 of storage device 120 and generates RAID address range 345 from address range 320. For ease of understanding, blocks 350-1, 350-2, and 350-3 (collectively referred to as blocks 350) include tags such as A1, A2, and A3. These tags may correspond to the tags used for block 325. Therefore, for example, data stored at addresses in block 350-1 of RAID address range 345 may actually be stored in block 325-1 on storage device 120-1 and block 325-2 on storage device 120-2, respectively.

[0052] In a RAID 1 implementation, the total storage capacity of the RAID can be equal to the minimum storage capacity of storage device 120, and / or the block size to be used can be equal to the minimum block size of storage device 120. HDM decoder 340-1 can determine this information and use it to generate a RAID address range 345, which may include blocks 350-1, 350-2, and 350-3 (collectively referred to as block 350). For example, in... Figure 3 In the block, block 350 has a block size of 355.

[0053] Examples can be helpful. For instance, suppose storage device 120-1 includes a total of approximately 500 GB of storage (i.e., 2...). 39 The total capacity of the storage device 120-1 is 512KB, and the storage device 120-1 uses a block size of 512KB (i.e., 2 bytes). 19 (Block size in bytes). Therefore, storage device 120-1 will include a total of 2 20 On the other hand, assume that storage device 120-2 provides a total storage capacity of approximately 250GB (i.e., 2 blocks). 38 (bytes of storage), but using a block size of 1MB (i.e., 2 bytes). 20 (block size in bytes), which means that the storage device 120-2 will include a total of 2 18 Therefore, storage device 120-1 will have a smaller block size (2 blocks). 19 (bytes), but storage device 120-2 will have fewer total blocks (2 bytes). 18 (blocks). The HDM decoder 340-1 can determine this information and configure the RAID address range 345 to span a total of 2 blocks. 37 Byte address (2 18 There are 2 blocks, each block being 2 in size. 19 byte).

[0054] Note that in this example, because storage devices 120-1 and 120-2 have different total capacities and different block sizes, some storage is not used in each case. Therefore, in the described example, (since RAID address range 345 may only include 1 / 4 of the number of blocks 325 in storage device 120-1) RAID address range 345 may only use 1 / 4 of the available storage of storage device 120-1, and (since each block 350 in RAID address range 345 may only include 1 / 2 of the number of blocks 325 in storage device 120-2) RAID address range 345 may only include 1 / 2 of the available storage of storage device 120-2. However, depending on the implementation, RAID address range 345 can be configured more optimally, and if storage devices 120 are identical (as might be expected), RAID address range 345 may be able to utilize the entire capacity of storage device 120.

[0055] Because storage device 120 can be used to implement RAID level 1, storage device 120-2 can mirror the data on storage device 120-1. That is, blocks 325-2, 325-4, and 325-6 can be mirrors of blocks 325-1, 325-3, and 325-5. In other words, any data stored in block 325-1 should also be stored in block 325-2, any data stored in block 325-3 should also be stored in block 325-4, and any data stored in block 325-5 should also be stored in block 325-6. For this reason, as indicated by the use of dashed lines to represent HDM decoder 340-2 (although in some disclosed embodiments, HDM decoder 340-2 may still be included in storage device 120-2), HDM decoder 340-2 may not be utilized.

[0056] Because storage device 120 can be used to implement a RAID 1 configuration, if byte-level protocol request 330 is a storage request (that is, byte-level protocol request 330 seeks to store data at byte address 335), it can be understood that the data should be stored in a block on storage device 120-1 and its mirror image on storage device 120-2. For example, if byte address 335 can be found in block 350-1 of RAID address range 345, and block 350-1 corresponds to block 325-1 of address range 320-1 (where block 325-2 of address range 320-2 acts as its mirror), then byte-level protocol request 330 can be sent to both storage devices 120. On the other hand, if byte-level protocol request 330 is a load request (that is, byte-level protocol request 330 seeks to read data at byte address 335), then (since the data should be identical on the primary and secondary storage devices) the data can be read from either storage device 120. Therefore, byte-level protocol request 330 can be sent to one of the storage devices 120: which storage device 120 is the destination may depend on the implementation. For example, in some disclosed embodiments, all load requests may be sent to a single storage device (which may be any of the storage devices 120); in other disclosed embodiments, load requests may be sent to different storage devices 120 in any desired manner (e.g., using a round-robin approach) to distribute load requests across storage devices 120: distributing load requests can result in faster data loading.

[0057] The management of which storage device 120 handles a specific request can depend on the implementation. In some disclosed embodiments, Figure 1 System 105 (e.g., software RAID 315 or) Figure 3 (Some other software elements not shown) determine which storage device 120 will be accessed, and byte-level protocol request 330 can be directed accordingly. In other disclosed embodiments, Figure 1 System 105 can send all requests to storage device 120-1 (primary storage device): HDM decoder 340-1 can then be responsible for distributing or broadcasting requests to storage device 120-2 (secondary storage device). For example, HDM decoder 340-1 can broadcast storage requests to all storage devices 120 (to ensure that data is correctly mirrored), and / or can distribute load requests across storage devices 120 (to attempt to achieve faster data loading).

[0058] One potential concern is whether one of the storage devices 120 should become unusable. This could happen for any number of reasons: the storage device itself might experience some internal problem with its circuitry, or the storage device might malfunction due to... Figure 1The rest of the system 105 may be disconnected, the flash memory may be defective (but the defect is undetectable), or an unblockable power surge may damage parts of the storage device; these are just a few possibilities.

[0059] Whatever the reason, Figure 1 System 105 may need to handle this situation. Fortunately, because storage devices 120 are in a mirrored configuration, the failure of any storage device in the RAID may not lead to a complete RAID failure: as long as at least one working storage device 120 exists, it can be used to serve data from... Figure 1 The processor 110 makes a request. Once the problem causing the offline storage device 120 is corrected, the storage device 120 can be resynchronized with the RAID to ensure that the storage devices 120 are mirror images of each other.

[0060] If this should happen, then Figure 1 The system 105 can detect that one of the storage devices 120 is offline. Then, Figure 1 System 105 can redirect requests to another storage device 120. For example, if storage device 120-1 (the primary storage device) should be taken offline, then... Figure 1 System 105 can direct requests to storage device 120-2 (secondary storage device), and HDM decoder 340-2 can then process the requests as if storage device 120-2 were the primary storage device.

[0061] In some cases, the storage device may be offline and unable to properly access data, but it may still be partially functional. For example, the flash memory of storage device 120-1 may have a problem, but the HDM decoder 340-1 may still be working. In such cases, Figure 1 System 105 can still direct requests to HDM decoder 340-1, and HDM decoder 340-1 can send requests to storage device 120-2 for processing if it realizes that the flash memory of storage device 120 is not working.

[0062] In some disclosed embodiments, if data is available from at least one storage device 120, requests from any operating storage device 120 can be processed as usual (the administrator is notified that storage device 120 is offline). In other disclosed embodiments, although data may still be available, Figure 1System 105 may suspend the execution of application 305 until the problem is resolved and RAID is reconfigured, at which point application 305 may resume execution. Reconfiguring RAID may involve, for example, resolving a problem affecting an offline storage device (which may involve replacing the storage device) and / or making any appropriate adjustments to the HDM decoder 340 (such as taking into account the different exposed address ranges 320 of the storage device being repaired or replaced, configuring the HDM decoder 340 of the repaired or replaced storage device to communicate with the HDM decoder 340-1 of the primary storage device 120-1, or designating another storage device 120 as the primary storage device if storage device 120-1 is the storage device experiencing the problem).

[0063] Although Figure 3 This illustrates how storage device 120 can be used for byte-level protocol access in RAID level 0, but as mentioned above, other RAID levels are also possible. RAID level 1 can also enable byte-level protocol access to data on storage device 120.

[0064] Figure 4 The use according to the disclosed embodiments is shown. Figure 1 The implementation method of RAID level 0 configuration for storage devices. Figure 4 In the middle, most of the diagrams are similar to Figure 3 The difference is that storage device 120-2 can now store different data, rather than mirroring the data stored on storage device 120-1. Therefore, blocks 325-2, 325-4, and 325-6 (including tags such as B1, B2, and B3) can store different data than blocks 325-1, 325-3, and 325-5. This change can also be reflected in RAID address range 345, which can now include blocks 350-1 through 350-6. Figure 3 Same, Figure 4 Blocks 350 and 325 are marked to show how the block (and address) in block 350 in RAID address range 345 can correspond to the block (and address) in block 325 in address range 320.

[0065] As in Figure 4 What can be seen in the middle, and Figure 3Unlike other configurations, in RAID level 0, data mirroring is not required across storage devices 120. Instead, different blocks in the RAID address range 345 can be mapped to different blocks 325 in each of storage devices 120-1 and 120-2. For example, block 350-1 in the RAID address range 345 can correspond to block 325-1 in storage device 120-1, but block 350-2 in the RAID address range 345 can correspond to block 325-2 in storage device 120-2. In other words, each storage device 120 can store different data without copying data between (or across) storage devices 120.

[0066] RAID level 0 can introduce the concept of striping. A stripe can represent the amount of data that can be stored at corresponding addresses across storage devices 120. Therefore, the size of a stripe can be understood as the size of a single block multiplied by the number of storage devices in the stripe. For example, in Figure 4 In a RAID 0 configuration, there are two storage devices 120: therefore, a stripe (such as a stripe including blocks 350-3 and 350-4) may have a stripe size 405.

[0067] While a RAID 1 configuration may not necessarily include the concept of "striping," striping can be indicated even in RAID 1. For example, even though a stripe is generally considered to consist of more than one block, a single block in the RAID address range 345 can be considered a "strip."

[0068] Similar to RAID 1, the size of a RAID 0 configuration is affected by the block size on each storage device 120 and the number of blocks in each storage device 120. However, unlike RAID 1, the overall size of a RAID can be increased by adding additional storage devices. (Again, this increase in size does not add redundancy to a RAID 0 configuration.)

[0069] Again, examples can be helpful. For instance, let's assume again that storage device 120-1 includes a total of approximately 500GB of storage (i.e., 2...). 39 The total capacity in bytes), and storage device 120-1 uses a block size of 512KB (i.e., 2 bytes). 19 (Block size in bytes). Therefore, storage device 120-1 will include a total of 2 20 One block. On the other hand, assume that storage device 120-2 provides a total storage capacity of approximately 250GB (i.e., 2 blocks). 38 (bytes of storage), but using a block size of 1MB (i.e., 2 bytes). 20 (block size in bytes), which means that storage device 120-2 will include a total of 2 18 Therefore, storage device 120-1 will have a smaller block size (2 blocks).19 (bytes), but storage device 120-2 will have fewer total blocks (2 bytes). 18 (blocks). The HDM decoder 340-1 can determine this information and configure the RAID address range 345 to span a total of 2 blocks. 38 Byte address (2 bytes on two storage devices) 18 There are 2 blocks, each block being 2 in size. 19 byte).

[0070] Note that in this example, because storage devices 120-1 and 120-2 have different total capacities and different block sizes, some storage is not used in each case. Therefore, in the described example, (since RAID address range 345 may only include 1 / 4 of the number of blocks 325 in storage device 120-1) RAID address range 345 may only use 1 / 4 of the available storage of storage device 120-1, and (since each block 350 in RAID address range 345 may only include 1 / 2 of the storage of blocks 325 in storage device 120-2) RAID address range 345 may only include 1 / 2 of the available storage of storage device 120-2. However, depending on the implementation, RAID address range 345 can be configured more optimally, and if storage devices 120 are identical (as can be expected), RAID address range 345 may be able to utilize the entire capacity of storage device 120.

[0071] Since the data stored on each storage device 120 may differ in a RAID level 0 configuration, the HDM decoder 340-1 is responsible for determining which storage device actually stores the block containing byte address 335 and can direct the byte-level protocol request 330 to the appropriate storage device. For example, the HDM decoder 340-1 can determine which block contains byte address 335: using this information, the HDM decoder 340-1 can then determine which storage device 120 actually stores byte address 335. For example, by taking the byte address 335 modulo the stripe size 410, the HDM decoder 340-1 can treat byte address 335 as if it were in the first stripe within the RAID address range 345. Then, by dividing the result by the block size 355 and taking the integer component, the specific block within that first stripe can be identified: the storage device 120 storing this block in address range 320 can store byte address 335. For example, by dividing byte address 335 by stripe size 405, byte address 335 can be effectively considered to be in either block 350-1 or block 350-2 (assuming the RAID includes only two storage devices 120; if the RAID includes more than two storage devices, the process can be generalized to more storage devices). Then, by dividing by block size 355, one of block 350-1 and block 350-2 can be effectively identified. Since storage device 120-1 can store block 350-1 and storage device 120-2 can store block 350-2, the storage device thus identified by HDM decoder 340-1 can store byte address 335.

[0072] Because storage devices 120 in a RAID 0 configuration can store different data, load and storage requests can be directed to a single storage device 120 that overrides the byte address 335 used for byte-level protocol requests 330. That is, data is not mirrored, so (depending on the size of the data being stored) storage requests can be processed only by the affected one or more storage devices 120. Similarly, (because data may not be read from other storage devices 120) load requests can be processed only by the affected one or more storage devices 120.

[0073] Similar to RAID 1 configurations, the management of which storage device 120 handles a specific request can depend on the implementation. In some disclosed embodiments, Figure 1 System 105 (e.g., software RAID 315 or) Figure 3 (Some other software elements not shown) can determine which storage device 120 will be accessed, and byte-level protocol request 330 can be directed accordingly. In other disclosed embodiments, Figure 1System 105 can send all requests to storage device 120-1: if the byte address 335 in question is actually stored on storage device 120-2, then HDM decoder 340-1 can then be responsible for forwarding the requests to storage device 120-2.

[0074] In a RAID 0 configuration, similar to a RAID 1 configuration, an HDM decoder manages how the RAID address range 345 is exposed and determines which storage device 120 actually stores the data identified by byte address 335. An HDM decoder 340 can be selected to perform these functions.

[0075] While, as described above, RAID 1 can continue operating at reduced capacity if one or more storage devices 120 go offline (as long as at least one storage device 120 is operational, a copy of the available data exists), RAID 0 does not provide any such redundancy. Because data is fragmented between (or among) the storage devices 120, some data may become inaccessible if one or more storage devices 120 go offline for any reason. Upon detecting that a storage device 120 is offline for any reason, the disclosed embodiments may suspend the execution of application 305 until the problem is corrected (and data is expected to be recovered from somewhere else). Once the problem has been corrected and the RAID has been rebuilt / reconfigured, application 305 can resume execution.

[0076] In RAID 0 and RAID 1 configurations, byte address 335 may differ from the actual address where the data is stored on storage device 120. For example, if storage device 120 is a solid-state drive (SSD) using NAND flash memory, pages and blocks in the SSD are available for data to be written, but they cannot be overwritten. To change a value stored at a specific address (as used by application 305), the SSD may copy data from the original page or block, invalidate the original block, make the requested change to the copy, and then write the changed data to a new page or block. To track where the data is actually stored, the SSD can use a flash translation layer to map the address used by application 305 to the address where the data is actually stored.

[0077] Furthermore, to recover invalidated pages or blocks, an SSD can erase all data blocks or the superblock. If any valid data still exists in the block or superblock being erased, the SSD can copy the data from the block or superblock to a new location before erasing it. Again, the SSD can use a flash translation layer to manage the translation of addresses used by application 415 to the location where the data is actually stored.

[0078] Additionally, while each address range of 320 can be contiguous, the portion of the RAID address range 345 that can be mapped to those addresses may not be contiguous. For example, in Figure 4 In this RAID address range 345, blocks 350-1, 350-3, and 350-5 can be mapped to blocks 325-1, 325-3, and 325-5 in address range 320-1, while blocks 350-2, 350-4, and 350-6 in RAID address range 345 can be mapped to blocks 325-2, 325-4, and 325-6 in address range 320-2. Therefore, some address translations may already exist (and more address translations may occur within storage device 120) even before the address is received at storage device 120. In other words, byte address 335 can be used by application 305. From byte address 335, another address can be generated, and this other address can be provided to storage device 120 where the data is actually stored. From this address, yet another address can be generated, and yet another address can indicate the location where the data is actually stored on storage device 120.

[0079] The generation of the intermediate byte address can depend on the RAID level being implemented and how the RAID address range 345 is generated. For example, Figure 4 Assume that each stripe across storage device 120 is represented by a contiguous address range within RAID address range 345. In this case, the actual byte address that storage device 120 expects to receive can be generated by dividing the byte address 335 by the stripe size 405. The integer part of this calculation can then be multiplied by the block size 355. Finally, the remainder of the byte address 335 divided by the block size 355 can be added to the result (as an offset to the actual block of stored data). Alternatively, if RAID address range 345 uses different starting addresses from address range 320, the difference between the starting addresses of the address ranges can be taken into account by subtracting the base address of RAID address range 345 and adding the base address of address range 320. On the other hand, in Figure 3 middle, Figure 3 The RAID address range of 345 looks similar to Figure 3 Each address range is the same (320), possibly except for the base address of these address ranges. In this case, the generated byte address may only need to consider... Figure 3 The base addresses are in the address range of 320 and the address range of 345.

[0080] If the RAID address range 345 is generated in an otherwise different manner (e.g., each address range 320 is considered a contiguous portion of the RAID address range 345), the processing for generating the byte address to be transferred to the storage device 120 may differ. Disclosed embodiments may include any method for generating the RAID address range 345 from the address range 320, and any method for generating a new byte address from the byte address 335 for transfer to the storage device 120 storing the data in question.

[0081] The generation of the byte address that storage device 120 can expect to receive may occur outside storage device 120 (or at least outside storage device 120 storing the requested data). However, since each storage device 120 can handle internal address management independently of what happens outside the storage device, even if the HDM decoder 340 is not used to manage the address exposed to... Figure 1 The address range of System 105 can still be used as part of the address by the HDM decoder 340. For example, in Figures 3 to 4 In this context, the HDM decoder 340-1 is responsible for exposing the RAID address range 345 to... Figure 1 System 105. However, even though the HDM decoder 340-2 does not expose the address range to... Figure 1 System 105, which can still participate in translating the address received at storage device 120-2 into the actual location where the data in question is stored.

[0082] Figures 5A to 5B The following describes the actions according to the disclosed embodiments. Figure 1 This is a flowchart illustrating an example process for initializing a RAID configuration, as part of the RAID initialization process. Figure 5A In box 505, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) are recognizable. Figure 1 Storage device 120-1. As discussed above, Figure 1 The storage device 120-1 supports the use of cache coherent interconnect protocol and can support... Figure 1 Both block-level and byte-level access to data on storage device 120-1. Figure 1 Storage device 120-1 may also expose Figures 3 to 4 The address range 320-1 can be used for byte-level access to data.

[0083] In box 510, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) are recognizable. Figure 1Storage device 120-2. Similar to... Figure 1 Storage device 120-1, Figure 1 The storage device 120-2 supports the use of cache coherent interconnect protocol and can support... Figure 1 Both block-level and byte-level access to data on storage device 120-2. Figure 1 Storage device 120-2 may also be exposed Figures 3 to 4 The address range 320-2 can be used for byte-level access to data.

[0084] In box 515 ( Figure 5B ), Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) can be obtained from Figure 1 Storage device 120 is used to construct a RAID array. As part of constructing the RAID array, Figure 1 The system 105 can load RAID configurations. RAID configurations can be stored on any desired non-volatile storage device. For example, RAID configurations can be stored in... Figure 1 On one of the storage devices 120. Alternatively, the RAID configuration can be stored in a local storage area (such as, Figure 1 The system 105 is a non-volatile storage device. Examples of such non-volatile storage devices may include NAND flash memory, read-only memory (ROM), programmable ROM (PROM), erasable programmable ROM (EPROM), or electrically erasable programmable ROM (EEPROM); other forms of non-volatile storage devices may also be used to store RAID configurations.

[0085] In box 520, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) can be obtained from Figures 3 to 4 Address range 320 generated Figures 3 to 4 The RAID address range is 345. Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating systems or software components) can be generated using any desired method. Figures 3 to 4 The RAID address range is 345, and the RAID configuration used should be considered. Finally, in box 525, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) can... Figures 3 to 4 The HDM decoder 340-1 is configured to process Figures 3 to 4 Byte-level protocol request 330, in which Figures 3 to 4 The other HDM decoders 340 are "hidden" so as not to process the requests.

[0086] Figure 6 The following is illustrated according to the disclosed embodiments. Figure 1 Machine 105 uses Figure 1 Storage device 120 generated Figures 3 to 4 A flowchart illustrating an example process for a RAID address range of 345. Figure 6 In the middle, in box 605, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) may receive multiple blocks to be included. Figures 3 to 4 The RAID address range is 345. In box 610, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) can be obtained from Figures 3 to 4 HDM decoder 340 receiver Figure 3 The block size is 355. Within frame 615, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) can be obtained from Figures 3 to 4 HDM decoder 340 determined Figure 4 The band size is 405. Note that... Figure 4 The band size 405 can be determined as, for example Figure 3 The block size of 355 is similar to that in RAID. Figure 1 The product of the number of storage devices 120. Then, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) can use this information to generate Figures 3 to 4 The RAID address range is 345.

[0087] Figure 6 Manifestation as suggestion Figure 1 System 105 (or Figure 1 The number of blocks received by some components (such as operating system or software components) within system 105. Figure 3 The block size is 355 and Figure 4 The strip size is 405 at a time. In some disclosed embodiments, once... Figures 3 to 4 The HDM decoder 340-1 has been selected for disposal. Figures 3 to 4 The processing of byte-level protocol request 330. Figures 3 to 4 The 340 HDM decoders can communicate with each other, and then, the selected... Figures 3 to 4The HDM decoder 340 can provide this information for RAID initialization. However, in other disclosed embodiments, Figure 1 Each storage device 120 can provide this information, and then, Figure 1 System 105 (or Figure 1 Some components within system 105 (such as operating system or software components) are optional. Figure 3 The block size is 355. Figure 4 The strip size is 405 and it should be included Figure 3 The number of blocks in the RAID address range 345.

[0088] Figure 6 It also implies that the processing described is performed by the RAID initialization process. Figure 1 The system 105 components perform this process. In some disclosed embodiments, this may be true. However, in other disclosed embodiments, the process may be performed by... Figures 3 to 4 The 340-1 HDM decoder is used for processing. For example, Figures 3 to 4 The HDM decoder 340-1 can be found from Figures 3 to 4 The HDM decoder 340-2 receives this information and can generate Figures 3 to 4 This information is used when the RAID address range is 345. In other embodiments, RAID initialization is being performed. Figure 1 The components of system 105 can receive the information and store it for later use, and then provide the information to... Figures 3 to 4 HDM decoder 340-1 to support Figures 3 to 4 The RAID address range of 345 is generated.

[0089] Figure 7 The use according to the disclosed embodiments is shown. Figures 3 to 4 A flowchart of an example process for the HDM decoder 340-1. Figure 7 In the middle, in box 705, Figures 3 to 4 A byte-level protocol request 330 can be sent to Figure 1 The storage device 120-1 Figures 3 to 4 The 340-1 HDM decoder. Figures 3 to 4 The HDM decoder 340-1 can determine Figures 3 to 4 The byte-level protocol request 330 will be Figure 1 The storage device 120-1 is processed. Then, in frame 710, Figure 1 The storage device 120-1 can process Figures 3 to 4 The byte-level protocol request is 330. Note that, as shown by the dashed line 715, box 710 can be omitted.

[0090] Figures 3 to 4 The HDM decoder 340-1 can determine Figure 1 The storage device 120-2 will process the request. In this case, in box 720, Figures 3 to 4 The HDM decoder 340-1 can Figures 3 to 4 Byte-level protocol request 330 sent Figure 1 Storage device 120-2, and then, in frame 725, Figure 1 The storage device 120-1 can process Figures 3 to 4 The byte-level protocol request is 330. Note that boxes 720 and 725 can be omitted, as shown by the dashed line 730.

[0091] Figure 8 The use according to the disclosed embodiments is shown. Figure 1 RAID to handle Figures 3 to 4 A flowchart of an example process for a byte-level protocol request 330. Figure 8 In the middle, in box 805, Figures 3 to 4 The HDM decoder 340-1 can receive Figures 3 to 4 Byte-level protocol request 330. In box 810, Figures 3 to 4 The HDM decoder 340-1 can determine Figure 1 Which storage device 120 is based on? Figures 3 to 4 Use byte address 335 to process Figures 3 to 4 The byte-level protocol request is 330. Finally, in box 815, select... Figure 1 The storage device 120 can process Figures 3 to 4 Byte-level protocol request 330.

[0092] Figure 9 The use according to the disclosed embodiments is shown. Figure 1 RAID from and Figures 3 to 4 The request is associated with Figures 3 to 4 The flowchart illustrates an example process of generating a second byte address from a first byte address. In box 905, Figures 3 to 4 The HDM decoder 340-1 can be found from Figures 3 to 4 The second byte address is generated from byte address 335. As mentioned above, this process may depend on the RAID implementation. Figures 3 to 4 How is the RAID address range 345 generated? Figure 3 Block size 355 and / or Figure 4 The band size is 405.

[0093] Figure 10 The following is illustrated according to the disclosed embodiments. Figure 1 Storage device 120 processing Figures 3 to 4 A flowchart of an example process for a byte-level protocol request 330. Figure 10 In the middle, in box 1005, Figure 1 The storage device 120-1 can process Figures 3 to 4 Byte-level protocol request 330. In box 1010, Figures 3 to 4 The HDM decoder 340-1 can Figures 3 to 4 Byte-level protocol request 330 sent Figure 1 The storage device 120-2 is used for processing.

[0094] Note that if both boxes 1005 and 1010 are executed, then Figure 1 The two storage devices 120 can participate in processing Figures 3 to 4 Byte-level protocol request 330. For example, if the RAID implements a RAID level 1 configuration, this can happen: storage requests can be made by... Figure 1 The two storage devices 120 are processed to maintain the mirror, and load requests can be distributed to Figure 1 Two storage devices 120 are used to improve loading performance. Additionally, if the RAID is configured with RAID level 0 and... Figures 3 to 4 The byte-level protocol request 330 involves Figures 3 to 4 If two (or more) neighboring blocks 350, then Figures 3 to 4 Part of the byte-level protocol request 330 can be provided by Figure 1 Each storage device 120 is processed. If only Figure 1 The storage device 120-2 will process Figures 3 to 4 If the byte-level protocol request is 330, then as shown by the dashed line 1015, box 1005 can be omitted.

[0095] exist Figures 5A to 10 Some embodiments disclosed are shown in the figures. However, those skilled in the art will recognize that other disclosed embodiments are possible by changing the order of the boxes, by omitting boxes, or by including links not shown in the figures. All such variations of the flowchart, whether explicitly described or not, are considered to be embodiments disclosed.

[0096] The disclosed embodiments include a Redundant Array of Independent Disks (RAID), which supports handling byte-level protocol requests for data stored on cache-coherent interconnect (CCOIT) storage devices without requiring a hardware RAID implementation. A host-managed device memory (HDM) decoder can expose a RAID address range covering two (or all) storage devices and can distribute or broadcast byte-level protocol requests to various storage devices. The disclosed embodiments offer technical advantages because applications may be unaware of the RAID implementation and not use a hardware RAID solution, yet still support byte-level protocol access to data on storage devices.

[0097] Compute Fast Link (CXL) solid-state drives (SSDs) can be exposed as block devices. Users can then use CXLSSDs as part of a standalone redundant array of disks (RAID) that uses the CXL block device interface.

[0098] However, if the CXL SSD is part of a RAID array, there are potential problems. First, writing to a single SSD within a RAID array could corrupt the array. Second, if data is read from a separate SSD rather than as part of the RAID array, the data may not be checked using the parity provided by the RAID level used.

[0099] Additionally, the CXL.mem path itself does not support RAID. Mapping each individual CXL device in a RAID array using software and checking it in software is slow and involves a lot of software adaptation.

[0100] To address these concerns, disclosed embodiments may include a host-managed device memory (HDM) decoder and CXL peer-to-peer (p2p) to implement RAID 0 and RAID 1 functionality.

[0101] The advantages of the disclosed embodiments include supporting RAID 0 and RAID 1 in both the CXL.mem and CXL.io paths without adding an additional hardware engine. RAID features can be used to detect and recover from errors on the CXL.mem path. No application changes are required, and no additional hardware RAID engine is needed. The disclosed embodiments provide improved reliability.

[0102] The disclosed embodiments use software methods to support RAID 0 and RAID 1 configurations for the CXL.mem path. These embodiments reduce application complexity and the cost of deploying RAID 0 and RAID 1 configurations when using CXL devices. For applications using CXL.mem, reliability can be improved. Finally, in some RAID configurations, performance can be improved by distributing services across devices (inter-layers).

[0103] The following discussion is intended to provide a brief, general description of one or more suitable machines in which specific aspects disclosed herein may be implemented. One or more machines may be controlled at least in part by input from conventional input devices (such as keyboards, mice, etc.) and by instructions received from another machine, interaction with a virtual reality (VR) environment, biometric feedback, or other input signals. As used herein, the term "machine" is intended to broadly include a single machine, a virtual machine, or a system of machines, virtual machines, or devices that operate communicatively together. Exemplary machines include computing devices (such as personal computers, workstations, servers, portable computers, handheld devices, telephones, tablet computers, etc.) and transportation devices (such as private or public transportation vehicles (e.g., cars, trains, taxis, etc.)).

[0104] One or more machines may include embedded controllers (such as programmable or non-programmable logic devices or arrays, application-specific integrated circuits (ASICs), embedded computers, smart cards, etc.). One or more machines may utilize one or more connections to one or more remote machines (such as via a network interface, modem, or other communication combination). Machines may be interconnected via physical networks and / or logical networks (such as intranets, the Internet, local area networks, wide area networks, etc.). Those skilled in the art will understand that network communications may utilize various wired and / or wireless short-range or long-range carriers and protocols, including radio frequency (RF), satellite, microwave, and IEEE 802.11. Optics, infrared, cables, lasers, etc.

[0105] Embodiments of this disclosure can be described by reference to or in conjunction with associated data, including functions, programs, data structures, application programs, etc., which, when accessed by a machine, enable the machine to perform tasks or define abstract data types or low-level hardware contexts. The associated data may be stored, for example, in volatile and / or non-volatile memory (e.g., RAM, ROM, etc.), or in other storage devices and their associated storage media, including hard disk drives, floppy disks, optical storage devices, magnetic tape, flash memory, memory sticks, digital video disks, bio-storage devices, etc. The associated data may be transmitted in the form of packets, serial data, parallel data, propagated signals, etc., over transmission environments including physical and / or logical networks, and may be used in compressed or encrypted formats. The associated data may be used in a distributed environment and stored locally and / or remotely for machine access.

[0106] Disclosed embodiments may include a tangible, non-transitory machine-readable medium comprising instructions executable by one or more processors, including instructions for performing the elements disclosed herein.

[0107] The various operations of the methods described above can be performed by any suitable means capable of performing the operations (such as one or more various hardware and / or software components, circuits and / or one or more modules). The software may include an ordered list of executable instructions for implementing logical functions and may be implemented on any "processor-readable medium" for use by or in conjunction with an instruction execution system, device, or apparatus (such as a single-core or multi-core processor or a system containing a processor).

[0108] The blocks or steps of methods, algorithms, and functions described in conjunction with the embodiments disclosed herein may be implemented directly in hardware, as software modules executed by a processor, or a combination of both. If implemented in software, the functions may be stored as one or more instructions or code on or transmitted through a tangible, non-transitory computer-readable medium. The software modules may reside in random access memory (RAM), flash memory, read-only memory (ROM), electrically programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), registers, hard disks, removable disks, CD-ROMs, or any other form of storage medium known in the art.

[0109] Having described and illustrated the principles of the disclosure with reference to the illustrated embodiments, it will be appreciated that the illustrated embodiments may be modified in arrangement and detail without departing from such principles, and may be combined in any desired manner. Furthermore, although the foregoing discussion has focused on particular embodiments, other configurations are contemplated. Specifically, although expressions such as "according to the disclosed embodiments" are used herein, these phrases mean reference to the general possibilities of the embodiments and are not intended to limit the disclosure to a particular embodiment configuration. As used herein, these terms may refer to the same or different embodiments that can be combined with other embodiments.

[0110] The foregoing illustrative embodiments should not be construed as limiting the disclosure therein. Although several embodiments have been described, those skilled in the art will readily understand that many modifications are possible to those embodiments without substantially departing from the novel teachings and advantages of this disclosure. Therefore, all such modifications are intended to be included within the scope of this disclosure as defined in the claims.

[0111] The disclosed embodiments are extendable to the following statements, without limitation:

[0112] Statement 1: The disclosed embodiments include a system comprising:

[0113] processor;

[0114] The first storage device supports a cache coherence interconnect protocol, which includes a block-level protocol and a byte-level protocol. The first storage device includes a first address range.

[0115] A second storage device, supporting a cache coherent interconnect protocol, includes a second address range and provides independent redundant array of disks (RAID) address ranges associated with the first and second address ranges; and

[0116] A decoder, associated with a second storage device, is configured to: receive a request from a processor and determine that a byte address within a RAID address range is associated with a target address range, the request using a byte-level protocol and including a byte address within the RAID address range.

[0117] The first and second storage devices are included in the RAID.

[0118] Statement 2. The disclosed embodiments include the system described in Statement 1, wherein the cache coherent interconnect protocol includes the compute fast link (CXL) protocol.

[0119] Statement 3. The disclosed embodiments include the system described in Statement 1, wherein the processor is configured to construct a RAID from a first storage device and a second storage device.

[0120] Statement 4. The disclosed embodiments include the system described in Statement 3, wherein the processor is further configured to: identify the first storage device and the second storage device.

[0121] Statement 5. The disclosed embodiments include the system described in Statement 3, wherein the processor is further configured to: determine the stripe size for RAID.

[0122] Statement 6. The disclosed embodiments include the system described in Statement 5, wherein the processor is further configured to determine the stripe size for RAID based at least in part on the block size.

[0123] Statement 7. The disclosed embodiments include the system described in Statement 6, wherein the stripe size is the product of the block size and the number of storage devices in the RAID.

[0124] Statement 8. The disclosed embodiments include the system described in Statement 6, wherein the decoder is configured to send the block size to the processor.

[0125] Statement 9. The disclosed embodiments include the system described in Statement 1, wherein,

[0126] The first storage device includes a first block of size;

[0127] The second storage device includes a second block of size; and

[0128] The decoder is configured to select one of a first block size and a second block size as the RAID block size for RAID.

[0129] Statement 10: The disclosed embodiments include the system described in Statement 9, wherein the RAID block size is the smaller of a first block size and a second block size.

[0130] Statement 11. The disclosed embodiments include the system described in Statement 1, wherein the decoder is further configured to: determine, at least in part, the association of byte addresses in the RAID address range with the target address range based on the block size and stripe size.

[0131] Statement 12. The disclosed embodiments include the system described in Statement 1, wherein the decoder is further configured to generate a second byte address in the target address range based at least in part on the byte address, block size, and stripe size.

[0132] Statement 13. The disclosed embodiments include the system described in Statement 12, wherein the decoder is further configured to generate a second byte address in the target address range based at least in part on the byte address, block size, stripe size, and base address of the target address range.

[0133] Statement 14. The disclosed embodiments include the system described in Statement 1, wherein the RAID includes a RAID level 0 configuration.

[0134] Statement 15: The disclosed embodiments include the system described in Statement 14, wherein the target address range includes a second address range.

[0135] Statement 16. The disclosed embodiments include the system described in Statement 15, wherein the second storage device is configured to execute the request.

[0136] Statement 17. The disclosed embodiments include the system described in Statement 14, wherein the target address range includes a first address range.

[0137] Statement 18. The disclosed embodiments include the system described in Statement 17, wherein,

[0138] The decoder is also configured to: send the request to a first storage device; and

[0139] The first storage device is configured to execute the request.

[0140] Statement 19. The disclosed embodiments include the system described in Statement 1, wherein the RAID includes a RAID level 1 configuration.

[0141] Statement 20: The disclosed embodiments include the system described in Statement 19, wherein the target address range includes a second address range.

[0142] Statement 21: The disclosed embodiments include the system described in Statement 20, wherein,

[0143] The request includes a storage request; and

[0144] The second storage device is configured to execute a storage request.

[0145] Statement 22: The disclosed embodiments include the system described in Statement 21, wherein,

[0146] The decoder is also configured to: send a storage request to a first storage device; and

[0147] The first storage device is configured to execute a storage request.

[0148] Statement 23: The disclosed embodiments include the system described in Statement 20, wherein,

[0149] The request includes a load request; and

[0150] The second storage device is configured to execute a storage request.

[0151] Statement 24. The disclosed embodiments include the system described in Statement 20, wherein,

[0152] The request includes a load request;

[0153] The decoder is also configured to send a load request to a first storage device; and

[0154] The first storage device is configured to execute a load request.

[0155] Statement 25. The disclosed embodiments include a method comprising:

[0156] Identify a first storage device that supports a cache coherence interconnect protocol, the cache coherence interconnect protocol including a block-level protocol and a byte-level protocol, the first storage device including a first address range;

[0157] Identify a second storage device that supports the cache coherent interconnect protocol, the second storage device including a second address range;

[0158] Construct a redundant array of independent disks (RAID) from the first and second storage devices;

[0159] The RAID address range is generated at least in part based on the first address range and the second address range; and

[0160] The decoder of the second storage device is configured to process requests that use a byte-level protocol and include byte addresses within a RAID address range.

[0161] Statement 26. The disclosed embodiments include the method described according to Statement 25, wherein the cache coherent interconnect protocol includes the compute fast link (CXL) protocol.

[0162] Statement 27. The disclosed embodiments include the method according to Statement 25, wherein the step of generating a RAID address range based at least in part on a first address range and a second address range includes: generating the RAID address range based at least in part on the first address range, the second address range, and the stripe size.

[0163] Statement 28, the disclosed embodiments include the method according to Statement 27, wherein the step of generating the RAID address range based at least in part on the first address range and the second address range further includes: determining the stripe size based at least in part on the block size.

[0164] Statement 29. The disclosed embodiments include the method according to Statement 28, wherein the step of determining the stripe size based at least in part on the block size includes: receiving the block size from the decoder.

[0165] Statement 30, the disclosed embodiments include the method according to Statement 25, wherein the step of generating a RAID address range based at least in part on a first address range and a second address range includes: generating a RAID address range to include a first RAID address associated with a first address in the first address range and a second RAID address associated with a second address in the second address range.

[0166] Statement 31. The disclosed embodiments include the method according to Statement 25, wherein the step of configuring the decoder of the second storage device to process a request including a byte address in a RAID address range includes: configuring the decoder of the second storage device to process the request at least in part based on the byte address, the RAID address range, the stripe size, and the block size.

[0167] Statement 32, the disclosed embodiments include the method according to statement 30, further comprising: sending the request to one of the first storage device and the second storage device based at least in part on the byte address, RAID address range, stripe size and block size.

[0168] Statement 33, the disclosed embodiments include the method according to Statement 32, wherein the step of sending the request to one of a first storage device and a second storage device based at least in part on the byte address, RAID address range, stripe size and block size includes: sending the request from the decoder to the first storage device based at least in part on the byte address, RAID address range, stripe size and block size.

[0169] Statement 34. The disclosed embodiments include the method according to Statement 25, wherein the step of generating a RAID address range based at least in part on a first address range and a second address range includes: generating a RAID address range to include RAID addresses associated with addresses in the second address range.

[0170] Statement 35, the disclosed embodiments include the method according to statement 34, further comprising: sending the request to one of a first storage device and a second storage device.

[0171] Statement 36. The disclosed embodiments include the method according to Statement 35, wherein,

[0172] The step of sending the request to one of the first storage device and the second storage device includes: sending the request to the second storage device; and

[0173] The method further includes sending the request from the decoder to the first storage device based at least in part on the byte address, RAID address range, stripe size, and block size.

[0174] Statement 37. The disclosed embodiments include a method comprising:

[0175] The decoder receives a request from the processor, the request using a byte-level protocol and including a byte address within a RAID address range;

[0176] Determine that the byte address is associated with a first address range of the first storage device; and

[0177] The request is processed using the first storage device.

[0178] The RAID address range is associated with the first address range of the first storage device and the second address range of the second storage device.

[0179] The first storage device supports a cache coherence interconnect protocol, which includes block-level and byte-level protocols.

[0180] The second storage device supports the cache coherent interconnect protocol.

[0181] Statement 38, the disclosed embodiments include the method according to Statement 37, wherein the step of determining the association of the byte address with a first address range of the first storage device includes: generating a second byte address in the address range of the first storage device based at least in part on the byte address, block size and stripe size.

[0182] Statement 39. The disclosed embodiments include the method according to Statement 38, wherein the step of generating a second byte address in the address range of the first storage device based at least in part on the byte address, block size, and stripe size includes: generating the second byte address in the address range of the first storage device based at least in part on the byte address, block size, stripe size, and base address of the first address range.

[0183] Statement 40: The disclosed embodiments include the method described according to Statement 37, wherein the first storage device and the second storage device are part of a RAID, which implements a RAID level 0 configuration or a RAID level 1 configuration.

[0184] Statement 41: The disclosed embodiments include the method according to Statement 37, wherein the first storage device includes the decoder.

[0185] Statement 42. The disclosed embodiments include the method according to Statement 37, wherein,

[0186] The second storage device includes the decoder; and

[0187] The step of using the first storage device to process the request includes: sending the request from the decoder to the first storage device.

[0188] Statement 43, the disclosed embodiments include the method according to statement 42, further comprising: using a second storage device to process the request.

[0189] Statement 44. The disclosed embodiments include an article comprising a non-transitory storage medium having instructions stored thereon, the instructions, when executed by a machine, such that:

[0190] Identify a first storage device that supports a cache coherence interconnect protocol, the cache coherence interconnect protocol including a block-level protocol and a byte-level protocol, the first storage device including a first address range;

[0191] Identify a second storage device that supports the cache coherent interconnect protocol, the second storage device including a second address range;

[0192] Construct a redundant array of independent disks (RAID) from the first and second storage devices;

[0193] The RAID address range is generated at least in part based on the first address range and the second address range; and

[0194] The decoder of the second storage device is configured to process requests that use a byte-level protocol and include byte addresses within a RAID address range.

[0195] Statement 45. The disclosed embodiments include the items described in Statement 44, wherein the cache coherent interconnect protocol includes the compute fast link (CXL) protocol.

[0196] Statement 46. The disclosed embodiments include the article according to Statement 44, wherein the process of generating a RAID address range based at least in part on a first address range and a second address range includes: generating a RAID address range based at least in part on a first address range, a second address range, and a stripe size.

[0197] Statement 47. The disclosed embodiments include the article according to Statement 46, wherein the process of generating the RAID address range based at least in part on the first address range and the second address range further includes: determining the stripe size based at least in part on the block size.

[0198] Statement 48. The disclosed embodiments include the article described in Statement 47, wherein the process of determining the strip size based at least in part on the block size includes: receiving the block size from the decoder.

[0199] Statement 49. The disclosed embodiments include the article according to Statement 44, wherein the process of generating a RAID address range based at least in part on a first address range and a second address range includes: generating a RAID address range to include a first RAID address associated with a first address in the first address range and a second RAID address associated with a second address in the second address range.

[0200] Statement 50, the disclosed embodiments include the article according to Statement 44, wherein the processing of configuring the decoder of the second storage device to process a request including a byte address in a RAID address range includes: configuring the decoder of the second storage device to process the request at least in part based on the byte address, the RAID address range, the stripe size, and the block size.

[0201] Statement 51: The disclosed embodiments include the article according to Statement 49, wherein the non-transitory storage medium has additional instructions stored thereon, which, when executed by a machine, cause the request to be sent to one of the first storage device and the second storage device, at least in part based on the byte address, RAID address range, stripe size, and block size.

[0202] Statement 52, the disclosed embodiments include the article according to Statement 51, wherein the process of sending the request to one of a first storage device and a second storage device based at least in part on the byte address, RAID address range, stripe size and block size includes: sending the request from the decoder to the first storage device based at least in part on the byte address, RAID address range, stripe size and block size.

[0203] Statement 53, the disclosed embodiments include the article according to Statement 44, wherein the process of generating a RAID address range based at least in part on a first address range and a second address range includes: generating a RAID address range to include RAID addresses associated with addresses in the second address range.

[0204] Statement 54. The disclosed embodiments include the article according to Statement 53, wherein the non-transitory storage medium has further instructions stored thereon, which, when executed by a machine, cause the request to be sent to one of a first storage device and a second storage device.

[0205] Statement 55. The disclosed embodiments include the articles described in Statement 54, wherein,

[0206] The process of sending the request to one of the first and second storage devices includes: sending the request to the second storage device; and

[0207] The non-transitory storage medium has additional instructions stored thereon, which, when executed by a machine, cause the request to be sent from the decoder to the first storage device based at least in part on the byte address, RAID address range, stripe size, and block size.

[0208] Statement 56. The disclosed embodiments include an article comprising a non-transitory storage medium having instructions stored thereon, the instructions, when executed by a machine, such that:

[0209] The decoder receives a request from the processor, the request using a byte-level protocol and including a byte address within a RAID address range;

[0210] Determine that the byte address is associated with a first address range of the first storage device; and

[0211] The request is processed using the first storage device.

[0212] The RAID address range is associated with the first address range of the first storage device and the second address range of the second storage device.

[0213] The first storage device supports a cache coherence interconnect protocol, which includes block-level and byte-level protocols.

[0214] The second storage device supports the cache coherent interconnect protocol.

[0215] Statement 57. The disclosed embodiments include the article according to Statement 56, wherein the process of determining the association of the byte address with a first address range of the first storage device includes: generating a second byte address in the address range of the first storage device based at least in part on the byte address, block size, and stripe size.

[0216] Statement 58. The disclosed embodiments include the article according to Statement 57, wherein the process of generating a second byte address in the address range of the first storage device based at least in part on the byte address, block size, and stripe size includes: generating a second byte address in the address range of the first storage device based at least in part on the byte address, block size, stripe size, and base address of the first address range.

[0217] Statement 59: The disclosed embodiments include the articles described in Statement 56, wherein the first storage device and the second storage device are part of a RAID that implements a RAID level 0 configuration or a RAID level 1 configuration.

[0218] Statement 60: The disclosed embodiments include the article described in Statement 56, wherein the first storage device includes the decoder.

[0219] Statement 61: The disclosed embodiments include the articles described in Statement 56, wherein,

[0220] The second storage device includes the decoder; and

[0221] The process of using the first storage device to process the request includes sending the request from the decoder to the first storage device.

[0222] Statement 62. The disclosed embodiments include the article according to Statement 61, wherein the non-transitory storage medium has further instructions stored thereon, which, when executed by a machine, cause the request to be processed using a second storage device.

[0223] Therefore, given the extensive variety of substitutions for the embodiments described herein, this specific description and the appended materials are intended to be illustrative only and should not be considered as limiting the scope of disclosure. Thus, what is claimed in this disclosure are all such modifications that fall within the scope and spirit of the appended claims and their equivalents.

Claims

1. A system comprising: processor; The first storage device supports a cache coherence interconnect protocol, which includes a block-level protocol and a byte-level protocol. The first storage device includes a first address range. The second storage device supports a cache coherent interconnect protocol, the second storage device includes a second address range, and the second storage device provides an independent disk redundancy array (RAID) address range associated with the first address range and the second address range; as well as A decoder, associated with a second storage device, is configured to: receive a request from a processor and determine that a byte address within a RAID address range is associated with a target address range, the request using a byte-level protocol and including a byte address within the RAID address range. The first and second storage devices are included in the RAID. RAID includes RAID configuration; The target address range includes the first address range; The decoder is also configured to: send the request to a first storage device; and The first storage device is configured to execute the request.

2. The system according to claim 1, wherein, The processor is configured to build a RAID from the first and second storage devices.

3. The system according to claim 2, wherein, The processor is also configured to determine the stripe size used for RAID.

4. The system according to claim 3, wherein, The processor is also configured to determine the stripe size for RAID based at least in part on the block size.

5. The system according to claim 4, wherein, The stripe size is the product of the block size and the number of storage devices in the RAID.

6. The system according to claim 4, wherein, The decoder is configured to send the block size to the processor.

7. The system according to claim 1, wherein, The decoder is also configured to determine, at least in part, the association between byte addresses in the RAID address range and the target address range based on the block size and stripe size.

8. The system according to claim 1, wherein, The decoder is also configured to generate a second byte address in the target address range based at least in part on the byte address, block size, and stripe size.

9. The system according to claim 1, wherein, The request includes a storage request; The second storage device is configured to: execute a storage request; The decoder is also configured to: send a storage request to a first storage device; and The first storage device is configured to execute a storage request.

10. The system according to claim 1, wherein, The request includes a load request; The decoder is also configured to send a load request to a first storage device; and The first storage device is configured to execute a load request.

11. A method comprising: Identify a first storage device that supports a cache coherence interconnect protocol, the cache coherence interconnect protocol including a block-level protocol and a byte-level protocol, the first storage device including a first address range; Identify a second storage device that supports the cache coherent interconnect protocol, the second storage device including a second address range; Construct an independent disk redundancy array (RAID) from the first and second storage devices; The RAID address range is generated at least in part based on the first address range and the second address range; as well as The decoder of the second storage device is configured to process requests and determine the association between byte addresses within a RAID address range and a target address range, the requests using a byte-level protocol and including byte addresses within the RAID address range. Here, RAID includes RAID configuration, and the target address range includes the first address range. The method further includes: The request is sent to the first storage device via a decoder; and The request is executed through the first storage device.

12. The method according to claim 11, wherein, The step of generating a RAID address range based at least in part on a first address range and a second address range includes: generating a RAID address range based at least in part on a first address range, a second address range, and a stripe size.

13. The method according to claim 11, wherein, The step of configuring the decoder of the second storage device to process the request including a byte address in a RAID address range includes: configuring the decoder of the second storage device to process the request at least in part based on the byte address, the RAID address range, the stripe size, and the block size.

14. A method comprising: The decoder receives a request from the processor, the request using a byte-level protocol and including a byte address within the range of Independent Disk Redundancy Array (RAID) address ranges; Determine the association between the byte address and the first address range of the first storage device; as well as The request is processed using the first storage device. The RAID address range is associated with the first address range of the first storage device and the second address range of the second storage device. The first storage device supports a cache coherence interconnect protocol, which includes block-level and byte-level protocols. The second storage device supports the cache coherence interconnect protocol. The first storage device includes the decoder, or The second storage device includes the decoder, and the step of using the first storage device to process the request includes sending the request from the decoder to the first storage device.

15. The method according to claim 14, wherein, The step of determining the association of a byte address with a first address range of the first storage device includes: generating a second byte address within the address range of the first storage device based at least in part on the byte address, block size, and stripe size.

16. The method according to claim 15, wherein, The step of generating a second byte address in the address range of a first storage device based at least in part on a byte address, a block size, and a stripe size includes: generating a second byte address in the address range of a first storage device based at least in part on a byte address, a block size, a stripe size, and a base address for the first address range.

17. The method of claim 14, further comprising: The request is processed using a second storage device.

Citation Information

Patent Citations

  • Architecture and design of a storage device controller for hyperscale infrastructure

    US20210278998A1

  • Storage Devices Having Minimum Write Sizes Of Data

    US20210334201A1