Method and apparatus for improved RAID 1 write performance in low cost systems

A method and an apparatus for providing a RAID 1 controller subsystem are provided. According to the invention, data or commands issued by a host system and addressed to a transport master are provided to a system bus interface. The system bus interface simultaneously provides the data or commands to the transport master and to a transport slave. The data or commands are then passed to the first and second devices substantially simultaneously. In a normal RAID 1 mode of operation, data retrieved from the first device is passed to the host system by the transport master. In a failover RAID 1 mode of operation, the data retrieved from the first device is not provided to the transport master. Instead, a multiplexer is operated to provide the transport master with the data retrieved from the second device. The invention also allows the controller to operate in a non-RAID 1 mode. The non-RAID 1 operating mode is enabled by operating the transport slave such that it does not act with respect to commands and data that are addressed to the transport master. According to the non-RAID 1 mode of operation, data for storage on the second device must be addressed to the transport slave.

FIELD OF THE INVENTION

The present invention relates to RAID 1 devices. In particular, the present invention relates to a low cost system for providing improved RAID 1 performance.

BACKGROUND OF THE INVENTION

Computer systems require reliable storage for large amounts of data. Often, redundant arrays of independent (or inexpensive) disks (RAID) devices are used to provide such storage. In general, RAID devices involve storing data on a plurality of individual hard disk drives. The use of RAID techniques increases the reliability and/or speed of data storage and retrieval.

There are various schemes, or RAID levels, according to which a number of hard disk drives or other storage devices may be used in connection with the storage of data. One such scheme is known as RAID level 1 (or RAID 1).

In a RAID 1 system, the information stored on a first drive is mirrored by a second drive. That is, a duplicate copy of the data stored on the first drive is maintained on a second drive. Accordingly, a RAID 1 system requires a minimum of two independent drives. A RAID 1 system is fault tolerant because, if data is lost from one of the drives, the duplicate copy of that data can most likely be retrieved from the second drive.

With reference now toFIG. 1, a conventional system100for implementing a RAID 1 disk array is depicted. In general, the system100includes a host processor104interconnected to a conventional RAID 1 controller108by a system bus112. The conventional RAID 1 controller108is in turn connected to a first device, labeled device0116, and to a second device, labeled device1120or122.

The conventional RAID 1 controller108generally includes a local processor124a first device controller, labeled controller A128, and may include a second device controller, labeled controller B132. The conventional RAID 1 controller108also includes a bridge136for transmitting and receiving data and commands over the system bus112.

During a data storage operation, the conventional controller108receives data for storage off the system bus112. The local processor124sends that data to the first controller128, which constructs a block of data, and provides the block of data to the first device116for storage. After a successful storage operation, a signal verifying completion of the write operation is passed from the first device116to the first device controller128. The first device controller128then signals the completion of the write operation to the local processor124.

After the local processor124has sent the data for storage to the first device controller128, it sends a second copy of the data for storage to the second device controller132for storage on the second device120. Alternatively, for instance, where a second controller132is not provided, the local processor124may send the second copy of data to the first controller128for storage on the alternate second device122. It should be noted that even if two devices116and122are interconnected to a single controller128, data must still be written to the devices116and122sequentially. The local processor124may obtain the second copy of the data for storage by retrieving the copy from memory interconnected to the system bus112. Alternatively, the local processor124may obtain a second copy by storing a copy in a memory cache associated with the local processor124and later moving the copy to the appropriate controller. After the copy of the data for storage has been provided to the second device controller132(or the first device controller128), that data is stored on the second device120(or122) in a procedure that follows substantially the same steps as are involved in storing the first copy of data on the first device116, as described above.

According to other prior art RAID 1 controllers, no local processor124may be provided. In such instances, the host processor220generally controls sequentially providing copies of the data for storage on the first and second devices116and120(or122).

From the above description, it can be appreciated that conventional RAID 1 controller systems store data in the devices included in the array of disks in serial fashion. That is, only after a copy of the data that will be stored in the first device has been provided to a device controller associated with that first device is a second copy obtained and provided to the device controller associated with the second device. Therefore, with conventional RAID 1 controllers, more time is required to store data than if a single physical drive is used to store data.

