# US 10,481,801 B1 · Optimizing storage quality of service (SQOS) by dynamically determining and managing optimal queue depth and system capacity

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,481,801 B1
- Document ID: US10481801B1
- Status: Granted
- Kind: B1
- Application number: 15/902,670
- Filed: 2018-02-22
- Granted: 2019-11-19
- Earliest claimed: 2018-02-22
- Assignees: Veritas Technologies LLC
- Applicants: Veritas Technologies LLC
- Inventors: Shreenivas N. Baitule; Sudhakar Paulzagade
- Web page: https://patentgrep.com/patent/US10481801B1

## CPC

- G06F 3/061: {Improving I/O performance}
- G06F 3/0611: {in relation to response time}
- G06F 3/0604: {Improving or facilitating administration, e.g. storage management}
- G06F 3/0659: {Command handling arrangements, e.g. command buffers, queues, command scheduling}
- G06F 3/0685: {Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays}
- G06F 9/44505: {Configuring for program initiating, e.g. using registry, configuration files}
- G06F 9/45558: {Hypervisor-specific management and integration aspects}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Various systems and methods are provided for optimizing Storage Quality of Service (SQoS) by dynamically determining and managing queue depth and system capacity in a computer storage system. In one embodiment, this functionality includes determining a queue depth value for a given epoch, and then advertising that queue depth value to one or more applications. Upon receiving a number of I/O operations that does not exceed the advertised queue depth, the storage tier processes those I/O operations. The system then evaluates the system capacity in light of the current queue depth value and other variables, such as the observed (or “seen”) latency, to determine whether the optimal queue depth value has been reached. Until the optimal queue depth value has been reached, the process outlined above is repeatedly iteratively (with dynamically increasing queue depth values) in each ensuing epoch until the optimal queue depth value is determined.

## Claims

### Claim 1

A method comprising:
determining a first queue depth value;
processing a first number of I/O requests during a first epoch, wherein the first number of I/O requests does not exceed the first queue depth value;
evaluating the first queue depth value, wherein
the evaluating the first queue depth value comprises
determining a first latency value of a storage tier, wherein
the first latency value indicates an amount of time that is needed to process an I/O request in the storage tier, and
determining whether a system capacity increased during the first epoch, wherein
the determining whether the system capacity increased during the first epoch is based, at least in part, on the first latency value; and
in response to determining that the system capacity increased during the first epoch, dynamically determining a second queue depth value.

### Claim 2 (depends on 1)

The method of claim 1, wherein
the second queue depth value is determined by calculating a sum of the first queue depth value and a previous queue depth value, wherein
the previous queue depth value is greater than or equal to zero.

### Claim 3 (depends on 1)

The method of claim 1, further comprising
processing a second number of I/O requests during a second epoch, wherein
the second number of I/O does not exceed the second queue depth value;
evaluating the second queue depth value, wherein
the evaluating the second queue depth value comprises determining whether the system capacity increased during the second epoch; and
in response to determining that the system capacity increased during the second epoch, dynamically determining a third queue depth value.

### Claim 4 (depends on 3)

The method of claim 3, wherein
the third queue depth value is determined by calculating a sum of the first queue depth value and the second queue depth value.

### Claim 5 (depends on 1)

The method of claim 1, further comprising:
prior to the processing the first number of I/O requests, advertising the first queue depth value to one or more applications.

### Claim 6 (depends on 3)

The method of claim 3, further comprising
processing a third number of I/O requests during a third epoch, wherein the third number of I/O does not exceed the third queue depth value;
evaluating the third queue depth value, wherein
the evaluating the third queue depth value comprises determining whether the system capacity increased during the third epoch; and
in response to determining that the system capacity did not increase during the second epoch, dynamically determining a fourth queue depth value, wherein the fourth queue depth value is less than the third queue depth value.

### Claim 7

