# US 2014/0156779 A1 · Dynamic detection and reduction of unaligned i/o operations

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

- Number: US 2014/0156779 A1
- Document ID: US20140156779A1
- Status: Published application
- Kind: A1
- Application number: 13/912,415
- Filed: 2013-06-07
- Published: 2014-06-05
- Earliest claimed: 2010-11-19
- Assignees: NetApp, Inc.
- Applicants: NetApp, Inc.
- Inventors: Rickard E. Faith; Matthew D. Hambrick; Matti A. Vanninen
- Web page: https://patentgrep.com/patent/US20140156779A1

## CPC

- H04L 67/1097: for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
- G06F 3/0613: {in relation to throughput}
- G06F 3/0629: {Configuration or reconfiguration of storage systems}
- G06F 3/064: {Management of blocks}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Detection and reduction of unaligned input/output (“I/O”) requests is implemented by a storage server determining an alignment value for data stored by the server within a storage system on behalf of a first client, writing the alignment value to a portion of the volume that stores the data for the first client, but not to a portion of the volume that stores data for a second client, and changing a location of data within the portion of the volume that stores the data for the first client, but not a location of data in the portion of the volume that stores data for the second client, to an alignment corresponding to the alignment value. The alignment value is applied to I/O requests directed to the portion of the volume that stores the data blocks for the first client after the location of the data blocks has been changed.

## Claims

### Claim at position 1

1-20. (canceled)

### Claim 21

A method for dynamic reduction of unaligned input/output (I/O) operations of a storage device, the method comprising:
receiving, from a client, an I/O request for a storage object stored by the storage device, wherein the I/O request comprises a storage object identifier;
reading, from an indirect block, a location of a plurality of locations identified by the indirect block and an alignment value, wherein the plurality of locations identify addresses for a plurality of data blocks of the storage device, and wherein the alignment value is to be applied to the plurality of locations when those locations are to be used to perform I/O operations; and
performing the I/O request for the storage object using a realigned location and the storage device, wherein the realigned location is based upon an application of the alignment value to the location.

### Claim 22 (depends on 21)

The method of claim 21, wherein the storage object is stored within a volume, and wherein the method further comprises:
receiving, from a second client, a second I/O request for a second storage object that is also stored by the storage device in the volume;
reading, from a second indirect block, a second location of a second plurality of locations identified by the second indirect block and a second alignment value, wherein the second alignment value is not the same as the alignment value; and
performing the second I/O request for the second storage object using a second realigned location and the storage device, wherein the second realigned location is based upon an application of the second alignment value to the second location.

### Claim 23 (depends on 21)

The method of claim 21, further comprising:
moving, by a first number of data blocks, each of the plurality of data blocks on the storage device identified by the plurality of locations of the indirect block; and
updating the alignment value of the indirect block based upon the first number.

### Claim 24 (depends on 21)

The method of claim 21, wherein the client is a virtual machine.

### Claim 25 (depends on 21)

The method of claim 21, wherein the realigned location comprises a sum of the location and the alignment value.

### Claim 26 (depends on 21)

The method of claim 21, wherein the realigned location comprises a sum of the location and a product of the alignment value multiplied by a number of bytes.

### Claim 27 (depends on 21)

The method of claim 21, wherein the storage device comprises a magnetic disk.

### Claim 28 (depends on 27)

The method of claim 27, wherein the storage device comprises a plurality of magnetic disks configured using Redundant Array of Inexpensive Disks (RAID).

### Claim 29 (depends on 21)

The method of claim 21, wherein the storage device comprises a flash device.

### Claim 30 (depends on 21)

The method of claim 21, wherein:
the storage object identifier comprises a block address; and
the storage object comprises a block of the storage device.

### Claim 31

A system, comprising:
one or more storage devices;
a network adapter module that receives, from one or more clients, input/output (I/O) requests for storage objects stored by the one or more storage devices, wherein the I/O requests comprise storage object identifiers of the storage objects; and
a storage adapter module coupled to the network adapter module and the one or more storage devices, wherein for each of the I/O requests, the storage adapter:
reads, from an indirect block, a location of a plurality of locations identified by the indirect block and an alignment value, wherein the plurality of locations identify addresses for a plurality of data blocks of the one or more storage devices, and wherein the alignment value is to be applied to the plurality of locations when those locations are to be used to perform I/O operations, and
performs the I/O request for the respective storage object using a realigned location and the one or more storage devices, wherein the realigned location is based upon an application of the alignment value to the location.

### Claim 32 (depends on 31)

The system of claim 31, wherein the storage adapter further:
moves all of the plurality of data blocks having addresses identified by a first indirect block by moving each of those plurality of data blocks by a number of data blocks; and
updates the alignment value of the first indirect block based upon the number of data blocks.

### Claim 33 (depends on 31)

The system of claim 31, wherein at least one of the one or more clients is a virtual machine.

### Claim 34 (depends on 31)

The system of claim 31, wherein, for at least some of the I/O requests, the realigned location comprises a sum of the location from the respective indirect block and the alignment value from the respective indirect block.

### Claim 35 (depends on 31)

The system of claim 31, wherein, for at least some of the I/O requests, the realigned location comprises a sum of the location from the respective indirect block and a product of the alignment value from the respective indirect block multiplied by a number of bytes.

### Claim 36

A storage server, comprising:
a storage device;
a memory; and
a processor coupled to the memory, wherein the processor executes instructions that cause the storage server to,
receive, from a client, an input/output (I/O) request for a storage object stored by the storage device, wherein the I/O request comprises a storage object identifier,
read, from an indirect block, a location of a plurality of locations identified by the indirect block and an alignment value, wherein the plurality of locations identify addresses for a plurality of data blocks of the storage device, and wherein the alignment value is to be applied to the plurality of locations when those locations are to be used to perform I/O operations, and
performing the I/O request for the storage object using a realigned location and the storage device, wherein the realigned location is based upon an application of the alignment value to the location.

### Claim 37 (depends on 36)

The storage server of claim 36, wherein the storage object is stored within a volume, and wherein the instructions further cause the storage server to:
receive, from a second client, a second I/O request for a second storage object that is also stored by the storage device in the volume;
read, from a second indirect block, a second location of a second plurality of locations identified by the second indirect block and a second alignment value, wherein the second alignment value is not the same as the alignment value; and
perform the second I/O request for the second storage object using a second realigned location and the storage device, wherein the second realigned location is based upon an application of the second alignment value to the second location.

### Claim 38 (depends on 37)

The storage server of claim 37, wherein:
the client is a first virtual machine; and
the second client is a second virtual machine.

### Claim 39 (depends on 36)

The storage server of claim 36, wherein the instructions further cause the storage server to:
move, by a first number of data blocks, each of the plurality of data blocks on the storage device identified by the plurality of locations of the indirect block; and
update the alignment value of the indirect block based upon the first number.

### Claim 40 (depends on 36)

The storage server of claim 36, wherein the realigned location comprises a sum of or difference between the location and the alignment value.