Accordingly, it would be advantageous to provide a RAID 1 controller that was capable of storing a primary and a mirror copy of data on a pair of devices substantially simultaneously. Furthermore, it would be advantageous to provide such a RAID 1 controller that did not require sequentially providing a first copy of data for storage on the first device and a second copy of data for storage on the second device, and that required relatively little intervention by a processor. It would also be advantageous to provide such a RAID 1 controller that was reliable in operation, and that was inexpensive to implement.

SUMMARY OF THE INVENTION

In accordance with the present invention, a method and an apparatus for providing a RAID 1 controller subsystem are provided. The present invention generally allows commands or data to be provided to a plurality of storage devices simultaneously. Accordingly, the present invention provides a RAID 1 controller that is capable of operating at higher speeds than conventional RAID 1 controllers.

According to one embodiment of the present invention, data is received from a host at a transport master through a system bus interface. The data is provided to first and second device interfaces substantially simultaneously. From the device interfaces, the data is stored in first and second devices interconnected to their respective interfaces in a single, point to point relationship, substantially simultaneously.

According to a further embodiment of the present invention, in response to a request for data from a host that is provided to a transport master, data is retrieved from first and second devices substantially simultaneously. In a normal operating mode, data retrieved from the first device is passed to the transport master and in turn to the host. Data retrieved from the second device is not passed to the transport master, and is not provided to the host. However, data integrity is validated to ensure data consistency in both devices.

According to a further embodiment of the present invention, in a failover mode, data retrieved from the first device, if any, is not provided to the transport master or the host computer. However, data retrieved from the second device is passed to the transport master and is provided to the host.

According to still another embodiment of the present invention, the controller of the present invention is capable of operating in a non-RAID 1 enabled mode. In the non-RAID 1 enabled mode, a host may access a first device through a transport master. The host may also address a second device, independently of the first device through a transport slave interconnected to the second device.

In accordance with still another embodiment of the present invention, the controller is implemented by providing a transport master and a transport slave interconnected to a system bus by a system bus interface. In RAID 1 operation, commands and data sent to the transport master are also received and acted upon by the transport slave. Therefore, the commands and data may be provided to first and second devices interconnected to the transport slave and transport master respectively by single point to point connections, substantially simultaneously. Data read from the first device is made available at the transport master during normal RAID 1 operation. By selectively enabling a failover mode, a multiplexer may be switched, such that the transport master is provided with data from the second device.

In accordance with another embodiment of the present invention, a transport master and a transport slave connected to a system bus interface are provided. The transport master and the transport slave each have a unique address to allow for the independent operation of two interconnected devices. In a RAID 1 operating mode, the transport slave receives and acts on commands and data that are addressed to the transport master. Accordingly, data and commands provided to a first device (interconnected to the transport master) are also provided to the second device (interconnected to the transport slave). In a non-RAID 1 operating mode, the transport slave does not act on commands and data addressed to the transport master. In this non-RAID 1 enabled operating mode, the host computer may therefore selectively access the first or second device by addressing commands or data to the transport master and transport slave independently.

Based on the foregoing summary, a number of salient features of the present invention are readily discerned. A method and apparatus for providing a RAID 1 controller are provided. The RAID 1 controller of the present invention selectively provides full RAID 1 functionality, or non-RAID 1 control of attached devices. Furthermore, the RAID 1 controller of the present invention provides data and commands to the devices under its control substantially simultaneously, improving the performance of the controller as compared to conventional RAID 1 controllers.

Additional advantages of the present invention will become readily apparent from the following discussion, particularly when taken together with the accompanying drawings.

DETAILED DESCRIPTION

With reference now toFIG. 2, a system200having a RAID 1 controller208in accordance with an embodiment of the present invention is illustrated. In general, the system200includes a host system204, the RAID 1 controller208, a first storage device212, and a second storage device216.

The host system204generally includes a host processor220, a system bus controller222and a system bus224. The host processor220may include any processor suitable for general use computing, such as a PENTIUM, POWER PC or RISC processor, and any associated support circuitry, such as a system board. The system bus controller222may be provided separately, or may be integral to the system board or host processor220. The system bus224may include any communication channel suitable for passing signals between interconnected computing devices or components. For example, the system bus224may include a peripheral component interface (PCI) bus.

