Method and apparatus for decomposing I/O tasks in a raid system
First Claim
1. A method for decomposing a data access request from a file system into a plurality of lower-level I/O tasks in a RAID system, said method comprising:
- representing logical combination and configuration of physical storage components of said RAID system as a hierarchical set of objects;
generating a parent I/O task from a first object in said hierarchical set of objects in response to said data access request from the file system;
dynamically allocating a resource for a child I/O task;
generating said child I/O task from a second object in said hierarchical set of objects to implement at least a portion of said parent I/O task, said child I/O task using the resources;
suspending the parent I/O task until said child I/O task is completed;
scheduling for execution said child I/O task by an I/O thread;
suspending the child I/O task by the I/O thread if the resource is not available;
executing said child I/O task in response to an occurrence of an event that the resource is available such that scheduling of said child I/O task is not conditional on execution of said parent I/O task; and
deallocating said resources allocated to said child I/O task when the child I/O task is completed;
resuming the parent I/O task upon an event indicating the completion of said child I/O task, said event indicating the completion occurred when a function vector is invoked by said child I/O task.
3 Assignments
0 Petitions
Accused Products
Abstract
The present invention implements an I/O task architecture in which an I/O task requested by the storage manager, for example a stripe write, is decomposed into a number of lower-level asynchronous I/O tasks that can be scheduled independently. Resources needed by these lower-level I/O tasks are dynamically assigned, on an as-needed basis, to balance the load and use resources efficiently, achieving higher scalability. A hierarchical order is assigned to the I/O tasks to ensure that there is a forward progression of the higher-level I/O task and to ensure that resources do not become deadlocked.
-
Citations
31 Claims
-
1. A method for decomposing a data access request from a file system into a plurality of lower-level I/O tasks in a RAID system, said method comprising:
-
representing logical combination and configuration of physical storage components of said RAID system as a hierarchical set of objects; generating a parent I/O task from a first object in said hierarchical set of objects in response to said data access request from the file system; dynamically allocating a resource for a child I/O task; generating said child I/O task from a second object in said hierarchical set of objects to implement at least a portion of said parent I/O task, said child I/O task using the resources; suspending the parent I/O task until said child I/O task is completed; scheduling for execution said child I/O task by an I/O thread; suspending the child I/O task by the I/O thread if the resource is not available; executing said child I/O task in response to an occurrence of an event that the resource is available such that scheduling of said child I/O task is not conditional on execution of said parent I/O task; and deallocating said resources allocated to said child I/O task when the child I/O task is completed; resuming the parent I/O task upon an event indicating the completion of said child I/O task, said event indicating the completion occurred when a function vector is invoked by said child I/O task. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)
-
-
22. A storage system for decomposing a data access request into a plurality of lower-level I/O tasks in a RAID system, said storage system comprising:
-
a memory; a network adapter; an instantiator module stored in the memory configured to provide a hierarchical set of objects representing logical combination and configuration of physical storage components of said RAID system, to generate a parent I/O task from a first object in said hierarchical set of objects in response to said data access request received at the network adapter, to dynamically allocate a resource to a child I/O task, and to generate said child I/O task from a second object in said hierarchical set of objects to implement at least a portion of said parent I/O task, said child I/O task using the resources; and an I/O manager stored in the memory configured to receive said parent and child I/O tasks and to schedule execution of said parent I/O tasks, to suspend the parent I/O task until said child I/O task is completed, to schedule for execution said child I/O task by an I/O thread, to suspend the child I/O task by the I/O thread if the resource is not available, to resume the parent I/O task upon an event indicating the completion of said child I/O task, said event indicating the completion occurring when a function vector is invoked by said child I/O task, to deallocate said resource allocated to said child I/O task when said child I/O task is completed, and to perform said data access request to accomplish an I/O data access to the RAID system of the storage system. - View Dependent Claims (23, 24, 25, 26, 27, 28, 29, 30)
-
-
31. A computer readable medium having stored thereon computer-readable instructions for execution on a processor to perform a method of decomposing a data access request into a plurality of lower-level I/O tasks in a RAID system, said method comprising the steps of:
-
representing logical combination and configuration of physical storage components of said RAID system as a hierarchical set of objects; generating a parent I/O task from a first object in said hierarchical set of objects in response to said data access request from the file system; dynamically allocating a resource for a child I/O task; generating said child I/O task from a second object in said hierarchical set of objects to implement at least a portion of said parent I/O task, said child I/O task using the resources; suspending the parent I/O task until said child I/O task is completed; scheduling for execution said child I/O task by an I/O thread; suspending the child I/O task by the I/O thread if the resource is not available; executing said child I/O task in response to an occurrence of an event that the resource is available such that scheduling of said child I/O task is not conditional on execution of said parent I/O task; and deallocating said resources allocated to said child I/O task when the child I/O task is completed; resuming the parent I/O task upon an event indicating the completion of said child I/O task, said event indicating the completion occurred when a function vector is invoked by said child I/O task.
-
Specification