US Pat. No. 9,864,769

STORING DATA UTILIZING REPEATING PATTERN DETECTION

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage device; and
a data storage controller coupled to the data storage device;
wherein the data storage controller is configured to receive a write request to store write data to the data storage device,
wherein the write data includes pattern data and non-pattern data; and in response to receiving the write request,

detect, within the pattern data, whether a number of contiguous instances of a bit pattern is above a predefined threshold;
in response to detecting that the number of contiguous instances of the bit pattern is above the predefined threshold, instead
of storing the pattern data within the data storage device, store within a mapping table of the data storage controller, a
first entry that includes the bit pattern and the number of contiguous instances of the bit pattern;

store the non-pattern data within the data storage device; and
store, within the mapping table, one or more entries that each include a pointer to a location within the data storage device
where the non-pattern data is stored.

US Pat. No. 9,864,761

READ OPTIMIZATION OPERATIONS IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A system comprising:
one or more storage devices; and
a storage controller coupled to the one or more storage devices, wherein responsive to selecting a dataset to be read optimized,
the storage controller is configured to:

identify metadata associated with the dataset, wherein the metadata includes:
an active logical grouping of data that is in a read-write state and corresponds to an anchor logical grouping of data; and
non-active logical groupings of data that are in a read-only state and correspond to one or more logical data groupings which
underlie the anchor logical grouping of data;

based on the metadata associated with the dataset, select one or more of the non-active logical groupings of data for a read
optimization operation; and

perform a user operation on the dataset using the active logical grouping of data that is in the read-write state, while simultaneously:
performing the read optimization operation on the selected one or more non-active logical groupings of data by reducing the
number of mappings within the non-active logical groupings of data; and

preventing the read optimization operation from being performed on the active logical grouping of data in the read-write state.

US Pat. No. 9,423,967

SCHEDULING OF I/O WRITES IN A STORAGE ENVIRONMENT

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage medium comprising a plurality of storage devices configured to store data;
and a data storage controller coupled to the data storage medium;
wherein the data storage controller is configured to:
cease processing requests corresponding to a first type of operation on a first storage device;
queue a plurality of requests of a second type of operation;
schedule requests of the second type for immediate processing by the first storage device; and
in response to detecting a second storage device of the plurality of storage devices is exhibiting a relatively long response
latency, discontinue processing the requests corresponding to the second type of operation by the first storage device.

US Pat. No. 9,436,396

SCHEDULING OF RECONSTRUCTIVE I/O READ OPERATIONS IN A STORAGE ENVIRONMENT

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage medium comprising a plurality of storage devices configured to store data in at least one redundant array of
independent disks (RAID) group; and

a data storage controller coupled to the data storage medium;
wherein the data storage controller is configured to:
receive a read request targeted to the data storage medium;
identify at least a first storage device of the plurality of storage devices which currently contains data targeted by the
read request; and

make a determination, based on whether the first storage device has exceeded a first time period for responding to the read
request without exceeding a second time period for responding to the read request, to generate a reconstruct read request
configured to obtain the data from one or more devices of the plurality of storage devices other than the first storage device.

US Pat. No. 9,361,035

PERFORMING COPIES IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method for use in a storage system, the method comprising:
receiving a request to copy data from a first range of a first volume associated with a first medium to a second range of
a second volume associated with a second medium; and

responsive to receiving the request:
creating a third medium;
storing an indication that the first medium underlies the third medium; and
storing an indication that the second range of the second volume is associated with the third medium.

US Pat. No. 9,357,010

STORAGE SYSTEM ARCHITECTURE

Pure Storage, Inc., Moun...

1. A method for communication within a storage system, comprising:
communicating from a first one of a plurality of storage nodes of the storage system to at least one other of the plurality
of storage nodes, via a first pathway; and

communicating from a first one of a plurality of storage units of one of the plurality of storage nodes to at least one other
of the plurality of storage units, via a second pathway without assistance from the plurality of storage nodes.

US Pat. No. 9,213,485

STORAGE SYSTEM ARCHITECTURE

Pure Storage, Inc., Moun...

1. A storage system, comprising:
a plurality of storage units, each of the plurality of storage units having storage memory for user data;
a plurality of storage nodes, each of the plurality of storage nodes configured to have ownership of a portion of the user
data; and

a first pathway, coupling the plurality of storage units such that each of the plurality of storage units can communicate
with at least one other of the plurality of storage units via the first pathway without assistance from the plurality of storage
nodes.

US Pat. No. 9,298,376

SCHEDULING OF I/O IN AN SSD ENVIRONMENT

Pure Storage, Inc., Moun...

1. A computer system comprising:
a plurality of storage devices configured to store data; and
a data storage controller configured to:
determine that a particular storage device is in a particular operational state;
determine a length of time that the particular storage device has been in the particular operational state;
based on the particular operational state and the length of time the particular storage device has been in the particular
operational state, predicting when a particular storage device of the plurality of storage devices will exhibit an unscheduled
behavior comprising a relatively high response latency or a relatively low throughput; and

based on the prediction, schedule one or more proactive operations in order to reduce a likelihood of an occurrence of the
unscheduled behavior.

US Pat. No. 9,948,615

INCREASED STORAGE UNIT ENCRYPTION BASED ON LOSS OF TRUST

Pure Storage, Inc., Moun...

1. A method for storage unit communication, practiced by a storage unit, comprising:detecting an event associated with a loss of trust for first data stored within the storage unit, wherein the event associated with the loss of trust includes one of a power loss, a power interruption, a malformed request to the storage unit, or a detected theft attempt;
altering an outbound path in response to the detecting so that the data that is being transmitted proceeds through an encryption module prior to exiting the storage unit;
encrypting, at the storage unit, the first data that is being transmitted along the outbound path of the storage unit to a requestor, wherein the encrypting is responsive to detecting the event associated with the loss of trust;
transmitting the encrypted data to the requestor, wherein the requestor is one of a plurality of authorities in a plurality of storage nodes of a storage cluster and wherein each of the storage nodes is configured to have two or more authorities each controlling a range of user data; and
allowing second data to pass through without encryption responsive to not detecting an event associated with loss of trust for the second data.

US Pat. No. 9,110,789

NONREPEATING IDENTIFIERS IN AN ADDRESS SPACE OF A NON-VOLATILE SOLID-STATE STORAGE

Pure Storage, Inc., Moun...

1. A method of applying an address space in a non-volatile solid-state storage executed by a processor, comprising:
receiving user data for storage in the non-volatile solid-state storage;
translating a first address of a portion of the user data in a first address space, to a second address of the portion of
the user data in a second address space, wherein addresses in the second address space have a range, the range of the addresses
in the second address space is greater than a maximum number of addresses in the second address space expected to be applied
during a lifespan of the non-volatile solid-state storage; and

storing the portion of the user data in the non-volatile solid-state storage, with the portion of the user data associated
with both the first address and the second address, wherein the second address space is one of a logical address space or
a virtual address space.

US Pat. No. 9,940,060

MEMORY USE AND EVICTION IN A DEDUPLICATION STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method comprising:storing data comprising an index summary (IS) and a deduplication map (DDM) in volatile memory of a deduplication system, wherein the index summary comprises IS levels and accelerates lookup into the deduplication map, wherein the deduplication map comprises DDM levels and identifies locations of data blocks in a persistent storage resource of the deduplication system;
detecting that the stored data exceeds a data allocation size limit for the volatile memory; and
evicting the data from the volatile memory using a memory eviction policy to meet the data allocation size limit, wherein evicting using the memory eviction policy comprises:
performing a first eviction by evicting the DDM levels from an oldest DDM level to a newest DDM level until a first one of the data allocation size limit or a DDM threshold is met; and
responsive to the data allocation size limit not being met by the first eviction, performing a second eviction by evicting the IS levels from an oldest IS level to a newest IS level until a first one of the data allocation size limit or IS threshold is met.

US Pat. No. 9,063,967

PERFORMING COPIES IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computer system comprising:
one or more storage devices; and
a storage controller coupled to the one or more storage devices;
wherein responsive to receiving a request to copy a first range of data from a first volume associated with a first medium
to a second range of a second volume associated with a second medium, the storage controller is configured to:

create a third medium, store an indication that the first medium underlies the third medium, and associate the first volume
with the third medium;

create a fourth medium, store an indication that the second medium underlies the fourth medium, and associate the second volume
with the fourth medium; and

store an indication that the first range of data in the first medium underlies the second range in the fourth medium.

US Pat. No. 9,594,678

PREVENTING DUPLICATE ENTRIES OF IDENTICAL DATA IN A STORAGE DEVICE

Pure Storage, Inc., Moun...

1. A method of preventing duplicate entries of identical data in a storage device, the method comprising:
receiving a write request to write data to the storage device;
calculating one or more signatures for the data associated with the write request;
obtaining from a recently read signature buffer, a particular calculated signature corresponding to data that was recently
read from the storage device;

determining whether any of the one or more calculated signatures match the particular calculated signature from the recently
read signature buffer, wherein each entry in the recently read signature buffer associating a calculated signature for data
that has been read with an address of a storage location within the storage device where the data is stored; and

responsive to determining that one of the one or more calculated signatures matches the particular calculated signature contained
in the recently read signature buffer, determining whether the data associated with the one or more calculated signatures
is a duplicate of data stored at a particular address that is associated with the particular calculated signature contained
in the recently read signature buffer.

US Pat. No. 9,489,132

UTILIZING UNMAPPED AND UNKNOWN STATES IN A REPLICATED STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A system comprising:
a first storage subsystem; and a second storage subsystem;
wherein the system is configured to:
detect a request to replicate a first medium from the first storage subsystem to the second storage subsystem;
determine that a first portion of the first medium is in a first state on the first storage subsystem;
record that the first portion of the first medium is in a second state on the second storage subsystem, wherein the second
state is different from the first state; wherein the first state is an unmapped state, and wherein the second state is an
unknown state; wherein recording includes determining where to record that the first portion of the first medium is in the
unknown state based on a size of the first portion.

US Pat. No. 9,218,407

REPLICATION AND INTERMEDIATE READ-WRITE STATE FOR MEDIUMS

Pure Storage, Inc., Moun...

1. A system comprising:
a first storage system comprising a storage controller and one or more storage devices; and
a second storage system comprising a storage controller and one or more storage devices;
wherein the first storage system is configured to:
receive a first portion of a medium from the second storage system during replication of first data, wherein the first data
is a volume, wherein the first portion of the medium underlies the first data, and wherein a second portion of the medium
does not underlie the first data;

expose the first data to one or more user operations while the medium is in an intermediate read-write state responsive to
receiving the first data in its entirety and prior to receiving the second portion of the medium;

take a snapshot of the volume while the medium is in the intermediate read-write state, wherein the medium remains in the
intermediate read-write state after the snapshot is taken of the volume;

create a new anchor medium for the volume responsive to taking the snapshot of the volume;
map the new anchor medium to a previous anchor medium of the volume responsive to taking the snapshot of the volume; and
convert the previous anchor medium to a read-only state responsive to taking the snapshot of the volume.

US Pat. No. 9,454,477

LOGICAL SECTOR MAPPING IN A FLASH STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A computing system comprising:
a data storage medium;
a data storage controller coupled to the data storage medium, the controller configured to:
identify a query value corresponding to a read request;
select, in dependence upon the query value, from a plurality of levels within a mapping table, the youngest level associated
with the query value; and

search the selected youngest level for an entry that maps the query value to a value corresponding to a location within the
data storage medium.

US Pat. No. 9,444,822

STORAGE ARRAY ACCESS CONTROL FROM CLOUD-BASED USER AUTHORIZATION AND AUTHENTICATION

Pure Storage, Inc., Moun...

1. A method of providing authorization and authentication in a cloud for a user of a storage array, the method comprising:
receiving, by a storage array access module from a client-side array services module, a token representing authentication
of user credentials and authorized access privileges defining one or more storage array services accessible by the user,

wherein the token is generated by a cloud-based security module upon authentication of the user credentials and identification
of authorized access privileges for the user,

wherein access privileges are defined in the cloud-based security module for a plurality of users with an association of each
user with one of a plurality of profiles, each profile specifying access privileges for users associated with the profile,
and

wherein the plurality of profiles comprise at least one storage-array specific profile specifying access privileges for a
single storage array and multi-array profiles specifying access privileges for a plurality of storage arrays;

receiving, by the storage array access module from the user, a user access request to one or more storage array services;
and

determining, by the storage array access module, whether to grant the user access request in dependence upon the authorized
access privileges represented by the token.

US Pat. No. 9,396,078

REDUNDANT, FAULT-TOLERANT, DISTRIBUTED REMOTE PROCEDURE CALL CACHE IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A plurality of storage nodes, comprising:
each of the plurality of storage nodes having non-volatile solid-state memory for user data storage, a remote procedure call
cache, and a mirrored remote procedure call cache configured to minor a remote procedure call cache of another storage node.

US Pat. No. 9,384,082

PROACTIVELY PROVIDING CORRECTIVE MEASURES FOR STORAGE ARRAYS

Pure Storage, Inc., Moun...

1. A method of proactively providing corrective measures for storage arrays, the method comprising:
detecting, in dependence upon a problem signature, one or more events from data of a storage array that are indicative of
a particular problem, wherein the problem signature comprises a specification of a pattern of events indicative of the particular
problem experienced by at least one other storage array;

determining that the particular problem violates an operational policy of the storage array, the operational policy specifying
at least one requirement for an operational metric of the storage array; and

deploying one or more corrective measures to prevent the storage array from experiencing the particular problem.

US Pat. No. 9,201,600

STORAGE CLUSTER

Pure Storage, Inc., Moun...

1. A storage cluster in a single chassis, comprising:
a plurality of storage nodes configured to communicate together as the storage cluster;
each of the plurality of storage nodes having one or more storage units;
each of the one or more storage units having solid-state storage memory;
the plurality of storage nodes configured to distribute user data and metadata associated with the user data throughout the
plurality of storage nodes; and

a plurality of compute nodes in the single chassis, each of the plurality of compute nodes configured to communicate with
the plurality of storage nodes.

US Pat. No. 9,594,633

ADAPTIVE RAID FOR AN SSD ENVIRONMENT

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage subsystem configured to receive read and write requests, wherein the subsystem comprises a plurality of data
storage locations on a plurality of storage devices in a redundant array of independent disks (RAID) configuration; and

a storage controller configured to:
write a first RAID stripe to the plurality of storage devices including allocating, in a first storage device, a first amount
of space for storing intra-device protection data for protecting first RAID data of the first RAID stripe stored on the first
storage device; and

write a second RAID stripe to the plurality of storage devices including, in addition to allocating the first amount of space,
concurrently allocating, in the first storage device, a second amount of space for storing intra-device protection data for
protecting second RAID data of the second RAID stripe stored on the first storage device;

wherein the first amount is different than the second amount.

US Pat. No. 9,501,244

SCHEDULING POLICY FOR QUEUES IN A NON-VOLATILE SOLID-STATE STORAGE

Pure Storage, Inc., Moun...

1. A method of applying scheduling policies to a non-volatile solid-state storage, comprising:
receiving requests for operations into a plurality of operation queues; and
evaluating each of the operations in the plurality of operation queues as to benefit to the non-volatile solid-state storage,
with a benefit of at least one of the operations based on addressing from an address translation scheme applied to data of
the at least one of the operations, wherein newly arriving data write operations have higher benefit than at least one other
operation, based on addresses of the newly arriving data write operations in accordance with the address translation scheme.

US Pat. No. 9,483,346

DATA REBUILD ON FEEDBACK FROM A QUEUE IN A NON-VOLATILE SOLID-STATE STORAGE

Pure Storage, Inc., Moun...

1. A method for accessing data in a plurality of storage nodes having nonvolatile solid-state memory, comprising:
distributing user data throughout the plurality of storage nodes through erasure coding such that in event of a determination
by the plurality of storage nodes that two of the plurality of storage nodes are unreachable the user data is accessible via
the erasure coding from a remainder of the plurality of storage nodes, wherein the plurality of storage nodes are coupled
as a storage cluster;

receiving a request that directs a read of the non-volatile solid-state memory, wherein the read of the non-volatile solid-state
memory is based at least in part on reading a first bit in the non-volatile solid-state memory via a first path, and wherein
a plurality of operations queues is coupled to the first path;

determining, based on contents of the plurality of operations queues, whether a read time for the reading for the reading
the first bit via the first path is within a targeted read latency; and

determining a second path to achieve the read of the non-volatile solid-state memory, responsive to determining that the read
time for the reading of the first bit via the first path is not within the targeted read latency, wherein a processor performs
at least one method operation.

US Pat. No. 9,251,066

GARBAGE COLLECTION IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computing system comprising:
a data storage medium;
a data storage controller configured to:
determine that a current segment within the data storage medium is in use by identifying a valid mapping of a location in
the current segment to one or more virtual addresses;

copy data from the location in the current segment to a new storage location in the data storage medium; and
reclaim the location in the current segment.

US Pat. No. 9,244,769

OFFSET PROTECTION DATA IN A RAID ARRAY

Pure Storage, Inc., Moun...

1. A computer system comprising:
a client computer comprising hardware and configured to send read and write requests over a network;
a data storage subsystem coupled to the network configured to receive the read and write requests, wherein the subsystem comprises
a plurality of data storage locations on a plurality of storage devices;

