IP Library Granted Patent US 11,514,001
Granted Patent B2
US 11,514,001 · App. 15/955,287 · Granted Nov 29, 2022

Concurrent computations operating on same data for CPU cache efficiency

Inventors: Ivan Bassov (Brookline, MA); Philippe Armangau (Acton, MA)
Assignee: EMC IP Holding Company LLC
G06F16/178G06F16/1744
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,514,001
App. No.
15/955,287
Granted
Nov 29, 2022
Kind
B2
Abstract

Techniques for CPU cache efficiency may include performing concurrent processing, such as for first and second data operations, in a synchronized manner that prevents loading the same data chunk into the CPU cache more than once. Processing may include synchronizing the first and second data operations with respect to a first data chunk to ensure that both the first and second data operation processing has completed prior to proceeding with performing such processing on a second data chunk. The first and second data operations may be any two of deduplication, encryption, and compression, performed inline as part of the data path. In one embodiment, the first and second data operations for the first data chunk may be performed in parallel or sequentially where neither data operation proceeds with another data chunk until processing of the first and second data operations is complete for the first data chunk.

Claims (45)

1. A method of performing data processing comprising:

issuing, from an application on a host to a data storage array, a write I/O operation that writes a first data chunk to a first logical address;

receiving, at a first processor of the data storage array, the write I/O operation; and

responsive to receiving the write I/O operation, performing I/O path processing by the first processor to service the write I/O operation, said I/O path processing including:

caching the first data chunk in a cache of the first processor;

responsive to said caching, the first processor returning an acknowledgement to the host regarding completion of the write I/O operation;

subsequent to said caching, the first processor flushing the first data chunk from the cache to a storage location on a non-volatile storage device providing backend storage for the first logical address, said flushing including:

the first processor performing inline processing of the first data chunk, wherein said inline processing generates a reduced form of the first data chunk, wherein said inline processing includes:

performing first processing for a first data processing operation on the first data chunk;

performing second processing for a second data processing operation on the first data chunk, wherein the first data processing operation is data deduplication and the first processing includes digest computation, and wherein the second data processing operation is data compression and the second processing includes data compression processing; and

synchronizing the first processing and the second processing with respect to the first data chunk, wherein said synchronizing ensures that both the first processing of the first data chunk and the second processing of the first data chunk have completed prior to proceeding with performing any of the first processing on a second data chunk and the second processing on the second data chunk, wherein the first data chunk and the second data chunk are different data chunks, wherein the first data processing operation on the first data chunk performs data deduplication processing on the first data chunk and wherein the first processing on the first data chunk includes digest computation processing for the first data chunk that generates a first digest for the first data chunk, wherein the second processing of the first data chunk includes data compression processing of the first data chunk, and wherein said synchronizing the first processing of the first data chunk and the second processing for the first data chunk includes performing the first processing of the first data chunk and the second processing of the first data chunk in parallel so that at least digest computation processing for the first data chunk is performed in parallel with data compression processing for the first data chunk, and wherein said synchronizing includes commencing, at a same point in time, execution of the first processing of the first data chunk that generates a first digest for the first data chunk and execution of the second processing of the first data chunk that performs data compression processing for the first data chunk, wherein the first processing of the first data chunk is performed by a first thread executing on a first core of the first processor, and wherein the second processing of the first data chunk is performed by a second thread executing on a second core of the first processor, and wherein the first thread and the second thread execute in parallel when processing the first data chunk that is stored in a processor local cache of the cache of the first processor, wherein the processor local cache of the first processor is a private dedicated cache used only by the first processor and is not shared with other processors in a multiprocessor system; and

the first processor writing the reduced form of the first data chunk to the storage location.

2. The method of claim 1 , wherein one of the first processing of the first data chunk and the second processing of the first data chunk completes processing prior to another one of the first processing of the first data chunk and the second processing of the first data chunk, and wherein said synchronizing does not allow any of the first processing and the second processing to proceed with processing the second data chunk until both the first processing of the first data chunk and the second processing of the first data chunk have completed.

3. The method of claim 2 , wherein said flushing performed by the first processor further includes the first processor performing third processing for a third data processing operation of the first data chunk, wherein the third processing of the first data chunk is performed in parallel with the first processing of the first data chunk and the second processing of the first data chunk.

