IP Library Granted Patent US 11,593,327
Granted Patent B2
US 11,593,327 · App. 17/038,814 · Granted Feb 28, 2023

Segmented index for data deduplication

Inventor: Nickolay Dalmatov (Saint Petersburg, RU)
Assignee: EMC IP Holding Company LLC
G06F16/215G06F16/22
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 11,593,327
App. No.
17/038,814
Granted
Feb 28, 2023
Kind
B2
Abstract

A deduplication index is generated having multiple entries, each entry storing a digest of a data block that was previously stored in non-volatile data storage together with a pointer to the location in non-volatile storage at which the data block was previously stored. The entries of the disclosed deduplication index are divided into multiple deduplication index segments. A resident subset of the deduplication index segments is stored in memory of the data storage system. A non-resident subset of the deduplication index segments is stored in non-volatile data storage of the data storage system. Data deduplication is performed for each subsequently received data block for which a digest is generated that matches any one of the digests in the entries of the deduplication index segments that are contained in the resident subset of the deduplication index segments.

Claims (58)

1. A method comprising:

generating a deduplication index having multiple entries, each entry storing a digest of a data block that was previously stored in non-volatile data storage and a pointer to a location in the non-volatile data storage at which the data block was previously stored, wherein the entries of the deduplication index are divided into a plurality of deduplication index segments, wherein each deduplication index segment is made up of entries containing digests generated from data blocks received and stored in the non-volatile data storage during a corresponding one of multiple preceding time periods, together with pointers to locations in the non-volatile data storage at which those data blocks were stored;

storing a resident subset of the deduplication index segments in memory;

storing a non-resident subset of the deduplication index segments in the non-volatile data storage;

performing data deduplication for each subsequently received data block for which a digest is generated that matches any one of the digests stored in the entries of the deduplication index segments that are contained in the resident subset of the deduplication index segments;

storing digests generated from subsequently received data blocks that do not match any of the digests contained in the entries of the resident subset of the deduplication index segments into entries of an open deduplication index segment also stored in the memory of a data storage system;

performing data deduplication for each subsequently received data block for which a digest is generated that matches any one of the digests in the entries of the open deduplication index segment, wherein performing data deduplication for each subsequently received data block having a digest matching any one of the digests stored in the entries in the deduplication index segments contained in the resident subset of the deduplication index segments or in the open deduplication index segment includes storing, in the non-volatile data storage of the data storage system, a pointer to the location in the non-volatile data storage at which a previously received copy of the subsequently received data block was stored;

detecting that the open deduplication index segment has reached a predetermined maximum deduplication index segment size; and

in response to detecting that the open deduplication index segment has reached the predetermined maximum deduplication index segment size:

making the open deduplication index segment one of the deduplication index segments in the resident subset of the deduplication index segments, and

allocating a new open deduplication index segment within the memory of the data storage system.

2. The method of claim 1 , further comprising:

maintaining usage ratios for the deduplication index segments, such that each deduplication index segment has a usage ratio indicating how often digests in the deduplication index segment match digests of data blocks received by the data storage system; and

in response to the usage ratios for the deduplication index segments, selecting as the resident subset of the deduplication index segments one or more deduplication index segments having relatively higher usage ratios than the other deduplication index segments.

3. The method of claim 2 , further comprising:

detecting that a deduplication index segment in the non-resident subset of the deduplication index segments has a higher usage ratio than a usage ratio of one of the deduplication index segments in the resident subset of the deduplication index segments; and

in response to detecting that that the deduplication index segment in the non-resident subset of the deduplication index segments has a higher usage ratio than the usage ratio of the one of the deduplication index segments in the resident subset of the deduplication index segments:

moving the deduplication index segment in the non-resident subset of the deduplication index segments having the higher usage ratio to the resident subset of the deduplication index segments, and

moving the deduplication index segment in the resident subset of the deduplication index segments to the non-resident subset of the deduplication index segments.