wherein the data storage subsystem further comprises a storage controller,
wherein for a given redundant array of independent drives (RAID) stripe, the storage controller is configured to:
store user data in a first page of a first storage device of the plurality of storage devices;
generate first intra-device protection data configured to protect the user data;
store the first intra-device protection data at a first offset within the first page;
generate second intra-device protection data configured to protect data stored in a second page of a second storage device
of the plurality of storage devices;

store the second intra-device protection data in the second page at a second offset within the second page, wherein the second
offset is at a different position relative to the second page than the first offset is relative to the first page;

generate inter-device protection data configured to protect the first intra-device protection data of the first page; and
store the inter-device protection data at a third offset within the second page, wherein the third offset is at a same position
relative to the second page as the first offset relative to the first page.

US Pat. No. 9,087,012

DISASTER RECOVERY AT HIGH RELIABILITY IN A STORAGE CLUSTER

Pure Storage, Inc., Moun...

1. A method of storing data, comprising:
receiving data at one storage cluster of a storage grid, the storage grid comprising multiple storage cluster;
storing the data at the first storage cluster of the storage grid;
storing a portion of the data at the second storage cluster of the storage grid;
storing a remaining portion of the data at the third storage cluster of the storage grid; and
repeating the receiving and each storing operation with a second data, such that no one storage cluster of the storage grid
has a full copy of the data and a full copy of the second data, wherein at least one method operation is executed by a processor.

US Pat. No. 10,126,982

ADJUSTING A NUMBER OF STORAGE DEVICES IN A STORAGE SYSTEM THAT MAY BE UTILIZED TO SIMULTANEOUSLY SERVICE HIGH LATENCY OPERATIONS

Pure Storage, Inc., Moun...

1. A method of adjusting a number of storage devices in a storage system that may be utilized to simultaneously service high latency operations, the method comprising:limiting, in dependence upon an amount of redundancy data in the storage system, a number of storage devices in a device group that may simultaneously service high latency operations;
detecting a condition that requires additional bandwidth for high latency operations; and
responsive to detecting the condition that requires additional bandwidth for high latency operations, increasing the number of storage devices within the device group that may simultaneously service high latency operations.

US Pat. No. 9,405,486

FRACTAL LAYOUT OF DATA BLOCKS ACROSS MULTIPLE DEVICES

Pure Storage, Inc., Moun...

1. A computing system comprising:
a plurality of storage devices; and
a data storage controller, wherein the data storage controller is configured to:
receive a request to store a consecutive collection of data; and
store the group of data within a region using a fractal pattern, wherein the region spans two or more storage devices of the
plurality of storage device.

US Pat. No. 9,588,691

DYNAMICALLY MANAGING CONTROL INFORMATION IN A STORAGE DEVICE

Pure Storage, Inc., Moun...

1. A method of dynamically managing control information in a plurality of storage devices in a storage array of storage devices,
the method comprising:
querying, by a storage array controller using a data communications link coupling the storage array controller to the plurality
of storage devices, the plurality of storage devices for an identification of a plurality of memory blocks that contain control
information stored within the memory blocks, the control information describing the state of other memory blocks in the storage
device, wherein querying the plurality of storage devices for an identification of a plurality of memory blocks that contain
control information stored within the memory blocks comprises:

sending, from the storage array controller to at least one of the plurality of storage devices, a location discovery request
instructing the at least one of the plurality of storage devices to determine locations of the control information stored
on the at least one of the plurality of storage devices

wherein the control information is distributed across multiple memory blocks in the at least one of the plurality of storage
devices, and

wherein the locations of the control information on the at least one of the plurality of storage devices are unknown to the
storage array controller;

receiving, by the storage array controller from each of the plurality of storage devices, the identification of the plurality
of memory blocks that contain control information stored within the memory blocks; and

issuing, by the storage array controller to the each of the plurality of storage devices, one or more read requests addressed
to the memory blocks identified as containing control information stored within the memory blocks.

US Pat. No. 9,569,357

MANAGING COMPRESSED DATA IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A system comprising:
a storage device; and
a storage controller coupled to the storage device, wherein the storage controller is configured to:
generate at least a first fingerprint and a second fingerprint for first input data, wherein a size of the first input data
is greater than a size of a single physical storage block;

compress the first input data to a size less than or equal to the size of a single physical storage block;
generate, for the compressed first input data, a third fingerprint;
store references from the first, second, and third fingerprints to a first physical storage block storing the compressed first
input data; and

free the first physical storage block if there are no remaining references to the first physical storage block.

US Pat. No. 9,454,476

LOGICAL SECTOR MAPPING IN A FLASH STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage medium;
a data storage controller coupled to the data storage medium; and
a mapping table that includes a plurality of levels, each level comprising one or more mapping table entries, wherein each
respective mapping table entry corresponds to a respective mapping from a respective logical address to a respective physical
address;

wherein the data storage controller is configured to:
receive a request, wherein the request indicates a logical address;
generate, in dependence upon the logical address, a query key; and
determine, in dependence upon the query key, a youngest level of the plurality of levels that includes a mapping table entry
corresponding to a mapping from the logical address to a physical address.

US Pat. No. 9,069,786

METHOD FOR MAINTAINING MULTIPLE FINGERPRINT TABLES IN A DEDUPLICATING STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage medium;
a first fingerprint table comprising a first plurality of entries; and
a second fingerprint table comprising a second plurality of entries;
wherein each of the first plurality of entries and each of the second plurality of entries is configured to store a fingerprint
corresponding to data stored in the data storage medium; and

a data storage controller configured to:
generate a first fingerprint corresponding to a data component of a received write operation;
access the first fingerprint table; and
write the data component to the data storage medium without accessing the second fingerprint table, in response to determining
the first fingerprint table does not include an entry that corresponds to the first fingerprint.

US Pat. No. 9,436,720

SAFETY FOR VOLUME OPERATIONS

Pure Storage, Inc., Moun...

1. A computer system comprising:
one or more storage devices; and
a storage controller coupled to the one or more storage devices, wherein the storage controller is configured to:
receive a request to delete a first volume mapped to a first medium, wherein the first medium is a logical grouping of data;
responsive to receiving the request to delete the first volume:
determine the first medium is an anchor medium of the first volume;
store an indication that the first volume was previously linked to the first medium; and
remove any indication that the first volume is valid.

US Pat. No. 9,208,086

USING FREQUENCY DOMAIN TO PRIORITIZE STORAGE OF METADATA IN A CACHE

Pure Storage, Inc., Moun...

1. A method comprising:
measuring an amount of randomness in a plurality of accesses to a given address space;
assigning a relatively high priority to metadata associated with the given address space if the measured amount of randomness
is relatively low;

assigning a relatively low priority to the metadata if the measured amount of randomness is relatively high; and
wherein metadata with a relatively high priority is preferentially retained in a cache over metadata with a relatively low
priority.

US Pat. No. 9,811,677

SECURE DATA REPLICATION IN A STORAGE GRID

Pure Storage, Inc., Moun...

1. A method for secure data replication in a storage grid, comprising:
producing a storage key from a key share of each of at least two storage clusters from a storage grid of at least three storage
clusters;

producing a grid key from the storage key and an external secret;
producing once encrypted data from the grid key and data received for storage in the storage grid;
producing twice encrypted data, at a first one of the at least three storage clusters, from the storage key and the once encrypted
data;

storing the twice encrypted data in the first one of the at least three storage clusters;
sending the once encrypted data to a second one of the at least three storage clusters;
producing a replicated version of the twice encrypted data, at the second one of the at least three storage clusters, from
the once encrypted data as received at the second one of the at least three storage clusters; and

storing the replicated version of the twice encrypted data in the second one of the at least three storage clusters.

US Pat. No. 9,612,953

DATA PLACEMENT BASED ON DATA PROPERTIES IN A TIERED STORAGE DEVICE SYSTEM

Pure Storage, Inc., Moun...

1. A nonvolatile memory manager, comprising:
a mapping unit configured to place a first data into a first type of nonvolatile memory, responsive to the first data having
a single instance during deduplication, the mapping unit further configured to place a second data into a second type of nonvolatile
memory having a lower read error rate than the first type of nonvolatile memory, responsive to the second data having multiple
discards during deduplication; and

the mapping unit further configured to relocate the first data or the second data to another location in the nonvolatile memory
or to another type of nonvolatile memory, responsive to a dynamic property associated with the first data or the second data.

US Pat. No. 9,437,943

STACKED SYMMETRIC PRINTED CIRCUIT BOARDS

Pure Storage, Inc., Moun...

1. A printed circuit board (PCB), comprising:
a connector extending from a surface of the PCB; and
a bypass feature extending through the PCB, the PCB constructed so that a first copy of the PCB is configured to be assembled
stacked to a second copy of the PCB with the first copy oriented as in an initial position of the PCB and the second copy
rotated or flipped relative to the initial position of the PCB, the second copy not oriented same as the initial position
of the PCB, wherein an electrical connection to the first copy is accessible via the connector of the first copy, and an electrical
connection to the second copy is accessible via the connector of the second copy through the bypass feature of the first copy.

US Pat. No. 9,229,808

RECONSTRUCT READS IN A RAID ARRAY WITH DYNAMIC GEOMETRIES

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage subsystem comprising a plurality of storage devices in a redundant array of independent disks (RAID) configuration;
and

a storage controller configured to:
write a first RAID stripe to the plurality of storage devices including allocating in a particular storage device of the plurality
of storage devices, a first amount of intra-device protection data for protecting first RAID data of the first RAID stripe
stored on the particular storage device;

select a subset of storage devices of the plurality of storage devices for writing a second RAID stripe, wherein the amount
of storage devices in the subset is less than the amount of storage devices in the plurality of storage devices, wherein the
subset includes the particular storage device; and

write the second RAID stripe to the subset including allocating in the particular storage device, a second amount of intra-device
protection data for protecting second RAID data of the second RAID stripe stored on the particular storage device; wherein
the second amount of intra-device protection data is larger than the first amount of intra-device protection data.

US Pat. No. 9,218,244

REBUILDING DATA ACROSS STORAGE NODES

Pure Storage, Inc., Moun...

1. A plurality of storage nodes in a single chassis, comprising:
the plurality of storage nodes configured to communicate together as a storage cluster;
each of the plurality of storage nodes having nonvolatile solid-state memory for user data storage;
one or more controller of each of the plurality of storage nodes configured to distribute the user data and metadata throughout
the plurality of storage nodes according to a first erasure coding scheme; and

the one or more controller of each of the plurality of storage nodes further configured to decide to utilize one of the first
erasure coding scheme or a differing erasure coding scheme to rebuild the user data across stripes in a first set of the plurality
of storage nodes from recovered user data striped across a second set of the plurality of storage nodes, the second set of
the plurality of storage nodes having an unreachable storage node.

US Pat. No. 9,811,264

DEPLOYING CLIENT-SPECIFIC APPLICATIONS IN A STORAGE SYSTEM UTILIZING REDUNDANT SYSTEM RESOURCES

Pure Storage, Inc., Moun...

1. A method of deploying client-specific applications in a storage system utilizing redundant system resources, the method
comprising:
identifying a redundant controller in the storage system, wherein the storage system includes at least a first controller
and the redundant controller, wherein:

the first controller directs client access requests to at least one storage device; and
the redundant controller directs client access requests only to the active controller; and
executing, within one or more containers, one or more applications on the redundant controller;
determining whether the storage system is failing over from the first controller to the redundant controller; and
responsive to determining that the storage system is failing over from the first controller to the redundant controller:
ceasing execution of one or more of the applications on the redundant controller; and
executing one or more of the applications on the first controller.

US Pat. No. 10,303,547

REBUILDING DATA ACROSS STORAGE NODES

Pure Storage, Inc., Moun...

1. A storage system, comprising:a plurality of storage nodes, each storage node of the plurality of storage nodes having nonvolatile solid-state memory for user data storage; and
one or more controller of each of the plurality of storage nodes configured to write data across stripes in a first set of the plurality of storage nodes according to a first erasure coding scheme, the one or more controller configured to rebuild the data across stripes in a second set of the plurality of storage nodes responsive to a storage node of the first set of the plurality of storage nodes being unreachable.

US Pat. No. 9,792,045

DISTRIBUTING DATA BLOCKS ACROSS A PLURALITY OF STORAGE DEVICES

Pure Storage, Inc., Moun...

1. A computing system comprising:
a plurality of storage devices; and
a data storage controller, wherein the data storage controller is configured to:
map virtual block numbers to logical addresses corresponding to physical locations in a region using a fractal pattern, and
wherein the region spans two or more storage devices of the plurality of storage devices.

US Pat. No. 9,348,696

DISTRIBUTED MULTI-LEVEL PROTECTION IN A RAID ARRAY BASED STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage subsystem comprising a plurality of storage devices in a redundant array of independent disks (RAID) configuration;
and

a storage controller configured to:
write a first RAID stripe to the plurality of storage devices including:
for each storage device of a subset of the plurality of storage devices, writing within a page of the storage device, user
data and a checksum that validates the user data stored on the storage device;

writing within a page of a particular storage device of the plurality storage devices,
inter-device protection data, the inter-device protection data protecting the user data stored on each storage device of the
subset of the plurality of storage devices;

intra-page protection data, the intra-page protection data protecting the inter-device protection data stored on the particular
storage device; and

inter-page protection data, the inter-page protection data protecting the checksums stored on each storage device of the subset
of storage devices.

US Pat. No. 9,851,762

COMPLIANT PRINTED CIRCUIT BOARD (‘PCB’) WITHIN AN ENCLOSURE

Pure Storage, Inc., Moun...

1. A computing device, comprising:
an enclosure that includes a pin;
a printed circuit board (‘PCB’) that includes an opening, wherein the pin slides through and within the opening of the PCB
such that the PCB is movably affixed to the enclosure and the PCB has a range of motion relative to the enclosure when the
pin is within the opening of the PCB; and

a force imparting component coupled to the PCB, the force imparting component configured to exert a force on the PCB when
the computing device enclosure is inserted into a computing device receptacle.

US Pat. No. 9,521,200

LOCALLY PROVIDING CLOUD STORAGE ARRAY SERVICES

Pure Storage, Inc., Moun...

1. A method of locally providing cloud storage array services for a storage array of a data center, comprising:
detecting, by a local storage array, loss of a data communications connection between the local storage array and a remote
cloud based storage array services provider;

initiating, by the local storage array, one or more cloud storage array services to execute on the local storage array; and
locally providing the one or more cloud storage array services for the local storage array responsive to detecting the loss
of data communications between the local storage array and the remote cloud based storage array services provider, and wherein
locally providing the one or more cloud storage array services includes:

generating, by the one or more cloud storage array services, real-time metadata describing one or more storage array characteristics
of the one or more cloud storage array services executing on the local storage array; and

presenting the metadata describing the one or more storage array characteristics of the one or more cloud storage array services
executing on the local storage array.

US Pat. No. 9,477,554

MECHANISM FOR PERSISTING MESSAGES IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A plurality of storage nodes in a single chassis, comprising:
the plurality of storage nodes configured to initiate an action based on redundant copies of metadata distributed throughout
the plurality of storage nodes, such that a source authority of one of the plurality of storage nodes receives a message,
records the message redundantly throughout the plurality of storage nodes, then delivers the message to a destination authority
of a further one of the storage nodes responsive to achieving a level of redundancy for the redundant copies of the metadata
regarding the message, wherein the destination authority acts upon the message, and wherein each of the plurality of storage
nodes is configurable to have a plurality of authorities with each authority controlling data according to a range of data
identifiers for that authority.

US Pat. No. 9,367,243

SCALABLE NON-UNIFORM STORAGE SIZES

Pure Storage, Inc., Moun...

1. A plurality of storage nodes in a single chassis, comprising:
each of the plurality of storage nodes having a storage capacity with nonvolatile solid-state memory for user data storage;
the plurality of storage nodes configured to support uniform storage capacities and non-uniform storage capacities among the
plurality of storage nodes, as a storage cluster; and

the plurality of storage nodes configured to distribute the user data and metadata throughout the plurality of storage nodes
such that the plurality of storage nodes can read the user data, using erasure coding, despite loss of two of the plurality
of storage nodes.

US Pat. No. 9,300,660

PROVIDING AUTHORIZATION AND AUTHENTICATION IN A CLOUD FOR A USER OF A STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A method of providing authorization and authentication in a cloud for a user of a storage array, the method comprising:
receiving, by a cloud-based security module from a client-side array services module, user credentials;
authenticating, by the cloud-based security module, the user credentials;
identifying, by the cloud-based security module, authorized access privileges defining one or more storage array services
accessible by the user;

generating, by the cloud-based security module, a token representing the authentication of the user credentials and the authorized
access privileges; and

providing, by the cloud-based security module to the client-side array services module, the token.

US Pat. No. 10,114,574

OPTIMIZING STORAGE ALLOCATION IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method comprising:performing one or more write operations to a first portion of a first logical grouping of data;
in response to performing one or more write operations to the first portion, recording that a second portion of a second logical grouping of data no longer underlies the first portion of the first logical grouping of data;
determining whether any other logical groupings of data are mapped to the second portion of the second logical grouping of data; and
allocating storage locations associated with the second portion of the second logical grouping of data based on the determination of whether any other logical groupings of data are mapped to the second portion of the second logical grouping of data.