The RAID 1 controller208generally includes a transport master228and a transport slave232. The transport master228and the transport slave232are interconnected to the system bus interface236by an internal bus238having a Y239to provide signals from the system bus interface236to the transport master228and the transport slave232substantially simultaneously. The system bus interface236generally interfaces the transport master228and the transport slave232to the system bus224. Furthermore, the transport master228and the transport slave232may each be uniquely addressed by the host system204through the system bus interface236. The transport master228and the transport slave232may be interconnected to one another by a transport communication link242. According to one embodiment of the present invention, the communication link242supports messages sent from the transport slave232to the transport master228.

A register240may be interconnected to the system bus interface236for storing information related to the operation of the controller208. The contents of the register may be provided to the transport master228and the transport slave232over the register signal line246. The controller208additionally includes a first device interface244that interfaces the controller208to the first device212via a first interconnection248. A second device interface252is interconnected to the second device216via a second interconnection256. The interconnections248and256may be in accordance with any device interface protocol used to interconnect a device to a host system. For example, the interconnections may include a serial advanced technology attachment (SATA).

It will be appreciated that the RAID 1 controller208of the present invention has only one device212or216interconnected to each device interface244and252. That is, each device212and216is in a single point to point relationship with its respective device interface244or252. This configuration allows data to be directed to both of the devices212and216at substantially the same time, as will be explained in greater detail below.

In connection with an embodiment of the RAID 1 controller208for use with SATA interconnections, the transport master228includes construct260and decomposition264blocks. The transport slave232also includes construct268and decomposition272blocks. The construct blocks260and268generally serve to configure data, including commands, received at their respective transport228or232into a format or protocol utilized by the device interface244or252and the device212or216. The decomposition blocks264and272generally serve to receive data or commands in the format or protocol utilized by the device interfaces244and252and the devices212and216, and to unbundle that data for proper handling by their respective transport228or232. In general, the transports228and232require construct260and268and decomposition264and272blocks because the data format or protocol utilized by the system bus224may be different from the protocol or format used by the device interfaces244and252and the devices212and216.

An outgoing master signal line276extends from the transport master228, and in particular from the construct block260, to the first device interface244. Accordingly, it can be appreciated that data may be passed from the transport master228to the first device212through the first device interface244.

The construct block268of the transport slave232is interconnected to the second device interface252by the outgoing slave signal line288. Accordingly, it can be appreciated that data may be passed from the transport slave to the second device216through the second device interface252.

The second device interface252provides data retrieved from the second device216to the decomposition block272of the transport slave232over second device interface signal line290a, and to a multiplexer292over second device interface signal line290b. The multiplexer292also is provided with data retrieved from the first device212through the first device interface244over first device interface signal line294. The multiplexer292may selectively interconnect either the second device interface signal line290bor the first device interface signal line294to the decomposition block264of the transport master228over the multiplexer output line296.

The multiplexer292is operated in response to a failover signal provided over failover signal line298. In general, the failover signal may be received from the host processor220at the system bus interface236and stored in a first location in the register240. The failover signal may be asserted by the host processor220if the first device212experiences a failure. When the failover signal is asserted, the multiplexer292is switched so that data may be retrieved from the second device216by the host system204through the transport master228. Accordingly, it can be appreciated that in a failover mode, when the second multiplexer292is operated to interconnect the second device interface signal line290bto the transport master228, the second device interface252is capable of sending data retrieved from the second device216to the transport master228and to the transport slave232simultaneously. The data is provided to the transport slave232in order to verify the data integrity of the second device216. Furthermore, it can be appreciated that in a non-failover mode, when the second multiplexer292is operated to interconnect the first device interface signal line294to the second multiplexer output line296, the first device interface244will send data to the transport master228.

With reference now toFIG. 3, the operation of an embodiment of the present invention in connection with a write operation is illustrated. Initially, at step300the system bus interface236receives data for storage that is addressed to the transport master228. In general, a write operation is preceeded by a command to prepare for the write operation. SeeFIG. 4and the discussion related thereto for an explanation of how commands received at the system bus interface236are handled. The system bus interface236passes the data to the transport master228and the transport slave232substantially simultaneously. This is achieved by splitting the signal comprising the data at the Y239formed in the internal bus238. To facilitate the receipt of a copy of the data addressed to the transport master228, the transport slave232may configure itself to look like the transport master228to the internal bus238. Accordingly, the transport master228receives the data (step304) at substantially the same time the transport slave232receives the data (step308). The transport master228then constructs a data block in the construct block260(step312). In general, the construct block260formats the received data according to the protocol required by the device interface244and the device212. For example, where the link248between the device interface244and the device212is established according to a serial ATA protocol, the construct block260provides the data as a frame information structure (FIS) packet. As will be understood by those of skill in the art, a frame information structure packet includes a start of frame indicator, the data payload, a cyclic redundancy check, and an end of frame signal. The data payload may include data for storage on a device212or command data. After the data has been suitably formatted, it is provided to the first device interface244(step314).

