Patent ID: 12216595

DETAILED DESCRIPTION

For purposes of this disclosure, an information handling system may include any instrumentality or aggregate of instrumentalities operable to compute, calculate, determine, classify, process, transmit, receive, retrieve, originate, switch, store, display, communicate, manifest, detect, record, reproduce, handle, or utilize any form of information, intelligence, or data for business, scientific, control, or other purposes. For example, an information handling system may be a personal computer (e.g., desktop or laptop), tablet computer, mobile device (e.g., personal digital assistant (PDA) or smart phone), server (e.g., blade server or rack server), a network storage device, or any other suitable device and may vary in size, shape, performance, functionality, and price. The information handling system may include random access memory (RAM), one or more processing resources such as a central processing unit (CPU) or hardware or software control logic, ROM, and/or other types of nonvolatile memory. Additional components of the information handling system may include one or more disk drives, one or more network ports for communicating with external devices as well as various input and output (I/O) devices, such as a keyboard, a mouse, touchscreen and/or a video display. The information handling system may also include one or more buses operable to transmit communications between the various hardware components.

In one embodiment, IHS100,FIG.1, includes a processor102, which is connected to a bus104. Bus104serves as a connection between processor102and other components of IHS100. An input device106is coupled to processor102to provide input to processor102. Examples of input devices may include keyboards, touchscreens, pointing devices such as mouses, trackballs, and trackpads, and/or a variety of other input devices known in the art. Programs and data are stored on a mass storage device108, which is coupled to processor102. Examples of mass storage devices may include hard discs, optical disks, magneto-optical discs, solid-state storage devices, and/or a variety of other mass storage devices known in the art. IHS100further includes a display110, which is coupled to processor102by a video controller112. A system memory114is coupled to processor102to provide the processor with fast storage to facilitate execution of computer programs by processor102. Examples of system memory may include random access memory (RAM) devices such as dynamic RAM (DRAM), synchronous DRAM (SDRAM), solid state memory devices, and/or a variety of other memory devices known in the art. In an embodiment, a chassis116houses some or all of the components of IHS100. It should be understood that other buses and intermediate circuits can be deployed between the components described above and processor102to facilitate interconnection between the components and the processor102.

Referring now toFIG.2, an embodiment of a computing device200is illustrated that may include the direct-attached storage device software RAID system of the present disclosure. In an embodiment, the computing device200may be provided by the IHS100discussed above with reference toFIG.1and/or may include some or all of the components of the IHS100, and in specific examples may be provided by a server device. However, while illustrated and discussed as being provided by a server device, one of skill in the art in possession of the present disclosure will recognize that the functionality of the computing device200discussed below may be provided by other devices that are configured to operate similarly as the computing device200discussed below. In the illustrated embodiment, the computing device200includes a chassis202that houses the components of the computing device200, only some of which are illustrated and described below.

For example, the chassis202may house a processing system (not illustrated, but which may include the processor102discussed above with reference toFIG.1such as a Central Processing Unit (CPU)) and a memory system (not illustrated, but which may include the memory114discussed above with reference toFIG.1such as Dynamic Random Access Memory (DRAM)) that is coupled to the processing system and that includes instructions that, when executed by the processing system, cause the processing system to provide an operating system engine204that is configured to perform the functionality of the operating system engines and/or computing devices discussed below. In the illustrated embodiment, the memory system may also include instructions that, when executed by the processing system, cause the processing system to provide a software RAID engine204athat is configured to perform the functionality of the software RAID engines, software RAID subsystems, and/or computing devices discussed below.

To provide a specific example, the software RAID engine204amay include a software RAID driver that is configured to utilize hardware resources in the computing device (e.g., the CPU, memory, etc.) in order to create and manage RAID infrastructure and/or perform any of a variety of RAID operations known in the art without the need for dedicated/specialized RAID hardware (e.g., a dedicated hardware RAID controller). However, while the software RAID engine204ais illustrated and described as being included in the operating system and/or otherwise being provided by the operating system engine204(i.e., being provided by the processing/memory system combination that also provides the operating system engine204), one of skill in the art in possession of the present disclosure will appreciate how the software RAID engine204amay be provided separately from the operating system/operating system engine204while remaining within the scope of the present disclosure as well.

In an embodiment, the software RAID driver in the software RAID engine204awill include a Small Computer System Interface (SCSI)-based driver, and one of skill in the art in possession of the present disclosure will appreciate how such a SCSI-compliant driver may be configured to be utilized with any PCIe devices/PCIe controller devices (e.g., Advanced Host Controller Interface (AHCI) controllers, SAS controllers, virtual PCIe controllers, NVMe controllers, etc.), thus allowing a computing device manufacturer to provide a single SCSI-based software RAID driver on a plurality of different computing device configurations of computing devices manufactured by the computing device manufacturer in order to enable the software RAID functionality described below in any of those computing devices using the PCIe devices/PCIe controller devices included in those computing devices. To provide a specific example, the software RAID driver in the software RAID engine204amay be implemented via the Storport/miniport model used in the WINDOWS® operating system, although other software RAID driver configurations will fall within the scope of the present disclosure as well.

In the illustrated embodiment, the memory system may also include instructions that, when executed by the processing system, cause the processing system to provide an operating system204bthat is configured to use and control the hardware resources in the computing device200, and/or perform any of the other functionality of the operating systems and/or computing devices discussed below. For example, the operating system204bmay be provided by a WINDOWS® operating system available from MICROSOFT® Corp. of Redmond, Washington, United States, although other operating systems are envisioned as falling within the scope of the present disclosure as well.

In the illustrated embodiment, the chassis202also houses one or more controller devices206that are coupled to the software RAID engine204a(e.g., via a coupling between the controller device(s)206and the processing system that provides the software RAID engine204a). As discussed in the specific examples provided below, the controller device(s)206may be provided by Peripheral Component Interconnect express (PCIe) controller devices that may be included in and/or coupled to PCIe devices that are not provided by storage devices. For example, the PCIe controller device(s)206may be physical or virtual PCIe controller devices and may be included in Host Bus Adapter (HBA) devices, Advanced Host Controller Interface (AHCI) devices, and/or other PCIe devices that would be apparent to one of skill in the art in possession of the present disclosure. However, while illustrated and described as being provided by PCIe controller device(s), one of skill in the art in possession of the present disclosure will appreciate how the controller device(s)206may be provided by other types of controller devices while remaining within the scope of the present disclosure as well.

In the illustrated embodiment, the chassis202also houses one or more controller devices208athat are coupled to the software RAID engine204a(e.g., via a coupling between the controller device(s)208aand the processing system that provides the software RAID engine204a). As illustrated and discussed in the specific examples provided below, the controller device(s)208amay be provided by Peripheral Component Interconnect express (PCIe) storage controller devices that are coupled to one or more storage devices208bthat may be provided by any of Non-Volatile Memory express (NVMe) storage devices, Serial Attached Small Computer System Interface (SCSI) (SAS) storage device, Serial AT Attachment (SATA) storage devices, and/or other storage devices that would be apparent to one of skill in the art in possession of the present disclosure. For example, the PCIe storage controller device(s)208amay be provided by physical or virtual PCIe storage controller devices and may include PCIe storage controller devices configured as NVMe storage controllers, SAS storage controllers, SATA storage controllers, and/or other PCIe storage controller devices that would be apparent to one of skill in the art in possession of the present disclosure. However, while illustrated and described as being provided by PCIe controller device(s), one of skill in the art in possession of the present disclosure will appreciate how the controller device(s)208amay be provided by other types of controller devices while remaining within the scope of the present disclosure as well.