US Pat. No. 9,588,842

DRIVE REBUILD

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage subsystem configured to receive read and write requests, wherein the subsystem comprises one or more storage
drives, each storage drive including a plurality of allocation units (AUs), each AU of a storage drive comprising a plurality
of data storage locations within the storage drive; and

a data storage controller;
in response to detecting a failure of a first AU of the plurality of AUs, the storage controller is configured to:
select an unallocated second AU as a replacement for the first AU; and
initiate reconstruction of data stored in the first AU to the second AU; and
in response to receiving a read or write request targeting a given data storage location in the first AU during said reconstruction,
the storage controller is configured to attempt to access the first AU before attempting to access any of the other AUs of
the plurality of AUs, in order to service the read or write request.

US Pat. No. 9,516,016

STORAGE ARRAY PASSWORD MANAGEMENT

Pure Storage, Inc., Moun...

1. A system comprising:
a second computing device connected remotely to a first computing device;
wherein the second computing device includes a computer processor and a computer readable storage medium, the computer readable
storage medium includes computer program instructions that when executed by the computer processor cause the second computing
device to carry out the steps of:

requesting access to the first computing device, wherein the first computing device is accessed using a root password generated
by applying a transformation to a combination of a root secret and a value specific to the first computing device;

in response to requesting access to the first computing device, receiving an encrypted root secret from the first computing
device, wherein the encrypted root secret is encrypted by the first computing device based on a public key of a public-private
key pair;

decrypting the encrypted root secret using a private key of the public-private key pair to generate the root secret;
rebuilding the root password based on the combination of the root secret and the value specific to the first computing device,
wherein rebuilding the root password comprises reversing the previous transformation performed on the combination of the root
secret and the value specific to the first computing device; and

providing to the first computing device, the root password for root access to the first computing device.

US Pat. No. 9,710,165

IDENTIFYING VOLUME CANDIDATES FOR SPACE RECLAMATION

Pure Storage, Inc., Moun...

8. A method comprising:
reading, by a storage controller of a storage subsystem, metadata of a first file system associated with a first logical storage
unit;

determining, by the storage controller, an amount of storage space utilized by the first file system for the first logical
storage unit based at least in part on the metadata;

comparing, by the storage controller, the amount of storage space utilized to an amount of storage space allocated to the
first logical storage unit on the storage subsystem; and

calculating, by the storage controller, an estimated amount of time to reclaim space from the first logical storage unit;
and

generating, by the storage controller, an alert that indicates the first logical storage unit is a candidate for space reclamation
and includes the estimated amount of time to reclaim space from the first logical storage unit responsive to determining a
first condition is met.

US Pat. No. 9,594,512

ATTRIBUTING CONSUMED STORAGE CAPACITY AMONG ENTITIES STORING DATA IN A STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A method of attributing consumed storage capacity among entities storing data in a storage array, the method comprising:
identifying a data object stored in the storage array and shared by a plurality of entities, the data object occupying 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 including 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.

US Pat. No. 9,304,694

SCHEDULING OF REACTIVE I/O OPERATIONS IN A STORAGE ENVIRONMENT

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage medium comprising a plurality of storage devices configured to store data, said plurality of storage devices
comprising M storage devices; and

a data storage controller coupled to the data storage medium;
wherein the data storage controller is configured to:
receive read and write requests targeted to the data storage medium;
schedule said read and write requests for processing by said plurality of storage devices;
identify from the plurality of devices, a first plurality of devices that are exhibiting variable I/O response times including
at least one of a relatively high response latency or relatively low throughput;

determine that the number of devices in the first plurality of devices exceeds a predetermined threshold, wherein the predetermined
threshold is greater than one; and

in response to determining that the number of devices in the first plurality of devices exceeds the predetermined threshold,
schedule one or more reactive operations for the first plurality of devices, said one or more reactive operations being configured
to cause one or more of the first plurality of devices to enter a known state.

US Pat. No. 10,027,757

LOCALLY PROVIDING CLOUD STORAGE ARRAY SERVICES

Pure Storage, Inc., Moun...

1. A method of locally providing cloud storage array services for a storage array of a data center, wherein:the data center comprises a plurality of storage arrays and each storage array is coupled only to one or more local networks;
the method comprising:
initiating, on at least one of the plurality of storage arrays, one or more cloud storage array services; and
locally providing the cloud storage array services including:
generating, by the cloud storage array services, metadata describing one or more real-time storage array characteristics; and
presenting the metadata to a user through at least one of the one or more local networks.

US Pat. No. 9,983,822

GENERATING AND OPTIMIZING SUMMARY INDEX LEVELS IN A DEDUPLICATION STORAGE SYSTEM

PURE STORAGE, INC., Moun...

1. A deduplication system, comprising:a persistent storage resource;
a volatile memory; and
a processing device, operatively coupled to the persistent storage resource and the volatile memory, to:
generate a first deduplication map (DDM) level of a DDM pyramid, wherein the DDM pyramid identifies locations of data stored in the persistent storage resource of the deduplication system;
determine a first false positive rate target for a first index summary (IS) level of an index pyramid based on a memory footprint for the first IS level and an aggregate false positive rate target for the index pyramid, wherein the first IS level accelerates lookup into the first DDM level, wherein the first false positive rate target indicates a target percentage of queries into the first IS level for a value located in the first DDM level that incorrectly yields a hit; and
generate the first IS level with a first false positive rate based on the determined first false positive rate target, wherein the first false positive rate is different than a second false positive rate associated with a second IS level.

US Pat. No. 9,684,460

PROACTIVELY CORRECTING BEHAVIOR THAT MAY AFFECT I/O PERFORMANCE IN A NON-VOLATILE SEMICONDUCTOR STORAGE DEVICE

Pure Storage, Inc., Moun...

1. A method of proactively addressing conditions that affect input/output (?I/O?) performance in a non-volatile semiconductor
storage system that includes a plurality of non-volatile semiconductor storage devices, the method comprising:
monitoring, for a non-volatile semiconductor storage devices, one or more non-volatile semiconductor device-related performance
attributes;

determining, for the non-volatile semiconductor storage device in dependence upon the one or more non-volatile semiconductor
device-related performance attributes, whether the non-volatile semiconductor storage device is exhibiting a behavior that
may affect I/O performance, including determining whether the non-volatile semiconductor storage device is about to perform
an internal cache flush; and

responsive to determining that the non-volatile semiconductor storage device is exhibiting the behavior that may affect I/O
performance, scheduling a proactive operation associated with the behavior on the non-volatile semiconductor storage device.

US Pat. No. 9,239,688

MAPPING IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage medium;
a mapping table organized as a plurality of levels, each level of the plurality of levels comprising one or more mapping table
entries, where each of the plurality of entries comprises a tuple including a key; and

a data storage controller coupled to the data storage medium;
wherein in response to detecting a flattening condition, the data storage controller is configured to:
identify a group of two or more levels of the plurality of levels which are logically adjacent in time;
create a new level in the plurality of levels; and
insert one or more first records stored within the group into the new level;
wherein at least one record corresponding to a range of key values in the group is replaced in the new level by a plurality
of records corresponding to subranges of the at least one record.

US Pat. No. 9,058,116

INTRA-DEVICE DATA PROTECTION IN A RAID ARRAY

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage subsystem coupled to a network configured to receive read and write requests, the data storage subsystem comprising
a plurality of storage devices; and

a storage controller configured to:
identify a unit of data stored in the data storage subsystem, wherein said unit of data is stored across at least a first
storage device and a second storage device of the plurality of storage devices, each of the first storage device and the second
storage device storing intra-device redundancy data corresponding to the unit of data and a checksum for stored user data
of the unit of data; and

in response to a read to at least a portion of the unit of data:
utilize the checksum to validate corresponding read data; and
utilize intra-device redundancy data to rebuild the corresponding read data in response to detecting the checksum indicates
the read data is not valid.

US Pat. No. 9,892,071

EMULATING A REMOTE DIRECT MEMORY ACCESS (‘RDMA’) LINK BETWEEN CONTROLLERS IN A STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A method of emulating a remote direct memory access (‘RDMA’) link between controllers in a storage array, the method comprising:
inserting, into a buffer utilized by a direct memory access (‘DMA’) engine of a first storage array controller, a data transfer
descriptor describing data stored in memory of the first storage array controller and a location to write the data to memory
of a second storage array controller;

retrieving, in dependence upon the data transfer descriptor, the data stored in memory of the first storage array controller;
writing the data into the memory of the second storage array controller in dependence upon the data transfer descriptor; and
signaling that the data transfer descriptor has been processed.

US Pat. No. 9,747,158

INTELLIGENT REFRESH OF 3D NAND

Pure Storage, Inc., Moun...

1. A tangible, non-transitory, computer-readable media having instructions thereupon which, when executed by a processor,
cause the processor to perform a method comprising:
identifying a plurality of blocks of flash memory for a refresh operation;
writing information regarding the identified blocks to a data structure accessible by a hardware engine that sequences background
reads of the identified blocks as the refresh operation; and

distributing the background reads to a plurality of channels communicating with the flash memory, wherein the plurality of
channels has arbitration of read operations for user data, read operations for metadata, write operations for user data, write
operations for metadata, background maintenance operations, erase operations, and the background reads.

US Pat. No. 9,646,039

SNAPSHOTS IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computer system comprising:
one or more storage devices; and
a storage controller;
wherein the storage controller is configured to:
in response to receiving a request addressing a first volume and indicating a command to take a snapshot of the first volume,
wherein the first volume is mapped to a first logical grouping of data:

create a second logical grouping of data;
map the second logical grouping of data to reference the first logical grouping of data;
remap the first volume to map to the second logical grouping of data instead of the first logical grouping of data such that
the first volume remains addressable with similar access permissions before and after creating the snapshot; and

store an indication that the first logical grouping of data is read-only; and
in response to receiving a write request targeting the second logical grouping, split the second logical grouping into a plurality
of ranges including a first range and a second range; wherein the first range of the second logical grouping maps to the first
logical grouping, and the second range of the second logical grouping maps to a third logical grouping of data.

US Pat. No. 9,589,008

DEDUPLICATION OF VOLUME REGIONS

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage subsystem comprising a plurality of data storage locations on a plurality of storage devices; and
a storage controller coupled to the plurality of storage devices, wherein the storage controller is configured to:
maintain a table to track mappings between logical groups of active data in the plurality of storage devices and logical groups
of snapshot data in the plurality of storage devices;

determine that snapshot data within a first range of a first logical group of snapshot data is representative of active data
within a second range of second logical group of active data;

in response to determining that snapshot data within the first range is representative of active data within the second range,
indicate within the table, a mapping of the second range of the second logical group of active data to the first range of
the first logical group of snapshot data; and

in response to a request for the active data within the second range of the second logical group, use the table to retrieve
the snapshot data from the first range of the first logical group;

wherein the first range of snapshot data is located at a first offset within an address space of the first logical group;
wherein the second range of active data is located at a second offset within an address space of the second logical group,
and

store an indication that the second range is aligned to the first range using a third offset.

US Pat. No. 9,525,738

STORAGE SYSTEM ARCHITECTURE

Pure Storage, Inc., Moun...

1. A storage system, comprising:
a first storage cluster, in a first chassis, the first storage cluster having a first plurality of storage nodes coupled together,
each storage node of the first plurality of storage nodes having one or more storage units;

a second storage cluster, in a second chassis, the second storage cluster having a second plurality of storage nodes coupled
together, each storage node of the second plurality of storage nodes having one or more storage units;

a chassis-to-chassis interconnect coupling the first storage cluster and the second storage cluster, with the first storage
cluster and the second storage cluster configurable as a single logical unit; and

the first storage cluster, the second storage cluster and the chassis-to-chassis interconnect having a pathway coupling storage
units such that a first storage unit in the first storage cluster is configurable to communicate with at least one other storage
unit in the first storage cluster and communicate with at least one storage unit in the second storage cluster, via the pathway
without storage node processor assistance.

US Pat. No. 10,540,095

EFFICIENT GARBAGE COLLECTION FOR STABLE DATA

PURE STORAGE, INC., Moun...

1. A system comprising:a storage array comprising a plurality of storage volumes; and
a storage controller coupled to the storage array, the storage controller comprising a processing device, the processing device to:
perform a uniform sampling of data storage items in an append-only file system distributed across the plurality of storage volumes to identify a sample set;
identify a plurality of data age clusters from the sample set;
perform a garbage collection process on the append-only file system to identify a first data storage item in a first logical storage segment that is no longer in use, a second data storage item in the first logical storage segment that remains in use, and a third data storage item in the first logical storage segment that remains in use;
write the second data storage item from the first logical storage segment to a second logical storage segment based on a data age of the second data storage item, wherein the second logical storage segment is associated with a first data age cluster of the plurality of data age clusters; and
write the third data storage item from the first logical storage segment to a third logical storage segment based on an age of the third data storage item, wherein the third logical storage segment is associated with a second data age cluster of the plurality of data age clusters.

US Pat. No. 9,740,414

OPTIMIZING COPY OPERATIONS

Pure Storage, Inc., Moun...

1. A method comprising:
receiving a plurality of copy operations;
detecting a triggering event that causes a storage array controller to initiate execution of the plurality of copy operations;
and

combining, in dependence upon a metadata optimization policy, the plurality of copy operations into a single copy operation,
including:

identifying a metadata boundary for an underlying storage resource, the metadata boundary defining a range of addresses within
the underlying storage resources that are described by a single metadata block; and

grouping, within the single copy operation, all of the copy operations that are directed toward the metadata boundary.

US Pat. No. 9,766,972

MASKING DEFECTIVE BITS IN A STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A method of failure mapping, comprising:
distributing user data throughout a plurality of storage nodes through erasure coding, wherein each of the plurality of storage
nodes has a non-volatile solid-state storage with non-volatile memory;

determining that the non-volatile memory has a defect;
generating a mask that indicates the defect, the generating based on error correction of reads of the non-volatile solid-state
storage, wherein the mask is one of a plurality of masks in a mask hierarchy in the storage cluster, wherein the mask hierarchy
includes masks of differing physical levels of the non-volatile memory, and wherein the generating supports combining the
masks of differing physical levels to generate one or more page specific masks; and

reading from the non-volatile memory with application of the mask, wherein the reading and the application of the mask are
performed by the non-volatile solid-state storage.

US Pat. No. 9,811,551

UTILIZING MULTIPLE FINGERPRINT TABLES IN A DEDUPLICATING STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computer system comprising:
a storage device;
a data storage controller coupled to the storage device, the controller configured to:
for each of a plurality of data objects stored in the storage device, determine, based on one or more attributes corresponding
to usage of the data object, a probability of the data object being deduplicated;

store within a first fingerprint table, fingerprints of data objects with the highest probability of being deduplicated;
store within a second fingerprint table, fingerprints of data objects with a lower probability of being deduplicated than
the data objects having fingerprints stored in the first fingerprint table; and

search fingerprints of the first fingerprint table to determine whether a fingerprint for a data object associated with a
write request matches a fingerprint for any of the data objects in the first fingerprint table.

US Pat. No. 9,779,268

UTILIZING A NON-REPEATING IDENTIFIER TO ENCRYPT DATA

Pure Storage, Inc., Moun...

1. A method of utilizing a non-repeating identifier to encrypt data, the method comprising:
receiving, by a storage controller of a storage array, a request to write data to a storage device of the storage array;
selecting, by the storage controller, a segment-offset pair where the data will be stored, wherein the selected segment-offset
pair is unique relative to every other segment-offset pair previously utilized by the storage device, wherein the selected
segment-offset pair cannot be reutilized to service another request to write data to the storage device, wherein selecting
the segment-offset pair includes:

determining whether an active segment has free space to store the data; and
responsive to determining that the active segment does not have the free space to store the data, creating a new segment using
a monotonically increasing number for the new segment identifier;

utilizing, by the storage controller, the new segment identifier of the segment-offset pair to encrypt the data; and
writing, by the storage controller, the encrypted data to the storage device at the selected segment-offset pair.

US Pat. No. 9,552,248

CLOUD ALERT TO REPLICA

Pure Storage, Inc., Moun...

1. A system comprising:
a first storage subsystem;
a second storage subsystem; and
a cloud-based service;
wherein the first storage subsystem is configured to replicate a dataset to the second storage subsystem; and
wherein responsive to detecting one or more conditions indicative of an impending failure of the first storage subsystem,
the cloud-based service is configured to:

generate and convey an alert to the second storage subsystem;
select a third storage subsystem to take over as a replication target of the dataset; and
identify a highest medium identifier (ID) of the dataset already stored on the third storage subsystem.

US Pat. No. 9,817,576

PARALLEL UPDATE TO NVRAM

Pure Storage, Inc., Moun...

1. A method for updates in a storage system, comprising:
writing identifiers, associated with data to be stored, to storage units of the storage system; and
writing trim records, indicative of identifiers that are allowed to not exist in the storage system, to the storage units;
determining whether the stored data corresponding to records of identifiers is valid based on the records of the identifiers
and the trim records, and

gathering a set of sequence numbers as stored in storage units;
determining, from the set of sequence numbers, a latest sequence number that has been acknowledged; and
inserting at least one forward trim record that indicates a sequence number later than the latest sequence number is allowed
to not be present in the storage system.

