IP Library Granted Patent US 9,858,300
Granted Patent B2
US 9,858,300 · App. 14/312,724 · Granted Jan 2, 2018

Hash based de-duplication in a storage system

Inventor: Yechiel Yochai (Moshav Aviel, IL)
Assignee: INFINIDAT LTD.
G06F17/30303G06F17/3033
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 9,858,300
App. No.
14/312,724
Granted
Jan 2, 2018
Kind
B2
Abstract

A method for de-duplication, the method may include receiving a request to store in a storage system a received data entity; obtaining a received data entity signature that is responsive to the received data entity; selecting a selected data structure out of a set of data structures that comprises K data structures; wherein K is a positive integer; wherein for each value of a variable k that ranges between 2 and K, a stored data entity signature that is stored in a k'th data structure out of the set collided with stored data entity signatures that are stored in each one of a first till (k−1)'th data structures of the set; calculating an index by applying, on the received data entity signature, a hash function that is associated with the selected data structure; determining whether an entry that is associated with the index and belongs to the selected data structure is empty; writing to the entry, if the entry is empty, the received data entity signature, and storing the received data entity in the storage system in response to a location of the entry in the set; selecting, if (a) the entry is not empty and (b) the received data entity signature differs from a stored data entity signature that is stored in the entry, a new data structure of the set, and repeating at least the stages of calculating and determining.

Claims (49)

1. A method for de-duplication, the method comprises:

receiving a request to store in a storage system a received data entity;

obtaining a received data entity signature that is responsive to the received data entity;

selecting a selected data structure out of a set of data structures that comprises multiple (K) data structures; wherein for each value of a variable k that ranges between 1 and K, each k'th data structure of the set is associated with a k'th hash function for producing indices for the k'th data structure; wherein for each value of the variable k that ranges between 2 and K, the k'th data structure includes stored data entity signatures that collided with stored data entity signatures that are stored in each one of a first till (k−1)'th data structures of the set when applying any of a first to (k−1)'th hash functions; wherein each data structure of the set comprises multiple entries for storing multiple data entity signatures, and wherein different data structures comprise different number of entries;

calculating an index by applying, on the received data entity signature, a hash function that is associated with the selected data structure; wherein the hash function is different from a hash function that produced the received data entity signature;

determining whether an entry that is associated with the index and belongs to the selected data structure is empty;

if the entry is empty: writing the received data entity signature to the entry; calculating a target address within an address space of the storage system, based at least on a location of the entry in the set, wherein the location of the entry in the set comprises the index and a value of the variable k that represents the selected data structure; and storing the received data entity at the target address; wherein each entry of the set does not store the target address, thereby reducing the size of the set; and

selecting, if (a) the entry is not empty and (b) the received data entity signature differs from a stored data entity signature that is stored in the entry, a new data structure of the set, and repeating at least the stages of calculating and determining.

2. The method according to claim 1 comprising preventing from storing the data entity in the storage system if (a) the entry is not empty and (b) the received data entity signature equals the stored data entity signature that is stored in the entry.

3. The method according to claim 1 wherein K repetition of the selecting of the selected data structure results in scanning the set, starting from a first data structure.

4. The method according to claim 1 wherein each entry of the set only stores a stored data entity signature of a received data entity that is associated with the entry.

5. The method according to claim 1 wherein the target address is a physical address and wherein the method comprising storing the received data entity at the physical address.

6. The method according to claim 1 wherein the target address is a virtual address and wherein the method comprising storing the received data entity at the virtual address.

7. The method according to claim 1 further comprising receiving a request to read a requested data entity that has a requested data entity signature;

selecting a selected data structure out of the set;

calculating an index by applying, on the requested data entity signature, a hash function that is associated with the selected data structure;

determining whether there is a match between (a) a stored data entity signature that is stored in an entry that is associated with the index and belongs to the selected data structure and (b) the requested data entity signature;

providing, if there is a match, a data entity that is associated with the entry;

selecting, if there is no match, a new data structure of the set and repeating at least the stages of calculating and determining.

8. A non-transitory computer readable medium that stores instructions that once executed by a computer causes the computer to perform the stages of:

receiving a request to store in a storage system a received data entity;

applying a certain hash function on the received data entity to provide a data entity signature;

selecting a selected data structure out of a set of data structures that comprises multiple (K) data structures; wherein for each value of a variable k that ranges between 1 and K, each k'th data structure of the set is associated with a k'th hash function for producing indices for the k'th data structure; wherein for each value of the variable k that ranges between 2 and K, the k'th data structure includes stored data entity signatures that collided with stored data entity signatures that are stored in each one of a first till (k−1)'th data structures of the set when applying any of a first to (k−1)'th hash functions; wherein each data structure of the set comprises multiple entries for storing multiple data entity signatures, and wherein different data structures comprise different number of entries;

calculating an index by applying, on the data entity signature, a hash function that is associated with the selected data structure; wherein the hash function is different from a hash function that produced the received data entity signature;

determining whether an entry that is associated with the index and belongs to the selected data structure is empty;

if the entry is empty: writing the received data entity signature to the entry; calculating a target address within an address space of the storage system, based at least on a location of the entry in the set, wherein the location of the entry in the set comprises the index and a value of the variable k that represents the selected data structure; and storing the received data entity in the storage system at the target address; wherein each entry of the set does not store the target address, thereby reducing the size of the set; and

selecting, if (a) the entry is not empty and (b) the received data entity signature differs from a stored data entity signature that is stored in the entry, a new data structure of the set, and repeating at least the stages of calculating and determining.

9. The non-transitory computer readable medium according to claim 8 that stores instructions for preventing from storing the data entity in the storage system if (a) the entry is not empty and (b) the received data entity signature equals the stored data entity signature that is stored in the entry.