In the illustrated embodiment, the chassis202also houses one or more controller devices210athat are coupled to the software RAID engine204a(e.g., via a coupling between the controller device(s)208aand the processing system that provides the software RAID engine204a). As illustrated and discussed in the specific examples provided below, the controller device(s)210amay be provided by Peripheral Component Interconnect express (PCIe) controller devices that are included in one or more storage devices210that may be provided by any of Non-Volatile Memory express (NVMe) storage devices, Serial Attached Small Computer System Interface (SCSI) (SAS) storage device, Serial AT Attachment (SATA) storage devices, and/or other storage devices that would be apparent to one of skill in the art in possession of the present disclosure. For example, the PCIe storage controller device(s)210amay be provided by physical or virtual PCIe storage controller devices and may include PCIe storage controller devices configured as NVMe storage controllers. However, while illustrated and described as being provided by PCIe controller device(s), one of skill in the art in possession of the present disclosure will appreciate how the controller device(s)210amay be provided by other types of controller devices while remaining within the scope of the present disclosure as well.

However, while three different embodiments of controller devices206,208a, and210aare illustrated and described as being included in the computing device200(e.g., stand-alone controller device(s), storage-device-connected controller device(s), and storage-device-integrated controller device(s)), one of skill in the art in possession of the present disclosure will appreciate how one or more of the controller devices206,208a, and/or210amay be omitted from the computing device200while remaining within the scope of the present disclosure as well. Furthermore, while not explicitly illustrated, one of skill in the art in possession of the present disclosure will appreciate how any of the controller devices208aand/or210amay be coupled to and/or may control multiple storage devices208band/or210, respectively, while remaining within the scope of the present disclosure as well.

Further still, one of skill in the art in possession of the present disclosure will appreciate how storage devices may be coupled to the software RAID engine204avia multiple controller devices (e.g., when an NVMe storage device with an integrated controller device is connected via an external controller device to the software RAID engine204a). As such, while a specific computing device200has been illustrated and described, one of skill in the art in possession of the present disclosure will recognize that computing devices (or other devices operating according to the teachings of the present disclosure in a manner similar to that described below for the computing device200) may include a variety of components and/or component configurations for providing conventional computing device functionality, as well as the direct-attached storage device software RAID functionality discussed below, while remaining within the scope of the present disclosure as well.

For example, one of skill in the art in possession of the present disclosure will appreciate how the present disclosure describes the direct-attached storage device software RAID system of the present disclosure implemented to operate with an operating system such as the WINDOWS® operating system described above. However, the inventors of the present disclosure have also developed a direct-attached storage device software RAID system that may be implemented with a hypervisor subsystem in order to allow software RAIDs to be provided using any types of direct-attached storage devices and any types of CPUs in a computing device similarly as described below, and that direct-attached storage device software RAID system is described in U.S. patent application Ser. No. 18/227,914, filed Jul. 29, 2023, the disclosure of which is incorporated herein by reference in its entirety.

Referring now toFIG.3, an embodiment of a method300for providing a software Redundant Array of Independent Disk (RAID) using direct-attached storage devices in a computing device is illustrated. As discussed below, the systems and methods of the present disclosure provide for the presentation by a software RAID subsystem to an operating system of a single, primary controller device as being connected to a logical storage device provided by a plurality of physical storage devices, with the software RAID subsystem receiving commands from the operating system that are directed to the primary controller device and that identify a logical storage subsystem that is included in the logical storage device, and transmitting those commands to a subset of the physical storage devices that provide that logical storage subsystem via respective controller device(s) that couple the software RAID subsystem to that subset of physical storage devices.

For example, the direct-attached storage device software RAID system of the present disclosure may include a chassis housing a software RAID subsystem coupled to physical storage devices, controller devices, and an operating system housed in the chassis. The software RAID subsystem uses the physical storage devices to provide a logical storage device to the operating system. The software RAID subsystem also presents a first controller device to the operating system as a primary controller device that is connected to the logical storage device. When the software RAID subsystem receives a command from the operating system directed to the primary controller device and identifying a logical storage subsystem in the logical storage device, it transmits the command to each of a subset of the physical storage devices that provide the logical storage subsystem in the logical storage device via a respective one of the controller devices that couples the software RAID subsystem to that physical storage device. As such, software RAIDs may be provided using any types of direct-attached storage devices and any types of CPUs in a computing device, as well as provide a variety of other benefits that would be apparent to one of skill in the art in possession of the present disclosure.

The method300begins at block302where a software RAID subsystem configures a logical storage device using physical storage devices. With reference toFIG.4, in an embodiment of block302, the software RAID engine204ain the computing device200may perform logical storage device configuration operations400that may include discovering each of the controller devices206,208a, and210aand, in response, discovering each of the storage devices208band/or210coupled thereto, and then configuring a logical storage device using those storage devices208band/or210. In a specific example, each of the storage device(s)208amay be coupled to a PCIe controller device that is provided by one of the controller device(s)208adiscovered at block302, and each of the storage device(s)210may include a PCIe controller device that is provided by one of the controller device(s)210adiscovered at block302, while PCIe controller device(s) that are provided by the controller device(s)206and that are not coupled to storage devices may be discovered at block302as well.

For example, in response to the powering on, reset, reboot, and/or other initialization of the computing device200, the computing device200may enter a pre-boot mode in which the software RAID engine204aperforms any of a variety of software RAID operations and/or other techniques that would be apparent to one of skill in the art in possession of the present disclosure in order to configure a RAID using the storage devices208aand210that allows the software RAID engine204ato present those storage devices208aand210as one or more logical storage devices. As will be appreciated by one of skill in the art in possession of the present disclosure, the RAID maybe configured using the storage devices208aand210with a variety of standard RAID levels such as a RAID0, RAID1, RAID2, RAID3, RAID4, RAID5, or RAID 6, as well as combinations of standard RAID levels (e.g., RAID 1+0, also known as RAID10), non-standard RAID levels, and/or any other RAID levels that would be apparent to one of skill in the art in possession of the present disclosure.

The method300then proceeds to block304where the software RAID subsystem allocates memory space for a direct-attached storage device software RAID system. In an embodiment, at block304, the software RAID engine204ain the computing device200may perform memory space allocation operations that may include allocating memory space for use by the direct-attached storage device software RAID system of the present disclosure. For example, the memory space allocation operations performed by the software RAID engine204amay include allocating a memory space or other portion of the memory system that is used to provide the operating system engine204(e.g., operating system kernel memory) for use by the software RAID engine204ato perform any of the direct-attached storage device software RAID operations or other functionality discussed below. As will be appreciated by one of skill in the art in possession of the present disclosure, the memory space or other portion of the memory system allocated for use by the direct-attached storage device software RAID system may be referred to a “non-cached/non-coherent memory” that may be dynamically allocated during initialization of the computing device200to the software RAID driver provided by the software RAID engine204a(e.g., unlike memory space allocated to stacks), and one of skill in the art in possession of the present disclosure will recognize how the non-cached/non-coherent memory may be utilized to perform any of the functionality described below.