US Pat. No. 9,588,699

SCHEDULING OF REACTIVE I/O OPERATIONS IN A STORAGE ENVIRONMENT

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage medium comprising a plurality of storage devices configured to store data;
and a data storage controller coupled to the data storage medium;
wherein the data storage controller is configured for:
identifying a plurality of storage devices that are exhibiting variable I/O response times, including at least one of a relatively
high response latency or relatively low throughput;

determining that the number of storage devices in the plurality of storage devices exceeds a predetermined threshold, wherein
the predetermined threshold is greater than one; and

responsive to determining that the number of storage devices in the plurality of storage devices exceeds the predetermined
threshold, scheduling one or more reactive operations for the first plurality of devices, said one or more reactive operations
being configured to cause one or more of the first plurality of devices to enter a known state.

US Pat. No. 9,507,532

MIGRATING DATA IN A STORAGE ARRAY THAT INCLUDES A PLURALITY OF STORAGE DEVICES AND A PLURALITY OF WRITE BUFFER DEVICES

Pure Storage, Inc., Moun...

1. A method of migrating data in a storage array that includes a plurality of storage devices and a plurality of write buffer
devices, the method comprising:
detecting, by the storage array, an occurrence of a write buffer device evacuation event associated with one or more write
buffer devices;

responsive to detecting the occurrence of the write buffer device evacuation event, determining, by the storage array, whether
the storage array includes at least a predetermined amount of additional write buffer resources; and

responsive to determining that the storage array includes at least a predetermined amount of additional write buffer resources,
reducing, by the storage array, write access to the one or more write buffer devices.

US Pat. No. 9,082,512

DIE-LEVEL MONITORING IN A STORAGE CLUSTER

Pure Storage, Inc., Moun...

1. A method for die-level monitoring in a storage cluster, comprising:
distributing user data throughout a plurality of storage nodes of the storage cluster through erasure coding;
performing, in a controller in a non-volatile solid-state storage, error correction of reads of a non-volatile memory; and
producing diagnostic information that diagnoses the non-volatile memory of the non-volatile solid-state storage of each of
the plurality of storage nodes, based on the performing.

US Pat. No. 10,082,985

DATA STRIPING ACROSS STORAGE NODES THAT ARE ASSIGNED TO MULTIPLE LOGICAL ARRAYS

Pure Storage, Inc., Moun...

12. A method for data striping across storage nodes in a storage cluster performed by the storage nodes cooperating with each other without presence of and reliance upon a central storage array controller, the method comprising:creating at least a first logical array and a second logical array in a plurality of storage nodes of a storage cluster, wherein the first logical array acts as a first storage cluster and the second logical array acts as a second storage cluster;
performing data striping, under control of a plurality of authorities in the plurality of storage nodes according to authority-specific ranges of data identifiers, for user data, of which each respective logical array has ownership, across the plurality of storage nodes, and wherein the plurality of storage nodes are further configured to establish metadata and control, for both user data of the first logical array and user data of the second logical array, across the plurality of storage nodes.

US Pat. No. 10,019,201

RESERVATIONS OVER MULTIPLE PATHS OVER FABRICS

PURE STORAGE, INC., Moun...

1. A method comprising:receiving, by a storage drive and from a storage controller, a modified first reservation command comprising a first logical unit identifier, wherein a first reservation command comprising a first host identifier to identify a first host controller was previously received by the storage controller from the first host controller in a multi-host storage system, wherein the first reservation command was modified by the storage controller to replace the first host identifier with the first logical unit identifier;
responsive to receiving the modified first reservation command, identifying, by the storage drive, a first logical unit of storage based on the first logical unit identifier of the modified reservation command; and
granting, by the storage drive, a reservation for access to the storage drive on behalf of the first host controller by associating the reservation for the first logical unit with a second logical unit of storage.

US Pat. No. 9,495,255

ERROR RECOVERY IN A STORAGE CLUSTER

Pure Storage, Inc., Moun...

1. A plurality of storage nodes within a single chassis, comprising:
the plurality of storage nodes configurable to communicate together as a storage cluster, each of the plurality of storage
nodes having a non-volatile solid-state storage for user data storage, the non-volatile solid state storage including flash
memory, the plurality of storage nodes configured to distribute the user data and metadata associated with the user data throughout
the plurality of storage nodes, with erasure coding of the user data;

the plurality of storage nodes configurable to recover from failure of two of the plurality of storage nodes by applying the
erasure coding to reading the user data from a remainder of the plurality of storage nodes; and

the plurality of storage nodes configurable to detect an error and engage in an error recovery via one of a processor of one
of the plurality of storage nodes, a processor of the non-volatile solid state storage, or the flash memory, wherein the plurality
of storage nodes locates and accesses a mirrored remote procedure call cache in one of the plurality of storage nodes, responsive
to a failure of a differing one of the plurality of storage nodes having a remote procedure call cache as mirrored by the
mirrored remote procedure call cache.

US Pat. No. 9,910,618

MIGRATING APPLICATIONS EXECUTING ON A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of migrating applications executing on a storage system, the method comprising:
detecting, by the storage system, that an application executing on a first storage controller within the storage system should
be migrated to a second storage controller within the storage system including detecting a failover from the second storage
controller to the first storage controller;

in response to detecting the failover from the second storage controller to the first storage controller, migrating the application
executing on the first storage controller to the second storage controller including:

rejecting, by the storage system, all pending input/output (‘I/O’) requests received by the storage system from the application
executing on the first storage controller; and

initiating, by the storage system, execution of the application on the second storage controller.

US Pat. No. 9,882,913

DELIVERING AUTHORIZATION AND AUTHENTICATION FOR A USER OF A STORAGE ARRAY FROM A CLOUD

Pure Storage, Inc., Moun...

1. A method of delivering authorization and authentication for a user of a storage array from a cloud, the method comprising:
identifying, by a cloud-based security module, authorized access privileges defining one or more storage array services accessible
by the user;

generating, by the cloud-based security module, a token representing the authentication of user credentials and the authorized
access privileges, including:

generating a digital signature of data representing the authorized access privileges, including:
hashing data representing the authorized access privileges;
encrypting the hashed data using a public key of a storage array access module, wherein the encrypted hashed data includes
the digital signature; and

providing, by the cloud-based security module to the client-side array services module, the token, including sending, as the
token to the storage array access module, the data representing the authorized access privileges with the digital signature.

US Pat. No. 9,672,125

ABILITY TO PARTITION AN ARRAY INTO TWO OR MORE LOGICAL ARRAYS WITH INDEPENDENTLY RUNNING SOFTWARE

Pure Storage, Inc., Moun...

1. A plurality of storage nodes, comprising:
a first plurality of storage nodes configurable to communicate together as a first storage cluster, the first storage cluster
configurable to execute a first software;

a second plurality of storage nodes configurable to communicate together as a second storage cluster, the second storage cluster
configurable to execute a second software independent of the first storage cluster executing the first software, wherein the
first storage cluster is configurable to upgrade software or hardware independent of a software or hardware upgrade to the
second storage cluster;

each of the first and second pluralities of storage nodes having nonvolatile solid-state memory for user data storage; and
each of the first and second pluralities of storage nodes configurable to distribute user data and metadata associated with
the user data throughout a respective plurality of storage nodes such that a respective storage cluster maintains ability
to read the user data, using erasure coding.

US Pat. No. 10,007,457

DISTRIBUTED TRANSACTIONS WITH TOKEN-ASSOCIATED EXECUTION

Pure Storage, Inc., Moun...

1. A method of processing transactions associated with a command in a storage system, comprising:receiving, at a first authority of the storage system, a command relating to user data;
sending a transaction of the command, from the first authority to a second authority of the storage system, wherein a token is associated with the transaction; and
writing data in accordance with the transaction as permitted by the token into a partition that is allocated to the second authority in a storage device of the storage system, wherein command processing and transaction processing is performed without a global lock on the storage system.

US Pat. No. 9,811,457

DATA PLACEMENT BASED ON DATA RETENTION IN A TIERED STORAGE DEVICE SYSTEM

Pure Storage, Inc., Moun...

1. A processor-based method for managing nonvolatile memory, comprising:
writing first data to a first type of flash memory, responsive to identifying that the first data is image data as a static
property of the first data;

writing second data to a second type of flash memory having a lower error rate than the first type of flash memory, responsive
to identifying that the second data is text data as a static property of the second data;

determining an error count or error rate during verification of the image or text data as a dynamic property of the image
or text data; and

moving the image or text data to a differing location or differing type of flash memory, responsive to a value of the error
count or the error rate representing the dynamic property exceeding a threshold, wherein the image data is associated with
a first threshold error count or error rate that is independent of threshold error counts or error rates for other types of
data written to the first type of flash memory, and the text data is associated with a second, differing threshold error count
or error rate that is independent of threshold error counts or error rates for other types of data written to the second type
of flash memory.

US Pat. No. 9,747,229

SELF-DESCRIBING DATA FORMAT FOR DMA IN A NON-VOLATILE SOLID-STATE STORAGE

Pure Storage, Inc., Moun...

1. A method of applying a data format in a direct memory access transfer, comprising:
distributing user data throughout a plurality of storage nodes through erasure coding, each of the plurality of storage nodes
having nonvolatile solid-state memory for user data storage;

reading a self-describing data portion that is one of a plurality of self-describing data portions from a first memory of
the nonvolatile solid-state memory, each of the plurality of self-describing data portions comprising a self-contained combination
of data, a destination section having information regarding a destination of the data, and a status section having information
about transfer of the data from the first memory to a second memory of the nonvolatile solid-state memory;

extracting the destination from the self-describing data portion; and
writing the data, from the self-describing data portion, to the second memory of the nonvolatile solid-state memory according
to the destination and the information in the status section of the self-describing data portion.

US Pat. No. 9,727,485

METADATA REWRITE AND FLATTEN OPTIMIZATION

Pure Storage, Inc., Moun...

1. A node-based storage cluster, the node-based storage cluster configured to:
detect a condition for flattening two or more levels within a mapping table that includes a plurality of levels, wherein each
level includes one or more entries and each entry within a level is associated with a key that is unique from all other entries
in the level; and

responsive to detecting the condition:
select two or more levels for flattening;
create a new level to be added to the mapping table;
insert, within the new level, each entry in the two or more levels whose key does not match the key of any other entry in
the two or more levels;

insert, within the new level, each valid entry in the two or more levels whose key does match the key of another entry in
the two or more levels;

receive, from each node in the node-based storage cluster, verification that the node is ready to utilize the new level; and
remove, from the node-based storage cluster, the two or more levels for flattening, including archiving the two or more levels
for flattening in offline storage.

US Pat. No. 9,513,820

DYNAMICALLY CONTROLLING TEMPORARY COMPROMISE ON DATA REDUNDANCY

Pure Storage, Inc., Mout...

1. A method comprising:
receiving a write request from a client of a storage system, the storage system comprising a plurality of storage devices;
determining that a first condition is satisfied, wherein determining that the first condition is satisfied includes:
detecting that a number of unacknowledged writes of data to storage devices of the plurality of storage devices is below a
first threshold; and

detecting that a number of ongoing rebuild processes within the storage system is below a second threshold, wherein the second
threshold is different from the first threshold; and

in response to determining that the first condition is satisfied, issuing an early acknowledgement to the client for the write
request,

wherein issuing the early acknowledgement comprises sending an acknowledgement of the write request to the client prior to
completing all writes of data associated with the write request to the storage system.

US Pat. No. 10,254,964

MANAGING MAPPING INFORMATION IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A node-based storage cluster, the node-based storage cluster configured to:detect a condition for flattening two or more levels within a multi-level data structure that includes a plurality of levels, wherein the condition includes a time needed to search multiple levels in a mapping table exceeding a threshold; and
responsive to detecting the condition:
select two or more levels for flattening;
determine a key range with each of the two or more levels that is smaller than a complete level for incremental flattening;
create a subset of a new level to be added to the multi-level data structure, wherein the new level includes all valid entries from the key range in the two or more levels;
receive, from each node in the node-based storage cluster, verification that the node is ready to utilize the new level; and
remove, from the node-based storage cluster, the key range of the two or more levels for incremental flattening, including archiving the key range of the two or more levels for incremental flattening in offline storage.

US Pat. No. 9,740,408

USING INFORMATION SPECIFYING AN ORGANIZATION OF A DATA STRUCTURE ASSOCIATED WITH A STORAGE DEVICE

PURE STORAGE, INC., Moun...

1. A method comprising:
identifying a solid-state storage device associated with a host server of a solid-state storage array;
retrieving, from the solid-state storage device and by an application that is executed by a processing device of the host
server of the solid-state storage array, a file from the solid-state storage device, the file specifying an organization of
information included in a plurality of tables that are associated with characteristics of a plurality of data blocks of the
solid-state storage device, the organization of the information specifying a plurality of data fields in each row of the plurality
tables by identifying a location and size of each of the plurality of fields in each row of the plurality of tables;

reading the file specifying the organization of the information included in the plurality of tables to identify a particular
location of a particular data stored at one of the tables of the plurality of tables, the particular location being associated
with one of the plurality of data fields in a particular row within the one of the tables and with a particular data block
of the plurality of data blocks of the solid-state storage device; and

performing a read operation or a write operation from the application of the host server to the file at the solid-state storage
device based on the particular location of the particular data stored at the one of the tables of the plurality of tables
that are associated with the characteristics of the plurality of data blocks of the solid-state storage device.

US Pat. No. 9,768,953

RESHARING OF A SPLIT SECRET

Pure Storage, Inc., Moun...

1. A processor-based method for secret sharing in a computing system, comprising:
encrypting, by an encryption/decryption unit, shares of a new secret, using a previous secret;
distributing unencrypted shares of the new secret and the encrypted shares of the new secret, to members of the computing
system;

decrypting, by the encryption/decryption unit, at least a subset of the encrypted shares of the new secret, using the previous
secret; and

regenerating the new secret from at least a subset of a combination of the unencrypted shares of the new secret and the decrypted
shares of the new secret, wherein each member of the computing system receives an unencrypted share of the new secret and
an encrypted, differing share of the new secret.

US Pat. No. 9,760,313

PERFORMING COPIES IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method for use in a storage system, the method comprising:
receiving a request to copy data of a volume; and
responsive to receiving the request, performing a copy offload operation that includes:
creating a first logical representation of the volume;
mapping ranges of the volume to ranges of the first logical representation;
creating a second logical representation of the first logical representation;
mapping a first range and a second range of the second logical representation to a first range of the first logical representation;
and

mapping the ranges of the volume to ranges of the second logical representation.

US Pat. No. 9,841,921

MIGRATING DATA IN A STORAGE ARRAY THAT INCLUDES A PLURALITY OF STORAGE DEVICES

Pure Storage, Inc., Moun...

1. A method of migrating data in a storage array that includes a plurality of storage devices, the method comprising:
receiving, by the storage array, an indication that a properly functioning source storage device is designated for removal
from the storage array;

in response to receiving the indication that the properly functioning source storage device is designated for removal from
the storage array:

identifying, by the storage array, one or more target storage devices for receiving data stored on the properly functioning
source storage device;

enabling read-write access to all deduplicated data stored within the properly functioning source storage device and enabling
read-only access to the remaining portions of the properly functioning source storage device that do not contain deduplicated
data;

allowing write requests to be performed on the deduplicated data stored on the properly functioning source storage device;
redirecting to the one or more target storage devices, any write requests for the remaining portions of the properly functioning
source storage device; and

migrating, by the storage array, the data stored on the properly functioning source storage device to the one or more target
storage devices.

US Pat. No. 10,089,010

IDENTIFYING FRACTAL REGIONS ACROSS MULTIPLE STORAGE DEVICES

Pure Storage, Inc., Moun...

1. A computing system comprising:a plurality of storage devices; and
a data storage controller, wherein the data storage controller is configured to identify, within a non-fractal region of physical blocks that spans across a plurality of storage devices, a plurality of fractal regions, wherein each fractal region spans two or more storage devices.

US Pat. No. 9,747,039

RESERVATIONS OVER MULTIPLE PATHS ON NVME OVER FABRICS

PURE STORAGE, INC., Moun...

1. A method comprising:
receiving, by a storage drive and from a storage controller, a modified first reservation command comprising a first logical
unit identifier, wherein a first reservation command comprising a first host identifier to identify a first host controller
was previously received by the storage controller from the first host controller in a multi-host storage system, wherein the
first reservation command was modified by the storage controller to replace the first host identifier with the first logical
unit identifier, wherein the first reservation command is compatible with a Nonvolatile Memory Express (NVMe) over Fabrics
standard, and the modified first reservation command is compatible with a NVMe standard;

responsive to receiving the modified first reservation command, identifying, by the storage drive, a first logical unit of
storage based on the first logical unit identifier of the modified reservation command; and

granting, by the storage drive, a reservation for access to the storage drive on behalf of the first host controller by associating
the reservation for the first logical unit with a second logical unit of storage.

US Pat. No. 9,558,069

