IP Library Granted Patent US 10,459,657
Granted Patent B2
US 10,459,657 · App. 15/482,708 · Granted Oct 29, 2019

Storage system with read cache-on-write buffer

Inventors: Umesh Maheshwari (San Jose, CA); Suresh Vasudevan (San Jose, CA)
Assignee: Hewlett Packard Enterprise Development LP
G06F3/0656G06F3/061G06F3/0608G06F3/0625G06F3/0685G06F12/0875G06F12/0891G06F12/1045G06F9/45533G06F9/45558G06F2009/45562G06F2212/452G06F2212/60Y02D10/154
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 10,459,657
App. No.
15/482,708
Granted
Oct 29, 2019
Kind
B2
Abstract

Methods and storage arrays are described. One example method is for storage processing on a storage array. The method includes executing a storage application on the storage array. The storage application is configured to process write commands and read commands to and from storage of the storage array, and the write commands and the read commands being from an application. The method includes, processing, by the storage application, a write command from the application. The processing includes storing data blocks of the write command to a write buffer of the storage array. The method also includes processing said data blocks, while processing said storing, to identify data blocks and/or metadata to store in a read cache-on-write buffer. In this example, only a sub-set of said data blocks are temporarily stored in said read cache-on-write buffer. The method includes draining data blocks, from time to time, from said read cache-on-write buffer to end storage of said storage. The draining includes producing data segments that include two or more of said data blocks.

Claims (59)

1. A method for storage processing on a storage array, comprising,

executing, by a processor, a storage application on the storage array to process write commands and read commands to and from storage of the storage array, the write commands and the read commands being from an application;

processing, by the processor, a write command from the application to store data blocks of the write command to a memory cache and to a write buffer of a block storage that is part of the storage of the storage array;

selecting, by the processor, a subset of the data blocks from the memory cache and writing said subset of data blocks to a read cache of the block storage;

coalescing, by the processor, the data blocks obtained from the memory cache to produce data segments, wherein each of the data segments includes two or more of said data blocks; and

writing, by the processor, the produced data segments to a segment storage that is part of the storage of the storage array.

2. The method of claim 1 , further comprising,

processing, by the processor on the storage application, a read command from the application, the processing includes, reading data blocks from said read cache of the block storage; and

for data blocks not found in the read cache, reading from said write buffer of block storage.

3. The method of claim 2 , further comprising,

for data blocks not found in write buffer, reading from said segment storage.

4. The method of claim 1 , wherein the subset of data blocks written to the read cache is identified as associated with the application.

5. The method of claim 1 , further comprising,

examining the subset of data blocks written to the read cache to determine if a threshold amount of data blocks is present for the application in the read cache during a period of time; and

evicting one or more of the data blocks from the read cache when the threshold amount of data blocks is not present in the read cache during the period of time.

6. The method of claim 5 , further comprising:

coalescing the data blocks evicted from the read cache to produce additional data segments corresponding to the application, wherein each of the additional data segments includes two or more data blocks arranged in a sequential order.

7. The method of claim 1 , wherein the subset of data blocks written to the read cache is identified as associated with the application, the method further comprising,

examining the data blocks written to the read cache to determine if a threshold amount of data blocks is present in the read cache during a period of time; and

evicting the data blocks of selected ones of said applications that have written data blocks below the threshold amount during the period of time, wherein the evicting of the data blocks is for data blocks determined to be cold, and maintaining data blocks in the read cache which have determined to be hot during the period of time.

8. The method of claim 7 , further comprising: coalescing the evicted data blocks to produce additional data segments that substantially correspond to a respective one of said applications.

9. The method of claim 1 , wherein the read cache is to store data blocks for one or more other applications that are writing, the method further includes,

maintaining data blocks in the read cache associated with applications that are writing a threshold amount of data blocks during a period of time in the read cache, and evicting data blocks from the read cache associated with applications that store less than the threshold amount of data blocks during the period of time, wherein the data blocks that are maintained in the read cache during the period of time are determined to be hot, and the data blocks that are evicted from the read cache are determined to be cold during the period of time.

10. The method of claim 1 , further comprising,

compressing the data blocks obtained from the memory cache,

wherein the subset of data blocks written to the read cache is selected from the compressed data blocks.