In a specific example, the allocation of the non-cached/non-coherent memory to the software RAID engine204amay be performed during module initialization operations that are performed when the operating system204bprovided by the operating system engine204is loaded and calls those module initialization operations, and the software RAID engine204amay allocate the non-cached/non-coherent memory based on a number of storage devices (e.g., a maximum number of storage devices) that the software RAID engine204ais configured to support. However, while a specific example of the allocation of memory space for use by the direct-attached storage device software RAID system of the present disclosure has been described, one of skill in the art in possession of the present disclosure will appreciate how memory space may be allocated for use by the direct-attached storage device software RAID system using a variety of techniques that will fall within the scope of the present disclosure as well.

The method300then proceeds to block306where the software RAID subsystem and the operating system register a controller device supported by the software RAID subsystem. With reference toFIG.5, in an embodiment of block306, the controller device registration operations may include the software RAID engine204ain the computing device200performing supported controller device identification operations500that may include identifying controller devices that are supported by the software RAID engine204ato the operating system204bin the computing device200(e.g., using miniport driver commands). For example, any of the controller devices206,208a, and/or210adiscovered at block302as discussed above may be identified to the operating system204bas supported controller devices at block306. In a specific example, at block306, the software RAID engine204amay generate a Peripheral Component Interconnect (PCI) IDentification (PCIID) file that identifies the PCIe controller devices that are supported by the software RAID engine204a, and may load or otherwise transmit that PCIID file to the operating system204b. However, while a specific example of the identification of controller devices to the operating system204bthat are supported by the software RAID engine204ahas been described, one of skill in the art in possession of the present disclosure will appreciate how the software RAID engine204amay identify supported controller devices to the operating system204busing other techniques that will fall within the scope of the present disclosure as well.

With reference toFIG.6A, in an embodiment of block306, the controller device registration operations may also include the operating system204bin the computing device200performing controller device attachment request operations600that may include the operating system204bgenerating and transmitting a controller device attachment request for one of the controller devices that was identified as being supported by the software RAID engine204a. For example, the operating system204bmay generate and transmit a “Find Adapter” call that provides the controller device attachment request and that one of skill in the art in possession of the present disclosure will recognize provides an instruction to the software RAID engine to find and attach one of the controller devices that was identified as being supported (e.g., via a Storport layer). However, while a specific example of a controller device attachment request has been described, one of skill in the art in possession of the present disclosure will appreciate how the operating system204bmay request the initialization and discovery of controller devices using other techniques that will fall within the scope of the present disclosure as well.

With reference toFIG.6B, in an embodiment of block306and in response to receiving the controller device attachment request (e.g., the “FindAdapter” call), the controller device registration operations may also include the software RAID engine204aand the operating system204bin the computing device200performing controller device attachment operations602that may include the software RAID engine204aprocessing the controller device attachment request, attaching a corresponding controller device, and confirming the completion of the controller device attachment request that was received from the operating system204b. For example, in response to the successful attachment of a connected controller device and its corresponding storage device(s), the software RAID engine204amay confirm the attachment request to the operating system204b(e.g., via a “Find Adapter call success” communication transmitted to the operating system204b). While not illustrated or discussed in detail, one of skill in the art in possession of the present disclosure will appreciate how the software RAID engine204amay identify to the operating system204bany failures of the attachment of any connected controller devices and its corresponding storage device(s) as well. In response to receiving the confirmation of the controller device attachment request (e.g., the “Find Adapter call success” communication), the controller device attachment operations602may include the operating system204bgenerating and transmitting an initialization and discovery request (e.g., a “HwInitialize” call) to the software RAID engine204a.

With reference toFIG.6C, in an embodiment of block306and in response to receiving the initialization and discovery request from the operating system204b, the controller device registration operations may also include the software RAID engine204ain the computing device200performing initialization and discovery operations604that may include, in the specific example provided inFIG.6C, the software RAID engine204ainitializing and discovering the one of the controller device(s)206identified by the operating system204bin the controller device attachment request. As will be appreciated by one of skill in the art in possession of the present disclosure, the initialization and discovery operations604performed by the software RAID engine204amay include any of a variety of initialization operations and discovery operations that would be apparent to one of skill in the art in possession of the present disclosure, that may depend on the protocol supported by that controller device (e.g., a SAS protocol, a SATA protocol, an NVMe protocol, etc.), and that result in the registration of that controller device206with the operating system204b.

In some embodiments, following the initialization and discovery of the first controller device during the first iteration of block306, the software RAID engine204ain the computing device200may perform timer registration operations that may include registering a timer with the operating system204b. As discussed below, some embodiments of the present disclosure may include the utilization of a timer to determine when the last controller device has been registered as part of the controller device registration operations performed across one or more iterations of block306of the method300, and thus that timer may be registered by the software RAID engine204awith the operating system204bat block306using any of a variety of timer registration techniques that would be apparent to one of skill in the art in possession of the present disclosure. However, the registration of the timer is described as occurring at a particular point in method300(e.g., following initialization and discovery of the first controller device during the first iteration of block306), one of skill in the art in possession of the present disclosure will appreciate how the timer may be registered at other points in the method300while remaining within the scope of the present disclosure as well. Furthermore, and as discussed in further details below, other embodiments of the method300may utilize other techniques to determine when the last controller device has been registered as part of the controller device registration operations across one or more iterations of block306of the method300, and thus the timer registration operations may be skipped in those embodiments.

The method300then proceeds to decision block308where it is determined whether there is an additional controller device supported by the software RAID subsystem to register. In some embodiments of decision block308, following the registration of the one of the controller device(s)206(in the specific example provided inFIG.6B) in the operating system204bat block306, the software RAID engine204ain the computing device200may perform timer activation operations in order to activate the timer discussed above that may have been registered with the operating system204bin some embodiments of the present disclosure. The software RAID engine204amay then monitor that timer at decision block308to determine whether another controller device attachment request (e.g., the “FindAdapter” call in the specific example provided above) for another of the controller devices206,208b, and/or210ais received from the operating system204bwithin a threshold time period. As will be appreciated by one of skill in the art in possession of the present disclosure, the software RAID engine204amay utilize any of a variety of threshold time periods that, after which, the software RAID engine204amay assume that no further controller device attachment requests will be received (i.e., that there are no further controller devices to be registered with the operating system204b).

However, while the use of a timer and threshold time period following registration of any particular controller device in order to determine whether there are any other controller devices to register at decision block308has been described, as discussed above other techniques for determining whether there are any other controller devices to register at decision block308will fall within the scope of the present disclosure as well. For example, other embodiments of the present disclosure may provide a software driver in the computing device200that is configured to identify a number of available controller devices in the computing device200, and then transmit that number of available controller devices to the software RAID engine204afor use in determining at decision block308whether the number of controller devices registered with the operating system204ahas reached that number of available controller devices. As such, the determination of whether there are any other controller devices to register in the operating system204bduring decision block308of the method300may be performed in a variety of manners while remaining within the scope of the present disclosure.