FAILURE MAPPING IN A STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A method of failure mapping, performed by one or both of a processor located in a storage node or a processor located in
a non-volatile solid-state storage of the storage node, comprising:
distributing user data throughout a plurality of storage nodes through erasure coding, wherein the plurality of storage nodes
are coupled as a storage cluster, wherein each of the plurality of storage nodes has a corresponding non-volatile solid-state
storage with flash memory and wherein the user data is accessible via the erasure coding from a remainder of the plurality
of storage nodes in event of two of the plurality of storage nodes being unreachable;

mapping physical addresses of defects in the flash memory, on a basis of one of per flash package, per flash die, per flash
plane, per flash block, per flash page, or per physical memory address; and

mapping around the defects in the flash memory during accesses to the user data.

US Pat. No. 10,114,757

NONREPEATING IDENTIFIERS IN AN ADDRESS SPACE OF A NON-VOLATILE SOLID-STATE STORAGE

Pure Storage, Inc., Moun...

1. A method, executed by a processor, of applying an address space in a storage device, comprising:assigning a non-overlapping range of a second address space to each of a plurality of non-volatile solid-state storages of the storage device greater than a maximum number of addresses in the second address space expected to be applied during a lifespan of the non-volatile solid-state storage;
translating a first address of a portion of user data in a first address space to the second address space, wherein a range of addresses in the first address space and a range of addresses in the second address space are assigned to each storage node associated with the non-volatile solid-state storage;
allocating a range of addresses of the second address space in the non-volatile solid-state storage without synchronization with other non-volatile solid-state storages in a storage cluster that includes the non-volatile solid-state storage; and
storing the portion of the user data in the non-volatile solid-state storage, with the portion of the user data associated with both the first address and the second address.

US Pat. No. 9,959,043

PERFORMING A NON-DISRUPTIVE UPGRADE OF DATA IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of performing a non-disruptive upgrade of data in a storage system that includes a plurality of storage devices and a storage controller, the method comprising:updating system software in the storage system, wherein the updated system software utilizes metadata in a new data format and a previously installed version of the system software utilizes metadata in an old data format, wherein the new data includes metadata describing a volume of data; wherein the old data includes metadata describing the volume of data;
creating new data in the new data format, wherein the new data includes a reference to old data in the old data format, wherein the new data and the old data are associated with the volume of data, and wherein system software in the storage system can utilize data in the new data format and the old data format;
determining that a portion of the volume has changed; and
responsive to determining that the portion of the volume has changed, updating the new data to include:
a reference to old data associated with a portion of the volume that precedes the changed portion of the volume;
new data associated with the changed portion of the volume, wherein the new data associated with the changed portion of the volume is in the new data format; and
a reference to old data associated with a portion of the volume that follows the changed portion of the volume.

US Pat. No. 9,817,603

DATA MIGRATION IN A STORAGE ARRAY THAT INCLUDES A PLURALITY OF STORAGE DEVICES

Pure Storage, Inc., Moun...

1. A method of migrating data in a storage system that includes a plurality of storage subsystems, each storage subsystem
including a cache and one or more persistent storage devices, the method comprising:
detecting an evacuation event associated with a portion of the cache in a storage subsystem;
responsive to detecting the evacuation event associated with a portion of the cache in the storage subsystem, determining
whether the storage subsystem includes at least a predetermined amount of additional cache resources; and

responsive to determining that the storage subsystem includes at least the predetermined amount of additional cache resources,
reducing write access to the portion of the cache in the storage subsystem.

US Pat. No. 9,760,297

MANAGING INPUT/OUTPUT (‘I/O’) QUEUES IN A DATA STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of managing input/output (‘I/O’) queues in a data storage system, the method comprising:
receiving, by a host that is coupled to a plurality of storage devices via a storage network, an I/O operation to be serviced
by a target storage device;

determining, for each of a plurality of paths between the host and the target storage device, a data transfer maximum associated
with the path, wherein the data transfer maximum specifies a cumulative amount of data that may be associated with I/O operations
pending on the path;

determining, for one or more of the plurality of paths, a cumulative amount of data to be transferred by I/O operations pending
on the path;

selecting a target path for transmitting the I/O operation to the target storage device in dependence upon the cumulative
amount of data to be transferred by I/O operations pending on the path and the data transfer maximum associated with the path;
and

tuning the data transfer maximum associated with one or more paths, including: modifying, for one or more of the plurality
of paths, the data transfer maximum associated with the path; determining path performance for a period of time after the
data transfer maximum associated with the path was modified; and responsive to determining that path performance does not
meet a threshold, reverting the data transfer maximum associated with the path to its previous state.

US Pat. No. 9,880,899

DIE-LEVEL MONITORING IN A STORAGE CLUSTER

Pure Storage, Inc., Moun...

1. A method for die-level monitoring in a storage cluster, comprising:
distributing user data throughout a plurality of storage nodes of the storage cluster through erasure coding, with each of
the plurality of storage nodes having a processor and one or more non-volatile solid-state storages each having a controller;

performing, in the controller in one of the non-volatile solid-state storages, error correction of reads of a non-volatile
memory;

forwarding error information, based at least in part on the error correction, from the controller in the one of the non-volatile
solid-state storages to the processor of each of one or more of the plurality of storage nodes; and

combining, by the processor of each of the one or more of the plurality of storage nodes, the error information from the controller
in the one of the non-volatile solid state storages with higher-level application data.

US Pat. No. 9,817,608

REPLICATION AND INTERMEDIATE READ-WRITE STATE FOR MEDIUMS

Pure Storage, Inc., Moun...

1. A method comprising:
by computer program instructions on one or more computing devices:
detecting a request to replicate a first volume from a first storage array to a second storage array;
in response to the detecting the request, identifying a plurality of logical groupings of stored data that include a logical
portion that underlies the first volume, wherein at least one of the plurality of logical groupings of stored data includes
a logical portion that does not underlie the first volume;

in each of the identified logical groupings of stored data, replicating the logical portion that underlies the first volume;
determining for each of the identified logical groupings of stored data, whether the logical portion that underlies the first
volume is replicated on the second storage array; and

in response to determining for each of the identified logical groupings of stored data that the logical portion that underlies
the first volume is replicated on the second storage array, exposing to user operations the first volume on the second storage
array before the logical portion that does not underlie the first volume is replicated on the second storage array.

US Pat. No. 9,959,170

AUTOMATICALLY RECONFIGURING A STORAGE MEMORY TOPOLOGY

Pure Storage, Inc., Moun...

1. A plurality of storage nodes, comprising:the plurality of storage nodes configured to communicate together as a storage cluster, each storage node of the plurality of storage nodes having a controller and having one or more authorities each transferable to another storage node in the storage cluster;
the controller and each of the one or more authorities for each of the plurality of storage nodes configured to select one of a plurality of redundancy schemes independent of each other such authority of the plurality of storage nodes and to distribute the user data in accordance with the selected redundancy scheme, and metadata, throughout the plurality of storage nodes; and
the plurality of storage nodes configured such that adding or removing a storage node triggers the plurality of storage nodes to reconfigure redundancy of the user data in the plurality of storage nodes.

US Pat. No. 9,798,477

SCALABLE NON-UNIFORM STORAGE SIZES

Pure Storage, Inc., Moun...

1. A storage cluster, comprising:
a plurality of storage nodes cooperating as the storage cluster, each of the plurality of storage nodes having storage memory;
and

each storage node of the plurality of storage nodes is configurable to direct erasure coded striping of data of one of an
inode or data segment across the plurality of storage nodes of the storage cluster, with at least one storage node of the
plurality of storage nodes having a differing amount of storage capacity of the storage memory from an amount of storage capacity
of another storage node in the plurality of storage nodes.

US Pat. No. 9,672,905

OPTIMIZE DATA PROTECTION LAYOUTS BASED ON DISTRIBUTED FLASH WEAR LEVELING

Pure Storage, Inc., Moun...

1. A storage system, comprising:
a plurality of storage nodes having solid-state memory, each storage node of the plurality of storage nodes configurable to
write data across the plurality of storage nodes using erasure coding, each portion of data having a plurality of data bits
and one or more parity bits; and

each storage node of the plurality of storage nodes configurable to identify portions of the solid-state memory having a first
access rate and portions of the solid state memory having a second access rate, the first access rate faster than the second
access rate; and

each storage node of the plurality of storage nodes configurable to write the data bits to the portions of the solid-state
memory having the first access rate and write the one or more parity bits to the portions of the solid-state memory having
the second access rate.

US Pat. No. 9,563,506

STORAGE CLUSTER

Pure Storage, Inc., Moun...

1. A plurality of storage nodes in a single chassis, comprising:
the plurality of storage nodes configured to communicate together as a storage cluster;
each of the plurality of storage nodes having nonvolatile solid-state memory for user data storage; and
the plurality of storage nodes configured to distribute the user data and metadata associated with the user data throughout
the plurality of storage nodes such that the plurality of storage nodes maintain ability to read the user data, using erasure
coding despite a loss of one of the plurality of storage nodes, wherein the single chassis is rack mountable and the single
chassis includes internal power distribution to the plurality of storage nodes and an internal communication bus coupling
the plurality of storage nodes.

US Pat. No. 9,077,368

EFFICIENT TECHNIQUES FOR ALIGNED FIXED-LENGTH COMPRESSION

Pure Storage, Inc., Moun...

1. A method comprising:
partitioning an original data buffer into a plurality of segments;
generating a fixed-length compression code for each segment of the plurality of segments;
assigning a unique compression code to represent first segment values responsive to determining a first condition is met;
and

assigning a common compression code to represent second segment values responsive to determining a second condition is met.

US Pat. No. 10,114,714

REDUNDANT, FAULT-TOLERANT, DISTRIBUTED REMOTE PROCEDURE CALL CACHE IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A storage cluster, comprising:a plurality of storage nodes configurable to cooperate as a storage cluster and to support a plurality of filesystems, each storage node of the plurality of storage nodes having solid-state storage;
a first remote procedure call cache in a first one of the plurality of storage nodes, the first remote procedure call cache configurable to receive a remote procedure call under a first one of the plurality of filesystems; and
a first mirrored remote procedure call cache in a second one of the plurality of storage nodes, configurable to mirror the first remote procedure call cache.

US Pat. No. 10,082,971

CALCULATING CAPACITY UTILIZATION IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of attributing consumed storage capacity among a plurality of entities storing data in a storage system, the method comprising:identifying a deduplicated data object stored in the storage system including identifying, from a set of subsequent snapshots, data shared between the snapshots, the deduplicated data object occupying an amount of storage capacity of the storage system, wherein each entity has independently issued a request to write the deduplicated data object to the storage system; and
attributing to each entity a fractional portion of the amount of storage capacity occupied by the deduplicated 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.

US Pat. No. 9,940,234

AGGRESSIVE DATA DEDUPLICATION USING LAZY GARBAGE COLLECTION

Pure Storage, Inc., Moun...

7. A deduplication method comprising:identifying user data having at least a threshold amount of data that is re-created, by one or more applications;
writing an indicator to metadata associated with the identified user data, wherein the indicator establishes a time interval of erasure immunity;
preventing at least portions of the user data from being erased during garbage collection, during the time interval in accordance with the indicator, wherein the at least portions of the identified user data are kept available during the time interval of erasure immunity as reference data for deduplication of further data;
generating a histogram tracking re-creation of files or blocks over one or more sampling windows of time; and
adjusting a value of the threshold amount based on the histogram.

US Pat. No. 9,836,245

NON-VOLATILE RAM AND FLASH MEMORY IN A NON-VOLATILE SOLID-STATE STORAGE

Pure Storage, Inc., Moun...

1. A non-volatile solid-state storage, comprising:
a non-volatile random access memory (NVRAM) addressable by a first controller internal to the non-volatile solid-state storage,
and by a second controller external to the non-volatile solid-state storage, the NVRAM configurable to store user data and
metadata relating to the user data;

a flash memory, addressable by the first controller and by the second controller; and
the first controller configurable to cooperate with further non-volatile solid-state storage as a storage cluster, the storage
cluster having a plurality of storage nodes and a plurality of authorities associated with the plurality of storage nodes,
the plurality of storage nodes configurable to write data segments across the non-volatile solid-state storage, with each
data segment associated with one of the plurality of authorities and each authority associated with a storage node of the
storage cluster such that for each data segment, as a logical container of data, a segment identifier determines which of
the plurality of authorities reads or writes the data segment and points to storage nodes for data striping for the data segment.

US Pat. No. 10,564,882

WRITING DATA TO STORAGE DEVICE BASED ON INFORMATION ABOUT MEMORY IN THE STORAGE DEVICE

PURE STORAGE, INC., Moun...

1. A method, comprising:receiving, by a storage device, a write request from a storage array controller, the write request associated with an amount of data sized in dependence upon information describing a layout of memory in the storage device;
wherein the write request includes a physical address of the location in the storage device to store the data; and
writing, by the storage device, the data to a memory unit, the data written to a location within the memory unit in dependence upon the information.

US Pat. No. 10,061,798

METHOD FOR MAINTAINING MULTIPLE FINGERPRINT TABLES IN A DEDUPLICATING STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A system comprising:a data storage medium;
a first fingerprint table comprising a first plurality of entries;
a second fingerprint table comprising a second plurality of entries;
wherein each of the first plurality of entries and each of the second plurality of entries are configured to store fingerprint data corresponding to data stored in the data storage medium;
wherein the first fingerprint table is configured to store entries corresponding to data stored in the data storage medium which has been deemed more likely to be commonly deduplicated than other data stored in the data storage medium; and
wherein the second fingerprint table is configured to store entries corresponding to data stored in the data storage medium which has been deemed less likely to be commonly deduplicated than other data stored in the data storage medium; and
a data storage controller configured to perform a data access to the fingerprint data of the first fingerprint table as part of a deduplication operation.

US Pat. No. 9,910,800

UTILIZING REMOTE DIRECT MEMORY ACCESS (‘RDMA’) FOR COMMUNICATION BETWEEN CONTROLLERS IN A STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A method of emulating a remote direct memory access (‘RDMA’) link between controllers in a storage array, the method comprising:
inserting, into a buffer utilized by a direct memory access (‘DMA’) engine of a first storage array controller, a data transfer
descriptor describing data stored in memory of the first storage array controller and a location to write the data to memory
of a second storage array controller;

retrieving, in dependence upon the data transfer descriptor, the data stored in memory of the first storage array controller;
segmenting a shared memory space into a plurality of memory segments to create a plurality of logical communications channels
between the first storage array and the second storage array; and

writing the data into the memory of the second storage array controller in dependence upon the data transfer descriptor.

US Pat. No. 9,716,755

PROVIDING CLOUD STORAGE ARRAY SERVICES BY A LOCAL STORAGE ARRAY IN A DATA CENTER

Pure Storage, Inc., Moun...

1. A method of locally providing cloud storage array services for a storage array of a data center when the storage array
is not connected to a remote cloud-based storage array services provider, the data center including a plurality of storage
arrays, including a primary storage array, the method comprising:
initiating, by the primary storage array, one or more cloud storage array services, including selecting, by the primary storage
array in dependence upon workload characteristics of each of the plurality of storage arrays, one of the plurality of storage
arrays to host the one or more cloud storage array services; and

locally providing the cloud storage array services including:
generating, by the cloud storage array services, metadata describing one or more real-time storage array characteristics;
and

presenting the metadata to a user through a local area network.

US Pat. No. 10,178,169

POINT TO POINT BASED BACKEND COMMUNICATION LAYER FOR STORAGE PROCESSING

Pure Storage, Inc., Moun...

1. A storage system, comprising:a plurality of storage nodes, each of the plurality of storage nodes having a plurality of storage units with storage memory;
a first network coupling the plurality of storage nodes; and
a second network coupled to at least a subset of the plurality of storage units of each of the plurality of storage nodes such that one of the plurality of storage units of a first one of the plurality of storage nodes is configured to initiate or relay a command to one of the plurality of storage units of a second one of the plurality of storage nodes via the second network without the command passing through the first network, wherein one of the plurality of storage nodes is configured to perform data striping across the plurality of storage nodes by transferring a portion of a data stripe to each other of the plurality of storage nodes via the second network.

US Pat. No. 10,178,798

ELECTRONICS ENCLOSURE WITH AIRFLOW MANAGEMENT

Pure Storage, Inc., Moun...

1. An electronics housing, comprising:A housing, having a first chamber arranged to receive one or more enclosures, the housing having a second chamber separated from the first chamber by a wall;
the one or more enclosures, each arranged to have electronic circuitry within the one or more second enclosure;
the housing having one or more fans arranged to exhaust a first airflow from each of the one or more enclosures and the first chamber;
the housing having one or more power supplies with a further one or more fans arranged to exhaust a second airflow from the second chamber and the one or more power supplies; and
the wall having one or more apertures arranged to at least partially align with one or more apertures of each of the one or more enclosures, the second airflow proceeding through the one or more apertures of the wall.

US Pat. No. 9,934,089

STORAGE CLUSTER

Pure Storage, Inc., Moun...

1. A method for storing user data in a storage cluster, comprising:determining, by one of a plurality of authorities in a plurality of storage nodes of a storage cluster, which of a plurality of erasure coding schemes to use for a range of user data owned by the authority; and
storing a portion of user data across the plurality of storage nodes using the erasure coding scheme determined by the authority.

US Pat. No. 9,569,116

SCHEDULING OF I/O IN AN SSD ENVIRONMENT

Pure Storage, Inc., Moun...