4. The method of claim 3 , wherein the third data processing operation includes any of encryption and decryption.

5. The method of claim 1 , wherein performing one of the first data processing operation of the first data chunk and the second data processing operation of the first data chunk results in loading the first data chunk in the processor local cache of the first processor, and wherein the first data chunk remains in the processor local cache of the first processor while at least performing the first data processing operation for the first data chunk and the second data processing for the first data chunk.

6. A data storage array comprising:

at least one processor; and

a memory comprising code stored therein that, when executed, performs a method of data processing comprising:

issuing, from an application on a host to the data storage array, a write I/O operation that writes a first data chunk to a first logical address;

receiving, at a first processor of the data storage array, the write I/O operation; and

responsive to receiving the write I/O operation, performing I/O path processing by the first processor to service the write I/O operation, said I/O path processing including:

caching the first data chunk in a cache of the first processor;

responsive to said caching, the first processor returning an acknowledgement to the host regarding completion of the write I/O operation;

subsequent to said caching, the first processor flushing the first data chunk from the cache to a storage location on a non-volatile storage device providing backend storage for the first logical address, said flushing including:

the first processor performing inline processing of the first data chunk, wherein said inline processing generates a reduced form of the first data chunk, wherein said inline processing includes:

 performing first processing for a first data processing operation on the first data chunk;

 performing second processing for a second data processing operation on the first data chunk, wherein the first data processing operation is data deduplication and the first processing includes digest computation, and wherein the second data processing operation is data compression and the second processing includes data compression processing; and

 synchronizing the first processing and the second processing with respect to the first data chunk, wherein said synchronizing ensures that both the first processing of the first data chunk and the second processing of the first data chunk have completed prior to proceeding with performing any of the first processing on a second data chunk and the second processing on the second data chunk, wherein the first data chunk and the second data chunk are different data chunks, wherein the first data processing operation on the first data chunk performs data deduplication processing on the first data chunk and wherein the first processing on the first data chunk includes digest computation processing for the first data chunk that generates a first digest for the first data chunk, wherein the second processing of the first data chunk includes data compression processing of the first data chunk, and wherein said synchronizing the first processing of the first data chunk and the second processing for the first data chunk includes performing the first processing of the first data chunk and the second processing of the first data chunk in parallel so that at least digest computation processing for the first data chunk is performed in parallel with data compression processing for the first data chunk, and wherein said synchronizing includes commencing, at a same point in time, execution of the first processing of the first data chunk that generates a first digest for the first data chunk and execution of the second processing of the first data chunk that performs data compression processing for the first data chunk, wherein the first processing of the first data chunk is performed by a first thread executing on a first core of the first processor, and wherein the second processing of the first data chunk is performed by a second thread executing on a second core of the first processor, and wherein the first thread and the second thread execute in parallel when processing the first data chunk that is stored in a processor local cache of the cache of the first processor, wherein the processor local cache of the first processor is a private dedicated cache used only by the first processor and is not shared with other processors in a multiprocessor system; and

the first processor writing the reduced form of the first data chunk to the storage location.

7. A non-transitory computer readable medium comprising code stored thereon that, when executed, performs a method of data processing comprising:

issuing, from an application on a host to a data storage array, a write I/O operation that writes a first data chunk to a first logical address;

receiving, at a first processor of the data storage array, the write I/O operation; and

responsive to receiving the write I/O operation, performing I/O path processing by the first processor to service the write I/O operation, said I/O path processing including:

caching the first data chunk in a cache of the first processor;

responsive to said caching, the first processor returning an acknowledgement to the host regarding completion of the write I/O operation;

subsequent to said caching, the first processor flushing the first data chunk from the cache to a storage location on a non-volatile storage device providing backend storage for the first logical address, said flushing including:

the first processor performing inline processing of the first data chunk, wherein said inline processing generates a reduced form of the first data chunk, wherein said inline processing includes:

performing first processing for a first data processing operation on the first data chunk;

performing second processing for a second data processing operation on the first data chunk, wherein the first data processing operation is data deduplication and the first processing includes digest computation, and wherein the second data processing operation is data compression and the second processing includes data compression processing; and

