# US 8,751,725 B1 · Hybrid storage aggregate

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

- Number: US 8,751,725 B1
- Document ID: US8751725B1
- Status: Granted
- Kind: B1
- Application number: 13/359,991
- Filed: 2012-01-27
- Granted: 2014-06-10
- Earliest claimed: 2012-01-27
- Assignees: NetApp, Inc.
- Applicants: SushilKumar Gangadharan; Mark Smith; Ravikanth Dronamraju
- Inventors: SushilKumar Gangadharan; Mark Smith; Ravikanth Dronamraju
- Web page: https://patentgrep.com/patent/US8751725B1

## CPC

- G06F 12/0638: {Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module (address formation of the next microinstruction G06F9/26; masking faults in memories by using spares or by reconfiguring G11C29/70)}
- G06F 3/061: {Improving I/O performance}
- G06F 3/0656: {Data buffering arrangements}
- G06F 3/068: {Hybrid storage device}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Among other things, one or more techniques and/or systems are provided for storing data within a hybrid storage aggregate comprising a solid state storage tier and a non-solid state storage tier. In particular, frequently accessed data and/or randomly accessed data may be identified and stored within the solid state storage tier to mitigate mechanical latency that may arise from accessing such data from the non-solid state storage tier. Infrequently accessed data and/or sequentially accessed data may be identified and stored within the non-solid state storage tier to utilize cost effective storage space while mitigating undesirable mechanical latency associated with accessing such data.

## Claims

### Claim 1

A method for identifying randomly accessed data to store in a solid state storage device of a hybrid storage aggregate, comprising:
identifying block offsets of data blocks associated with a data I/O operation to determine an access pattern; and
responsive to the access pattern indicating that the data I/O operation randomly accesses the data blocks, storing the data blocks onto a solid state storage device, at least some of at least one of the identifying or the storing implemented at least in part via a processor.

### Claim 2 (depends on 1)

The method of claim 1, the storing comprising:
storing the data blocks within a cache on the solid state storage device.

### Claim 3 (depends on 1)

The method of claim 1, comprising:
responsive to the access pattern indicating that the data I/O operation sequentially accesses the data blocks, storing the data blocks onto a non-solid state storage device.

### Claim 4 (depends on 1)

The method of claim 1, comprising:
determining a time span since a data block stored on the solid state storage device was last accessed; and
if the time span is greater than a threshold time, then migrating the data block from the solid state storage device to a non-solid state storage device.

### Claim 5 (depends on 1)

The method of claim 1, the access pattern comprising a sequence of block offsets associated with data blocks that are to be accessed by the data I/O operation during an execution of the data I/O operation.

### Claim 6 (depends on 5)

The method of claim 5, comprising:
evaluating the sequence of block offsets to compare values of respective block offsets with values of neighboring block offsets within the sequence of block offsets.

### Claim 7 (depends on 5)

The method of claim 5, comprising:
determining whether a value of a block offset of the sequence of block offsets differs from a value of a neighboring block offset greater than a threshold value.

### Claim 8 (depends on 1)

The method of claim 1, the storing the data blocks comprising:
upon identifying the data I/O operation as a write data I/O operation:
storing the data blocks onto a non-solid state storage device; and
marking the data blocks with a read-after-write caching indicator, the read-after-write caching indicator specifying that the data blocks are to be cached onto the solid state storage device upon being read from the non-solid state storage device.

### Claim 9 (depends on 1)

The method of claim 1, the storing the data blocks comprising at least one of:
upon identifying the data I/O operation as a random read data I/O operation:
retrieving the data blocks from a non-solid state storage device;
storing the data blocks within a cache buffer; and
caching the data blocks from the cache buffer onto the solid state storage device; or
upon identifying the data I/O operation as a random write data I/O operation:
caching the data blocks onto the solid state storage device.

### Claim 10

A system for identifying randomly accessed data to store in a solid state storage device of a hybrid storage aggregate, comprising:
an offset evaluation component configured to:
identify block offsets of data blocks associated with a data I/O operation to determine an access pattern; and
a data storage component configured to:
responsive to the access pattern indicting that the data I/O operation randomly accesses the data blocks, store the data blocks onto a solid state storage device, at least some of at least one of the offset evaluation component or the data storage component implemented at least in part via a processor.

### Claim 11 (depends on 10)

The system of claim 10, the data storage component configured to:
store the data blocks within a cache comprised on the solid state storage device.

### Claim 12 (depends on 10)