11. The method of claim 1 , wherein the selected subset of data blocks is identified as cache worthy based on a determination that the selected subset of data blocks is likely to be read by the application.

12. The method of claim 1 , wherein each of the write buffer and the read cache includes logical volumes that are pre-selected to store data associated to specific applications or specific types of data.

13. The method of claim 1 , wherein the coalescing includes compressing the data blocks and arranging the compressed data blocks in a sequential order to produce said data segments, wherein said storage application is an operating system of said storage array.

14. The method of claim 1 , wherein said data segments have a size of at least one megabyte and said data blocks have a size that is less than one megabyte, the size of said data segments acting to optimize writing to said segment storage and wherein the data blocks written to each of said write buffer and said read cache of said block storage represent random input/output (I/O) storage operations.

15. The method of claim 1 , further comprising,

processing, by the processor, a reduction process on the data blocks obtained from the memory cache before being stored to said write buffer and said read cache, wherein said reduction process is one of a compression operation, or a de-duplication operation.

16. A non-transitory computer readable medium storing instructions that when executed cause a processor to:

execute a storage application of a storage array to process write commands and read commands to and from storage of the storage array, the write commands and the read commands being from an application;

process a write command from the application to store data blocks of the write command to a memory cache and to a write buffer of a block storage that is part of the storage array;

select a subset of the data blocks from the data blocks in the memory cache and write the subset of data blocks to a read cache of the block storage;

coalesce the data blocks obtained from the memory cache to produce data segments, wherein each of the data segments includes two or more of said data blocks; and

write the produced data segments to a segment storage that is part of the storage array.

17. The non-transitory computer readable medium of claim 16 , further comprising instructions that cause the processor to:

process a read command from the application, wherein the processing of the read command causes reading data blocks from the storage array;

determine whether the data blocks for the read command are present in the memory cache;

in response to a determination that the data blocks are not present in the memory cache, determine whether the data blocks are present in the read cache of the block storage; and

in response to a determination that the data blocks are not present in the read cache, determine whether the data blocks are present in said write buffer of the block storage.

18. The non-transitory computer readable medium of claim 17 , wherein the instructions further cause the processor to:

in response to a determination that the data blocks are not found in the write buffer, obtain the data blocks from said segment storage.

19. The non-transitory computer readable medium of claim 16 , wherein the data blocks written to read cache are identified as associated with the application or as associated with other applications, and wherein the instructions further cause the processor to:

examine the data blocks written to read cache to determine if a threshold amount of data blocks is present in the read cache during a period of time for each of said applications; and

evict the data blocks of selected ones of said applications that have written data blocks below the threshold amount during the period of time, wherein the evicting of the data blocks is for data blocks determined to be cold while maintaining data blocks in the read cache that have determined to be hot during the period of time.

20. A method for storage processing on a storage array, comprising,

executing a storage application on the storage array to process write commands and read commands to and from storage of the storage array, the write commands and the read commands being from an application;

storing data blocks of a write command from the application to a memory cache and a write buffer of the storage array;

processing said data blocks in the memory cache to identify a subset of the data blocks from the memory cache to store in a read cache of the storage array, wherein only the sub-set of data blocks is temporarily stored in said read cache of the storage array; and

draining the subset of data blocks from said read cache a segment storage of said storage array, said draining includes producing data segments that include two or more of said data blocks in the subset.

21. The method of claim 20 , further comprising,

processing, by the processor on the storage application, a read command from the application, wherein the processing of the read command causes reading data blocks from the storage array;

initially reading data blocks from said read cache of the block storage; and

for data blocks not found in the read cache, reading the data blocks from said write buffer of the block storage.

22. The method of claim 21 , further comprising,

for data blocks not found in the write buffer, reading the data blocks from the segment storage.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 16, 2017
From: MAHESHWARI, UMESH; VASUDEVAN, SURESH
To: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP
Reel/Frame 043312/0130 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 14, 2017
From: NIMBLE STORAGE, INC.
To: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP
Reel/Frame 042810/0906 →
Continuity (2)
Provisional Application 62396050 · Sep 16, 2016
Related Publication 20180081591A1 · Mar 22, 2018
Cited By (3)
US 12,193,341 US 12,541,420 US 12,646,613