synchronizing the first processing and the second processing with respect to the first data chunk, wherein said synchronizing ensures that both the first processing of the first data chunk and the second processing of the first data chunk have completed prior to proceeding with performing any of the first processing on a second data chunk and the second processing on the second data chunk, wherein the first data chunk and the second data chunk are different data chunks, wherein the first data processing operation on the first data chunk performs data deduplication processing on the first data chunk and wherein the first processing on the first data chunk includes digest computation processing for the first data chunk that generates a first digest for the first data chunk, wherein the second processing of the first data chunk includes data compression processing of the first data chunk, and wherein said synchronizing the first processing of the first data chunk and the second processing for the first data chunk includes performing the first processing of the first data chunk and the second processing of the first data chunk in parallel so that at least digest computation processing for the first data chunk is performed in parallel with data compression processing for the first data chunk, and wherein said synchronizing includes commencing, at a same point in time, execution of the first processing of the first data chunk that generates a first digest for the first data chunk and execution of the second processing of the first data chunk that performs data compression processing for the first data chunk, wherein the first processing of the first data chunk is performed by a first thread executing on a first core of the first processor, and wherein the second processing of the first data chunk is performed by a second thread executing on a second core of the first processor, and wherein the first thread and the second thread execute in parallel when processing the first data chunk that is stored in a processor local cache of the cache of the first processor, wherein the processor local cache of the first processor is a private dedicated cache used only by the first processor and is not shared with other processors in a multiprocessor system; and

the first processor writing the reduced form of the first data chunk to the storage location.

8. The non-transitory computer readable medium of claim 7 , wherein one of the first processing of the first data chunk and the second processing of the first data chunk completes processing prior to another one of the first processing of the first data chunk and the second processing of the first data chunk, and wherein said synchronizing does not allow any of the first processing and the second processing to proceed with processing the second data chunk until both the first processing of the first data chunk and the second processing of the first data chunk have completed.

9. The non-transitory computer readable medium of claim 7 , wherein performing one of the first data processing operation of the first data chunk and the second data processing operation of the first data chunk results in loading the first data chunk in the processor local cache of the first processor which includes the first core that executes code of the first thread to perform the first processing of the first data chunk and which includes the second core that executed code of the second thread to perform the second processing of the first data chunk, and wherein the first data chunk remains in the processor local cache of the first processor while at least performing the first data processing operation of the first data chunk and the second data processing operation of the first data chunk.

10. The method of claim 1 , wherein the first processing of the first data chunk performed by the first thread and the second processing of the first data chunk performed by the second thread are synchronized by said synchronizing so that the neither the first thread nor the second thread is allowed to proceed with processing the second data chunk until both the first processing of the first data chunk performed by the first thread and the second processing of the first data chunk performed by the second thread have completed.

Assignments (8)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053546/0001) Recorded Jun 23, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC IP HOLDING COMPANY LLC
Reel/Frame 071642/0001 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (046366/0014) Recorded May 20, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL PRODUCTS L.P.; EMC CORPORATION; EMC IP HOLDING COMPANY LLC
Reel/Frame 060450/0306 →
RELEASE OF SECURITY INTEREST AT REEL 046286 FRAME 0653 Recorded Nov 2, 2021
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: DELL PRODUCTS L.P.; EMC CORPORATION; EMC IP HOLDING COMPANY LLC
Reel/Frame 058298/0093 →
SECURITY AGREEMENT Recorded Apr 22, 2020
From: CREDANT TECHNOLOGIES INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 053546/0001 →
SECURITY AGREEMENT Recorded Mar 21, 2019
From: CREDANT TECHNOLOGIES, INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 049452/0223 →
PATENT SECURITY AGREEMENT (NOTES) Recorded Jun 1, 2018
From: DELL PRODUCTS L.P.; EMC CORPORATION; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS COLLATERAL AGENT
Reel/Frame 046366/0014 →
PATENT SECURITY AGREEMENT (CREDIT) Recorded Jun 1, 2018
From: DELL PRODUCTS L.P.; EMC CORPORATION; EMC IP HOLDING COMPANY LLC
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 046286/0653 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 17, 2018
From: BASSOV, IVAN; ARMANGAU, PHILIPPE
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 045564/0336 →