Claims Analysis
Total Claims: 32
Claim 1
Independent Claim
176 words
A method of storing and retrieving information from an array of storage devices implementing a plurality of virtual disk drives, the storage devices operatively coupled to a computer by a plurality of (I/O) paths, comprising the steps of: scanning the storage devices to find available I/O paths between the computer and each storage device; storing a list of the available I/O paths between the computer and each storage device in a configuration file; receiving an I/O request directed at a virtual disk memory location in a virtual disk driver, the virtual disk driver comprising a core virtual disk driver and a subordinate driver implementing storage array specific functions; associating the core virtual disk driver with the subordinate disk driver in accordance with a switch table stored in a memory of the computer; mapping the virtual disk memory location to a corresponding storage device; selecting an I/O path for the I/O request from the list of available I/O paths in the configuration file; and transmitting the I/O request to the storage device over the selected I/O path.
Claim 2
Independent Claim
176 words
A method of storing and retrieving information from an array of storage devices implementing a plurality of virtual disk drives, the storage devices operatively coupled to a computer by a plurality of (I/O) paths, comprising the steps of: scanning the storage devices to find available I/O paths between the computer and each storage device; storing a list of the available I/O paths between the computer and each storage device in a configuration file; receiving an I/O request directed at a virtual disk memory location in a virtual disk driver, the virtual disk driver comprising a core virtual disk driver and a subordinate driver implementing storage array specific functions; associating the core virtual disk driver with the subordinate disk driver in accordance with a switch table stored in a memory of the computer; mapping the virtual disk memory location to a corresponding storage device; selecting an I/O path for the I/O request from the list of available I/O paths in the configuration file; and transmitting the I/O request to the storage device over the selected I/O path.
Claim 3
Dependent Claim
99 words
The method of claim 1, wherein the step of scanning the storage devices to find all available I/O paths between the computer and each storage device comprises the step of: transmitting an inquiry command from a virtual disk driver to the storage devices on each I/O path; receiving an inquiry command response in the virtual disk driver from each storage device, the inquiry command response comprising an identification unique to the storage device; correlating the inquiry command response with the I/O path used to send the inquiry command; and compiling a list of I/O paths for each storage device.
Claim 4
Dependent Claim
88 words
The method of claim 1, wherein the step of associating the core virtual disk driver with the subordinate disk driver in accordance with the switch table comprises the steps of: sending an inquiry command from the virtual disk driver to the storage device array; receiving inquiry data from the disk array, the inquiry data comprising a storage device array identification; scanning the switch table to identify a subordinate disk driver corresponding to the storage array identification; and associating the core virtual disk driver with the subordinate disk driver.
Claim 5
Dependent Claim
119 words
The method of claim 1, wherein the I/O paths comprise active I/O paths designated for completing I/O requests, and passive I/O paths designated to complete I/O requests only upon an active I/O path failure, and the storage array specific functions comprise: a function for marking an active I/O path as unavailable; a function for marking a passive I/O path as active; a function for marking an unavailable I/O path as available; a function for determining a unique identification for each storage device; a function for selecting an algorithm to select an I/O path for the I/O request from the available I/O paths in the configuration file; and a function for determining a unique identification of the storage device array.
Claim 6
Dependent Claim
21 words
The method of claim 1, wherein the step of selecting an I/O path comprises the step of selecting successive I/O paths.
Claim 7
Dependent Claim
42 words
The method of claim 1, wherein the step of selecting an I/O path comprises the steps of: measuring an I/O path data latency for each I/O path; and selecting the I/O path for the I/O request according to the measured data latency.
Claim 8
Dependent Claim
81 words
The method of claim 6, further comprising the step of receiving an I/O message from the storage device indicating that the I/O request is completed and wherein the step of measuring and storing an I/O path data latency for each I/O path comprises the steps of: measuring the elapsed time between each I/O request and I/O messages from the storage device indicating that the I/O request is completed for each I/O path; and averaging the elapsed time for each I/O path.
Claim 9
Dependent Claim
71 words
The method of claim 1, wherein a pending I/O request is defined by an I/O request for which a message indicating the I/O request is completed has not been received, and wherein the step of selecting an I/O path comprises the steps of: determining the number of pending I/O requests for each I/O path; and selecting the I/O path for the I/O request according to the number of pending I/O requests.
Claim 10
Dependent Claim
49 words
The method of claim 1, wherein a pending I/O request is defined byan I/O request for which a message indicating the I/O request is completed has not been received, and wherein the I/O path is selected according to whether the pending I/O requests are read requests or write requests.
Claim 11
Dependent Claim
69 words
The method of claim 1, wherein a pending I/O request is defined by an I/O request for which a message indicating the I/O request is completed has not been received, and wherein the pending I/O request designates data in the storage devices of a size, and wherein the I/O path is selected according to the size of the data designated by the pending I/O requests on each I/O path.
Claim 12
Dependent Claim
65 words
The method of claim 1, further comprising the steps of: receiving an I/O error message from an adapter driver coupled between the virtual disk driver and the array of storage devices, the I/O error message indicating the I/O paths with errors and an I/O path error type; and modifying the configuration file to remove I/O paths with errors from the list of available I/O paths.
Claim 13
Dependent Claim
41 words
The method of claim 11, wherein the I/O error message indicates an I/O error type, and the configuration file is modified to remove I/O paths with errors from the list of available I/O paths in accordance with the I/O error type.
Claim 14
Independent Claim
206 words
An apparatus for storing and retrieving information from an array of storage devices implementing a plurality of virtual disk drives, the storage devices operatively coupled to a computer by a plurality of I/O paths, the apparatus comprising a virtual disk driver, executing on the computer, comprising: a scanner for finding available I/O paths between the computer and each storage device and for storing a list of the available I/O paths in a configuration file in a memory coupled to the computer; a receiver, for accepting I/O requests directed at a virtual disk memory location from an application executing on the computer; a module for mapping the virtual disk memory location to a corresponding storage device and for selecting an I/O path for the I/O request from the list of available I/O paths in the configuration file; a transmitter for sending the I/O request to the storage device over the selected I/O path; and wherein the virtual disk driver comprises a core virtual disk driver and a subordinate driver implementing storage array-specific functions, and the vitual disk driver further comprises a means for associating the core virtual disk driver with the subordinate disk driver in accordance with a switch table stored in the memory of the computer.
Claim 15
Independent Claim
206 words
An apparatus for storing and retrieving information from an array of storage devices implementing a plurality of virtual disk drives, the storage devices operatively coupled to a computer by a plurality of I/O paths, the apparatus comprising a virtual disk driver, executing on the computer, comprising: a scanner for finding available I/O paths between the computer and each storage device and for storing a list of the available I/O paths in a configuration file in a memory coupled to the computer; a receiver, for accepting I/O requests directed at a virtual disk memory location from an application executing on the computer; a module for mapping the virtual disk memory location to a corresponding storage device and for selecting an I/O path for the I/O request from the list of available I/O paths in the configuration file; a transmitter for sending the I/O request to the storage device over the selected I/O path; and wherein the virtual disk driver comprises a core virtual disk driver and a subordinate driver implementing storage array-specific functions, and the vitual disk driver further comprises a means for associating the core virtual disk driver with the subordinate disk driver in accordance with a switch table stored in the memory of the computer.
Claim 16
Dependent Claim
74 words
The apparatus of claim 13, wherein the scanner comprises: means for transmitting an inquiry command from the virtal disk driver to the storage devices on each I/O path; means for receiving an inquiry command response in the virtal disk driver from each storage device; means for correlating the inquiry command response with the I/O path used to send the inquiry command; and means for compiling a list of I/O paths for each storage device.
Claim 17
Dependent Claim
75 words
The apparatus of claim 13, wherein the associating means comprises: means for sending an inquiry command from the virtual disk driver to the storage device array; means for receiving inquiry data from the disk array, the inquiry data comprising a storage device array identification; means for scanning the switch table to identify a subordinate disk driver corresponding to the storage array identification; means for associating the core virtual disk driver with the subordinate disk driver.
Claim 18
Dependent Claim
15 words
The apparatus of claim 13, wherein the module comprises means for successively selecting I/O paths.
Claim 19
Dependent Claim
38 words
The apparatus of claim 13, wherein the module further comprises a means for measuring an I/O path data latency for each I/O path and selecting the I/O path for the I/O request according to the measured data latency.
Claim 20
Dependent Claim
67 words
The apparatus of claim 13, wherein a pending I/O request is defined by an I/O request for which a message indicating the I/O request is completed has not been received, and wherein the module comprises a means for determining the number of pending I/O requests for each I/O path and for selecting the I/O path for the I/O request according to the number of pending I/O requests.
Claim 21
Dependent Claim
78 words
The apparatus of claim 13, wherein a pending I/O request is defined by an I/O request for which a message indicating the I/O request is completed has not been received, and wherein the pending I/O request designates data in the storage devices of a size, and wherein the module comprises a means for selecting the I/O path for the I/O request according to the size of the data designated by the pending I/O requests on each I/O path.
Claim 22
Dependent Claim
65 words
The apparatus of claim 13, further comprising: means for receiving an I/O error message from an adapter driver coupled between the virtual disk driver and the array of storage devices, the I/O error message indicating the I/O paths with errors and an I/O path type; and means for modifying the configuration file to remove I/O paths with errors from the list of available I/O paths.
Claim 23
Dependent Claim
40 words
The apparatus of claim 20, wherein the I/O error message indicates an I/O error type, and the module further comprises a means for modifying the configuration file to remove I/O paths with errors in accordance with the I/O error type.
Claim 24
Dependent Claim
205 words
A program storage device, readable by a computer having a processor and a memory tangibly embodying one or more programs of instructions executable by the computer to perform method steps of storing and retrieving information from an array of storage devices implementing a plurality of virtual disk drives, the storage devices operatively coupled to the computer by a plurality of (I/O) paths, the method comprising the steps of: scanning the storage devices to find available I/O paths between the computer and each storage device; storing a list of the available I/O paths between the computer and each storage device in a configuration file; receiving an I/O request directed at a virtual disk memory location in a virtual disk driver; the virtual disk driver comprising a core virtual disk driver and a subordinate driver implementing storage array-specific functions; associating the core virtual disk driver with the subordinate disk driver in accordance with a switch table stored in a memory of the computer; mapping the virtual disk memory location to a corresponding storage device; selecting an I/O path for the I/O request from the list of available I/O paths in the configuration file; and transmitting the I/O request to the storage device over the selected I/O path.
Claim 25
Dependent Claim
205 words
A program storage device, readable by a computer having a processor and a memory tangibly embodying one or more programs of instructions executable by the computer to perform method steps of storing and retrieving information from an array of storage devices implementing a plurality of virtual disk drives, the storage devices operatively coupled to the computer by a plurality of (I/O) paths, the method comprising the steps of: scanning the storage devices to find available I/O paths between the computer and each storage device; storing a list of the available I/O paths between the computer and each storage device in a configuration file; receiving an I/O request directed at a virtual disk memory location in a virtual disk driver; the virtual disk driver comprising a core virtual disk driver and a subordinate driver implementing storage array-specific functions; associating the core virtual disk driver with the subordinate disk driver in accordance with a switch table stored in a memory of the computer; mapping the virtual disk memory location to a corresponding storage device; selecting an I/O path for the I/O request from the list of available I/O paths in the configuration file; and transmitting the I/O request to the storage device over the selected I/O path.
Claim 26
Dependent Claim
103 words
The program storage device of claim 22, wherein the method step of scanning the storage devices to find all available I/O paths between the computer and each storage device comprises the method steps of: transmitting an inquiry command from a virtual disk driver to the storage devices on each I/O path; receiving an inquiry command response in the virtual disk driver from each storage device, the inquiry command response comprising an identification unique to the storage device; correlating the inquiry command response with the I/O path used to send the inquiry command; and compiling a list of I/O paths for each storage device.
Claim 27
Dependent Claim
92 words
The program storage device of claim 22, wherein the method step of associating the core virtual disk driver with the subordinate disk driver in accordance with the switch table comprises the method steps of: sending an inquiry command from the virtual disk driver to the storage device array; receiving inquiry data from the disk array, the inquiry data comprising a storage device array identification; scanning the switch table to identify a subordinate disk driver corresponding to the storage array identification; and associating the core virtual disk driver with the subordinate disk driver.
Claim 28
Dependent Claim
25 words
The program storage device of claim 22, wherein the method step of selecting an I/O path comprises the method step of selecting successive I/O paths.
Claim 29
Dependent Claim
46 words
The program storage device of claim 22, wherein the method step of selecting an I/O path comprises the method steps of: measuring an I/O path data latency for each I/O path; and selecting the I/O path for the I/O request according to the measured data latency.
Claim 30
Dependent Claim
88 words
The program storage device of claim 26, wherein the method steps further comprise the step of receiving an I/O message from the storage device indicating that the I/O request is completed and wherein the method step of measuring and storing an I/O path data latency for each I/O path comprises the steps of: measuring the elapsed time between each I/O request and I/O messages from the storage device indicating that the I/O request is completed for each I/O path; and averaging the elapsed time for each I/O path.
Claim 31
Dependent Claim
75 words
The program storage device of claim 26, wherein a pending I/O request is defined by an I/O request for which a message indicating the I/O request is completed has not been received, and wherein the method step of selecting an I/O path comprises the method steps of: determining the number of pending I/O requests for each I/O path; and selecting the I/O path for the I/O request according to the number of pending I/O requests.
Claim 32
Dependent Claim
71 words
The program storage device of claim 26 wherein the method steps further comprise the steps of: receiving an I/O error message from an adapter driver coupled between the virtual disk driver and the array of storage devices, the I/O error message indicating the I/O paths with errors and an I/O path error type; and modifying the configuration file to remove I/O paths with errors from the list of available I/O paths.