If, at decision block308, it is determined that there is an additional controller device supported by the software RAID subsystem to register, the method300returns to block306. As such, the method300may loop such that the software RAID engine204aand the operating system204bin the computing device200operate to register any additional controller device with the operating system204b. Thus, different iterations of block306and decision block308may cause the software RAID engine204aand the operating system204bto register each of the controller devices in the computing device200in the operating system204b. For example, for any remaining controller devices206,208a, and210a, the controller device attachment request operations600, controller device attachment operations602, and initialization and discovery operations604described above for block306may be performed for that controller device, and block306may repeat until it is determined that there are no additional controller devices to register with the operating system204b.

If, at decision block308, it is determined that there are no additional controller devices supported by the software RAID subsystem to register, the method300proceeds to block310where the software RAID subsystem creates one or more logical storage subsystems in the logical storage device. In an embodiment, at block310and in response to determining that there are no additional controller devices to register with the operating system204b, the software RAID engine204ain the computing device200may perform logical storage subsystem creation operations that may include creating one or more logical storage subsystems in the logical storage device provided by the storage devices208band210. For example, with reference toFIG.7, in some embodiments the logical storage subsystem creation operations may include the software RAID engine204aperforming metadata retrieval operations700that may include retrieving metadata from the controller devices208aand210acoupled to each of the storage devices208band210that are being used to provide the logical storage device.

As will be appreciated by one of skill in the art in possession of the present disclosure, the metadata retrieved from the controller devices208aand210acoupled to each of the storage devices208band210may identify one or more logical storage subsystems (e.g., virtual disks, RAID volumes, RAID Logical Unit Numbers (LUNs), and/or logical storage subsystems known in the art) that will be provided by each of the storage devices208band210, as well as any other information that one of skill in the art in possession of the present disclosure would recognize as providing for the creation of the logical storage subsystems in the logical storage device. As such, at block310, the logical storage subsystem creation operations performed by the software RAID engine204amay include using the metadata retrieved from the controller devices208aand210acoupled to each of the storage devices208band210to “build”, generate, and/or otherwise create one or more logical storage subsystems (e.g., virtual disks, RAID volumes, RAID LUNs, and/or logical storage subsystems known in the art) in the logical storage device that is provided by the storage devices208band210. However, while a specific example of the creation of logical storage subsystem(s) in a logical storage device has been described, one of skill in the art in possession of the present disclosure will appreciate how the logical storage subsystems may be created in the logical storage device using a variety of techniques that will fall within the scope of the present disclosure as well.

The method300then proceeds to block312where the software RAID subsystem configures command communications with the operating system. With reference toFIG.8, in an embodiment of block312, the software RAID engine204ain the computing device200may perform command communication configuration operations800that may include identifying a primary controller device from the plurality of controller devices206,208a, and210a. For example, the controller device206,208a, or210aidentified as the primary controller device at block312may be a PCIe controller device that may have been designated by a computing device manufacturer to operate as the primary controller device based on that PCIe controller device being common to a variety of different configurations of computing devices provided by the computing device manufacturer (and thus being present in each of those computing devices/computing device configurations if needed to implement the direct-attached storage device software RAID system of the present disclosure). In another example, the controller device206,208a, or210aidentified as the primary controller device at block312may be a PCIe controller device that is not configured to be “hot removed” from the computing device200. However, while a few specific examples of controller devices that may be identified as primary controller devices have been described, one of skill in the art in possession of the present disclosure will appreciate how any of a variety of criteria may be used to designate the controller device that may be identified as the primary controller device at block312while remaining within the scope of the present disclosure as well.

Following the command configuration operations at block312, the direct-attached storage device software RAID system completes initialization such that the RAID volume provided by the logical storage device is configured for use, and one of skill in the art in possession of the present disclosure will appreciate how a full RAID volume or partial RAID volume may be configured via the method300as described above, and may be used for runtime data, during boot/initialization, and/or for other RAID volume uses that would be apparent to one of skill in the art in possession of the present disclosure.

The method300then proceeds to block314where the software RAID subsystem presents one of the controller devices to the operating system as a primary controller device that is connected to the logical storage device. With reference toFIG.9, in an embodiment of block314and following the completion of the initialization of the direct-attached storage device software RAID system, the software RAID engine204amay present, to the operating system204bin the computing device200, a primary controller device900(which as discussed above is provided by one of the controller devices206,208a, or210a) as being connected to a RAID logical storage device902that is provided using a plurality of physical storage devices904a,904b, and up to904c(which may be any of the storage devices208aand210registered with the operating system204bas discussed above).

To provide a specific example, one of the controller device(s)206that is not connected to a storage device may be presented to the operating system204bas being connected to the RAID logical storage device902, although one of skill in the art in possession of the present disclosure will appreciate how any one of the controller devices208aor210amay be presented to the operating system204bas being connected to the RAID logical storage device902while remaining within the scope of the present disclosure as well. As will be appreciated by one of skill in the art in possession of the present disclosure, any of the controller devices206,208a, and210athat are not presented to the operating system204bas being connected to the RAID logical storage device902may instead be presented to the operating system204bas secondary controller devices that are not connected to the RAID logical storage device902or any of the storage devices904a-904c(i.e., despite at least some of those controller devices being physically connected to those storage devices904a-904c).

As such, each of the logical storage subsystems (e.g., virtual disks, RAID volumes, RAID LUNs, and/or logical storage subsystems known in the art) provided by the RAID logical storage device902are exposed to the operating system204bvia the primary controller device900. Thus, using some of the specific examples discussed above, each of the logical storage subsystems (e.g., virtual disks, RAID volumes, RAID LUNs, and/or logical storage subsystems known in the art) provided by storage devices904a-904bmay be presented to a user of the operating system provided by the operating system engine204as SCSI storage devices or otherwise being provided by SCSI storage devices.

The method300then proceeds to block316where the software RAID subsystem receives a command from the operating system that is directed to a primary controller device and that identifies a logical storage subsystem. With reference toFIG.10, in an embodiment of block316, the operating system204bin the computing device200may perform command provisioning operations1000that include generating a command that identifies a logical storage subsystem provided by the RAID logical storage device902, and transmitting that command to the primary controller device900that is presented as being connected to the RAID logical storage device902, which one of skill in the art in possession of the present disclosure will appreciate will result that in that command being received by the software RAID engine204ain the computing device200. In an embodiment, the command transmitted by the operating system204bto the software RAID engine204amay include I/O commands such as a read command, a write command, and/or any other RAID commands that would be apparent to one of skill in the art in possession of the present disclosure.

Using the specific example provided above in which the software RAID engine204ais provided by a SCSI-based driver, any commands received at block316by the software RAID engine204afrom the operating system204bmay be SCSI commands. Furthermore, as discussed in some of the specific examples above, the commands received at block316by the software RAID engine204afrom the operating system204bmay be mapped to protocol queues in the operating system204bthat are used to communicate with the software RAID engine204aprovided by the SCSI-based driver, and thus the software RAID engine206amay receive those commands via the accessing of those protocols queues.