1. A computer system comprising:
a plurality of storage devices configured to store data; and
a data storage controller configured to:
determine a length of time that the particular storage device has been in a particular operational state; and
based on the particular operational state and the length of time the particular storage device has been in the particular
operational state, predict when a particular storage device of the plurality of storage devices will exhibit an unscheduled
behavior comprising a relatively high response latency or a relatively low throughput.

US Pat. No. 9,971,537

HARDWARE SUPPORT TO TRACK AND TRANSITION FLASH LUNS INTO SLC MODE

Pure Storage, Inc., Moun...

1. A method for tracking and transitioning flash memory modes, performed by a storage system, comprising:tracking memory modes of a plurality of portions of flash memory, on a per portion basis, in a first data structure in a first memory;
tracking memory mode of a plurality of differing portions of flash memory, at a level differing from the portions of flash memory, in a second data structure or portion of the first data structure;
determining whether the tracked memory mode of a portion of flash memory, based on the first data structure, matches the tracked memory mode of one of the plurality of differing portions of flash memory, based on the second data structure or portion of the first data structure, for an I/O (input/output) command relating to the flash memory;
sending at least one command to the flash memory to change the memory mode of the portion of flash memory, responsive to determining the tracked memory mode of the portion of flash memory does not match the memory mode of the one of the plurality of differing portions of flash memory for the I/O command; and
performing the I/O command with the memory mode of the portion of flash memory changed to match the memory mode for the I/O command.

US Pat. No. 10,509,709

INDIRECT STORAGE OF DATA IN A DISPERSED STORAGE SYSTEM

PURE STORAGE, INC., Moun...

1. A method for execution by one or more processing modules, the method comprises:obtaining data for storage;
encoding the data in accordance with an error coding dispersal storage function to produce a plurality of sets of encoded data slices, wherein a decode threshold number of encoded data slices of a set of the plurality of sets of encoded data slices is required to recover a data segment of the data wherein an individual encoded data slice of the set of encoded data slices yields substantially no information regarding the data segment;
determining a proxy unit, wherein the proxy unit is one of a plurality of dispersed storage (DS) units and wherein a DS unit of the plurality of DS units includes a processing module and memory;
transmitting the plurality of sets of encoded data slices to the proxy unit to perform storage of the plurality of sets of encoded data slices in accordance with a serial fashion starting with the proxy unit; and
retransmitting, by a processing module of the proxy unit, at least some encoded data slices of the set of encoded data slices to different DS units of the plurality of DS units for storage therein in accordance with the serial fashion, wherein the proxy unit deletes and does not store the at least some of the encoded data slices after receiving confirmation of storage from at least some of the different DS units of the plurality of DS units that store the at least some encoded data slices of the set of encoded data slices in accordance with the serial fashion.

US Pat. No. 10,021,170

MANAGING A STORAGE ARRAY USING CLIENT-SIDE SERVICES

Pure Storage, Inc., Moun...

1. A method of managing a storage array, the method comprising:receiving, by a client-side array services module from a cloud-based security module through data communications on a wide area network, a token representing authentication of user credentials, the client-side array services module is coupled for data communications to a cloud-based storage array services provider;
authorizing based on the token, by the client-side array services module, transmission of a management instruction to the storage array;
informing, by the client-side array services module through data communications on the wide area network, the cloud-based storage array services provider of the management of the storage array;
managing, by the client-side array services module, a storage array only through data communications on a local area network, including sending, to the storage array, the management instruction with the token received over the wide area network, wherein the storage array is not coupled for data communications to the cloud-based security module;
disconnecting, by the client-side array services module, from the storage array via the local area network, wherein after disconnecting from the local area network, the client-side array services module no longer manages the storage array; and
in response to disconnecting the client-side array services module from the storage array via the local area network:
ceasing, management of the storage array including sending any management instructions to the storage array by the client-side array services module; and
subsequent to disconnecting the client-side array services module from the storage array via the local area network, the client-side array services module receives only reporting services resulting from the management instructions regarding the storage array from the cloud-based storage array services provider through data communications on the wide area network, and the storage array is configured to report changes resulting from management instructions to a cloud-based storage array services provider through a one-way data communications connection on the wide area network.

US Pat. No. 10,001,951

PATH SELECTION IN A DATA STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of path selection in a data storage system, the method comprising:receiving, by a storage array controller that is coupled to a plurality of storage devices, an I/O operation to be serviced by a target storage device;
determining, for each of a plurality of paths between the storage array controller and the target storage device, a data transfer maximum associated with the path, wherein the data transfer maximum specifies a cumulative amount of data that may be associated with I/O operations pending on the path;
determining, for one or more of the plurality of paths, a cumulative amount of data to be transferred by I/O operations pending on the path;
determining, prior to transmitting the I/O operation to the target storage device, an amount of data to be transferred when the target storage devices executes the I/O operation; and
selecting a target path for transmitting the I/O operation to the target storage device in dependence upon the cumulative amount of data to be transferred by I/O operations pending on the path, the amount of data to be transferred when the target storage devices executes the I/O operation, and the data transfer maximum associated with the path.

US Pat. No. 9,886,314

PLACING WORKLOADS IN A MULTI-ARRAY SYSTEM

Pure Storage, Inc., Moun...

1. A method of placing workloads in a multi-array system comprising a plurality of storage arrays, the method comprising:
determining, for each of a plurality of storage arrays, a current system activity level trend of the storage array using a
centralized component within the multi-array system, by periodically monitoring a plurality of performance metrics and determining
the rate at which each monitored performance metric is changing over time;

receiving a performance profile of a workload to be executed on one of the storage arrays;
generating, for each of the plurality of storage arrays in dependence upon the current system activity level trend of the
storage array and the performance profile of the workload, a projected system activity level trend for the storage array,
wherein the projected system activity level trend identifies an expected impact to the performance metrics of the storage
array created by placing the workload on the storage array; wherein generating the performance profile of the workload to
be executed on one of the storage arrays further comprises receiving user input identifying the type of application supported
by executing the workload;

identifying, in dependence upon the projected system activity level trend for each of the plurality of storage arrays, an
optimal storage array for receiving the workload;

the optimal storage array is found by generating a score for each storage array based on trend and availability of storage
and processor cycle that can be used as an indication of how well a particular storage array can support a particular workload;

the optimal storage array has the lowest score and has sufficient resources to support the workload for the longest period
of time;

placing the workload on the optimal storage array.

US Pat. No. 9,843,453

AUTHORIZING I/O COMMANDS WITH I/O TOKENS

Pure Storage, Inc., Moun...

1. A method for authorizing I/O (input/output) commands in a storage cluster, performed by the storage cluster, the method
comprising:
generating a token responsive to an authority within the storage cluster initiating an I/O command, wherein the token is specific
to assignment of the authority and a storage node of the storage cluster; and

verifying the I/O command using the token, wherein the token includes a signature confirming validity of the token and wherein
the token is revocable.

US Pat. No. 9,804,973

USING FREQUENCY DOMAIN TO PRIORITIZE STORAGE OF METADATA IN A CACHE

Pure Storage, Inc., Moun...

1. A method comprising:
measuring an amount of randomness within a plurality of addresses that are referenced in a plurality of accesses to one or
more storage devices including adding together frequency component values above a first cutoff frequency in a first frequency
distribution of a first frequency domain representation of the plurality of addresses of the plurality of accesses; and

caching, in dependence upon the amount of randomness for each of the plurality of addresses, metadata associated with one
or more of the plurality of addresses.

US Pat. No. 9,671,846

POWER SEQUENCING FOR OPTIMAL SYSTEM LOAD AT START UP

Pure Storage, Inc., Moun...

1. A method for power sequencing in a chassis configurable to receive a plurality of blades, comprising:
determining a chassis configuration prior to the plurality of blades disposed within a respective plurality of slots of the
chassis being powered up;

generating a power sequence based on the determining;
applying the power sequence to the blades;
monitoring the applying and the chassis configuration, the monitoring including detecting a difference between an actual system
load and an expected system load; and

adjusting the power sequence for a next power cycle to converge to the expected system load.

US Pat. No. 10,146,585

ENSURING THE FAIR UTILIZATION OF SYSTEM RESOURCES USING WORKLOAD BASED, TIME-INDEPENDENT SCHEDULING

Pure Storage, Inc., Moun...

1. A method of ensuring the fair utilization of system resources using workload based, time-independent scheduling, the method comprising:determining whether an amount of system resources required to service the I/O request is greater than an amount of available system resources in a storage system, wherein the I/O request is associated with an entity;
responsive to determining that the amount of system resources required to service the I/O request is greater than the amount of available system resources in the storage system:
queueing the I/O request in an entity-specific queue for the entity;
detecting that additional system resources in the storage system have become available;
determining a priority for each entity with a non-empty entity-specific queue by: determining an amount of I/O requests that may be processed by the storage system in parallel; establishing, in dependence upon the amount of I/O requests that may be processed by the storage system in parallel, a time-independent period; determining an amount of I/O requests processed for each entity with a non-empty entity-specific queue during the time-independent period; and assigning priorities to each entity with a non-empty entity-specific queue in dependence upon the amount of I/O requests processed for each entity with a non-empty entity-specific queue during the time-independent period; and
responsive to detecting that additional system resources in the storage system have become available, issuing an I/O request from an entity-specific queue for an entity that has a highest priority among entities with non-empty entity-specific queues.

US Pat. No. 10,133,503

SELECTING A DEDUPLICATION PROCESS BASED ON A DIFFERENCE BETWEEN PERFORMANCE METRICS

Pure Storage, Inc., Moun...

8. A system comprising:a memory; and
a processing device, operatively coupled with the memory, to:
receive a plurality of data blocks;
generate a hash value for a first data block of the received plurality of data blocks;
determine a location of a duplicate of the first data block being stored at a storage resource based on the hash value for the first data block;
determine a first performance metric associated with retrieving a second stored data block that is within a specified range of the duplicate of the first data block stored at the storage resource and a second performance metric associated with retrieving a second hash value corresponding to the second stored data block; and
retrieve the second stored data block within a specified range of the duplicate of the first data block in response to the first performance metric not exceeding the second performance metric.

US Pat. No. 9,804,779

DETERMINING STORAGE CAPACITY TO BE MADE AVAILABLE UPON DELETION OF A SHARED DATA OBJECT

Pure Storage, Inc., Moun...

1. A method of attributing consumed storage capacity among entities storing data in a storage array, the method comprising:
identifying a data object stored in the storage array and shared by a plurality of entities, the data object occupying 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;
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.

US Pat. No. 10,198,194

PLACING DATA WITHIN A STORAGE DEVICE OF A FLASH ARRAY

Pure Storage, Inc., Moun...

1. A method of placing data within a storage device of a flash array, the method comprising:receiving, by a storage device of a plurality of storage devices in the flash array, information describing an expected longevity of data stored on the storage device, wherein the expected longevity is based on a number of references to data stored on the storage device;
determining, by the storage device, a location for storing the data in dependence upon the expected longevity of the data including: identifying wear leveling information associated with one or more memory locations in the storage device; and
determining the location for storing the data in dependence upon the wear leveling information associated with the one or more memory locations, wherein locations with relatively low levels of wear are selected to store data with relatively short expected longevities, and further wherein locations with relative high levels of wear are selected to store data with relatively long expected longevities;
determining a garbage collection schedule for the location based on the number of stored references to the data, wherein determining the garbage collection schedule comprises increasing garbage collection frequency on areas with a low number of references; and
providing, to a storage array controller, garbage collection statistics.

US Pat. No. 10,037,440

GENERATING A UNIQUE ENCRYPTION KEY

Pure Storage, Inc., Moun...

1. A method of utilizing a non-repeating identifier to encrypt data, the method comprising:by a storage array controller:
receiving a request to write data to a storage device in a storage array;
selecting a segment-offset pair where the data will be stored, wherein the selected segment-offset pair is unique relative to every other segment-offset pair previously utilized by the storage device, wherein the selected segment-offset pair cannot be reutilized to service another request to write data to the storage device, and wherein multiple segment-offset pairs map to the same physical location within the storage device during the lifetime of the storage device;
utilizing the new segment identifier of the segment-offset pair to encrypt the data including utilizing an encryption key; and
writing the encrypted data to the storage device at the selected segment-offset pair.

US Pat. No. 9,977,600

OPTIMIZING FLATTENING IN A MULTI-LEVEL DATA STRUCTURE

Pure Storage, Inc., Moun...

1. A node-based storage cluster, the node-based storage cluster configured to:detect a condition for flattening two or more levels within a multi-level data structure that includes a plurality of levels, where each level includes one or more entries and each entry within a level is associated with a key that is unique from all other entries in the level; and
responsive to detecting the condition:
select two or more levels for flattening;
create a new level to be added to the multi-level data structure;
insert, within the new level, each entry in the two or more levels whose key does not match the key of any other entry in the two or more levels;
insert, within the new level, each valid entry in the two or more levels whose key does match the key of another entry in the two or more levels;
receive, from each node in the node-based storage cluster, verification that the node is ready to utilize the new level; and
remove, from the node-based storage cluster, the two or more levels for flattening, including archiving the two or more levels for flattening in offline storage.

US Pat. No. 9,891,858

DEDUPLICATION OF REGIONS WITH A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A computer system comprising:
a data storage subsystem comprising a plurality of data storage locations on a plurality of storage devices; and
a storage controller coupled to the plurality of storage devices, wherein the storage controller is configured to:
maintain a table to track mappings between logical groups of active data in the plurality of storage devices and logical groups
of snapshot data in the plurality of storage devices;

determine that snapshot data within a first range of a first logical group of snapshot data is representative of active data
within a second range of second logical group of active data;

in response to determining that snapshot data within the first range is representative of active data within the second range,
indicate within the table, a mapping of the second range of the second logical group of active data to the first range of
the first logical group of snapshot data; and

responsive to indicating with the table, the mapping of the second range to the first range, invalidate a plurality of entries
corresponding to the second range in the table.

US Pat. No. 9,836,234

STORAGE CLUSTER

Pure Storage, Inc., Moun...

14. A storage system, comprising:
a plurality of blades, each of a first subset having a storage node and storage memory, and each of a second, differing subset
having a compute-only node; and

the plurality of blades forming the storage system, wherein authorities are distributed across the plurality of blades, to
a plurality of nodes including at least one compute-only node, and wherein each authority has ownership of a range of user
data.

US Pat. No. 9,823,536

ELECTROCHROMIC MULTI-LAYER DEVICES WITH SPATIALLY COORDINATED SWITCHING

Pure Storage, Inc., Moun...

1. A method of forming an electrochromic multilayer device, comprising:
providing a first substrate comprising a first transparent electrically conductive layer and a second substrate comprising
a second transparent electrically conductive layer;

scribing the first conductive layer with a laser to form a first patterned transparent electrically conductive layer having
a first simulated sheet resistance to the flow of electrical current that varies as a function of position in the first patterned
electrically conductive layer;

scribing the second conductive layer with a laser to form a second patterned transparent electrically conductive layer to
have a second simulated sheet resistance to the flow of electrical current that varies as a function of position in the second
patterned electrically conductive layer;
forming a first electrode layer comprising an electrochromic material over the patterned first transparent electrically conductive
layer;
forming a second electrode layer comprising an electrochromic material over the patterned second transparent electrically
conductive layer; and
providing an ion conductor material between the first electrode layer and the second electrode layer to form the electrochromic
multilayer device.

US Pat. No. 9,892,147

MAINTAINING DATA ASSOCIATED WITH A STORAGE DEVICE

Pure Storage, Inc., Moun...

1. A method comprising:
receiving, by an application executed by a processing device of a storage array controller of a host server of a solid-state
storage array comprising a plurality of solid-state storage devices, an indication of a power-up of a solid-state storage
device of the plurality of solid-state storage devices;

in response to receiving the indication, retrieving a first plurality of tables stored at a volatile memory of the solid-state
storage device, the first plurality of tables stored at the volatile memory of the solid-state storage device comprising first
information associated with characteristics of a plurality of data blocks of the solid-state storage device;

identifying a second plurality of tables stored at a non-volatile memory of the solid-state storage device, the second plurality
of tables comprising second information associated with the characteristics of the plurality of data blocks of the solid-state
storage device;

identifying one or more rules associated with the first plurality of tables and the second plurality of tables; and
creating, by the processing device of the storage array controller, a new plurality of tables based on the first information
and the second information associated with the characteristics of the plurality of data blocks of the solid-state storage
device and the one or more rules, an entry of the new plurality of tables being provided a value from one of the first information
or the second information based on the one or more rules.

US Pat. No. 10,423,490

READ-SOURCE REQUESTS TO SUPPORT BUNDLED WRITES IN A DISTRIBUTED STORAGE SYSTEM

PURE STORAGE, INC., Moun...

1. A method for execution by one or more processing modules of one or more computing devices of a dispersed storage network (DSN), the method comprises:identifying a stored data object for retrieval from a dispersed storage network (DSN), wherein the stored data object is stored at least partially as a bundled write;
determining a DSN address that corresponds to the stored data object;
generating a read source request based on the DSN address, wherein the read source request includes a common source name;
identifying a set of storage units of the DSN, wherein one or more storage units of the set of storage units are associated with the common source name;
sending the read source request to the identified set of storage units to retrieve encoded data slices associated with the common source name;
receiving the retrieved encoded data slices from at least some of the storage units of the identified set of storage units, wherein each storage unit that receives the read source request returns all stored encoded data slices with a source name that matches the common source name provided in the read source request; and
disperse storage error decoding, for each set of the encoded data slices, a decode threshold number of received encoded data slices to produce a recovered data object.

