Method, apparatus and product for data cloning in a memory-based file systems. A content of each object of the file system is retained in data units and represented using a tree of the nodes comprising tree nodes and leaf nodes. The file system utilizes a volatile resource usage collection and volatile reference counters for each node of the nodes. In response to mounting the file system, a storage retaining a file system metadata is scanned to compile the volatile resource usage collection and the volatile reference counters. In response to a determination to reuse a pointed node of a tree of an object by a pointing node, a volatile reference counter of the pointed node is updated and the pointing node is atomically set, using a single instruction, to point to the pointed node.
Legal claims defining the scope of protection, as filed with the USPTO.
1. A computer program product comprising: a non-transitory computer readable storage medium retaining program instructions for implementing a file system, wherein content of an object of the file system is retained in data units, a portion of the data units stored at a persistent memory that stores the file system, wherein the object is represented by a tree structure stored at the persistent memory with tree nodes and leaf nodes, the file system mapped to an address space of the persistent memory to directly access the tree structure and the portion of the data units; wherein each tree node points to another node of the tree structure and one of the leaf nodes points to at least one data unit used to retain content for the object; wherein the file system utilizes a volatile resource usage collection and volatile reference counters for tracking usage of each node of the tree structure; wherein said program instructions when executed by a processor, cause the processor to: in response to mounting the file system, scan the mapped address space of the persistent memory retaining file system metadata to compile the volatile resource usage collection indicating data units that are available for use and data units that are allocated by the file system to store content for the object, and the volatile reference counters associated with each used node of the tree structure indicating a number of nodes that reference each used node; and in response to a determination to reuse a pointed node of the tree structure by a pointing node: update a volatile reference counter of the pointed node in a single instruction without a lock; upon update of the volatile reference counter of the pointed node, atomically set, using a single instruction to point to the pointed node by the pointing node, without employing a lock and without using a transaction log by the file system; and free a node of the tree structure based on the reuse.
2. An apparatus comprising: a persistent storage retaining data units for storing content for an object used by a file system, wherein the object is represented by a tree structure with tree nodes and leaf nodes; wherein each tree node points to another node of the tree structure and one of the leaf nodes points to at least one data unit used to retain content for the object wherein said persistent storage comprising a Byte-addressable persistent memory, wherein said Byte-addressable persistent memory is configured to retain at least a portion of the data units used by the file system, wherein said Byte-addressable persistent memory retaining the tree structure; a processor, wherein said processor is configured to scan said Byte-addressable persistent memory to compile a volatile resource usage collection indicating data units that are available for use and data units that are allocated by the file system to store content for the object, and volatile reference counters of the nodes that track usage of each node of the tree structure; wherein said processor is configured, in response to a determination to reuse a pointed node of the tree structure of the object by a pointing node, to: update a volatile reference counter of the pointed node in a single instruction without a lock; upon update of the volatile reference counter of the pointed node, atomically set, by a single instruction, the pointing node to point to the pointed node, without employing a lock and without using a transaction log by the file system; and free a node of the tree structure based on the reuse.
3. A method, comprising: representing an object of a file system by a tree structure with tree nodes and leaf nodes stored at a persistent memory; wherein content of an object used by the file system is retained in data units, a portion of the data units stored at the persistent memory with the file system; wherein each tree node points to another node of the tree structure and one of the leaf nodes points to at least one data unit associated with the object; wherein the file system is mapped to an address space of the persistent memory to directly access the tree structure and the portion of the data units wherein the file system utilizes a volatile resource usage collection and volatile reference counters for tracking usage of each node of the tree structure; in response to mounting the file system, scanning the mapped address space of the persistent memory retaining file system metadata to compile the volatile resource usage collection for indicating data units that are available for use and data units that are allocated by the file system to store content for the object, and the volatile reference counters associated with each used node of the tree structure indicating a number of nodes that reference each used node; and in response to a determination to reuse a pointed node of the tree structure by a pointing node: updating a volatile reference counter of the pointed node; upon updating a volatile reference counter, atomically setting, using a single instruction to point to the pointed node by the pointing node, without employing a lock and without using a transaction log by the file system; freeing a node of the tree structure based on the reuse.
4. The computer program product of claim 1 , wherein at least a portion of the data units are memory pages retained in the persistent memory that is Byte-addressable.
5. The computer program product of claim 1 , wherein the volatile resource usage collection comprises a list of data units associated with the file system that are unallocated and allocated.
6. The computer program product of claim 1 , wherein said program instruction, further cause the processor to: in response to an instruction to modify a content of a second object of the file system: compute a path in the tree structure of the second object to update the content; identify a second pointed node in the path having a volatile reference counter with a value greater than one, wherein a second pointing node points to the second pointed node, whereby identifying a sub-tree rooted at the second pointed node; create a clone sub-tree of the sub-tree; upon creating the clone sub-tree, atomically modify, using a single instruction, the second pointing node to point to a first node of the clone sub-tree instead of pointing to the second pointed node; and update the volatile reference counter of the second pointed node to decrease by one.
7. The computer program product of claim 1 , wherein said updating the volatile reference counter and said atomically setting the pointing node are executed separately in separate atomic operations.
8. The apparatus of claim 2 , wherein said atomically setting is performed using a single atomic instruction in an instruction set of said processor.
9. The apparatus of claim 2 , wherein said persistent storage comprises a second storage device, wherein the file system is a multi-tier file system comprising a first tier and a second tier, wherein the first tier is retained in said Byte-addressable persistent memory, wherein the second tier is retained in said second storage device.
10. The apparatus of claim 2 , wherein the volatile resource usage collection comprises a list of data units or nodes associated with the file system that are unallocated.
11. The apparatus of claim 2 , wherein the volatile resource usage collection comprises a list of data units or nodes associated with the file system that are allocated.
12. The apparatus of claim 2 , wherein said processor is configured, in response to an instruction to modify a content of a second object, to: compute a path in the tree structure of the second object to update the content; identify a second pointed node in the path having a volatile reference counter with a value greater than one, wherein a second pointing node points to the second pointed node, and a sub-tree rooted at the second pointed is identified; create a clone sub-tree of the sub-tree; upon creating the clone sub-tree, atomically modify, using a single instruction, the second pointing node to point to a first node of the clone sub-tree instead of pointing to the second pointed node; and update the volatile reference counter of the second pointed node to decrease by one.
13. The method of claim 3 , wherein at least a portion of the data units are memory pages retained in the persistent memory that is Byte-addressable.
14. The computer program product of claim 4 , wherein the file system is a multi-tier file system comprising a first tier and a second tier, wherein the first tier is retained in the Byte-addressable persistent memory, wherein the second tier is a different storage from the Byte-addressable persistent memory.
15. The apparatus of claim 9 , wherein said second storage device is a block-based storage device.
16. The method of claim 13 , wherein the file system is a multi-tier file system comprising a first tier and a second tier, wherein the first tier is retained in the Byte-addressable persistent memory, wherein the second tier is retained in a different storage from the Byte-addressable persistent memory.
17. The method of claim 13 , wherein the volatile resource usage collection comprises a list of data units associated with the file system that are unallocated and allocated to store content for the object.
18. The method of claim 13 , further comprising: in response to an instruction to modify a content of a second object of the file system: computing a path in the tree structure of the second object to update the content; identifying a second pointed node in the path having a volatile reference counter with a value greater than one, wherein a second pointing node points to the second pointed node for identifying a sub-tree rooted at the second pointed node; creating a clone sub-tree of the sub-tree; upon creating the clone sub-tree, atomically modifying using a single instruction, the second pointing node to point to a first node of the clone sub-tree instead of pointing to the second pointed node; and updating the volatile reference counter of the second pointed node to decrease by one.
19. The method of claim 13 , wherein the tree structure is an inode data structure stored at the persistent memory with the file system.
20. The method of claim 16 , wherein the different storage is a block-based storage device.
Cooperative Patent Classification codes for this invention. Click any code to explore related patents in that topic.
June 22, 2017
March 31, 2020
Browse 5M+ US patents with plain-English claim translations and AI-generated analysis.