The method300then proceeds to block318where the software RAID subsystem transmits the command to a subset of physical storage devices that provide the logical storage subsystem via respective controller device(s) that couple the software RAID subsystem to that subset of physical storage devices. With continued reference toFIG.10, in an embodiment of block318, the software RAID engine204amay perform command transmission operations1000aand1000bthat, in the specific example illustrated inFIG.10, includes transmitting the command received at block316to the storage device904aand the storage device904cvia their respective controller device(s) (e.g., any of the controller device(s)208aand210a) based on those storage devices904aand904cproviding the logical storage subsystem identified in the command received by the software RAID engine204afrom the operating system204b. As will be appreciated by one of skill in the art in possession of the present disclosure, the commands1000aand1000btransmitted to the storage devices904aand904cmay be provided by modified versions of the command1000received from the operating system204b(e.g., SCSI commands received from the operating system204bmay be translated to a protocol supported by the controller device/storage device to which it is transmitted).

For example, in response to receiving the command from the operating system204bin the computing device200, the software RAID engine204ain the computing device200may determine which of the storage devices904a-904cprovide the logical storage subsystem identified in that command (e.g., the storage devices904aand904cin this specific example). As discussed above, in some specific examples, protocol queues in the operating system204bmay be mapped to SAS, SATA, and/or NVMe protocol queues in the software RAID engine204a, and thus the software RAID engine204amay provide any commands received from the operating system204bin the protocol queues associated with the protocol utilized by the storage devices that provide the logical storage subsystem to which those commands are directed. As such, the command received by the software RAID engine204afrom the operating system204bmay be placed in a protocol queue associated with the protocol used by the storage device904a, as well as in a protocol queue associated with the protocol used by the storage device904c.

In embodiments in which the software RAID engine204ais provided by a SCSI-based driver and the commands received from the operating system204bare SCSI commands, in the event the storage devices904aand/or904care SAS storage devices or otherwise use the SAS protocol, SCSI commands may be placed in a SAS protocol queue in the software RAID engine204aand then transmitted to the storage devices904aand/or904cvia their respective controller device(s) (e.g., any of the controller device(s)208aand210a). However, in the event the storage devices904aand/or904care SATA storage devices or otherwise use the SATA protocol, SCSI commands may be placed in a SATA protocol queue in the software RAID engine204a, translated using a SCSI translation layer in the software RAID engine204a(e.g., a SCSI-to-Frame Information Structure (FIS) translation), and then transmitted to the storage devices904aand/or904cvia their respective controller device(s) (e.g., any of the controller device(s)208aand210a). Similarly, in the event the storage devices904aand/or904care NVMe storage devices or otherwise use the NVMe protocol, SCSI commands may be placed in an NVMe protocol queue in the software RAID engine204a, translated using a SCSI translation layer in the software RAID engine204a(e.g., a SCSI-to-NVMe translation), and then transmitted to the storage devices904aand/or904cvia their respective controller device(s) (e.g., any of the controller device(s)208aand210a).

However, while a few specific examples of the translation of commands received from the operating system204bbefore providing them to the storage devices904a-904cvia their respective controller devices have been described, one of skill in the art in possession of the present disclosure will appreciate that other command translations may be performed while remaining within the scope of the present disclosure as well. For example, one of skill in the art in possession of the present disclosure will appreciate how a PCIe controller device connected to a SAS controller device will operate as a SAS controller that utilizes the SAS protocol, and thus no command translations may be needed in such situations. Similarly, a PCIe controller device connected to a SATA controller device will operate as a SATA controller that utilizes the SATA protocol, and thus SCSI-to-FIS translations may be needed in such situations.

The method300then returns to block316. As such, the method300may loop such that the software RAID engine204ain the computing device200receives commands from the operating system204bin the computing device200and transmits those commands to the storage devices904a-904cvia their respective controllers as long as the storage devices904a-904care being used to provide the RAID logical storage device902to the operating system204b. While not described in detail herein, in the event the storage devices904a-904cwill no longer be used to provide the RAID logical storage device902to the operating system204b, the software RAID engine204amay disconnect the controller device(s)206,208a, and210afrom the operating system204b, as well as perform any other operations that would be apparent to one of skill in the art in possession of the present disclosure.

Thus, systems and methods have been described that provide for the presentation by a SCSI-based software RAID driver to an operating system of a single, primary PCIe controller device as being connected to a RAID logical storage device provided by a plurality of SAS, SATA, and/or NVMe physical storage devices, with the SCSI-based software RAID driver receiving I/O commands from the operating system that are directed to the primary PCIe controller device and that identify a RAID logical storage subsystem that is included in the RAID logical storage device, and transmitting those commands to a subset of the SAS, SATA, and/or NVMe physical storage devices that provide that RAID logical storage subsystem via respective PCIe controller device(s) that couple the SCSI-based software RAID driver to that subset of SAS, SATA, and/or NVMe physical storage devices. As such, software RAID support in operating systems like the WINDOWS® operating system discussed above is enabled in direct-attached storage device configurations for any types of storage devices and any types of CPUs, thus allowing the creation of a RAID using any available storage devices in a variety of computing devices. As such, RAID systems may be configured from a larger variety of storage devices and using spanned PCIe controllers, addressing several issues with the conventional RAID systems discussed above.

However, while the method300provides for the runtime presentation by the software RAID subsystem to the operating system of a single, primary controller device as being connected to the logical storage device provided by the plurality of physical storage devices, in order to boot or otherwise initialize that operating system from the logical storage device, the Basic Input/Output System (BIOS) in the computing device200(e.g., a Unified Extensible Firmware Interface (UEFI) in the BIOS) will require that the primary controller expose the logical storage device to it in a similar manner. For example, and as will be appreciated by one of skill in the art in possession of the present disclosure, the UEFI provides boot support for both RAID and non-RAID storage systems via the use of “supported”, “start”, and “stop” callbacks that enable booting via supported Peripheral Component Interconnect express (PCIe) device(s) (e.g., PCIe endpoint devices such as NVMe storage devices). To provide a specific example, the UEFI may call “inbox” or “preinstalled” UEFI drivers (as opposed to “outside” or “third-party” UEFI drivers like the software RAID drivers described herein that may be added to the UEFI by a third party vendor) using a respective “supported” callback for each PCIe device, with those UEFI drivers then accessing a vendor identifier and device identifier of that PCIe device to determine whether that PCIe device is supported (and returning a “success” communication if so). In response to a UEFI driver supporting a PCIe device, the UEFI will provide the “start” callback to that UEFI driver that causes that UEFI driver to “claim” or “attach to” that PCIe device in order to allow it to be used for booting, while the “stop” callback is used to “unload” PCIe device from a UEFI driver that previously claimed it.

As such, in conventional computing devices, PCIe endpoint devices such as the NVMe storage devices discussed above will be claimed by inbox/preinstalled UEFI drivers in the manner described above, while the software RAID drivers described herein will use passthrough techniques (e.g., via PCIe device handles or other identifiers retrieved from the UEFI) to communicate with the NVMe storage devices via those inbox/preinstalled UEFI drivers in order to perform read and/or write operations (e.g., via submission of reads and/or writes for an NVMe storage device to the inbox/preinstalled UEFI driver that claimed that NVMe storage device).

