TECHNICAL FIELD

The present disclosure relates generally to intelligent data storage systems that cache received user data, and more specifically to technology for sharing blocks of non-volatile data storage to support cache flushes in a multi-node data storage system.

BACKGROUND

Multi-node data storage systems are arrangements of hardware and software that include multiple nodes, sometimes referred to as storage processors, that are coupled to a shared set of non-volatile data storage drives, such as solid state drives and/or magnetic disk drives. In some multi-node data storage systems, multiple nodes may simultaneously be “active”, in that they concurrently service host I/O requests received from physical and/or virtual host machines (“hosts”). The host I/O requests received and processed by a node may specify one or more storage objects (e.g. logical units (“LUNs”), and/or files etc.) that are hosted by the storage system and store user data that is written and/or read by the hosts. Each node independently executes software that processes host I/O requests and performs various data processing tasks to organize and store user data received from the hosts in the shared non-volatile data storage drives.

While processing host I/O requests that write user data to the shared non-volatile data storage, each node initially stores the user data indicated by the requests it processes into a cache contained within the node, before the user data is subsequently flushed from the cache and stored into the shared non-volatile data storage drives. Successful storage of user data into a node's cache may enable the data storage system to promptly acknowledge successful completion of corresponding host I/O write requests. Storing user data into the cache of a node may further enable the data storage system to service subsequently received host I/O read requests directed to the same data without delays caused by accessing the shared non-volatile data storage drives of the data storage system. User data stored in cache is moved to the shared non-volatile data storage drives of the data storage system by flush operations performed by the node that contains the specific cache being flushed.

Pages of user data stored in cache are considered dirty when they contain user data that has not yet been stored into the shared non-volatile data drives of the data storage system. Dirty pages are flushed from each node's cache to pages of the shared non-volatile data storage. The pages of non-volatile data storage are contained within larger physical blocks of non-volatile data storage. Physical blocks containing the pages of non-volatile data storage that can be used to store dirty pages of host data flushed from the cache of each node may be organized into sets of physical blocks.

SUMMARY

In some previous data storage systems, in order to avoid multiple nodes contending for the same physical blocks of non-volatile data storage to store the dirty pages flushed from their respective individual caches, specific sets of physical blocks were statically reserved for use by corresponding individual nodes. For example, in some previous data storage systems having two nodes, all sets of physical blocks associated with even number identifiers were statically assigned to a first one of the two nodes, and then used exclusively for storing dirty pages flushed from that node's cache, and all sets of physical blocks associated with odd number identifiers were statically assigned to a second one of the two nodes, and then used exclusively for storing dirty pages flushed from that node's cache. Such static assignment of sets of physical blocks to specific individual nodes is inflexible and inefficient, and undesirable from the perspective of optimal system resource utilization under multiple different and/or dynamically changing operational conditions.

To address the above described and/or other shortcomings of previous technologies, new technology is disclosed herein that maintains, for each node in a multi-node data storage system, an allocation history indicating sets of physical blocks previously allocated to the node to store dirty pages of user data flushed from a cache of the node. The allocation history maintained for each node indicates a number of non-quarantined sets of physical blocks that are currently allocated to the node and that are currently being used to provide non-volatile data storage to cache flush operations that store dirty pages of user data flushed from the cache of the node. The allocation history for each node also indicates a number of quarantined sets of physical blocks that are no longer allocated to the node, and that are also not currently being used to provide non-volatile data storage to cache flush operations that store dirty pages of user data flushed from the cache of the node. The disclosed technology processes requests from the nodes of the multi-node data storage system for allocation of sets of physical blocks to store dirty pages of user data flushed from their caches by reading all the allocation histories maintained by the nodes of the multi-node data storage system, and then preventing allocation of any sets of physical blocks that are indicated as non-quarantined by any of the allocation histories, and also preventing allocation of any sets of physical blocks that are indicated as quarantined by any of the allocation histories. In this way, only sets of physical blocks are allocated that are both not being used to provide non-volatile data storage to cache flush operations that store dirty pages of data flushed from the cache of any node, and that are also no longer indicated as currently being quarantined by the allocation history of any node.

In some embodiments, each node in the multi-node data storage system initially indicates, in its allocation history, that each set of physical blocks that is allocated to the node to provide non-volatile data storage to store dirty pages of user data flushed from the cache of the node is non-quarantined at the time the set of physical blocks is allocated to the node.

