# US 10,310,753 B1 · Capacity attribution in a storage system

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

- Number: US 10,310,753 B1
- Document ID: US10310753B1
- Status: Granted
- Kind: B1
- Application number: 15/967,250
- Filed: 2018-04-30
- Granted: 2019-06-04
- Earliest claimed: 2015-06-19
- Assignees: Pure Storage, Inc.
- Applicants: Pure Storage, Inc.
- Inventors: Jianting Cao; Martin Harriman; John Hayes; Cary Sandvig
- Web page: https://patentgrep.com/patent/US10310753B1

## CPC

- G06F 3/0619: {in relation to data integrity, e.g. data losses, bit errors}
- G06F 3/0604: {Improving or facilitating administration, e.g. storage management}
- G06F 3/0608: {Saving storage space on storage systems}
- G06F 3/0629: {Configuration or reconfiguration of storage systems}
- G06F 3/0644: {Management of space entities, e.g. partitions, extents, pools}
- G06F 3/0646: {Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems}
- G06F 3/065: {Replication mechanisms}
- G06F 3/0662: {Virtualisation aspects}
- G06F 3/0665: {at area level, e.g. provisioning of virtual or logical volumes}
- 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 3/0673: {Single storage device}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Attributing consumed storage capacity among entities storing data in a storage array includes: identifying a data object stored in the storage array and shared by a plurality of entities, where the data object occupies an amount of storage capacity of the storage array; and attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object.

## Claims

### Claim 1

A method of capacity attribution in a storage system, the method comprising:
identifying a data object stored in the storage system and shared by a plurality of entities, including identifying, from a set of subsequent snapshots, data shared between the snapshots, the data object occupying an amount of storage capacity of the storage system; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object including attributing to each of the set of subsequent snapshots a fractional portion of the amount of storage capacity occupied by the data shared between the snapshots.

### Claim 2 (depends on 1)

The method of claim 1, wherein attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises:
for each entity:
identifying a number of references, generated by the entity, to the data object;
calculating an entity-specific proportion of the number of references generated by the entity relative to a total number of references to the data object; and
calculating the product of the entity-specific proportion and the amount of storage capacity occupied by the data object.

### Claim 3 (depends on 2)

The method of claim 2 further comprising, upon a loss of references by the entity to the data object, recalculating, for the entity, the fractional portion of the amount of storage capacity occupied by the data object.

### Claim 4 (depends on 1)

The method of claim 1, wherein:
identifying a data object shared by a plurality of entities further comprises identifying deduplicated data referenced by a plurality of I/O operation originators; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises attributing to each of the I/O operation originators a fractional portion of the amount of storage capacity occupied by the deduplicated data.

### Claim 5 (depends on 1)

The method of claim 1, wherein:
identifying a data object shared by a plurality of entities further comprises identifying data shared between a source memory region comprising a source of a copy operation and a target memory region comprising a target of the copy operation; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises attributing to the source and target memory regions a fractional portion of the amount of storage capacity occupied by the data shared between the source and target memory regions.

### Claim 6 (depends on 1)

The method of claim 1 further comprising:
receiving, from a particular entity, an identification of a particular data object stored in the storage system and shared by a plurality of entities including the particular entity; and
calculating, in dependence upon the fractional portion of the amount of storage capacity occupied by the particular data object and attributed to the particular entity, an amount of storage capacity to be made available to the particular entity in response to a command, issued by the particular entity, to delete the particular data object.

### Claim 7 (depends on 1)

The method of claim 1 further comprising:
identifying a system-level data object stored in the storage system, wherein the system-level data object is not explicitly shared by the plurality of entities; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the system-level data object.

### Claim 8

An apparatus for capacity attribution in a storage system, the apparatus comprising a computer processor, a computer memory operatively coupled to the computer processor, the computer memory having disposed within it computer program instructions that, when executed by the computer processor, cause the apparatus to carry out the steps of:
identifying a data object stored in the storage system and shared by a plurality of entities, including identifying, from a set of subsequent snapshots, data shared between the snapshots, the data object occupying an amount of storage capacity of the storage system; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object including attributing to each of the set of subsequent snapshots a fractional portion of the amount of storage capacity occupied by the data shared between the snapshots.

### Claim 9 (depends on 8)

The apparatus of claim 8, wherein attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises:
for each entity:
identifying a number of references, generated by the entity, to the data object;
calculating an entity-specific proportion of the number of references generated by the entity relative to a total number of references to the data object; and
calculating the product of the entity-specific proportion and the amount of storage capacity occupied by the data object.

### Claim 10 (depends on 9)

The method of claim 9 further comprising computer program instructions that, when executed, cause the apparatus to carry out the step of: upon a loss of references by the entity to the data object, recalculating, for the entity, the fractional portion of the amount of storage capacity occupied by the data object.

### Claim 11 (depends on 8)

The apparatus of claim 8, wherein:
identifying a data object shared by a plurality of entities further comprises identifying deduplicated data referenced by a plurality of I/O operation originators; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises attributing to each of the I/O operation originators a fractional portion of the amount of storage capacity occupied by the deduplicated data.

### Claim 12 (depends on 8)

The apparatus of claim 8, wherein:
identifying a data object shared by a plurality of entities further comprises identifying data shared between a source memory region comprising a source of a copy operation and a target memory region comprising a target of the copy operation; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises attributing to the source and target memory regions a fractional portion of the amount of storage capacity occupied by the data shared between the source and target memory regions.

### Claim 13 (depends on 8)

The apparatus of claim 8 further comprising computer program instructions that, when executed, cause the apparatus to carry out the steps of:
receiving, from a particular entity, an identification of a particular data object stored in the storage system and shared by a plurality of entities including the particular entity; and
calculating, in dependence upon the fractional portion of the amount of storage capacity occupied by the particular data object and attributed to the particular entity, an amount of storage capacity to be made available to the particular entity in response to a command, issued by the particular entity, to delete the particular data object.

### Claim 14 (depends on 8)

The apparatus of claim 8 further comprising computer program instructions that, when executed, cause the apparatus to carry out the steps of:
identifying a system-level data object stored in the storage system, wherein the system-level data object is not explicitly shared by the plurality of entities; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the system-level data object.

### Claim 15

A computer program product for capacity attribution in a storage system, the computer program product disposed upon a computer readable medium, the computer program product comprising computer program instructions that, when executed, cause a computer to carry out the steps of:
identifying a data object stored in the storage system and shared by a plurality of entities, including identifying, from a set of subsequent snapshots, data shared between the snapshots, the data object occupying an amount of storage capacity of the storage system; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object including attributing to each of the set of subsequent snapshots a fractional portion of the amount of storage capacity occupied by the data shared between the snapshots.

### Claim 16 (depends on 15)

The computer program product of claim 15, wherein:
identifying a data object shared by a plurality of entities further comprises identifying deduplicated data referenced by a plurality of I/O operation originators; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises attributing to each of the I/O operation originators a fractional portion of the amount of storage capacity occupied by the deduplicated data.

### Claim 17 (depends on 15)

The computer program product of claim 15, wherein:
identifying a data object shared by a plurality of entities further comprises identifying data shared between a source memory region comprising a source of a copy operation and a target memory region comprising a target of the copy operation; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the data object further comprises attributing to the source and target memory regions a fractional portion of the amount of storage capacity occupied by the data shared between the source and target memory regions.
