# US 10,120,588 B2 · Sliding-window multi-class striping

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

- Number: US 10,120,588 B2
- Document ID: US10120588B2
- Status: Granted
- Kind: B2
- Application number: 15/483,941
- Filed: 2017-04-10
- Published: 2017-07-27
- Granted: 2018-11-06
- Earliest claimed: 2009-04-20
- Assignees: Microsoft Technology Licensing, LLC
- Applicants: Microsoft Technology Licensing, LLC
- Inventors: Colin Reid; Philip A. Bernstein
- Web page: https://patentgrep.com/patent/US10120588B2

## CPC

- G06F 3/0613: {in relation to throughput}
- G06F 3/0604: {Improving or facilitating administration, e.g. storage management}
- G06F 3/0631: {by allocating resources to storage systems}
- G06F 3/0635: {by changing the path, e.g. traffic rerouting, path reconfiguration}
- G06F 3/065: {Replication mechanisms}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- G06F 3/0683: {Plurality of storage devices}
- G06F 3/0689: {Disk arrays, e.g. RAID, JBOD}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A sequence of storage devices of a data store may include one or more stripesets for storing data stripes of different lengths and of different types. Each data stripe may be stored in a prefix or other portion of a stripeset. Each data stripe may be identified by an array of addresses that identify each page of the data stripe on each included storage device. When a first storage device of a stripeset becomes full, the stripeset may be shifted by removing the full storage device from the stripeset, and adding a next storage device of the data store to the stripeset.

## Claims

### Claim 1

A method, comprising:
storing data that includes M data pages as a stripe in a stripeset of a data store, the stripeset including N storage devices, wherein the N storage devices of the stripeset are associated in a logical sequence that includes a first storage device of the N storage devices at a logical first end of the stripeset and a second storage device of the N storage devices at a logical second end of the stripeset;
determining that the first storage device is full;
removing the first storage device from the stripeset; and
adding a next storage device of the data store to the stripeset to be logically positioned at the logical second end of the stripeset adjacent to the second storage device.

### Claim 2 (depends on 1)

The method of claim 1, wherein said determining comprises:
receiving a full indication from the first storage device at a storage controller.

### Claim 3 (depends on 2)

The method of claim 2, wherein said determining further comprises:
receiving the full indication from the first storage device in response to a storage request transmitted by the storage controller.

### Claim 4 (depends on 1)

The method of claim 1, wherein said determining further comprises:
receiving a full indication from a third storage device between the first and second storage devices in the logical sequence at the storage controller.

### Claim 5 (depends on 4)

The method of claim 4, wherein said removing comprises:
removing the third storage device from the stripeset.

### Claim 6 (depends on 5)

The method of claim 5, wherein said adding comprises:
adding the next storage device and a further next storage device of the data store to the stripeset to be logically positioned at the logical second end of the stripeset adjacent to the second storage device.

### Claim 7 (depends on 1)

The method of claim 1, wherein said determining comprises:
determining that a third storage device between the first and second storage devices in the logical sequence is not full.

### Claim 8

A system, comprising:
a data store comprising a plurality of storage devices;
at least one processor circuit; and
a memory that stores program code configured to be executed by the at least one processor circuit to perform operations, the operations including:
storing data that includes M data pages as a stripe in a stripeset of a data store, the stripeset including N storage devices, wherein the N storage devices of the stripeset are associated in a logical sequence that includes a first storage device of the N storage devices at a logical first end of the stripeset and a second storage device of the N storage devices at a logical second end of the stripeset;
determining that the first storage device is full;
removing the first storage device from the stripeset; and
adding a next storage device of the data store to the stripeset to be logically positioned at the logical second end of the stripeset adjacent to the second storage device.

### Claim 9 (depends on 8)

The system of claim 8, wherein said determining comprises:
receiving a full indication from the first storage device at a storage controller.

### Claim 10 (depends on 9)

The system of claim 9, wherein said determining further comprises:
receiving the full indication from the first storage device in response to a storage request transmitted by the storage controller.

### Claim 11 (depends on 8)

The system of claim 8, wherein said determining further comprises:
receiving a full indication from a third storage device between the first and second storage devices in the logical sequence at the storage controller.

### Claim 12 (depends on 11)

The system of claim 11, wherein said removing comprises:
removing the third storage device from the stripeset.

### Claim 13 (depends on 12)

The system of claim 12, wherein said adding comprises:
adding the next storage device and a further next storage device of the data store to the stripeset to be logically positioned at the logical second end of the stripeset adjacent to the second storage device.

### Claim 14 (depends on 8)

The system of claim 8, wherein said determining comprises:
determining that a third storage device between the first and second storage devices in the logical sequence is not full.

### Claim 15

A computer-readable storage medium comprising computer-executable instructions that, when executed by a processor, perform a method comprising:
storing data that includes M data pages as a stripe in a stripeset of a data store, the stripeset including N storage devices, wherein the N storage devices of the stripeset are associated in a logical sequence that includes a first storage device of the N storage devices at a logical first end of the stripeset and a second storage device of the N storage devices at a logical second end of the stripeset;
determining that the first storage device is full;
removing the first storage device from the stripeset; and
adding a next storage device of the data store to the stripeset to be logically positioned at the logical second end of the stripeset adjacent to the second storage device.

### Claim 16 (depends on 15)

The computer-readable storage medium of claim 15, wherein said determining comprises:
receiving a full indication from the first storage device at a storage controller.

### Claim 17 (depends on 16)

The computer-readable storage medium of claim 16, wherein said determining further comprises:
receiving the full indication from the first storage device in response to a storage request transmitted by the storage controller.

### Claim 18 (depends on 15)

The computer-readable storage medium of claim 15, wherein said determining further comprises:
receiving a full indication from a third storage device between the first and second storage devices in the logical sequence at the storage controller.

### Claim 19 (depends on 18)

The computer-readable storage medium of claim 18, wherein said removing comprises:
removing the third storage device from the stripeset; and
wherein said adding comprises:
adding the next storage device and a further next storage device of the data store to the stripeset to be logically positioned at the logical second end of the stripeset adjacent to the second storage device.

### Claim 20 (depends on 15)

The computer-readable storage medium of claim 15, wherein said determining comprises:
determining that a third storage device between the first and second storage devices in the logical sequence is not full.