As mentioned above, the data is delivered to the transport master228and to the transport slave232at substantially the same time. That is, apart from the influence of any propagation delays caused by different lengths in the branches of the internal bus238, the data will be received at the transport master228and the transport slave232at the same time. Accordingly, it can be appreciated that two instances of the data packet are sent in parallel. This may be accomplished by, for example, as shown inFIG. 2, branching the signal sent to the transport master228and the transport slave232at the Y connector239. The transport master228and the transport slave232may also be interconnected to the internal bus238in parallel. The data may be considered to arrive at the transport master228and the transport slave232at substantially the same time if one instance of the data arrives at the transport master228within less than about 1 system clock cycle from the time that a second instance of the data arrives at the transport slave232.

With respect to the instance of the data provided to the transport slave232, a determination is made as to whether RAID 1 operation has been enabled (step316). In general, RAID 1 operation may be enabled in response to a signal received from the host processor220. An instruction to enable RAID 1 operation may be stored in the register240and the contents of the register240provided to the transport master228and the transport slave232by the register signal line246. If RAID 1 operation is not enabled, the instance of the data provided to the transport slave232is discarded (step320).

If RAID 1 operation is enabled, the transport slave232acts on the data, even though that data is, in the present example, addressed to the transport master228. Accordingly, when RAID 1 operation is enabled, the data addressed to the transport master228and received at the transport slave232is transformed by the transport slave232as required by the second device interface252. For example, the construct block268of the transport slave232may format the received data as an FIS packet (step324). Next, the data is provided to the second device interface252over the outgoing slave signal line288(step328). The second device interface252then passes the data to the second device216, and the data is stored on the second device216(step332). Alternatively, if the data packet contains a command, the second device216may act upon the command. For example, a command requesting data from the second device216may be passed to the second device216.

The instance of the data that is provided to the first device interface244is passed to the first device212, and data contained in the data packet is stored on the first device212(step336). If the data includes a command, the first device212may respond to the command.

From the above description, it can be appreciated that during RAID 1 operation the first212and second216devices are provided with instances of the data provided to the system bus interface236of the controller208at substantially the same time, apart from differences in arrival time due to propagation delays caused by variations in the different signal paths followed by the two instances of the data. In addition, the time at which data is successfully received by the devices212and216may differ due to rewrites necessitated by jitter. Furthermore, it can be appreciated that, according to this embodiment of the present invention, no processor or processing time is required to coordinate delivery of the data to the devices212and216. It also can be appreciated that the instances of the data are not sent in series, but rather are provided to the transports228and232, to the device interfaces244and252, and in turn to the devices212and216, in parallel.

With continued reference toFIG. 3, following a write operation, the first device212issues a write confirmation signal that is received at the transport master228as a status packet (step340). In particular, the status packet containing the write confirmation passes from the first device212to the first device interface244over interconnection248, and from the first device interface244to the read multiplexer292over the first device interface signal line294. If a failover mode is not enabled, the read multiplexer292passes the status packet to the decomposition block264of the transport master228over read multiplexer output line296. The status packet containing the write confirmation signal is then deconstructed by the decomposition block264of the transport master228(step344).

Similarly, the second device216issues a status packet containing a write confirmation command that is passed to the second device interface252. The second device interface252in turn outputs the status packet containing the write confirmation from the second device216along second device signal lines290aand290b. Accordingly, a first instance of the write confirmation status packet is provided to the decomposition block272of the transport slave232, and a second instance of the status packet is received at the read multiplexer292(step348). If a failover signal is not asserted, the read multiplexer292does not interconnect the second device interface output signal line290bto the transport master228. Accordingly, in normal, non-failover mode operation, the instance of the status packet containing the write confirmation generated by the second device216is not passed by the read multiplexer292(i.e., it is discarded). The instance of the status packet containing the write confirmation from the second device216provided to the decomposition block272of the transport slave232is deconstructed (step352).

