Systems and methods for instantaneous cloning
First Claim
Patent Images
1. A method comprising:
- storing a writeable data object in a non-persistent memory of a storage system;
cloning the writeable data object in the non-persistent memory without having to wait until the writeable data object is saved to a persistent storage and without having to pause incoming write operations on the writeable data object during said cloning; and
whereby cloning without having to pause the incoming write operations comprises;
receiving a client request for a write operation at the storage system to modify a first dirty portion of an in-memory version of a data object represented by a first reference pointer tree;
marking a node in the first reference pointer tree as a dirty node, wherein the dirty node represents the first dirty portion;
allocating a replacement pointer for the dirty node in response to receiving the client request, wherein allocating the replacement pointer includes allocating the replacement pointer from a per-processor cache bucket, the per-processor cache bucket including freed reference pointers spatially co-located in a reference pointer space of the storage system; and
creating a first clone of the data object, the first clone represented by a second reference pointer tree, the second reference pointer tree having the replacement pointer as a node.
1 Assignment
0 Petitions
Accused Products
Abstract
Techniques to clone a writeable data object in non-persistent memory are disclosed. The writeable data object is stored in a storage structure in non-persistent memory that corresponds to a portion of a persistent storage. The techniques enable cloning of the writeable data object without having to wait until the writeable data object is saved to the persistent storage and without needing to quiesce incoming operations (e.g., reads and writes) to the writeable data object.
-
Citations
18 Claims
-
1. A method comprising:
-
storing a writeable data object in a non-persistent memory of a storage system; cloning the writeable data object in the non-persistent memory without having to wait until the writeable data object is saved to a persistent storage and without having to pause incoming write operations on the writeable data object during said cloning; and whereby cloning without having to pause the incoming write operations comprises; receiving a client request for a write operation at the storage system to modify a first dirty portion of an in-memory version of a data object represented by a first reference pointer tree; marking a node in the first reference pointer tree as a dirty node, wherein the dirty node represents the first dirty portion; allocating a replacement pointer for the dirty node in response to receiving the client request, wherein allocating the replacement pointer includes allocating the replacement pointer from a per-processor cache bucket, the per-processor cache bucket including freed reference pointers spatially co-located in a reference pointer space of the storage system; and creating a first clone of the data object, the first clone represented by a second reference pointer tree, the second reference pointer tree having the replacement pointer as a node. - View Dependent Claims (2, 3)
-
-
4. A method comprising:
-
receiving a client request for a write operation at a storage system to modify a first dirty portion of an in-memory version of a data object represented by a first reference pointer tree; marking a node in the first reference pointer tree as a dirty node, wherein the dirty node represents the first dirty portion; allocating a replacement pointer for the dirty node in response to receiving the client request without having to wait until the in-memory version of the data object is saved to persistent storage, wherein allocating the replacement pointer includes allocating the replacement pointer from a per-processor cache bucket, the per-processor cache bucket including freed reference pointers spatially co-located in a reference pointer space of the storage system; creating a first snapshot of the data object, the first snapshot represented by a second reference pointer tree, the second reference pointer tree having the replacement pointer as a node; and re-allocating the per-processor cache bucket, when the cache bucket is fully used, by determining co-located reference pointers from a pointer reference count metadata file. - View Dependent Claims (5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
-
-
16. A storage server system comprising:
-
a persistent storage device including a persistent storage image of a data object; a processor configured to store, in a non-persistent memory, an in-memory version of the data object represented by a first reference pointer tree, wherein a first dirty portion of the in-memory version is different from the persistent storage image and the first dirty portion is represented by a dirty node in the first reference pointer tree; a front-end allocation module configured to allocate a replacement pointer for the dirty node in response to a client request to make the in-memory version different from the persistent storage image without having to wait until the in-memory version of the data object is saved to persistent storage, wherein the front-end allocation module is configured to allocate the replacement pointer from a per-processor cache bucket, the per-processor cache bucket including freed reference pointers spatially co-located in a reference pointer space of the storage system and wherein the front-end allocation module is configured to re-allocate the per-processor cache bucket, when the cache bucket is fully used, by determining co-located reference pointers from a pointer reference count metadata file; and a snapshot module configured to create a first snapshot of the data object represented by a second reference pointer tree having the replacement pointer as a node in the second reference pointer tree. - View Dependent Claims (17, 18)
-
Specification