Hierarchically tagged cache
AssigneeNetApp, Inc.
InventorsGarth Goodson, Minglong Shao, Keith Smith
Life of this patent
Estimating the term…
Abstract
A hierarchically tagged cache provides abstraction between access requests for data and the cached data. The cache is managed by hierarchical layers of indexes including reference to the data. Access requests indicate a header for the requested data, which is associated with one of the layers. Cache management determines what layer is associated with the header, and can traverse the indexes, beginning at the layer associated with the header, to access the data. If the header does not exist at the index of that layer, it can be created. Indexes can be appropriately updated with indexes at each layer being referenced by one or more indexes of the layer higher up in the hierarchy.
Claims18
A method for cache management, comprising:
- identifying, by a cache device controller, a header of a received data access request as being associated with one of a filesystem layer, a physical mapping layer, or an indirection layer, where each layer is indicated with an indexing structure of headers and the indexing structure of each of the layers is in a cache corresponding to the cache device controller,
- wherein the cache device controller manages headers in the cache hierarchically, manages indexes of the physical mapping layer indexing structure to map to physical addresses for data buffers, manages indexes of the indirection layer indexing structure each to map to an index of the physical mapping layer, and manages indexes of the filesystem layer indexing structure each to map to an index of the indirection layer;
- and
- accessing the data buffer when an index includes the header, wherein accessing the data buffer comprises hierarchically traversing the indexes of the layers to a physical address for the data buffer, beginning at the index of the layer identified as being associated with the header, wherein the header comprises metadata when associated with either the filesystem layer or the indirection layer;
- when an index does not include the header, creating an entry, for the header, in the indexing structure of the layer identified as being associated with the header;
- maintaining a generation count for each data buffer, wherein for each data buffer the generation count is incremented each time the data buffer is evicted from the cache or each time the data buffer is used to hold a different data block;
- and
- maintaining a generation count in each index entry created that references a data buffer, wherein an index entry that has a generation count different from a generation count of the referenced data buffer is evicted.
A cache system comprising:
- a cache storage device to store multiple data buffers;
- and
- a cache controller to,
- manage access to the data buffers of the cache storage device, the cache controller to identify a header indicated in a data access request as being associated with one of a filesystem layer, a physical mapping layer, or an indirection layer, where each layer is indicated with an indexing structure of headers and the indexing structures are in the cache storage device,
- manage the headers hierarchically,
- manage indexes of the physical mapping layer indexing structure to map to physical addresses for data buffers,
- manage indexes of the indirection layer indexing structure each to map to an index of the physical mapping layer, and
- manage indexes of the filesystem layer indexing structure each to map to an index of the indirection layer,
- access a data buffer when one of the indexing structures includes the header, wherein the cache controller to access the data buffer comprises the cache controller to hierarchically traverse the indexes of the layers to a physical address for the data buffer, beginning at the index of the layer identified as being associated with the header, wherein the header comprises metadata when associated with either the filesystem layer or the indirection layer;
- and
- when an index does not include the header, create an entry, for the header, in the indexing structure of the layer identified as being associated with the header;
- maintain a generation count for each data buffer, wherein for each data buffer the generation count is incremented each time the data buffer is evicted from the cache or each time the data buffer is used to hold a different data block;
- and
- maintain a generation count in each index entry created that references a data buffer, wherein an index entry that has a generation count different from a generation count of the referenced data buffer is evicted.
A non-transitory computer-readable storage medium having program instructions stored thereon, the program instructions comprising program instructions to:
- identify a header of a received data access request as being associated with one of a filesystem layer, a physical mapping layer, or an indirection layer, where each layer is indicated with an indexing structure of headers and the indexing structure of each of the layers is in a cache of a computing device,
- manage headers in the cache hierarchically, manage indexes of the physical mapping layer indexing structure to map to physical addresses for data buffers, manage indexes of the indirection layer indexing structure each to map to an index of the physical mapping layer, and manage indexes of the filesystem layer indexing structure each to map to an index of the indirection layer;
- access the data buffer when an index includes the header, wherein the program instructions to access the data buffer comprise program instructions to hierarchically traverse the indexes of the layers to a physical address for the data buffer, beginning at the index of the layer identified as being associated with the header, wherein the header comprises metadata when associated with either the filesystem layer or the indirection layer;
- and
- when an index does not include the header, create an entry, for the header, in the indexing structure of the layer identified as being associated with the header;
- maintain a generation count for each data buffer, wherein for each data buffer the generation count is incremented each time the data buffer is evicted from the cache or each time the data buffer is used to hold a different data block;
- and
- maintain a generation count in each index entry created that references a data buffer, wherein an index entry that has a generation count different from a generation count of the referenced data buffer is evicted.
Dependencies are inferred from the claim text.