The system of claim 10, the data storage component configured to:
responsive to the access pattern indicating that the data I/O operation sequentially accesses the data blocks, store the data blocks onto a non-solid state storage device.

### Claim 13 (depends on 10)

The system of claim 10, the data storage component configured to:
determine a time span since a data block stored on the solid state storage device was last accessed; and
if the time span is greater than a threshold time, then migrate the data block from the solid state storage device to a non-solid state storage device.

### Claim 14 (depends on 10)

The system of claim 10, the access pattern comprising a sequence of block offsets associated with data blocks that are to be accessed by the data I/O operation during an execution of the data I/O operation.

### Claim 15 (depends on 14)

The system of claim 14, the offset evaluation component configured to:
evaluate the sequence of block offsets to compare values of respective block offsets with values of neighboring block offsets within the sequence of block offsets.

### Claim 16 (depends on 14)

The system of claim 14, the offset evaluation component configured to:
determine whether a value of a block offset of the sequence of block offsets differs from a value of a neighboring block offset greater than a threshold value.

### Claim 17 (depends on 10)

The system of claim 10, the data storage component configured to:
pre-fetch additional data associated with the data blocks; and
store the additional data onto the solid state storage device.

### Claim 18 (depends on 12)

The system of claim 12, the solid state storage device and the non-solid state storage device comprised within an aggregate of logically grouped storage devices.

### Claim 19 (depends on 12)

The method of claim 12, the data I/O operation stored within an operation queue with one or more other data I/O operations, and the data storage component configured to contemporaneously store the data blocks associated with the data I/O operation and data blocks associated with the one or more other data I/O operations onto at least one of the solid state storage device or the non-solid state storage device.

### Claim 20

A non-transitory computer readable medium comprising computer executable instructions that when executed by a processor implement a method for identifying randomly accessed data to store in a solid state storage device of a hybrid storage aggregate, comprising:
upon detecting an occurrence of a consistency point:
identifying access patterns for respective data I/O operations queued for processing, an access pattern comprising one or more block offsets with which a data I/O operation is to access;
aggregating the access patterns to create an aggregated access pattern;
responsive to the aggregated access pattern comprising a sequential access pattern, storing data blocks associated with the sequential access pattern onto a non-solid state storage device; and
responsive to the aggregated access pattern comprising a random access pattern, storing data blocks associated with the random access pattern onto a solid state storage device.

### Claim 21

A system for storing data within a hybrid storage aggregate comprising a solid state storage tier and a non-solid state storage tier, comprising:
a write caching component configured to:
identify a random write data I/O operation associated with a hybrid storage aggregate comprising a solid state storage tier and a non-solid state storage tier, the random write data I/O operation comprising writeable data; and
store the writeable data onto the solid state storage tier; and
a read caching component configured to:
identify a random read data I/O operation for requested data stored on the non-solid state storage tier of the hybrid storage aggregate;
retrieve the requested data from the non-solid state storage tier; and
store a copy of the requested data as copied data onto the solid state storage tier, at least some of at least one of the write caching component or the read caching component implemented at least in part via a processor.

### Claim 22 (depends on 21)

The system of claim 21, comprising:
a metadata caching component configured to:
store at least one of file system metadata, hybrid storage aggregate metadata, or directory data onto the solid state storage tier.

### Claim 23 (depends on 21)

The system of claim 21, the read caching component configured to:
cache the requested data retrieved from the non-solid state storage tier within a cache buffer;
satisfy the random read data I/O operation from the cache buffer; and
store the copy of the requested data onto the solid state storage tier as the copied data using the requested data stored within the cache buffer.

### Claim 24 (depends on 21)

The system of claim 21, comprising:
a cache buffer component configured to:
cache data associated with data I/O operations within one or more tiers of a cache buffer; and
notify at least one of the read caching component or the write caching component to migrate data within the cache buffer to at least one of the solid state storage tier or the non-solid state storage tier.

### Claim 25 (depends on 21)

The system of claim 21, the write caching component configured to:
identify the random write data I/O operation based upon an indirect buffer comprising locations of leaf buffers of a buffer tree associated with the writeable data, the locations indicating the random write data I/O operation randomly accesses data blocks associated with the writeable data.

### Claim 26 (depends on 21)

The system of claim 21, the solid state storage tier configured as a cache.

### Claim 27 (depends on 24)

The system of claim 24, the cache buffer component configured to:
migrate cached data between the one or more tiers of the cache buffer based upon frequency of access metrics associated with respective cached data.