In some embodiments, each node in the multi-node data storage system modifies its allocation history to indicate that each individual set of physical blocks previously allocated to the node to provide non-volatile data storage to store dirty pages of user data flushed from the cache of the node is quarantined instead of non-quarantined prior to removing the indication of that set of physical blocks from its allocation history.

In some embodiments, each node in the multi-node data storage system modifies its allocation history to indicate that an individual set of physical blocks previously allocated to the node to provide non-volatile data storage to store dirty pages of user data flushed from the cache of the node is quarantined instead of non-quarantined responsive to the node having used all of the free physical blocks contained in the set of physical blocks to store dirty pages of user data flushed from the cache of the node.

In some embodiments, the allocation history of each node in the multi-node data storage system includes a first set of entries storing indications of the non-quarantined sets of physical blocks that are currently allocated to the node and are currently being used to provide non-volatile data storage to store dirty pages of user data flushed from the cache of the node. In such embodiments, the allocation history of each node in the multi-node data storage system also includes a second set of entries storing indications of the quarantined sets of physical blocks that are no longer allocated to the node and are not currently being used to provide non-volatile data storage to cache flush operations that store dirty pages of user data flushed from the cache of the node.

In some embodiments, each node in the multi-node data storage system initially indicates in its allocation history that each set of physical blocks that is allocated to the node to provide non-volatile data storage to store dirty pages of user data flushed from the cache of the node is non-quarantined at the time the set of physical blocks is allocated to the node by initially storing an indication of each set of physical blocks that is allocated to the node to provide non-volatile data storage to store dirty pages of user data flushed from the cache of the node within the first set of entries in its allocation history at the time the set of physical blocks is allocated to the node.

In some embodiments, each node in the multi-node data storage system modifies its allocation history to indicate that each set of physical blocks previously allocated to the node to provide non-volatile data storage to store dirty pages of user data flushed from the cache of the node is quarantined prior to removing the indication of the set of physical blocks from its allocation history by moving the indication of the set of physical blocks from the first set of entries in the allocation history of the node to the second set of entries in the allocation history of the node prior to removing the indication of the set of physical blocks from the allocation history of the node.

In some embodiments, each node in the multi-node data storage system delays removal of an individual indication of a set of physical blocks stored in the second set of entries in the allocation history of the node from the second set of entries in the allocation history of the node until after detecting that a predetermined number of indications of other sets physical blocks have been moved from the first set of entries in the allocation history of the node to the second set of entries in the allocation history of the node after the indication of the set of physical blocks was moved to the second set of entries in the allocation history of the node from the first set of entries in the allocation history of the node. In this way, the disclosed technology may prevent the allocation of a set of physical blocks that was previously allocated to a node to any other node until after a period of time has expired during which the set of physical blocks is indicated as quarantined. The period of time during which the set of physical blocks is quarantined may be equal to an amount of a time elapsed after the indication of the set of nodes was moved to the second set of entries in the allocation history of the node, during which free non-volatile data storage contained in some predetermined number of other sets of physical blocks was subsequently completely consumed by the node, resulting in those other sets of physical blocks becoming quarantined, such that the indications of those other sets of physical blocks were moved to the second set of entries in the allocation history of the node.

Embodiments of the disclosed technology may provide significant advantages over previous technologies. For example, by supporting the allocation of sets of physical blocks to any one of the multiple nodes in a multi-node data storage system, in order to store dirty pages of user data flushed from their node-specific caches, the disclosed technology eliminates the need for static assignment of sets of physical blocks to specific individual nodes. As a result, the disclosed technology is flexible and efficient, and advantageous in terms of optimal system resource utilization under multiple different and/or dynamically changing operational conditions. In another example of a potential advantage, the disclosed technology may prevent a set of physical data blocks from being reallocated until after the non-volatile data storage in the set of physical blocks has been consumed and after the set of physical blocks has been quarantined. This allows cache flush operations using the non-volatile data storage provided from the set of physical blocks to complete before the set of physical blocks is reallocated, thus avoiding contention for non-volatile data storage within the set of physical blocks between nodes. By delaying the reallocation of a set of physical blocks from a node to any other node until after the set of physical blocks has been quarantined for some period time after the node stops providing the non-volatile data storage from the set of the set of physical blocks to cache flush operations that store dirty pages of user data that are flushed from its cache, the disclosed technology may prevent the reallocation of the set of physical blocks until after the completion of such outstanding cache flush operations that are currently using the non-volatile data storage previously provided from the set of physical blocks.

