IP Library Granted Patent US 8,806,154
Granted Patent B1
US 8,806,154 · App. 13/168,886 · Granted Aug 12, 2014

Thin provisioning row snapshot with reference count map

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,806,154
App. No.
13/168,886
Granted
Aug 12, 2014
Kind
B1
Abstract

The storage of single or multiple references of the same data block in a storage pool is disclosed. Indexing of the data includes storing reference information in the storage pool as a mapping table. The mapping table indexes each data block in the storage pool. On any read or write request mapping information is used to retrieve the corresponding data block in storage pool.

Claims (110)

1. A method for scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, comprising:

forming a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content;

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks;

wherein the reference chunks are updatable to store indexing information for redirect on write snapshots of the virtual volume; and

wherein the set of reference chunks stores:

a reference count map maintained as a set of contiguous storage pool chunks, the reference count map referencing all the storage chunks in a virtual volume including usage information on storage chunks used more than once including a usage count of each storage chunk, the usage count tracking free and allocated storage chunks and the number of times a storage chunk is referenced; and

a reference count of chunks referred to by any redirect on write snapshots of the virtual volume.

2. The method of claim 1 , wherein the reference chunks store a representation of a radix tree to index each storage chunk and the usage of each chunk.

3. The method of claim 1 , wherein the set of reference chunks further stores:

a reference count of chunks referred to by the virtual volume; and

a reference count of chunks referred to by clones of the virtual volume.

4. The method of claim 1 , wherein the set of contiguous storage pool chunks are disposed at one end of the storage pool or on an external storage device.

5. The method of claim 1 , wherein the reference count map is cached for faster access.

6. The method of claim 1 , wherein the reference count map provides index information for allocating a group of storage pool chunks which can be used by any number of virtual volumes.

7. The method of claim 1 , further comprising maintaining a circular buffer of pre-allocated chunks and storing the circular buffer onto the persistent storage.

8. The method of claim 7 , further comprising reading the circular buffer, the circular buffer saving the chunk allocations for each entry in the circular buffer when it was stored on persistent storage.

9. The method of claim 1 , wherein the maximum amount of potential storage space allocated to users is greater than the physical storage capacity of the storage pool and storage space is allocated on demand based on actual usage.

10. A method for scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, comprising:

forming a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content; and

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks, wherein the set of reference chunks stores a reference count map referencing all of the storage pool chunks in the storage pool, the reference chunks including a usage count of each storage chunk, the usage count tracking free and allocated storage chunks and wherein the reference count map assigns a set of bits in each reference chunk as a bitset to store a usage count of each storage chunk associated with a particular reference chunk to indicate when an individual storage chunk is allocated and referred to by more than one volume or snapshot.

11. The method of claim 10 , wherein a usage count is maintained for each storage chunk, the method further comprising:

incrementing the usage count of a chunk on snapshot creation;

decrementing the usage count of a chunk on snapshot or virtual volume deletion; and

decrementing the usage count of a shared chunk on update.

12. A method for scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, comprising:

forming a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content; and

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks, wherein the set of reference chunks stores a reference count map referencing all of the storage pool chunks in the storage pool, the reference chunks including a usage count of each storage chunk, the usage count tracking free and allocated storage chunks and wherein each reference count chunk in the reference map indexes a set of storage chunks, the method further comprising:

in response to allocation of a chunk, scanning a reference count map bitset in a first reference count chunk to identify the address of a freely available chunk in the storage pool;

responsive to determining that the scanned reference count chunk does not have any free bitset available, sequentially scanning subsequent reference count chunks to identify the first freely available bitset and marking the bitset to identify a new chunk allocation.

13. A method for scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, comprising:

forming a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content;

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks; and

logging a reference count change in a logging string, comprising:

an address of a reference count chunk;

an offset of a storage pool chunk within a reference count chunk;

a previous reference count; and

a new reference count.

14. A method for scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, comprising:

forming a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content; and