US Pat. No. 10,162,835

PROACTIVE MANAGEMENT OF A PLURALITY OF STORAGE ARRAYS IN A MULTI-ARRAY SYSTEM

Pure Storage, Inc., Moun...

1. A method of proactive management in a multi-array system, the method comprising:receiving, at a storage array services provider from a plurality of storage arrays of the multi-array system, one or more performance metrics;
comparing one or more performance metrics of a particular storage array in the plurality of storage arrays to one or more corresponding performance metrics of other storage arrays in the plurality of storage arrays;
generating one or more action recommendations based on the comparison, each action recommendation specifying one or more actions for improving the conditions of the particular storage array; and
presenting the one or more action recommendations in accordance with a received selection of one or more organizational options.

US Pat. No. 10,013,317

RESTORING A VOLUME IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method for use in a storage system, the method comprising:receiving a request to restore a logical volume that represents logical storage on the storage system; and
responsive to receiving the request to restore the logical volume:
determining that the logical volume previously mapped to a logical data representation that currently maps to data stored on the storage system; and
in response to determining that the logical volume previously mapped to the logical data representation that currently maps to data stored on the storage system, restoring the connection between the logical volume and the data stored on the storage system by logically remapping the logical volume to the logical data representation.

US Pat. No. 9,773,007

PERFORMANCE IMPROVEMENTS IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

6. A method comprising:
allocating an indirection layer for a volume, wherein the indirection layer is mapped directly below the volume and above
a first anchor medium, wherein the first anchor medium is a logical grouping of data; wherein the indirection layer is a link
between the volume and the first anchor medium of the volume;

mapping read and write operations targeting the volume through the indirection layer;
in response to detecting a request to perform a first snapshot of the volume, converting a first anchor medium from a read-write
state to a read-only state;

in response to detecting a write operation targeting the volume and subsequent to detecting the request to perform the first
snapshot of the volume, allocating a second anchor medium that maps directly below the indirection layer and above the first
anchor medium; and

performing the write operation to the second anchor medium.

US Pat. No. 9,612,952

AUTOMATICALLY RECONFIGURING A STORAGE MEMORY TOPOLOGY

Pure Storage, Inc., Moun...

1. A plurality of storage nodes, comprising:
each storage node of the plurality of storage nodes having a controller, at least one storage node of the plurality of storage
nodes having multiple authorities, wherein each authority of the multiple authorities controls a corresponding range of data
identifiers;

each authority of the plurality of storage nodes configurable to select one of a plurality of redundancy schemes independent
of each other authority of the plurality of storage nodes and to distribute the user data in accordance with the selected
redundancy scheme; and

the plurality of storage nodes configurable such that adding or removing a storage node triggers the plurality of storage
nodes and the authorities to reconfigure redundancy of the user data in the plurality of storage nodes.

US Pat. No. 10,007,459

PERFORMANCE TUNING IN A STORAGE SYSTEM THAT INCLUDES ONE OR MORE STORAGE DEVICES

Pure Storage, Inc., Moun...

1. A method of performance tuning in a storage system that includes one or more storage devices, the method comprising:storing, by a primary controller of the storage system, first data of a first workload type and second data of a second workload type into one or more of the one or more storage devices;
determining, by a secondary controller that is configured similarly to the primary controller, a first utilization pattern associated with the first workload type and a second utilization pattern associated with the second workload type, wherein at least some of the data access rights of the primary controller supersede the data access rights of the secondary controller; and
initiating, in dependence upon a comparison of the first utilization pattern and the second utilization pattern to utilization patterns exhibited by known workload types, a modification to a manner in which one or more computer processes access the first data and the second data stored in the one or more storage devices, wherein the modification initiates one or more remedial measures which include initiating or terminating one or more processes, powering up or powering down at least one storage device, and moving data from one storage device to another storage device.

US Pat. No. 9,817,750

PROFILE-DEPENDENT WRITE PLACEMENT OF DATA INTO A NON-VOLATILE SOLID-STATE STORAGE

Pure Storage, Inc., Moun...

1. A method for storing user data, comprising:
distributing the user data throughout a plurality of storage nodes through erasure coding, each of the plurality of storage
nodes having nonvolatile solid-state memory for user data storage, the distributing comprising:

determining an authority for a data segment from a data segment identifier;
determining a storage node on which the authority resides; and
distributing a plurality of data shards based on the data segment to storage nodes pointed to by the authority;
performing analytics on user data, including determining whether an update arrives to a data shard in a first memory of a
storage node while the data shard is awaiting transfer, with further data shards, from the first memory to the nonvolatile
solid-state memory of the storage nodes;

grouping portions of the user data according to results of the analytics; and
writing the user data to blocks of the nonvolatile solid-state memory, wherein each block of the nonvolatile solid-state memory
receives portions of the user data grouped according to at least one of the results of the analytics and at least one block
of the nonvolatile solid-state memory receives data shards grouped according to the determining.

US Pat. No. 10,353,630

SIMULTANEOUSLY SERVICING HIGH LATENCY OPERATIONS IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of simultaneously servicing high latency operations in a storage system, the method comprising:limiting, in dependence upon an amount of redundancy data in the storage system, a number of storage devices in a device group that may simultaneously service high latency operations;
detecting a condition that requires additional bandwidth for high latency operations; and
responsive to detecting the condition that requires additional bandwidth for high latency operations, increasing the number of storage devices within the device group that may simultaneously service high latency operations.

US Pat. No. 10,140,149

TRANSACTIONAL COMMITS WITH HARDWARE ASSISTS IN REMOTE MEMORY

Pure Storage, Inc., Moun...

1. A storage unit for a storage system, comprising:non-persistent memory;
persistent memory; and
a transaction engine, configured to receive logical records and configured to transfer the logical records to the non-persistent memory as atomic updates, wherein each of the atomic updates constitutes a transfer of a logical record to the non-persistent memory, the transaction engine configurable to complete an atomic update that is in progress responsive to an event, wherein a transaction interlock assures coherency of the atomic update that is in progress, and wherein the contents of the non-persistent memory, having a coherent image of a logical record associated with the atomic update, are available in the persistent memory, after the event, for use during a recovery of the storage system.

US Pat. No. 10,061,074

METHOD AND APPARATUS FOR TRANSFORMING LIGHT FROM A SET OF POINT LIGHT SOURCES INTO A UNIFORM FIELD OF ILLUMINATION

Pure Storage, Inc., Moun...

1. A light directing apparatus comprising:light directing structures configured to receive light from a light emitting apparatus, the light emitting apparatus disposed within an interior channel defined within an illumination component, the light directing structures defined on a first surface of the illumination component;
a first plurality of grooves between the light directing structures, the first plurality of grooves in a first direction, the first direction radial from the light emitting apparatus;
a second plurality of grooves between the light directing structures, the second plurality of grooves in a second direction concentric to the light emitting apparatus, wherein a distance between the second plurality of grooves increases with distance from the light emitting apparatus, wherein an illumination gradient of the light directing structures increases with distance from the light emitting apparatus, the illumination gradient comprising a reflective gradient and a refractive gradient, and wherein a thickness of the illumination component is non-uniform in the second direction.

US Pat. No. 9,967,342

STORAGE SYSTEM ARCHITECTURE

Pure Storage, Inc., Moun...

8. A storage system comprising:a plurality of storage nodes having a plurality of processors;
a plurality of storage units, each one of the plurality of storage units having a controller and solid-state storage memory;
a first pathway coupling the plurality of processors of the plurality of storage nodes to each other and configured to couple to a network; and
a second pathway coupling at least a first controller of a first one of the plurality of storage units and a second controller of a second one of the plurality of storage units for communication without participation by the processors of the plurality of storage nodes.

US Pat. No. 9,824,608

SYSTEMS AND METHODS FOR VISUALLY GUIDED HARDWARE INSTALLATION

Pure Storage, Inc., Moun...

1. A method for visually guided storage array installation, the method comprising:
receiving an installation plan for a storage array;
determining a component of the storage array specified in the installation plan; and
displaying one or more visual indicators associated with the component of the storage array to indicate a status corresponding
to executing a portion of the installation plan, wherein displaying one or more visual indicators comprises: activation of
a first indicator associated with the component of the storage array; and

de-activation of a second indicator associated with a component of the storage array in response to executing the portion
of the installation plan.

US Pat. No. 9,760,479

WRITING DATA IN A STORAGE SYSTEM THAT INCLUDES A FIRST TYPE OF STORAGE DEVICE AND A SECOND TYPE OF STORAGE DEVICE

Pure Storage, Inc., Moun...

1. A method of writing data in a storage system that includes a first type of storage device and a second type of storage
device, the method comprising:
selecting, for one or more unprocessed write requests, a target storage device type from the first type of storage device
and the second type of storage device;

responsive to selecting the first type of storage device, issuing, by a storage array controller, a first group of write requests
to the first type of storage device, the first group of write requests addressed to one or more locations selected in dependence
upon an expected address translation to be performed by the first type of storage device; and

responsive to selecting the second type of storage device, issuing, by the storage array controller, a second group of write
requests to the second type of storage device, the second group of write requests addressed to one or more locations selected
in dependence upon a layout of memory in the second type of storage device.

US Pat. No. 10,656,864

DATA REPLICATION WITHIN A FLASH STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A system comprising:a first storage array configured to:
responsive to a request to replicate a snapshot of a volume from a first storage array to a second storage array, identify a group of data corresponding to the snapshot;
during replication of the group of data from the first storage array to the second storage array, determine that a non-replicated region of the group is a duplicate of a replicated region of the group; and
in response to the first storage array determining that the non-replicated region is a duplicate of the replicated region stored on the second storage array, send, from the first storage array to the second storage array, a reference to the non-replicated region instead of sending data for the non-replicated region, the reference including an address where the non-replicated region is stored on the first storage array;
maintain a second list of regions which are already stored on the second storage array and which map to a region of the group of data; and
a second storage array configured to, responsive to detecting the request to replicate the snapshot of the volume from the first storage array to the second storage array:
identify a plurality of regions stored on the second storage array which correspond to groups of data that originated on the first storage array; and
send a first list of the plurality of regions to the first storage array;
wherein the first storage array is remote from the second storage array.

US Pat. No. 10,409,679

MIGRATING DATA SLICES IN A DISPERSED STORAGE NETWORK

PURE STORAGE, INC., Moun...

1. A method for execution by a computing device that includes a processor, the method comprises:obtaining utilization information of a pair of adjacent dispersed storage and task (DST) execution units of a common pillar;
verifying the utilization information of the pair of adjacent DST execution units based on companion utilization information;
selecting slices to migrate in response to verifying the utilization information;
facilitating migration of the slices to migrate;
generating an updated storage map based on the slices to migrate;
generating a storage map modification package that includes a previous storage map and the updated storage map;
facilitating attaching a signature from each DST execution unit of the pair of adjacent DST execution units to the storage map modification package to produce a fully signed storage map modification package; and
publishing the fully signed storage map modification package.

US Pat. No. 10,289,344

BANDWIDTH-BASED PATH SELECTION IN A STORAGE NETWORK

Pure Storage, Inc., Moun...

1. A method of managing input/output (‘I/O’) queues in a data storage system, the method comprising:receiving, by a host that is coupled to a plurality of storage devices via a storage network, an I/O operation to be serviced by a target storage device;
determining, for each of a plurality of paths between the host and the target storage device, a data transfer maximum associated with the path, wherein the data transfer maximum specifies a cumulative amount of data that may be associated with I/O operations pending on the path;
determining, for one or more of the plurality of paths, a cumulative amount of data to be transferred by I/O operations pending on the path;
determining, prior to transmitting the I/O operation to the target storage device, an amount of data to be transferred when the target storage devices executes the I/O operation; and
selecting a target path for transmitting the I/O operation to the target storage device in dependence upon the cumulative amount of data to be transferred by I/O operations pending on the path, the amount of data to be transferred when the target storage devices executes the I/O operation, and the data transfer maximum associated with the path.

US Pat. No. 10,198,205

DYNAMICALLY ADJUSTING A NUMBER OF STORAGE DEVICES UTILIZED TO SIMULTANEOUSLY SERVICE WRITE OPERATIONS

Pure Storage, Inc., Moun...

1. A method of dynamically adjusting a number of storage devices in a storage system that may be utilized to simultaneously service write operations, the method comprising:limiting a number of storage devices within a failure domain that may be simultaneously servicing write operations to a number less than a number of storage devices that may be lost without resulting in a loss of data;
determining that an event has occurred that requires additional write bandwidth; and
responsive to determining that an event has occurred that requires additional write bandwidth, increasing the number of storage devices that may be simultaneously servicing write operations.

US Pat. No. 9,880,779

PROCESSING COPY OFFLOAD REQUESTS IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method for processing copy offload requests in a storage system, the method comprising:
in response to receiving a copy offload operation request, buffering, by a storage controller, one or more copy offload operations
corresponding to the copy offload operation request;

receiving, by the storage controller, a second request to perform a storage controller operation on the plurality of storage
devices;

determining, by the storage controller, whether the second request targets a storage area corresponding to the copy offload
operation request;

in response to determining that the second request does not target a storage area corresponding to the copy offload operation
request, preventing, by the storage controller, the buffered one or more copy offload operations from being performed; and

in response to determining that the second request does target a storage area corresponding to the copy offload operation
request, identifying and performing, by the storage controller, any of the buffered one or more copy offload operations that
are directed to the targeted storage area.

US Pat. No. 10,657,000

OPTIMIZING DATA STORAGE IN A DISPERSED STORAGE NETWORK

PURE STORAGE, INC., Moun...

1. A method for execution by a computing device that includes a processor, the method comprises:dispersed storage error encoding a data segment to produce a set of encoded data slices that includes more than a write threshold number of encoded data slices;
facilitating storage of a proper subset of the set of encoded data slices in a set of storage units;
and
facilitating deletion of a number of encoded data slices from the set of storage units, wherein the number of encoded data slices are included in the proper subset of the set of encoded data slices, and wherein the number of encoded data slices is equal to a difference between a number of encoded data slices in the proper subset and the write threshold number.

US Pat. No. 10,558,621

LOCK STEALING WRITES FOR IMPROVED RELIABILITY

PURE STORAGE, INC., Moun...

1. A method comprises:sending, by a first computing device of a dispersed storage network (DSN), a first set of write requests to a set of storage units of the DSN, wherein the first set of write requests is regarding a set of encoded data slices;
sending, by a second computing device of the DSN, a second set of write requests to the set of storage units, wherein the second set of write requests is regarding the set of encoded data slices, wherein the second computing device sends the second set of write requests substantially concurrently with the first computing device sending the first set of write requests;
receiving, by the first computing device, favorable write responses from a first subset of storage units of the set of storage units;
receiving, by the second computing device, favorable write responses from a second subset of storage units of the set of storage units;
determining, by the first computing device, whether a number of the favorable write responses from the first subset of storage units equals or exceeds a write threshold number;
when the number of the favorable write responses from the first subset of storage units equals or exceeds the write threshold number, sending, by the first computing device, a set of commit requests to the set of storage units; and
when a storage unit of the set of storage units has a locked write operation for a write request of the first set of write requests and receives a commit request of a set of commit requests from the second computing device prior to receiving a rollback request of a set of rollback requests from the first computing device:
implementing, by the storage unit, a forced rollback of the locked write operation.

US Pat. No. 10,331,370

TUNING A STORAGE SYSTEM IN DEPENDENCE UPON WORKLOAD ACCESS PATTERNS

Pure Storage, Inc., Moun...

1. A method of performance tuning in a storage system that includes one or more storage devices, the method comprising:storing, by a primary controller of the storage system, first data of a first workload type and second data of a second workload type into one or more of the one or more storage devices;
determining, by a secondary controller that is configured similarly to the primary controller, a first utilization pattern associated with the first workload type and a second utilization pattern associated with the second workload type; and
initiating, in dependence upon a comparison of the first utilization pattern and the second utilization pattern to utilization patterns exhibited by known workload types, a modification to a manner in which one or more computer processes access the first data and the second data stored in the one or more storage devices, wherein the modification initiates one or more remedial measures.

US Pat. No. 10,198,380

DIRECT MEMORY ACCESS DATA MOVEMENT

Pure Storage, Inc., Moun...

1. A method of applying a data format in a direct memory access transfer, comprising:reading a self-describing data portion from a first memory, the self-describing data portion comprising a self-contained combination of data, a destination section having information regarding a destination of the data, and a status section having information about transfer of the data from the first memory to a second memory;
extracting the destination from the self-describing data portion; and
writing the data, from the self-describing data portion, to the second memory according to the destination and the information in the status section of the self-describing data portion.

US Pat. No. 10,656,850