A system comprising:
a microprocessor; and
a non-transient computer-readable storage medium, comprising computer instructions executable by the microprocessor, wherein the computer instructions are configured to perform a method comprising the steps of:
determining a first queue depth value;
processing a first number of I/O requests during a first epoch, wherein
the first number of I/O requests does not exceed the first queue depth value;
evaluating the first queue depth value, wherein
the evaluating the first queue depth value comprises
determining a first latency value of a storage tier, wherein
the first latency value indicates an amount of time that is needed to process an I/O request in the storage tier, and
determining whether a system capacity increased during the first epoch, wherein
the determining whether the system capacity increased during the first epoch is based, at least in part, on the first latency value; and
in response to determining that the system capacity increased during the first epoch, dynamically determining a second queue depth value.

### Claim 8 (depends on 7)

The method of claim 7, wherein
the second queue depth value is determined by calculating a sum of the first queue depth value and a previous queue depth value, wherein
the previous queue depth value is greater than or equal to zero.

### Claim 9 (depends on 7)

The method of claim 7, further comprising
processing a second number of I/O requests during a second epoch, wherein
the second number of I/O does not exceed the second queue depth value;
evaluating the second queue depth value, wherein
the evaluating the second queue depth value comprises determining whether the system capacity increased during the second epoch; and
in response to determining that the system capacity increased during the second epoch, dynamically determining a third queue depth value.

### Claim 10 (depends on 7)

The method of claim 7, further comprising:
prior to the processing the first number of I/O requests, advertising the first queue depth value to one or more applications.

### Claim 11 (depends on 9)

The method of claim 9, wherein
the third queue depth value is determined by calculating a sum of the first queue depth value and the second queue depth value.

### Claim 12 (depends on 9)

The method of claim 9, further comprising
processing a third number of I/O requests during a third epoch, wherein the third number of I/O does not exceed the third queue depth value;
evaluating the third queue depth value, wherein
the evaluating the third queue depth value comprises determining whether the system capacity increased during the third epoch; and
in response to determining that the system capacity did not increase during the second epoch, dynamically determining a fourth queue depth value, wherein the fourth queue depth value is less than the third queue depth value.

### Claim 13

A computer program product, comprising a plurality of instructions stored on a non-transient computer-readable storage medium, wherein the instructions are configured to execute a method comprising the steps of:
determining a first queue depth value;
processing a first number of I/O requests during a first epoch, wherein the first number of I/O requests does not exceed the first queue depth value;
evaluating the first queue depth value, wherein
the evaluating the first queue depth value comprises
determining a first latency value of a storage tier, wherein
the first latency value indicates an amount of time that is needed to process an I/O request in the storage tier, and
determining whether a system capacity increased during the first epoch, wherein
the determining whether the system capacity increased during the first epoch is based, at least in part, on the first latency value; and
in response to determining that the system capacity increased during the first epoch, dynamically determining a second queue depth value.

### Claim 14 (depends on 13)

The method of claim 13, wherein
the second queue depth value is determined by calculating a sum of the first queue depth value and a previous queue depth value, wherein
the previous queue depth value is greater than or equal to zero.

### Claim 15 (depends on 13)

The method of claim 13, further comprising
processing a second number of I/O requests during a second epoch, wherein
the second number of I/O does not exceed the second queue depth value;
evaluating the second queue depth value, wherein
the evaluating the second queue depth value comprises determining whether the system capacity increased during the second epoch; and
in response to determining that the system capacity increased during the second epoch, dynamically determining a third queue depth value.

### Claim 16 (depends on 15)

The method of claim 15, wherein
the third queue depth value is determined by calculating a sum of the first queue depth value and the second queue depth value.

### Claim 17 (depends on 15)

The method of claim 15, further comprising
processing a third number of I/O requests during a third epoch, wherein the third number of I/O does not exceed the third queue depth value;
evaluating the third queue depth value, wherein
the evaluating the third queue depth value comprises determining whether the system capacity increased during the third epoch; and
in response to determining that the system capacity did not increase during the second epoch, dynamically determining a fourth queue depth value, wherein the fourth queue depth value is less than the third queue depth value.