wherein the reference chunks having a sequential order and the reference chunks comprise a reference count map including:

a reference count of chunks referred to by the virtual volume;

a reference count of chunks referred to by clones of the virtual volume; and

a reference count of chunks referred to by any redirect on write snapshots of the virtual volume.

15. The method of claim 14 , wherein the reference count map further comprises a usage count of chunks referred to more than once.

16. The method of claim 14 , further comprising:

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks.

17. A storage server to provide thin provisioning of storage, comprising:

at least one interface for the storage server to access storage devices;

at least one processor and a memory having computer program code which when executed on the processor is operative to perform scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, including:

generating a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content; and

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks;

wherein the set of reference chunks stores a reference count map referencing all of the storage pool chunks in the storage pool, the reference chunks including a usage count of each storage chunk, the usage count tracking free and allocated storage chunks; and

wherein the reference count map assigns a set of bits in each reference chunk as a bitset to store a usage count of each storage chunk associated with a particular reference chunk to indicate when an individual storage chunk is allocated and referred to by more than one volume or snapshot.

18. The storage server of claim 17 , wherein the reference chunks store a representation of a radix tree to index each storage chunk and the usage of each chunk.

19. The storage server of claim 17 , wherein the scalable indexing further comprises: updating reference chunks to store indexing information for redirect on write snapshots of the virtual volume.

20. The storage server of claim 17 , wherein the set of reference chunks stores: a reference count map referencing all the storage chunks in a virtual volume including usage information on storage chunks used more than once.

21. The storage server of claim 17 , wherein the set of reference chunks further stores:

a reference count of chunks referred to by the virtual volume;

a reference count of chunks referred to by clones of the virtual volume; and

a reference count of chunks referred to by any redirect on write snapshots of the virtual volume.

22. The storage server of claim 17 , wherein the storage server includes a set of interfaces for file based access and block based access of storage devices.

23. The storage server of claim 17 , wherein the storage server is a Unified Storage Server (USS).

24. The storage server of claim 22 , wherein the scalable indexing further comprises: updating reference chunks to store indexing information for redirect on write snapshots of the virtual volume.

25. The storage server of claim 24 , wherein the set of reference chunks stores:

a reference count map referencing all the storage chunks in a virtual volume including usage information on storage chunks used more than once.

26. The storage server of claim 24 , wherein the set of reference chunks further stores:

a reference count of chunks referred to by the virtual volume;

a reference count of chunks referred to by clones of the virtual volume; and

a reference count of chunks referred to by any redirect on write snapshots of the virtual volume.

27. A storage server to provide thin provisioning of storage, comprising:

at least one interface for the storage server to access storage devices;

at least one processor and a memory having computer program code which when executed on the processor is operative to perform scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, including:

generating a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content; and

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks;

wherein the set of reference chunks stores a reference count map referencing all of the storage pool chunks in the storage pool, the reference chunks including a usage count of each storage chunk, the usage count tracking free and allocated storage chunks and wherein each reference count chunk in the reference map indexes a set of storage chunks, the method further comprising:

in response to allocation of a chunk, scanning a reference count map bitset in a first reference count chunk to identify the address of a freely available chunk in the storage pool;

responsive to determining that the scanned reference count chunk does not have any free bitset available, sequentially scanning subsequent reference count chunks to identify the first freely available bitset and marking the bitset to identify a new chunk allocation.

28. A storage server to provide thin provisioning of storage, comprising:

at least one interface for the storage server to access storage devices;

at least one processor and a memory having computer program code which when executed on the processor is operative to perform scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, including:

generating a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content;

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks; and

logging a reference count change in a logging string, comprising:

an address of a reference count chunk;

an offset of a storage pool chunk within a reference count chunk;

a previous reference count; and

a new reference count.

29. A method for scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, comprising:

forming a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content;

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks;

wherein the set of reference chunks stores:

a reference count map maintained as a set of contiguous storage pool chunks disposed at one end of the storage pool or on an external storage device, the reference count map referencing all the storage chunks in a virtual volume including usage information on storage chunks used more than once including a usage count of each storage chunk.

30. The method of claim 29 , wherein the reference chunks store a representation of a radix tree to index each storage chunk and the usage of each chunk.

31. The method of claim 29 , wherein the reference chunks are updatable to store indexing information for redirect on write snapshots of the virtual volume.

32. The method of claim 29 , wherein the reference count map includes a usage count of each storage chunk, the usage count tracking free and allocated storage chunks and the number of times a storage chunk is referenced.

33. The method of claim 29 , wherein the reference count map includes a reference count of chunks referred to by any redirect on write snapshots of the virtual volume.

34. A method for scalable indexing of a storage pool formed from multiple storage units in which backup information is recorded, comprising:

forming a virtual volume in which the combined storage capacity of the storage pool is represented by a set of chunks have a pre-selected data size with the chunks being assigned to be either storage chunks or reference chunks;

storing in a set of reference chunks metadata information to index the storage chunks and track usage of storage chunks, wherein storage chunks are allocated on demand and are referable more than once to reduce redundant storage for identical content;

adjusting the total number of chunks and a chunk allocation in response to a change in the size of the available physical storage to include a sufficient number of reference chunks to index all of the storage chunks;

wherein the reference chunks having a sequential order and the reference chunks comprise a reference count map referencing all of the storage pool chunks in the storage pool, the reference chunks including a usage count of each storage chunk, the usage count tracking free and allocated storage chunks.

Assignments (9)
CHANGE OF NAME Recorded May 5, 2026
From: CHELSIO COMMUNICATIONS, INC.
To: SPEEDNIC LLC
Reel/Frame 075561/0001 →
RELEASE OF SECURITY INTEREST Recorded Dec 26, 2025
From: CSNK WORKING CAPITAL FINANCE CORP.
To: CHELSIO COMMUNICATIONS, INC.
Reel/Frame 074070/0784 →
RELEASE OF SECURITY INTEREST Recorded Dec 18, 2025
From: WESTERN ALLIANCE BANK, AN ARIZONA CORPORATION
To: CHELSIO COMMUNICATIONS, INC.
Reel/Frame 073264/0525 →
CORRECTIVE ASSIGNMENT TO CORRECT THE THE FIRST PAGE OF THE INTELLECTUAL PROPERTY SECURITY AGREEMENT HAS AN INCORRECT DATE THAT NEEDS TO BE CORRECTED PREVIOUSLY RECORDED ON REEL 050050 FRAME 0396. ASSIGNOR(S) HEREBY CONFIRMS THE SECURITY INTEREST. Recorded Aug 15, 2019
From: CHELSIO COMMUNICATIONS, INC.
To: WESTERN ALLIANCE BANK, AN ARIZONA CORPORATION
Reel/Frame 050112/0234 →
SECURITY INTEREST Recorded Aug 14, 2019
From: CHELSIO COMMUNICATIONS, INC.
To: WESTERN ALLIANCE BANK, AN ARIZONA CORPORATION
Reel/Frame 050050/0396 →
RELEASE OF SECURITY INTEREST Recorded Apr 25, 2017
From: NOVIRIAN CAPITAL
To: CHELSIO COMMUNICATIONS, INC.
Reel/Frame 042142/0232 →
SECURITY INTEREST Recorded Jul 29, 2016
From: CHELSIO COMMUNICATIONS, INC.
To: NOVIRIAN CAPITAL
Reel/Frame 039296/0550 →
SECURITY INTEREST Recorded Oct 21, 2014
From: CHELSIO COMMUNICATIONS, INC.
To: SILICON VALLEY BANK
Reel/Frame 033990/0451 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 8, 2011
From: GUPTA, ATUL; MAHABALAGIRI, UMASHANKAR TUMARI; RANGAYYAN, VISHNU
To: CHELSIO COMMUNICATIONS, INC.
Reel/Frame 026565/0365 →