EFFICIENT VOLUME REPLICATION IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method comprising:receiving a request to replicate a volume at a source solid-state storage array to a target solid-state storage array, the volume corresponding to a plurality of snapshots associated with data blocks that are stored at the source solid-state storage array;
identifying a most recent snapshot of the plurality of snapshots corresponding to the volume at the source solid-state storage array that is present at the target solid-state storage array;
identifying metadata organized into a plurality of logical groups, each of the logical groups corresponding to a sequence number range and including a portion of the metadata that is associated with a portion of the data blocks of the volume, wherein each sequence number range comprises a plurality of sequence numbers that are assigned to each operation associated with the source solid-state storage array;
determining a last sequence number associated with the most recent snapshot of the plurality of snapshots that is present at the target solid-state storage array;
identifying, by a processing device, a logical group of the plurality of logical groups with a corresponding sequence number range that includes the last sequence number associated with the most recent snapshot; and
reading the metadata to identify a portion of the data blocks to transmit to the target solid-state storage array to replicate the volume based on a next logical group of the plurality of logical groups with a corresponding sequence number range with higher sequence numbers than the identified logical group.

US Pat. No. 10,628,245

MONITORING OF STORAGE UNITS IN A DISPERSED STORAGE NETWORK

PURE STORAGE, INC., Moun...

1. A method for execution by one or more processing modules of one or more computing devices of a dispersed storage network (DSN), the DSN having storage resources including a plurality of sets of storage units, the method comprises:obtaining DSN configuration information relating to the storage resources;
selecting a target storage unit for monitoring;
determining a number of monitoring storage units to monitor the target storage unit;
for each of a plurality of storage units, determining an estimated failure correlation level with the target storage unit;
selecting monitoring storage units based, at least in part, on the estimated failure correlation levels and the number of monitoring storage units; and
assigning the monitoring storage units to monitor the target storage unit.

US Pat. No. 10,564,884

INTELLIGENT DATA MIGRATION WITHIN A FLASH STORAGE ARRAY

Pure Storage, Inc., Moun...

1. A method of data migration within a storage array that includes a plurality of storage devices, the method comprising:detecting, by the storage array, an occurrence of a storage device evacuation event associated with one or more source physical storage devices that are functioning without an indication of failure, wherein the storage device evacuation event comprises a determination that at least one of the one or more source physical storage devices has a higher access latency than an available replacement;
responsive to detecting the occurrence of the storage device evacuation event, identifying, by the storage array, one or more target physical storage devices for receiving data stored on the one or more source physical storage devices;
invalidating, based on receiving one or more write operations directed to particular data stored on the one or more source physical storage devices, the particular data stored on the one or more source physical storage devices;
migrating valid data stored on the one or more source physical storage devices to the one or more target physical storage devices; and
reducing, by the storage array, write access to the one or more source physical storage devices including enabling read-only access to the one or more source physical storage devices that are functioning without an indication of failure.

US Pat. No. 10,540,307

PROVIDING AN ACTIVE/ACTIVE FRONT END BY COUPLED CONTROLLERS IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of providing an active/active front end by coupled controllers in a storage system, the method comprising:receiving, by a first storage array controller, an I/O (input/output) request; and
forwarding the I/O request to a second storage array controller utilizing one or more RDMA (‘Remote Direct Memory Access’) operations through a communication channel, wherein the first and second storage array controller are included as components of the same storage array.

US Pat. No. 10,261,690

SYSTEMS AND METHODS FOR OPERATING A STORAGE SYSTEM

Pure Storage, Inc., Moun...

1. A method of operating a storage system, comprising:determining a storage cluster among storage arrays of the storage system, wherein each storage array comprises at least two controllers and at least one storage shelf;
configuring the at least two controllers to function as both a primary controller for a first storage array and a secondary controller for a second storage array;
monitoring forwarded I/O requests; and
reducing a number of relay events for one or more I/O requests by reassigning at least one of the at least two controllers to handle a request that is assigned to another controller, responsive to the monitoring.

US Pat. No. 10,216,447

OPERATING SYSTEM MANAGEMENT FOR DIRECT FLASH OVER FABRIC STORAGE DEVICES

PURE STORAGE, INC., Moun...

1. A method of exposing a geometry of a storage device, the method comprising:sending, by the storage device, information describing the layout of memory in the storage device to a storage array controller associated with the storage device, wherein the information describing the layout of the memory in the storage device comprises a physical addressing scheme of the storage device;
receiving, by the storage device, a write request from the storage array controller, the write request associated with an amount of data sized in dependence upon the layout of memory in the storage device; and
writing, by the storage device, the data to a memory unit, the data written to a location within the memory unit in dependence upon the physical addressing scheme of the storage device.

US Pat. No. 10,180,879

INTER-DEVICE AND INTRA-DEVICE PROTECTION DATA

Pure Storage, Inc., Moun...

1. A computer system comprising:a plurality of storage devices coupled to a storage controller, wherein the storage controller is, for a given redundant array of independent drives (RAID) stripe, configured to:
generate intra-device protection data configured to protect user data that is stored beginning at a first offset within a first page of a first storage device of the plurality of storage devices; and
generate inter-device protection data configured to protect the intra-device protection data that is stored beginning at a second offset within a second page;
wherein the second offset is at a same position relative to the second page as the first offset is relative to the first page.

US Pat. No. 10,656,871

EXPANDING SLICE COUNT IN RESPONSE TO LOW-LEVEL FAILURES

PURE STORAGE, INC., Moun...

1. A method for execution by a computing device of a storage network, the method comprises:determining a memory device of the storage network has an issue, wherein a data segment of a data object is dispersed storage error encoded to produce a set of encoded data slices that is stored in a set of storage units of the storage network, wherein a storage unit of the set of storage units includes a plurality of memory devices, wherein the plurality of memory devices includes the memory device, and wherein the memory device stores an encoded data slice of the set of encoded data slices;
identifying sets of encoded data slices, wherein a first encoded data slice of each of the sets of encoded data slices is stored in the memory device;
generating at least one additional encoded data slice for each of the sets of encoded data slices to produce at least one group of encoded data slices; and
storing the at least one group of encoded data slices in at least one other memory device of the storage network.

US Pat. No. 10,445,179

SECURELY STORING DATA IN A DISPERSED STORAGE NETWORK

PURE STORAGE, INC., Moun...

1. A method for execution by a computing device in a dispersed storage network (DSN) comprising:storing a first plurality of sets of encoded data slices (EDSs) in a first set of storage units of a dispersed storage network (DSN), wherein the first plurality of sets of EDSs are stored in accordance with first dispersed storage error encoding parameters, and wherein the first plurality of sets of encoded data slices are associated with a first portion of a data object;
storing a second plurality of sets of EDSs in a second set of storage units of a dispersed storage network (DSN), wherein the second plurality of sets of EDSs are stored in accordance with second dispersed storage error encoding parameters, wherein at least one of the second dispersed storage error encoding parameters is different from the first dispersed storage error encoding parameters and wherein the second plurality of sets of encoded data slices are associated with a second portion of a data object;
determining whether one or more of the first dispersed storage error encoding parameters is to be changed, wherein the determining whether one or more of the first dispersed storage error encoding parameters is to be changed is based on at least one of analyzing a history of read performance, expiration of a time frame since the data object was stored and receiving a request;
in response to a determination that one or more of the first dispersed storage error encoding parameters is to be changed selecting one or more changes to the first dispersed storage error encoding parameters; and
applying the one or more changes to the first dispersed storage error encoding parameters.

US Pat. No. 10,447,767

RESOLVING A PERFORMANCE ISSUE WITHIN A DISPERSED STORAGE NETWORK

PURE STORAGE, INC., Moun...

1. A method for execution by one or more processing modules of one or more requesting devices of a dispersed storage network (DSN), the method comprises:when a DSN performance issue is detected that will affect a data access request, identifying a distributed storage unit (SU) of a set of distributed SUs of the DSN potentially contributing to the DSN performance issue, wherein a requesting device of the DSN sends a set of messages regarding the data access request to the set of SUs; and
for the SU:
determining a potential performance issue of the SU based on how the SU is potentially contributing to the DSN performance issue;
determining a performance test based on the potential performance issue;
generating a message that includes a protocol header and a payload, wherein the protocol header includes an indication to identify the message as a test request message and the payload includes test information specific for the SU to execute the performance test;
sending the message to the SU;
receiving, from the SU, a response message that includes a response header and a response payload, wherein the response header includes an indication to identify the response message as a test response message and the response payload includes a specific test result data generated based on the test information; and
determining, based on the specific test result data, whether the SU has the potential performance issue and is contributing to the DSN performance issue.

US Pat. No. 10,331,588

ENSURING THE APPROPRIATE UTILIZATION OF SYSTEM RESOURCES USING WEIGHTED WORKLOAD BASED, TIME-INDEPENDENT SCHEDULING

Pure Storage, Inc., Moun...

1. A method of ensuring the appropriate utilization of system resources using weighted workload based, time-independent scheduling, the method comprising:determining an amount of I/O requests that may be processed by the storage system in parallel;
determining, in dependence upon the amount of I/O requests that may be processed by the storage system in parallel, a weighted share of system resources for each entity of a plurality of entities associated with the system resources;
tracking, for each entity, the amount I/O requests processed for each entity during a time-independent period; and
crediting a resource utilization balance for each entity with the weighted share of system resources for each entity upon the expiration of the time-independent period.

US Pat. No. 10,228,865

MAINTAINING A TARGET NUMBER OF STORAGE DEVICES FOR VARIABLE I/O RESPONSE TIMES IN A STORAGE SYSTEM

Pure Storage, Inc., Moun...

7. A storage system configured for maintaining a target number of storage devices for variable I/O response times in a storage system, the storage system including a computer memory and a computer processor, the computer processor including computer program instructions that, when executed by the computer processor, cause the storage system to carry out the steps of:determining a number of storage devices in a storage system that are servicing high latency operations;
determining whether the number of storage devices in the storage system that are servicing high latency operations exceeds a predetermined target number of storage devices within the device group to simultaneously service high latency operations; and
responsive to determining that the number of storage devices in the storage system that are servicing high latency operations exceeds the predetermined target number of storage devices within the device group to simultaneously service high latency operations, halting execution of high latency operations on at least one of the storage devices.

US Pat. No. 10,108,355

ERASE BLOCK STATE DETECTION

Pure Storage, Inc., Moun...

1. A method for erasure detection in a storage cluster, performed by the storage cluster, comprising:establishing a connection, via a network, of a storage unit to one of a plurality of storage nodes of the storage cluster;
determining, for at least one page of a storage memory of the storage unit, that the at least one page is erased, wherein the storage unit is one of a plurality of storage units configured to store user data in memory of the storage units in accordance with direction from the plurality of storage nodes;
communicating from the storage unit to the one of the plurality of storage nodes that the at least one page is erased; and
bypassing error correction of the at least one page, responsive to determining that the at least one page is erased.

US Pat. No. 10,656,866

UNIDIRECTIONAL VAULT SYNCHRONIZATION TO SUPPORT TIERING

PURE STORAGE, INC., Moun...

1. A computing device comprising:an interface configured to interface and communicate with a dispersed or distributed storage network (DSN);
memory that stores operational instructions; and
processing circuitry operably coupled to the interface and to the memory, wherein the processing circuitry is configured to execute the operational instructions to:
select storage parameters for a multi-vault synchronization process from a first storage vault to a second storage vault, wherein the first storage vault includes a first plurality of storage units (SUs) within the DSN, wherein the second storage vault that includes a second plurality of SUs, wherein the first plurality of SUs distributedly stores one or more sets of ingestion encoded data slices (EDSs) that are generated, by a client module based on dispersed error encoding of at least a portion of an ingestion data stream in accordance with first dispersed error encoding parameters, wherein a data object of the at least a portion of an ingestion data stream is segmented into a plurality of data segments, wherein a data segment of the plurality of data segments is dispersed error encoded in accordance with the first dispersed error encoding parameters to produce a set of ingestion EDSs of the one or more sets of ingestion EDSs, wherein the second storage vault is not used for ingestion of encoded data slices generated by the client module;
select second dispersed error encoding parameters;
synchronize storage of the one or more sets of ingestion EDSs from the first storage vault to the second storage vault based on the second dispersed error encoding parameters;
in accordance with synchronization of the storage of the one or more sets of ingestion EDSs, maintain storage of the at least a portion of an ingestion data stream within the second storage vault and also within the first storage vault;
facilitate deletion of the one or more sets of ingestion EDSs corresponding to the at least a portion of an ingestion data stream from the first storage vault;
based on deletion of the one or more sets of ingestion EDSs corresponding to the at least a portion of an ingestion data stream from the first storage vault, provide an indication to not maintain further synchronization of the at least a portion of an ingestion data stream;
return the at least a portion of an ingestion data stream from the second storage vault to the first storage vault, wherein the first storage vault facilitates faster retrieval therefrom than the second storage vault; and
based on the ingestion data stream including at least one other portion, perform another multi-vault synchronization process from the first storage vault to the second storage vault for the at least one other portion of the ingestion data stream.

US Pat. No. 10,656,997

AUDIT OBJECT GENERATION IN A DISPERSED STORAGE NETWORK

PURE STORAGE, INC., Moun...

1. A method for execution by a storage processing unit that includes a processor, the method comprises:obtaining audit records for an audit object, each of the audit records corresponding to an audit message, each of the audit records identifying a storage network entity and each of the audit records including a time and date, and a type code selected from a plurality of type codes, wherein the plurality of type codes include a storage access event type code and an authentication audit event type code;
generating the audit object to include the audit records, system ID information, and integrity information; and
facilitating storage of the audit object in a storage network utilizing a corresponding name of the audit object.

US Pat. No. 10,628,182

GENERATION OF AN INSTRUCTION GUIDE BASED ON A CURRENT HARDWARE CONFIGURATION OF A SYSTEM

PURE STORAGE, INC., Moun...

1. A method comprising:receiving information identifying a current hardware configuration of a plurality of solid-state storage arrays of a storage system;
receiving information of a new hardware component that has not been installed, wherein the new hardware component comprises one of a solid-state storage array shelf or blade;
providing a graphical user interface (GUI) comprising an option to install the new hardware component in the storage system;
receiving an input corresponding to install the new hardware component with a selected solid-state storage array of the plurality of solid-state storage arrays;
in response to receiving the input corresponding to install the new hardware component with the selected solid-state storage array, determining, by a processing device, a plurality of actions to install the new hardware component with the current hardware configuration of the selected solid-state storage array wherein the plurality of actions correspond to a software upgrade for the selected solid-state storage array and a coupling of the new hardware component with another hardware component of the current hardware configuration of the selected solid-state storage array with a connector;
filtering the plurality of actions based on user preferences to remove one or more of the plurality of actions;
modifying the filtered plurality of actions based on preferences associated with the selected solid-state storage array to generate a modified plurality of actions;
generating a guide to install the new hardware component with the current hardware configuration of the selected solid-state storage array based on the modified plurality of actions;
causing display of the guide via the GUI;
causing each of the plurality of actions to be displayed in the guide via the GUI;
performing a configuration check of one of the plurality of solid-state storage arrays;
identifying an error associated with the configuration check of the one of the plurality of solid-state storage arrays;
determining another plurality of actions to correct the error;
generating another guide based on the determined another plurality of actions; and
causing display of the another guide via the GUI.

US Pat. No. 10,613,791

PORTABLE SNAPSHOT REPLICATION BETWEEN STORAGE SYSTEMS

Pure Storage, Inc., Moun...

1. A method of protecting data stored on a storage system through the use of different storage levels, the method comprising:creating a snapshot of a dataset stored on a storage system, wherein the snapshot includes user data and metadata, and wherein the metadata describes the storage layout of the dataset;
offloading the snapshot to a first storage level storage system; and
migrating, in accordance with a lifecycle policy, the snapshot from the first storage level storage system onto a second storage level storage system, wherein a copy of the metadata remains on the first storage level storage system after the snapshot is migrated from the first storage level storage system onto a second storage level storage system.

US Pat. No. 10,572,176

STORAGE CLUSTER OPERATION USING ERASURE CODED DATA

PURE STORAGE, INC., Moun...

1. A method of operating a storage unit, performed by the storage unit, comprising:receiving metadata from one of a plurality of storage nodes of a storage cluster;
writing the metadata into nonvolatile random-access memory (NVRAM) of the storage unit;
sending redundant copies of the metadata to further storage units, in the storage cluster;
receiving erasure coded data from the one of the plurality of storage nodes into the NVRAM; andwriting the erasure coded data from the NVRAM into solid-state storage memory of the storage unit.

US Pat. No. 10,469,406

PARTIAL TASK EXECUTION IN A DISPERSED STORAGE NETWORK

PURE STORAGE, INC., Moun...

1. A method for execution by a processing system of a dispersed storage and task (DST) execution unit that includes a processor, the method comprises: receiving a partial task with regards to a group of slices of data; receiving slices of the group of slices to produce received slices; determining when a threshold number of the received slices has been received; when the threshold number of the received slices has been received, sending the received slices to a disk drive for storage; determining whether or not to execute the partial task; when determined to execute the partial task: determining execution steps and a schedule; identifying a portion of the data for execution of one or more steps of the execution steps; retrieving the portion of the data from the disk drive; executing the one or more steps of the execution steps in accordance with the schedule on the portion of the data to produce a partial result; and dispersed storage error encoding the partial result to produce a plurality of sets of slices stored in a dispersed storage and task network (DSTN) in accordance with dispersal parameters associated with one or more of the group of slices and the partial task.