As will be appreciated by one of skill in the art in possession of the present disclosure, a UEFI software RAID driver provided by the software RAID engine204adiscussed above may enable RAID volume creation (e.g., via a Human Interface Infrastructure (HII)), may install a block Input/Output (IO) protocol on any RAID volumes created as described above, and may expose those RAID volumes to the UEFI via a dedicated “primary” controller device as per the method300described above in order to enable booting of the operating system via those RAID volumes. However, in situations where a native controller device such as an Advanced Host Configuration Interface (AHCI) controller device is not present in the computing device200, the controller devices included in the PCIe endpoint devices like the NVMe storage devices may all be claimed by the inbox/preinstalled UEFI drivers as discussed above, and thus will not be available for use in exposing the RAID volumes to the UEFI for use in booting the operating system in the computing device. Furthermore, while issues associated with booting an operating system via the software RAID are described above, one of skill in the art in possession of the present disclosure will appreciate how similar issues exist with booting the hypervisor subsystem referenced above as well.

With reference toFIG.11, an embodiment of a method1100for booting via a direct-attached storage device software RAID is illustrated. As discussed below, the systems and methods of the present disclosure identify an unclaimed PCIe bridge device or PCIe root device, and use its PCIe controller device to present RAID logical storage subsystem(s) provided by PCIe endpoint device(s) to a UEFI subsystem. For example, the direct-attached storage device software RAID boot system of the present disclosure may include a chassis housing PCIe subsystems coupled to a UEFI subsystem and a software RAID subsystem. The software RAID subsystem identifies a first PCIe subsystem that is not claimed by a UEFI driver provided by the UEFI subsystem, and determines that the first PCIe subsystem is one of a PCIe bridge device or a PCIe root device. In response, the software RAID subsystem claims the first PCIe subsystem, installs a RAID protocol on the first PCIe subsystem, attaches at least one RAID logical storage subsystem provided by at least one PCIe endpoint device in the PCIe subsystems to the first PCIe subsystem, and presents the UEFI subsystem with a PCIe controller device in the first PCIe subsystem as being connected to the at least RAID logical storage subsystem. As such, the UEFI subsystem in a computing device without a native controller device may boot an operating system using the RAID logical storage subsystem(s).

With reference toFIG.12, an embodiment of a computing device1200is illustrated that may be provided by the computing device200ofFIG.2and is used below to describe the method ofFIG.11. As such, the computing device1200may be provided by the IHS100discussed above with reference toFIG.1and/or may include some or all of the components of the IHS100, and in specific examples may be provided by a server device. However, while illustrated and discussed as being provided by a server device, one of skill in the art in possession of the present disclosure will recognize that the functionality of the computing device1200discussed below may be provided by other devices that are configured to operate similarly as the computing device1200discussed below. In the illustrated embodiment, the computing device1200includes a chassis1202that houses the components of the computing device1200, only some of which are illustrated and described below.

As illustrated, the chassis1202houses a software RAID engine1203that is similar to the operating system software RAID driver provided by software RAID engine204adescribed above that operates during runtime of the computing device200/1200, but that one of skill in the art in possession of the present disclosure will appreciate may be provided by a Unified Extensible Firmware Interface (UEFI) software RAID driver that operates in a UEFI environment in the computing device200/1200). As will be appreciated by one of skill in the art in possession of the present disclosure, the UEFI software RAID driver provided by the software RAID engine1203may perform the method300discussed above in a substantially similar manner as the operating system software RAID driver provided by software RAID engine204a, but with the exception that the UEFI software RAID driver provided by the software RAID engine1203will use UEFI-specific calls (e.g., “supported” UEFI calls, “start” UEFI calls, and “stop” UEFI calls).

Furthermore, the chassis1202may also house a UEFI processing system and a UEFI memory system (e.g., provided in UEFI firmware) that includes instructions that, when executed by the UEFI processing system, cause the UEFI processing system to provide a UEFI subsystem1204that is configured to perform the functionality of the UEFI subsystems described below while in the UEFI environment with the software RAID engine1203. As illustrated, the software RAID engine1203may be coupled to the UEFI subsystem1204via any of a variety of hardware and/or software communication connections that would be apparent to one of skill in the art in possession of the present disclosure.

As will be appreciated by one of skill in the art in possession of the present disclosure, the UEFI subsystem1204may be part of a Basic Input/Output System (BIOS) in the computing device1200that is configured to perform hardware initialization during a booting process (e.g., a Power-On STartup (POST)) for the computing device1200, as well as runtime services for the operating system204bdiscussed above (and/or applications), with the UEFI subsystem1204provided by platform firmware that is used for booting and as an interface for interaction with the operating system204b. However, while a specific initialization system providing for the booting operations of the computing device1200has been described, one of skill in the art in possession of the present disclosure will appreciate how other initialization systems will fall within the scope of the present disclosure as well.

As illustrated, the chassis1200also houses a plurality of PCIe subsystems1206a,1206b, and up to1206cthat are coupled to the software RAID engine1203and the UEFI subsystem1204(e.g., via a coupling between those PCIe subsystems and the processing system(s) that provide the software RAID engine1203and the UEFI subsystem1204). As described below, any of the PCIe subsystems1206a-1206cmay include PCIe root devices (e.g., PCIe devices providing PCIe root ports), PCIe bridge devices, PCIe endpoint devices, and/or other PCIe devices that would be apparent to one of skill in the art in possession of the present disclosure, along with any PCIe controller devices provided for those PCIe devices. However, one of skill in the art in possession of the present disclosure will appreciate how PCIe subsystems may include other components while remaining within the scope of the present disclosure as well. As such, one of skill in the art in possession of the present disclosure will appreciate how the PCIe subsystems1206a-1206cmay include the storage devices208band/or210described above, the controller devices208aand/or210adiscussed above, and/or other associated PCIe components as well. Furthermore, in some embodiments, the computing device1200may not include a native controller device such as the AHCI controller device or CPU VMD hardware described above (e.g., the “stand-alone” controller device206discussed above). However, while a specific computing device1200has been described, one of skill in the art in possession of the present disclosure will appreciate how the computing device1200may include other components and/or component configurations for providing conventional computing device functionality, as well as the direct-attached storage device software RAID booting functionality described below, while remaining within the scope of the present disclosure as well.

The method1100begins at block1101where a computing device begins initialization. In an embodiment, at block1102, the computing device1200may be powered on, reset, rebooted, and/or may otherwise begin initialization. With reference toFIG.13A, in response to the beginning of initialization of the computing device1200, the UEFI subsystem1204may perform PCIe subsystem initialization operations1300that include performing initialization operations on the PCIe subsystems1206a-1206c. For example, the PCIe subsystem initialization operations1300may include the UEFI subsystem1204loading an PCIe UEFI bus driver that may be provided by one of the inbox/preinstalled UEFI drivers in the UEFI subsystem1204described above, and that PCIe UEFI bus driver may discover one of the PCIe subsystems1206a-1206cthat includes a PCIe root device (e.g., a PCIe device with a PCIe root device type).

