Adaptive resilvering I/O scheduling
View Patent ↗In general, the invention relates to a method for storing data. The method includes receiving an Input/Output (I/O) request to store data in a storage pool, determining whether the I/O request is a resilvering I/O request, if the I/O request is a resilvering I/O request: associating the I/O request with a first deadline, wherein the first deadline is associated with a low priority, and determining the quantized deadline for the I/O request using the first deadline. If the I/O request is not the resilvering I/O request: associating the I/O request with a second deadline, determining the quantized deadline for the I/O request using the second deadline, placing the I/O request in the I/O queue using the quantized deadline, and issuing the I/O request to the storage pool using the I/O queue.
1. A method for storing data, comprising:
receiving a plurality of Input/Output I/O requests to store data in a storage pool, wherein the plurality of I/O requests comprises at least one resilvering I/O request and at least one normal I/O request;
determining whether each I/O request of the plurality of I/O requests is a resilvering I/O request;
determining whether a first deadline associated with each I/O request of the plurality of I/O requests is expired;
for each I/O request of the plurality of I/O requests:
if the first deadline is expired:
placing the I/O request in an immediate I/O queue;
if the I/O request is the resilvering I/O request:
associating the I/O request with a second deadline, wherein the second deadline is associated with a low priority;
determining a first quantized deadline for the I/O request using the second deadline; and
ordering the I/O request in an I/O queue based on the first quantized deadline;
if the I/O request is not the resilvering I/O request:
associating the I/O request with a third deadline;
determining a second quantized deadline for the I/O request using the third deadline; and
ordering the I/O request in the I/O queue based on the second quantized deadline;
issuing each of the I/O requests in the immediate I/O queue to the storage pool; and issuing each of the I/O requests in the I/O queue to the storage pool.
2. The method of claim 1 , further comprising:
updating the I/O queue after the I/O request has been issued to the storage pool.
3. The method of claim 1 , wherein the I/O queue comprises a plurality of buckets.
4. The method of claim 3 , wherein placing the I/O request in the I/O queue comprises placing the I/O request in one of the plurality of buckets based on a corresponding quantized deadline.
5. The method of claim 3 , wherein the plurality of buckets comprises a “now” bucket and a “later” bucket.
6. The method of claim 5 , wherein the I/O request is issued when the request is a highest priority I/O request in the “now” bucket.
7. The method of claim 5 , wherein the I/O request moves from the “later” bucket to the “now” bucket after a pre-defined amount of time has elapsed.
8. The method of claim 1 , wherein the third deadline is associated with one selected from the group consisting of the low priority and a high priority.
9. The method of claim 1 , wherein the I/O queue is associated with the file system.
10. A system for storing data, comprising:
a storage pool configured to store data;
an Input/Output (I/O) queue configured to store a plurality of I/O requests to store data, wherein the plurality of I/O requests comprises at least one resilvering I/O request and at least one normal I/O request;
an immediate I/O queue configured to store I/O requests of the plurality of I/O requests for immediate processing; and
a file system configured to:
receive the plurality of I/O requests to store data in a storage pool;
determine whether each of the plurality of I/O requests is a resilvering request;
determine whether a first deadline associated with each I/O request of the plurality of I/O requests is expired;
for each I/O request of the plurality of I/O requests:
if the first deadline is expired:
place the I/O request in the immediate I/O Queue;
if the I/O request is a resilvering request:
associate the I/O request with a second deadline, wherein the second deadline is associated with a low priority;
determine a first quantized deadline for the I/O request using the second deadline; and
order the I/O request in an I/O queue based on the first quantized deadline;
if the I/O request is not the resilvering request:
associate the I/O request with a third deadline;
determine a second quantized deadline for the I/O request using the third deadline;
order the I/O request in the I/O queue based on the second quantized deadline;
issue each of the I/O requests in the immediate I/O queue to the storage pool; and
issue each of the I/O requests in the I/O queue to the storage pool.
11. The system of claim 10 , further comprising:
a logical block address data structure configured to store the I/O request and an adjacent I/O request.
12. The system of claim 11 , wherein the I/O queue is further configured to store the adjacent I/O request to store data in the storage pool.
13. The system of claim 12 , wherein the file system is further configured to:
place a copy of the I/O request in the logical block address data structure using a logical block address corresponding to the copy of the I/O request; and
issue the adjacent I/O request to the storage pool using the logical block address data structure, wherein the adjacent I/O request is determined using the logical block address of the copy of the I/O request.
14. The system of claim 10 , wherein the third deadline is associated with one selected from the group consisting of the low priority and a high priority.
15. A plurality of nodes, comprising:
a storage pool configured to store data;
an Input/Output (I/O) queue configured to store a plurality of I/O requests to store data, wherein the plurality of I/O requests comprises at least one resilvering I/O request and at least one normal I/O request; and
an immediate I/O queue configured to store I/O requests of the plurality of I/O requests for immediate processing; and
a file system configured to:
receive the plurality of I/O requests to store data in a storage pool;
determine whether each of the plurality of I/O requests is a resilvering request;
determine whether a first deadline associated with each I/O request of the plurality of I/O requests is expired;
for each I/O request of the plurality of I/O requests:
if the first deadline is expired:
place the I/O request in the immediate I/O queue;
if the I/O request is a resilvering request:
associate the I/O request with a second deadline, wherein the second deadline is associated with a low priority;
determine a first quantized deadline for the I/O request using the second deadline; and
order the I/O request in an I/O queue based on the first quantized deadline;
if the I/O request is not the resilvering request:
associate the I/O request with a third deadline;
determine a second quantized deadline for the I/O request using the third deadline;
order the I/O request in the I/O queue based on the second quantized deadline;
issue each of the I/O requests in the immediate I/O queue to the storage pool; and
issue the I/O request to the storage pool using the I/O queue, wherein the storage pool is located on at least one of the plurality of nodes,
wherein the I/O queue is located on at least one of the plurality of nodes, and
wherein the immediate I/O queue is located on at least one of the plurality of nodes, and
wherein the file system is located on at least one of the plurality of nodes.