At step356, the transport master228determines whether the data received from the system bus224was successfully stored in the first device212. Similarly at step360, the transport slave232determines whether that same data was successfully stored in the second device216. The transport slave232may signal the transport master228that the data was successfully stored over the transport communication link242. If the data has been successfully stored in both devices212and216, a signal is sent to the host system204indicating that the write operation is complete (step364). The system may then return to step300to await the receipt of additional commands or data.

If the write confirmation packet generated by the first device212indicates that the data was not successfully stored on the first device212, the transport master228issues a notification to the host system204(step368) that the operation failed. If the second device216indicates that the data it received was not stored successfully, the transport slave232signals the transport master228that the write operation to the second device216failed (step372). In general, the transport slave232may provide the signal to the transport master228over the transport communication link242. After receiving a signal from the transport slave232indicating that the write to the second device216was unsuccessful, the transport master228issues a notification to the host system204that the operation failed (step368). The transport master228may also notify the host that the operation with respect to the second device216has not been completed if the transport slave232does not provide a signal to the transport master228within a predetermined amount of time (i.e. if the transport master228times out). After notification is provided to the host system204of the failure of an operation, the system returns to step300to await further instructions.

After receiving notification that an operation failed, the host system204may determine what further action is appropriate. For example, the host system204may order that the controller208make a second attempt at completing the operation, or the host system204may notify a user or system administrator of the failure. Furthermore, if the controller208provides no response to the host system204within a predetermined period of time, the host system204may read a status register associated with the transport master228to determine why no response was received.

With reference now toFIG. 4, a read operation in connection with a request for data addressed to the transport master228according to an embodiment of the present invention is described. Initially, at step400, the request for data is received from the host system204at the system bus interface236, and the request for data is passed to and received by the transport master228(step404) and the transport slave232(step408). With respect to the request received by the transport master228, the construct block260constructs a command packet according to the communication and control protocol of the first device212containing the request (step412). As in the example above, the command packet may include a frame information structure packet when the first device212is a serial ATA device. The command packet is then sent from the construct block260of the transport master228to the first device interface244(step416).

With respect to the instance of the command containing the request for data received by the transport slave232(step408), a determination is made as to whether RAID 1 operation has been enabled (step420). For example, an instruction to enable RAID 1 operation may be stored in the register240and the contents of the register provided to the transport slave232by the register signal line246. If RAID 1 operation is not enabled, the instance of the command received by the transport slave232is discarded (step424).

If RAID 1 operation is enabled, the transport slave232constructs a properly formatted command packet (step428) and passes the command packet containing the request for data to the second device interface252(step432). The second device interface252provides the command packet containing the request for data to the second device216. The requested data is then retrieved from the second device216and passed from the second device interface252to the decomposition block272of the transport slave232(step436).

At step440, a determination is made as to whether a failover signal is asserted on the failover signal line298. The failover signal may be generated in response to a command from the host system204that sets the failover status in the register240. The failover status may then be provided to each of the transport master228, transport slave232, and the read multiplexer292. If no failover signal is asserted, the data received at the read multiplexer292from the second device interface252is not passed from the read multiplexer292to any other device (i.e. the data is discarded) (step444).

If a failover signal is asserted, the requested data retrieved from the second device216is passed from the read multiplexer292to the decomposition block264of the transport master228(step448). Accordingly, it can be appreciated that, in a failover mode, the data retrieved from the second device216is passed to the transport master228.

At about the same time data is retrieved from the second device216(step436), the requested data is retrieved from the first device212and passed to the read multiplexer292(step452). At step456, a determination is made as to whether a failover signal is asserted. If a failover signal is asserted, the read multiplexer292does not pass the data received from the first device to the transport master228(i.e. the data from the first device212is discarded) (step460). If a failover signal is not asserted, the data read from the first device is passed to the decomposition block264of the transport master228(step464).

At step468, the data received at the decomposition block264of the transport master228is decomposed, and the retrieved data is provided to the host system204by the transport master228. Accordingly, the transport master228can provide the host system204with requested data, whether or not a failover is asserted. Furthermore, it can be appreciated that the data is retrieved from both the first212and the second216devices, or an attempt to retrieve the data from both devices is made, regardless of whether failover is asserted. Following the provision of the requested data to the host system, confirmation that the requested data was successfully retrieved from the devices212and216is provided. See, e.g., steps340–364ofFIG. 3and the accompanying description for an example of the genertion of a status signal in the context of the storage of data. As can be appreciated by one of skill in the art, the status signal following the successful retrieval of data differs in that the devices212and216provide confirmation that the read operation was successful.