4. The method of claim 3 , further comprising:

in response to identifying a digest that is contained in both i) an entry in a deduplication index segment in the non-resident subset of the deduplication index segments, and ii) an entry contained in a deduplication index segment in the resident subset of the deduplication index segments, updating a pointer stored in the entry contained in the deduplication index segment contained in the non-resident subset of the deduplication index segments to match a pointer in the entry contained in the deduplication index segment contained in the resident subset of the deduplication index segments.

5. The method of claim 3 , further comprising:

in response to identifying a digest that is contained in both i) an entry in a deduplication index segment in the non-resident subset of the deduplication index segments, and ii) an entry contained in the open deduplication index segment, removing the entry contained in the open deduplication index segment.

6. The method of claim 3 , further comprising:

in response to detecting deletion of at least one data block that was previously stored in the non-volatile data storage, removing at least one entry storing at least one pointer to the deleted data block from at least one of the deduplication index segments.

7. A data storage system comprising:

at least one storage processor including processing circuitry and a memory;

a plurality of data storage drives communicably coupled to the storage processor; and

wherein the memory has program code stored thereon, wherein the program code, when executed by the processing circuitry, causes the processing circuitry to:

generate a deduplication index having multiple entries, each entry storing a digest of a data block that was previously stored in non-volatile data storage and a pointer to a location in the non-volatile data storage at which the data block was previously stored, wherein the entries of the deduplication index are divided into a plurality of deduplication index segments, wherein each deduplication index segment is made up of entries containing digests generated from data blocks received and stored in the non-volatile data storage during a corresponding one of multiple preceding time periods, together with pointers to locations in the non-volatile data storage at which those data blocks were stored,

store a resident subset of the deduplication index segments in memory,

store a non-resident subset of the deduplication index segments in the non-volatile data storage,

perform data deduplication for each subsequently received data block for which a digest is generated that matches any one of the digests stored in the entries of the deduplication index segments that are contained in the resident subset of the deduplication index segments,

store digests generated from subsequently received data blocks that do not match any of the digests contained in the entries of the resident subset of the deduplication index segments into entries of an open deduplication index segment also stored in the memory of the data storage system;

perform data deduplication for each subsequently received data block for which a digest is generated that matches any one of the digests in the entries of the open deduplication index segment, wherein performing data deduplication for each subsequently received data block having a digest matching any one of the digests stored in the entries in the deduplication index segments contained in the resident subset of the deduplication index segments or in the open deduplication index segment includes storing, in the non-volatile data storage of the data storage system, a pointer to the location in the non-volatile data storage at which a previously received copy of the subsequently received data block was stored;

detect that the open deduplication index segment has reached a predetermined maximum deduplication index segment size; and

in response to detecting that the open deduplication index segment has reached the predetermined maximum deduplication index segment size:

make the open deduplication index segment one of the deduplication index segments in the resident subset of the deduplication index segments, and

allocate a new open deduplication index segment within the memory of the data storage system.

8. The data storage system of claim 7 , wherein the program code, when executed by the processing circuitry, further causes the processing circuitry to:

maintain usage ratios for the deduplication index segments, such that each deduplication index segment has a usage ratio indicating how often digests in the deduplication index segment match digests of data blocks received by the data storage system; and

in response to the usage ratios for the deduplication index segments, select as the resident subset of the deduplication index segments one or more deduplication index segments having relatively higher usage ratios than the other deduplication index segments.

9. The data storage system of claim 8 , wherein the program code, when executed by the processing circuitry, further causes the processing circuitry to:

detect that a deduplication index segment in the non-resident subset of the deduplication index segments has a higher usage ratio than a usage ratio of one of the deduplication index segments in the resident subset of the deduplication index segments; and

in response to detecting that that the deduplication index segment in the non-resident subset of the deduplication index segments has a higher usage ratio than the usage ratio of the one of the deduplication index segments in the resident subset of the deduplication index segments:

move the deduplication index segment in the non-resident subset of the deduplication index segments having the higher usage ratio to the resident subset of the deduplication index segments, and

move the deduplication index segment in the resident subset of the deduplication index segments to the non-resident subset of the deduplication index segments.

10. A computer program product including a non-transitory computer readable medium having instructions stored thereon, wherein the instructions, when executed on processing circuitry, cause the processing circuitry to perform the steps of:

generating a deduplication index having multiple entries, each entry storing a digest of a data block that was previously stored in non-volatile data storage and a pointer to a location in the non-volatile data storage at which the data block was previously stored, wherein the entries of the deduplication index are divided into a plurality of deduplication index segments, wherein each deduplication index segment is made up of entries containing digests generated from data blocks received and stored in the non-volatile data storage during a corresponding one of multiple preceding time periods, together with pointers to locations in the non-volatile data storage at which those data blocks were stored;

storing a resident subset of the deduplication index segments in memory;

storing a non-resident subset of the deduplication index segments in the non-volatile data storage;

performing data deduplication for each subsequently received data block for which a digest is generated that matches any one of the digests stored in the entries of the deduplication index segments that are contained in the resident subset of the deduplication index segments;

storing digests generated from subsequently received data blocks that do not match any of the digests contained in the entries of the resident subset of the deduplication index segments into entries of an open deduplication index segment also stored in the memory of a data storage system;

performing data deduplication for each subsequently received data block for which a digest is generated that matches any one of the digests in the entries of the open deduplication index segment, wherein performing data deduplication for each subsequently received data block having a digest matching any one of the digests stored in the entries in the deduplication index segments contained in the resident subset of the deduplication index segments or in the open deduplication index segment includes storing, in the non-volatile data storage of the data storage system, a pointer to the location in the non-volatile data storage at which a previously received copy of the subsequently received data block was stored;

detecting that the open deduplication index segment has reached a predetermined maximum deduplication index segment size; and

in response to detecting that the open deduplication index segment has reached the predetermined maximum deduplication index segment size:

making the open deduplication index segment one of the deduplication index segments in the resident subset of the deduplication index segments, and

allocating a new open deduplication index segment within the memory of the data storage system.

Assignments (9)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (054475/0523) Recorded Jun 10, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: EMC IP HOLDING COMPANY LLC; DELL PRODUCTS L.P.
Reel/Frame 060332/0664 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (054475/0434) Recorded Jun 10, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: EMC IP HOLDING COMPANY LLC; DELL PRODUCTS L.P.
Reel/Frame 060332/0740 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (054475/0609) Recorded Jun 10, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: EMC IP HOLDING COMPANY LLC; DELL PRODUCTS L.P.
Reel/Frame 062021/0570 →
RELEASE OF SECURITY INTEREST AT REEL 054591 FRAME 0471 Recorded Nov 2, 2021
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
Reel/Frame 058001/0463 →
SECURITY INTEREST Recorded Nov 18, 2020
From: EMC IP HOLDING COMPANY LLC; DELL PRODUCTS L.P.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS COLLATERAL AGENT
Reel/Frame 054475/0609 →
SECURITY INTEREST Recorded Nov 18, 2020
From: EMC IP HOLDING COMPANY LLC; DELL PRODUCTS L.P.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 054475/0434 →
SECURITY INTEREST Recorded Nov 18, 2020
From: EMC IP HOLDING COMPANY LLC; DELL PRODUCTS L.P.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 054475/0523 →
SECURITY AGREEMENT Recorded Nov 13, 2020
From: EMC IP HOLDING COMPANY LLC; DELL PRODUCTS L.P.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
Reel/Frame 054591/0471 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 22, 2020
From: DALMATOV, NICKOLAY
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 054137/0393 →
Priority Claims (1)
RU RU2020110749 · Mar 13, 2020 · national
Continuity (1)
Related Publication 20210286781A1 · Sep 16, 2021
Cited By (2)
US 12,411,810 US 12,468,466