IP Library Granted Patent US 11,347,424
Granted Patent B1
US 11,347,424 · App. 16/839,140 · Granted May 31, 2022

Offset segmentation for improved inline data deduplication

Inventors: Xianbo Zhang (Zhang, TX); Yong Yang (Beijing, CN)
Assignee: VERITAS TECHNOLOGIES LLC
G06F3/0641G06F3/0608G06F3/0653G06F3/0656G06F3/0685
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,347,424
App. No.
16/839,140
Granted
May 31, 2022
Kind
B1
Abstract

Systems and methods for processing data segments are disclosed. In one embodiment, such functionality includes buffering data received from a node (where the data is stored in a buffer as buffered data, an offset value is associated with the data, and a segment size is associated with the buffer), and determining whether the offset value is an integer multiple of the segment size. In response to determination that the offset value is an integer multiple of the segment size, processing the data in the buffer as a segment. Such functionality also includes determining whether the segment is a duplicate of data stored in a deduplicated data store and, in response to a determination that the segment is not a duplicate of data stored in the deduplicated data store, storing the segment in the deduplicated data store.

Claims (114)

1. A method comprising:

buffering data received from a node, wherein

the data is stored in a buffer, as buffered data,

an offset value is associated with the data, and

a segment size is associated with the buffer;

determining whether the offset value is an integer multiple of the segment size;

in response to a determination that the offset value is an integer multiple of the segment size, processing the data in the buffer as a segment;

determining whether the segment is a duplicate of data stored in a deduplicated data store; and

in response to a determination that the segment is not a duplicate of data stored in the deduplicated data store, storing the segment in the deduplicated data store.

2. The method of claim 1 , further comprising:

determining whether the buffer is full, wherein

the determining whether the offset value is an integer multiple of the segment size is performed in response to a determination that the buffer is full.

3. The method of claim 1 , further comprising:

determining whether the buffer is full;

in response to a determination that the buffer is not full, determining if a trigger event has been received; and

in response to a determination that a trigger event has been received, deduplicating the buffered data by treating the buffered data as a segment without generating a modified segment.

4. The method of claim 1 , further comprising:

determining whether the buffer is full;

in response to a determination that the buffer is not full, determining if a trigger event has been received;

in response to a determination that a trigger event has not been received, receiving additional data from the node; and

buffering the additional data by storing the additional data in the buffer along with the buffered data, in order to create modified buffered data.

5. The method of claim 4 , further comprising:

subsequent to buffering the additional data, determining whether the buffer is full;

in response to a determination that the buffer is full, determining whether the offset value is an integer multiple of the segment size;

in response to determining that the offset value is not an integer multiple of the segment size, generating a modified segment;

determining whether the modified segment is a duplicate of data stored in a deduplicated data store; and

in response to a determination that the modified segment is not a duplicate of data stored in the deduplicated data store, storing the modified segment in the deduplicated data store.

6. The method of claim 5 , further comprising:

the generating the modified segment further comprises splitting the data into a first segment and a second segment, wherein

the first segment comprises a first number of units of the buffered data,

the first number of units is based on a modulo value,

the second segment comprises a second number of units of the buffered data, and

the second number of units is equivalent to a difference of the segment size and the modulo value;

moving the second segment to a subsequent buffer; and

after the moving, writing additional data to the subsequent buffer, wherein

the additional data is received from the node.

7. The method of claim 1 , further comprising

in response to the determination that the offset value is the integer multiple of the segment size, treating the buffered data as a segment without creating a modified segment.

8. A system comprising:

a microprocessor; and

a non-transient computer-readable storage medium, comprising computer instructions, executable by the microprocessor and configured to perform a method comprising

buffering data received from a node, wherein

the data is stored in a buffer, as buffered data,

an offset value is associated with the data, and

a segment size is associated with the buffer,

determining whether the offset value is an integer multiple of the segment size,

in response to a determination that the offset value is an integer multiple of the segment size, processing the data in the buffer as a segment,

determining whether the segment is a duplicate of data stored in a deduplicated data store, and

in response to a determination that the segment is not a duplicate of data stored in the deduplicated data store, storing the segment in the deduplicated data store.

9. The system of claim 8 , wherein the method further comprises:

determining whether the buffer is full, wherein

the determining whether the offset value is an integer multiple of the segment size is performed in response to a determination that the buffer is full.

10. The system of claim 8 , wherein the method further comprises:

determining whether the buffer is full;

in response to a determination that the buffer is not full, determining if a trigger event has been received; and

in response to a determination that a trigger event has been received, deduplicating the buffered data by treating the buffered data as a segment without generating a modified segment.

11. The system of claim 8 , wherein the method further comprises:

determining whether the buffer is full;

in response to a determination that the buffer is not full, determining if a trigger event has been received;

in response to a determination that a trigger event has not been received, receiving additional data from the node; and

buffering the additional data by storing the additional data in the buffer along with the buffered data, in order to create modified buffered data.

12. The system of claim 11 , wherein the method further comprises:

subsequent to buffering the additional data, determining whether the buffer is full;

in response to a determination that the buffer is full, determining whether the offset value is an integer multiple of the segment size;

in response to determining that the offset value is not an integer multiple of the segment size, generating a modified segment;

determining whether the modified segment is a duplicate of data stored in a deduplicated data store; and

in response to a determination that the modified segment is not a duplicate of data stored in the deduplicated data store, storing the modified segment in the deduplicated data store.

13. The system of claim 12 , wherein the method further comprises:

the generating the modified segment further comprises splitting the data into a first segment and a second segment, wherein

the first segment comprises a first number of units of the buffered data,

the first number of units is based on a modulo value,

the second segment comprises a second number of units of the buffered data, and

the second number of units is equivalent to a difference of the segment size and the modulo value;

moving the second segment to a subsequent buffer; and

after the moving, writing additional data to the subsequent buffer, wherein

the additional data is received from the node.

14. The system of claim 8 , wherein the method further comprises:

in response to the determination that the offset value is the integer multiple of the segment size, treating the buffered data as a segment without creating a modified segment.

15. A computer program product, comprising a plurality of instructions stored on a non-transient computer-readable storage medium, wherein the instructions are configured to execute a method comprising:

buffering data received from a node, wherein

the data is stored in a buffer, as buffered data,

an offset value is associated with the data, and

a segment size is associated with the buffer;

determining whether the offset value is an integer multiple of the segment size;

in response to a determination that the offset value is an integer multiple of the segment size, processing the data in the buffer as a segment;

determining whether the segment is a duplicate of data stored in a deduplicated data store; and

in response to a determination that the segment is not a duplicate of data stored in the deduplicated data store, storing the segment in the deduplicated data store.

16. The computer program product of claim 15 , wherein the method further comprises:

determining whether the buffer is full, wherein

the determining whether the offset value is an integer multiple of the segment size is performed in response to a determination that the buffer is full.

17. The computer program product of claim 15 , wherein the method further comprises:

determining whether the buffer is full;

in response to a determination that the buffer is not full, determining if a trigger event has been received; and

in response to a determination that a trigger event has been received, deduplicating the buffered data by treating the buffered data as a segment without generating a modified segment.

18. The computer program product of claim 15 , wherein the method further comprises:

determining whether the buffer is full;

in response to a determination that the buffer is not full, determining if a trigger event has been received;

in response to a determination that a trigger event has not been received, receiving additional data from the node; and

buffering the additional data by storing the additional data in the buffer along with the buffered data, in order to create modified buffered data.

19. The computer program product of claim 18 , wherein the method further comprises:

subsequent to buffering the additional data, determining whether the buffer is full;

in response to a determination that the buffer is full, determining whether the offset value is an integer multiple of the segment size;

in response to determining that the offset value is not an integer multiple of the segment size, generating a modified segment;

determining whether the modified segment is a duplicate of data stored in a deduplicated data store; and

in response to a determination that the modified segment is not a duplicate of data stored in the deduplicated data store, storing the modified segment in the deduplicated data store.

20. The computer program product of claim 19 , wherein the method further comprises:

the generating the modified segment further comprises splitting the data into a first segment and a second segment, wherein

the first segment comprises a first number of units of the buffered data,

the first number of units is based on a modulo value,

the second segment comprises a second number of units of the buffered data, and

the second number of units is equivalent to a difference of the segment size and the modulo value;

moving the second segment to a subsequent buffer; and

after the moving, writing additional data to the subsequent buffer, wherein

the additional data is received from the node.

Assignments (9)
AMENDMENT NO. 1 TO PATENT SECURITY AGREEMENT Recorded Apr 8, 2025
From: VERITAS TECHNOLOGIES LLC; COHESITY, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 070779/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 26, 2025
From: VERITAS TECHNOLOGIES LLC
To: COHESITY, INC.
Reel/Frame 070335/0013 →
RELEASE OF SECURITY INTEREST Recorded Dec 13, 2024
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 069634/0584 →
RELEASE OF SECURITY INTEREST Recorded Dec 13, 2024
From: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 069574/0951 →
SECURITY INTEREST Recorded Dec 9, 2024
From: VERITAS TECHNOLOGIES LLC; COHESITY, INC.
To: JPMORGAN CHASE BANK. N.A.
Reel/Frame 069890/0001 →
TERMINATION AND RELESAE OF SECURITY INTEREST IN PATENTS AT R/F 053640/0780 Recorded Nov 30, 2020
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 054535/0492 →
PATENT SECURITY AGREEMENT SUPPLEMENT Recorded Aug 31, 2020
From: VERITAS TECHNOLOGIES LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 053640/0780 →
SECURITY INTEREST Recorded Aug 20, 2020
From: VERITAS TECHNOLOGIES LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 054370/0134 →
PATENT SECURITY AGREEMENT SUPPLEMENT Recorded Jul 31, 2020
From: VERITAS TECHNOLOGIES LLC
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 053373/0367 →
Continuity (1)
Continuation 16156627 · Oct 10, 2018