10. The non-transitory computer readable medium according to claim 8 wherein K repetition of the selecting of the selected data structure results in scanning the set, starting from a first data structure.

11. The non-transitory computer readable medium according to claim 8 wherein each entry of the set only stores a stored data entity signature of a received data entity that is associated with the entry.

12. The non-transitory computer readable medium according to claim 8 that stores instructions for storing the received data entity at a physical address, wherein the target address is the physical address.

13. The non-transitory computer readable medium according to claim 8 that stores instructions for storing the received data entity at a virtual address, wherein the target address is the virtual address.

14. The non-transitory computer readable medium according to claim 8 that stores instructions for receiving a request to read a requested data entity that has a requested data entity signature;

selecting a selected data structure out of the set;

calculating an index by applying, on the requested data entity signature, a hash function that is associated with the selected data structure;

determining whether there is a match between (a) a stored data entity signature that is stored in an entry that is associated with the index and belongs to the selected data structure and (b) the requested data entity signature;

providing, if there is a match, a data entity that is associated with the entry;

selecting, if there is no match, a new data structure of the set and repeating at least the stages of calculating and determining.

15. A storage system, comprising:

a processor that is arranged to receive a request to store, in the storage system, a received data entity; obtain a received data entity signature that is responsive to the received data entity;

select a selected data structure out of a set of data structures; calculate an index by applying, on the received data entity signature, a hash function that is associated with the selected data structure, wherein the hash function is different from a hash function that produced the received data entity signature; determine whether an entry that is associated with the index and belongs to the selected data structure is empty; if the entry is empty: write, the received data entity signature to the entry, calculate a target address within an address space of the storage system, based at least on a location of the entry in the set, and assist in storing the received data entity at the target address; select, if (a) the entry is not empty and (b) the received data entity signature differs from a stored data entity signature that is stored in the entry, a new data structure of the set, and repeating at least the stages of calculating and determining; and

a memory for storing the set of data structures; wherein the set of data structures comprises multiple (K) data structures; wherein for each value of a variable k that ranges between 1 and K, each k'th data structure of the set is associated with a k'th hash function for producing indices for the k'th data structure; wherein for each value of the variable k that ranges between 2 and K, the k'th data structure includes stored data entity signatures that collided with stored data entity signatures that are stored in each one of a first till (k−1)'th data structures of the set when applying any of a first to (k−1)'th hash functions; wherein each data structure of the set comprises multiple entries for storing multiple data entity signatures, and wherein different data structures comprise different number of entries; wherein each entry of the set does not store the target address, thereby reducing the size of the set;

wherein the location of the entry in the set comprises the index and a value of the variable k that represents the selected data structure.

16. The storage system according to claim 15 wherein the processor is arranged to prevent a storing of the data entity in the storage system if (a) the entry is not empty and (b) the received data entity signature equals the stored data entity signature that is stored in the entry.

17. The storage system according to claim 15 wherein K repetition of the selecting of the selected data structure results in scanning the set, starting from a first data structure.

18. The storage system according to claim 15 wherein each entry of the set only stores a stored data entity signature of a received data entity that is associated with the entry.

19. The storage system according to claim 15 wherein the target address is a physical address and wherein the processor is arranged to store the received data entity at the physical address.

20. The storage system according to claim 15 wherein the target address is a virtual address and wherein the processor is arranged to store the received data entity at the virtual address.

21. The storage system according to claim 15 wherein the processor is further arranged to receive a request to read a requested data entity that has a requested data entity signature; selecting a selected data structure out of the set; calculate an index by applying, on the requested data entity signature, a hash function that is associated with the selected data structure; determine whether there is a match between (a) a stored data entity signature that is stored in an entry that is associated with the index and belongs to the selected data structure and (b) the requested data entity signature; provide, if there is a match, a data entity that is associated with the entry; select, if there is no match, a new data structure of the set and repeating at least the stages of calculating and determining.

Assignments (8)
SECURITY INTEREST Recorded Jan 30, 2025
From: INFINIDAT LTD
To: KREOS CAPITAL VII AGGREGATOR SCSP,
Reel/Frame 070056/0458 →
RELEASE OF SECURITY INTEREST IN IP RECORDED AT R/F 55653/0854 Recorded Jan 18, 2024
From: SILICON VALLEY BANK
To: INFINIDAT LTD.
Reel/Frame 066344/0064 →
SECURITY INTEREST Recorded Jan 11, 2024
From: INFINIDAT LTD
To: KREOS CAPITAL VI (EXPERT FUND) L.P.; KREOS CAPITAL 2020 OPPORTUNITY L.P.
Reel/Frame 066270/0359 →
SECURITY INTEREST Recorded Jan 10, 2024
From: INFINIDAT LTD
To: HSBC BANK PLC
Reel/Frame 066268/0584 →
RELEASE OF SECURITY INTEREST Recorded Mar 30, 2021
From: BANK LEUMI LE-ISRAEL B.M.
To: INFINIDAT LTD.
Reel/Frame 055776/0526 →
SECURITY INTEREST Recorded Mar 18, 2021
From: INFINIDAT LTD.
To: SILICON VALLEY BANK
Reel/Frame 055653/0854 →
SECURITY INTEREST Recorded Apr 12, 2018
From: INFINIDAT LTD.
To: BANK LEUMI LE-ISRAEL B.M.
Reel/Frame 045914/0276 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 25, 2014
From: YOCHAI, YECHIEL
To: INFINIDAT LTD.
Reel/Frame 033225/0708 →
Continuity (1)
Related Publication 20150370835A1 · Dec 24, 2015