To provide a specific example, the discovery of a PCIe subsystem that includes a PCIe root device may include identifying that the PCIe subsystem includes a physical PCIe device with a Bus:Device:Function (BDF) address of “(0,0,0)”, which one of skill in the art in possession of the present disclosure will appreciate may have been provided to the PCIe device in that PCIe subsystem to designate it as the PCIe root device. However, while a specific example of the discovery of a PCIe root device in a PCIe subsystem has been described, one of skill in the art in possession of the present disclosure will appreciate how the PCIe root device may be discovered using other techniques while remaining within the scope of the present disclosure as well. In response to discovering the PCIe subsystem including the PCIe root device, the PCIe UEFI bus driver may install a PCIe protocol on that PCIe subsystem, claim the PCIe controller device in that PCIe subsystem, create a PCIe root device path (e.g., (0x0) in the examples below), and/or perform any other operations that one of skill in the art in possession of the present disclosure would recognize as enabling the functionality described below.

In response to identifying and claiming the PCIe controller device in the PCIe subsystem having the PCIe root device, the PCIe UEFI bus driver may designate that PCIe subsystem as a “parent” PCIe subsystem, and the remaining PCIe subsystems as “child” PCIe subsystems. For example, with reference toFIG.13B, the PCIe subsystem1206ais illustrated has having been identified as including the PCIe root device, and thus is designated as the “parent” PCIe subsystem1206ahaving a “parent” PCIe controller device that has been claimed by the PCIe UEFI bus driver. Similarly, the PCIe subsystems1206b-1206care illustrated as having been designated as the “child” PCIe subsystems1206b-1206chaving a “child” PCIe controller devices, and one of skill in the art in possession of the present disclosure will recognize how PCIe devices in the “child” PCIe subsystems1206b-1206cwill be connected under the PCIe root device in the “parent” PCIe subsystem1206adiscussed above.

With reference toFIG.14, the UEFI subsystem1204may then perform PCIe protocol installation operations1400that may include installing a PCIe protocol on each of the child PCIe subsystems1206b-1206c. Furthermore, after installing the PCIe protocol on the child PCIe subsystems1206b-1206c, the UEFI subsystem1204may create respective PCIe device paths for each child PCIe subsystem1206-1206cconnected under the parent PCIe subsystem1206ahaving the PCIe root device. To provide a specific example, a PCIe device path for a first child PCIe subsystem (0x0, 0x1) may be PCIeRoot(0x0)/PCIe(0x0, 0x1), and one of skill in the art in possession of the present disclosure will appreciate how each of the child PCIe subsystems may have a similar, but unique, device path created for it. However, while specific initialization operations for PCIe subsystems have been described, one of skill in the art in possession of the present disclosure will appreciate the PCIe subsystems1206a-1206cmay be initialized in a variety of manners to provide the functionality described below while remaining within the scope of the present disclosure as well.

The method1100then proceeds to block1102where a software RAID subsystem identifies a PCIe subsystem that is not claimed by the UEFI subsystem. As will be appreciated by one of skill in the art in possession of the present disclosure, the inbox/preinstalled UEFI driver/PCIe device claiming process detailed above will result in inbox/preinstalled UEFI drivers in the UEFI subsystem1204claiming supported PCIe subsystems (e.g., PCIe endpoint devices such as NVMe storage devices and their controller devices). However, one of skill in the art in possession of the present disclosure will also realize that at least some of the child PCIe controller devices in the child PCIe subsystems1206b-1206cwill not be claimed by the inbox/preinstalled UEFI drivers in the UEFI subsystem1204.

With reference toFIG.15, in an embodiment of block1102, the software RAID engine1203may perform unclaimed child PCIe subsystem identification operations1500that include identifying any of the child PCIe subsystems1206b-1206cthat were not claimed by an inbox/preinstalled UEFI driver in the UEFI subsystem1204. For example, at block1102, the software RAID engine1203may determine whether a child PCIe subsystem has been claimed by an inbox/preinstalled UEFI driver in the UEFI subsystem1204based on the supported callback operations associated with that child PCIe subsystem, described above. To provide a specific example, at block1102the software RAID engine1203may attempt to open a device path protocol for each of the child PCIe subsystems1206b-1206c, and one of skill in the art in possession of the present disclosure will appreciate how the attempt to open the device path protocol will fail (e.g., an “EFI_ALREADY_STARTED” message will be returned) if it has already been initiated by the UEFI subsystem1204(in which case that child PCIe subsystem has already been claimed by an inbox/preinstalled UEFI driver), and will succeed if it has not yet been initiated by the UEFI subsystem1204(in which case that child PCIe subsystem has not been claimed by an inbox/preinstalled UEFI driver).

However, while a specific technique for determining whether a child PCIe subsystem has not been claimed by an inbox/preinstalled UEFI driver has been described, one of skill in the art in possession of the present disclosure will appreciate how unclaimed child PCIe subsystems may be identified using any of a variety of techniques that will fall within the scope of the present disclosure. As such, following block1102, the software RAID engine1203will have identified at least one of the child PCIe subsystems1206b-1206cthat was not claimed by an inbox/preinstalled UEFI driver in the UEFI subsystem1204.

The method1100then proceeds to decision block1104where it is determined whether the PCIe subsystem includes a PCIe bridge device or a PCIe root device. In an embodiment, at decision block1104, the software RAID engine1203may perform PCIe bridge device/PCIe root device determination operations that include determining whether the child PCIe subsystem that was determined to have not been claimed by an inbox/preinstalled UEFI driver in the UEFI subsystem1204at block1102includes a PCIe bridge device or a PCIe root device. For example, at decision block1104, the software RAID engine1203may access a supported callback between the child PCIe subsystem and the UEFI subsystem1204(e.g., via its access to that supported callback by the UEFI software RAID driver operating in the UEFI environment as described above), retrieve a class code for that child PCIe subsystem, and determine whether that class code identifies the child PCIe subsystem as including a PCIe bridge device or a PCIe root device. However, while a specific example of determining whether a child PCIe subsystem includes a PCIe bridge device or a PCIe root device has been described, one of skill in the art in possession of the present disclosure will appreciate how other techniques for determining whether a child PCIe subsystem includes a PCIe bridge device or a PCIe root device will fall within the scope of the present disclosure as well.

If, at decision block1104, it is determined that the PCIe subsystem is not a PCIe bridge device or a PCIe root device, the method1100returns to block1102. As such, the method1100may loop such that the software RAID engine1203identifies PCIe subsystems that are not claimed by a UEFI driver in the UEFI subsystem1204and determines whether those PCIe subsystems include a PCIe bridge device or a PCIe root device until an unclaimed PCIe subsystem is identified that includes a PCIe bridge device or a PCIe root device.

If, at decision block1104, it is determined that the PCIe subsystem is a PCIe bridge device or a PCIe root device, the method1100proceeds to block1106where the software RAID subsystem claims the PCIe subsystem. In an embodiment of block1102and decision block1104and in the specific example provided below, the software RAID engine1203may identify the child PCIe subsystem1206bas having not been claimed by a UEFI driver in the UEFI subsystem1204(e.g., based on an “EFI_already_started” flag not being set), may determine that the child PCIe subsystem1206bincludes a PCIe bridge device or a PCIe root device and, in response, may claim the child PCIe subsystem1206bby installing a RAID protocol on that child PCIe subsystem1206bas described below and/or using any of a variety of PCIe subsystem claiming techniques that would be apparent to one of skill in the art in possession of the present disclosure.