During normal RAID 1 operation, the transport slave232may monitor the data read from the second device216to ensure that the second device216is operating properly. If a problem retrieving data from the second device216is detected, the transport slave232may provide an appropriate signal to the transport master228. Because a failure to retrieve data from the second device216compromises the data security provided by a RAID 1 array, the transport master228will typically signal the host system204when a problem with the second device216has been detected, so that remedial action can be taken. Because in normal RAID 1 enabled operation, the data provided to the host system204in response to a request for data originates from the first device212, the host system204can continue to receive data from the first device212, even in the event of a failure of the second device216.

In the event of a failure of the first device212, a failover mode may be entered. For example, the host system204may generate a failover enable signal if data is not successfully retrieved from the first device212in response to a request for such data. Furthermore, when a failure with respect to the first device212is initially detected, the host system204may reissue a command requesting the data in combination with assertion of the failover signal.

When the failover mode is entered, the read multiplexer292is switched so that the system host204is provided with data that was stored on the second device216. This information is passed through the transport master228, therefore the data is retrieved and provided to the system host204as if the devices212and216were operating normally. When the RAID 1 controller208is in failover mode, the failed first device212can be replaced even while the host system204retrieves data from the second device216. After the first device212has been replaced, the data that was or should have been stored on the failed first device212can be written to the new first device212from the data stored on the second device216.

The RAID 1 controller208may additionally provide a non-RAID 1 enabled, or second mode of operation. In the second mode of operation, the host system204may address data or commands to the transport master228and to the transport slave232individually. Accordingly, the transport master228and the transport slave232act upon only those individual data packets specifically addressed to them in the non-RAID 1 mode of operation. In addition, in the second mode of operation, the controller208acts as two independent controllers in connection with two independent devices212and216. While in the non-RAID 1 operating mode, the system bus interface236serves to arbitrate requests for access to the system bus224by the transport master228and the transport slave232. Accordingly, it can be appreciated that if independent operation of the devices212and216is desired, such operation may be enabled simply by de-asserting a RAID 1 enable signal and by addressing data or commands to the devices212and216individually. Assertion of the RAID 1 enable signal may be controlled by the host system204.

According to another embodiment of the present invention, the controller208includes a local processor. The local processor may be used to control aspects of the operation of the controller208that might otherwise be controlled by the host processor220of the host system204. For example, the local processor may control various functions of the RAID 1 controller208, such as generating rewrite requests and selectively enabling a failover mode or a non-RAID 1 operating mode. In addition, all or certain of these functions may also be performed by a host system204in communication with the RAID 1 controller208.

Although the device interfaces244and252, the interconnections248and256, and the devices212and216have been described as serial ATA devices, they are not so limited. For example, interfaces244and252, the interconnections248and256and the devices212and216may comprise a small computer system interface (SCSI) or integrated drive electronics (IDE) interfaces. In general, any device interface protocol and associated components may be used to interconnect the devices212and216to the controller208.

Furthermore, although the controller208has been described in connection with a single host system204, it may be operated in connection with a plurality of host systems204.

In another embodiment of the present invention, the read multiplexer292is not provided. Instead, when the controller208is in failover mode, data retrieved from the second device216is provided by the transport slave232to the system bus interface236. Any data provided by the first device212to the transport master228is discarded.

From the foregoing discussion, it can be appreciated that the RAID 1 controller208of the present invention requires only a control signal to selectively operate in either a RAID 1 mode or a non-RAID 1 mode. Furthermore, it can be appreciated that the RAID 1 controller208of the present invention is capable of storing and retrieving data from a plurality of storage devices at substantially the same time.

Although the foregoing discussion has referred to the use of hard disk drives as the devices212and216, the invention is not so limited. For instance, the devices212and216may include any device suitable for the storage of computer data, such as optical drives, tape drives, and three-dimensional storage devices. In addition, the present invention may be adapted for use with any even number of storage devices in parallel with single point to point connections to a device interface. Furthermore, the present invention is not limited to any particular communications protocol or interface for interconnecting computing devices, including computer peripherals.