The method1100then proceeds to block1108where the software RAID subsystem installs a RAID protocol on the PCIe subsystem. With reference toFIG.16, in an embodiment of block1108, the software RAID engine1203may perform RAID protocol installation operations1600that include installing a RAID protocol on the child PCIe subsystem1206b, which one of skill in the art in possession of the present disclosure will appreciate will allow the child PCIe controller device in the child PCIe subsystem1206bto be used as the primary controller described in the method300discussed above. As such, the unclaimed child PCIe subsystem1206bthat includes a PCIe bridge device or a PCIe root device and that is connected under the parent PCIe subsystem1206amay have its PCIe controller device designated as the primary controller device that will be used to expose RAID logical storage subsystem(s) provided by PCIe endpoint devices (e.g., NVMe storage devices) in the PCIe subsystems1206a-1206cto the operating system204bsubstantially as described above with reference to the method300.

The method1100then proceeds to block1110where the software RAID subsystem generates at least one RAID logical storage subsystem provided by at least one PCIe endpoint device. With reference toFIG.17, in an embodiment of block1110, the software RAID engine1203may perform RAID logical storage subsystem information retrieval operations1700that may include retrieving RAID logical storage subsystem information from the PCIe subsystems1206a-1206cvia the UEFI subsystem1204. For example, the RAID logical storage subsystem information retrieval operations1700may include the software RAID engine1203retrieving identifiers (e.g., “handles”) for PCIe endpoint devices (e.g., NVMe storage devices) included in the PCIe subsystems1206a-1206c(e.g., using UEFI APIs that provide for the retrieval of NVMe endpoint handles or other identifiers), and then performing the passthrough operations discussed above using the UEFI subsystem1204to retrieve metadata from PCIe endpoint devices (e.g., NVMe storage devices) included in the PCIe subsystems1206a-1206cthat describe the details of RAID logical storage subsystems that will be provided by those PCIe endpoint devices, as well any other RAID logical storage subsystem information that one of skill in the art in possession of the present disclosure will appreciate may be used to generate the RAID logical storage subsystems described below.

In response to retrieving the metadata and/or other RAID logical storage subsystem information described above, the software RAID engine1203may use that metadata and/or other RAID logical storage subsystem information to generate one or more RAID logical storage subsystems that one of skill in the art in possession of the present disclosure will appreciate may be used as described below by the UEFI subsystem to provide for the booting of the operating system204bin the computing device200, and one of skill in the art in possession of the present disclosure will appreciate how any of a variety of RAID logical storage subsystem generation techniques may be utilized by the software RAID engine1203at block1110while remaining within the scope of the present disclosure as well.

The method1100then proceeds to block1112where the software RAID subsystem installs a block IO protocol on the at least one RAID logical storage subsystem. With reference toFIG.18, in an embodiment of block1112, the software RAID engine1203may perform block IO protocol installation operations1800that may include installing a block IO protocol on each of the RAID logical storage subsystem(s) provided by the PCIe subsystem1206a-1206c. As will be appreciated by one of skill in the art in possession of the present disclosure, while the software RAID engine1203is illustrated and described as installing the block IO protocol on RAID logical storage subsystems provided by each the PCIe subsystem1206a-1206c, only some of the PCIe subsystem1206a-1206cmay provide RAID logical storage subsystems upon which the block IO protocol is installed at block1112while remaining within the scope of the present disclosure as well.

The method1100then proceeds to block1114where the software RAID subsystem attaches the at least one RAID logical storage subsystem to the PCIe subsystem. In an embodiment, at block1114, the software RAID engine1203may perform RAID logical storage subsystem/PCIe subsystem attachment operations that may include attaching each of the RAID logical storage subsystems provided by the PCIe subsystems1206a-1206cto the child PCIe controller device in the child PCIe subsystem1206bthat was identified as unclaimed by a UEFI driver in the UEFI subsystem1204and determined to include a PCIe bridge device or PCIe root device, and the child PCIe controller device in that child PCIe subsystem1206bwill operate as the primary controller device that exposes those RAID logical storage subsystem(s) to the UEFI subsystem1204. For example, at block1114the software RAID engine1203may create a device path between each the RAID logical storage subsystem(s) and the child PCIe controller device in the child PCIe subsystem1206bthat was identified as unclaimed by a UEFI driver in the UEFI subsystem1204and determined to include a PCIe bridge device or PCIe root device. However, while a specific example of attaching RAID logical storage subsystems to a PCIe subsystem has been described, one of skill in the art in possession of the present disclosure will appreciate how RAID logical storage subsystems may be attached to the child PCIe subsystem using a variety of techniques that will fall within the scope of the present disclosure as well.

The method1100then proceeds to block1116where the software RAID subsystem presents a PCIe controller device in the PCIe subsystem as connected to the at least one RAID logical storage subsystem. With reference toFIG.19, in an embodiment of block1116, the software RAID engine1203may perform PCIe-controller-device-connected RAID logical storage subsystem presentment operations1900that may include presenting any RAID logical storage subsystems provided by PCIe endpoints (e.g., NVMe storage devices) in the PCIe subsystems1206a-1206cto the UEFI subsystem1204as being connected to the child PCIe controller device in the child PCIe subsystem1206bthat was identified as unclaimed by a UEFI driver in the UEFI subsystem1204and determined to include a PCIe bridge device or PCIe root device. For example, at block1116, the software RAID engine1203may expose to the UEFI subsystem1204each of the device paths that were created at block1114between each the RAID logical storage subsystem(s) and the child PCIe controller device in the child PCIe subsystem1206bthat was identified as unclaimed by a UEFI driver in the UEFI subsystem1204and determined to include a PCIe bridge device or PCIe root device. As will be appreciated by one of skill in the art in possession of the present disclosure, in the event boot information (e.g., a boot partition) is available on the RAID logical storage subsystem(s) exposed to the UEFI subsystem1204, it may be used by the UEFI subsystem1204to boot the operating system204bin the computing device200.

Thus, systems and methods have been described that identify an unclaimed PCIe bridge device or PCIe root device, and use its PCIe controller device to present RAID logical storage subsystem(s) provided by PCIe endpoint device(s) to a UEFI subsystem. For example, the direct-attached storage device software RAID boot system of the present disclosure may include a chassis housing PCIe subsystems coupled to a UEFI subsystem and a software RAID subsystem. The software RAID subsystem identifies a first PCIe subsystem that is not claimed by a UEFI driver provided by the UEFI subsystem, and determines that the first PCIe subsystem is one of a PCIe bridge device or a PCIe root device. In response, the software RAID subsystem claims the first PCIe subsystem, installs a RAID protocol on the first PCIe subsystem, attaches at least one RAID logical storage subsystem provided by at least one PCIe endpoint device in the PCIe subsystems to the first PCIe subsystem, and presents the UEFI subsystem with a PCIe controller device in the first PCIe subsystem as being connected to the at least RAID logical storage subsystem. As such, the UEFI subsystem in a computing device without a native controller device may boot an operating system using the RAID logical storage subsystem(s).

Although illustrative embodiments have been shown and described, a wide range of modification, change and substitution is contemplated in the foregoing disclosure and in some instances, some features of the embodiments may be employed without a corresponding use of other features. Accordingly, it is appropriate that the appended claims be construed broadly and in a manner consistent with the scope of the embodiments disclosed herein.