IP Library Granted Patent US 12,001,355
Granted Patent B1
US 12,001,355 · App. 16/435,973 · Granted Jun 4, 2024

Chunked memory efficient storage data transfers

Inventors: Roland Dreier (Mountain View, CA); Anatoliy Glagolev (Sunnyvale, CA); Ronald Karr (Palo Alto, CA)
Assignee: PURE STORAGE, INC.
G06F13/1673G06F3/061G06F3/0631G06F3/0656G06F3/067
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 12,001,355
App. No.
16/435,973
Granted
Jun 4, 2024
Kind
B1
Abstract

Chunked data transfers may include: receiving, from an initiator, a read command for first data stored in a storage system; allocating a first buffer of a predefined size; until all of the first data has been sent to the initiator: loading a portion of the first data from the storage system into the first buffer; and sending, to the initiator, the portion of the first data in the first buffer.

Claims (47)

1. A method comprising:

receiving, from an initiator, a read command for first data stored in a storage system;

in response to receiving the read command, allocating, by the storage system, for sending one or more portions of the first data, at least a first data buffer of a plurality of data buffers that each have an amount of allocated computer memory that is smaller than a size of the first data; and

until all of the first data has been sent to the initiator:

loading a portion of the first data from the storage system into a first data buffer of the plurality of data buffers;

while the first data is being sent, loading one or more other portions of the first data from the storage system into one or more other data buffers of the plurality of data buffers; and

sending, to the initiator, the one or more other portions using the one or more other data buffers of the plurality of data buffers.

2. The method of claim 1 further comprising, until all of the first data has been sent to the initiator: sending, to the initiator, an other portion of the first data loaded from the storage system into an allocated second data buffer less than the size of the first data in the storage system.

3. The method of claim 2 , wherein loading the other portion of the first data into the second data buffer is performed at least partially concurrent to sending, to the initiator, the portion of the first data in the first data buffer, and wherein sending, to the initiator, the portion of the first data in the second data buffer performed at least partially concurrent to loading the portion of the first data into the first data buffer.

4. The method of claim 1 further comprising maintaining a data structure indicating a last sent portion of the first data.

5. The method of claim 4 , wherein loading the portion of the first data from the storage system into the first data buffer is based on the data structure.

6. The method of claim 1 further comprising:

receiving, from the initiator, a write command to store second data in the storage system;

allocating a second amount of computer memory as a second data buffer having a second memory size less than the size of the first data; and

until all of the second data has been stored in the storage system:

sending, to the initiator, a request for a portion of the second data;

storing the portion of the second data into the second data buffer; and

storing the portion of the second data from the second data buffer into the storage system.

7. An apparatus comprising a computer processor, a computer memory operatively coupled to the computer processor, the computer memory having disposed within it computer program instructions that, when executed by the computer processor, cause the apparatus to carry out the steps of:

receiving, from an initiator, a read command for first data stored in a storage system;

in response to receiving the read command, allocating, by the storage system, for sending one or more portions of the first data, at least a first data buffer of a plurality of data buffers that each have an amount of allocated computer memory that is smaller than a size of the first data; and

until all of the first data has been sent to the initiator:

loading a portion of the first data from the storage system into a first data buffer of the plurality of data buffers;

while the first data is being sent, loading one or more other portions of the first data from the storage system into one or more other data buffers of the plurality of data buffers; and

sending, to the initiator, the one or more other portions using the one or more other data buffers of the plurality of data buffers.

8. The apparatus of claim 7 further comprising computer program instructions that, when executed by the computer processor, cause the apparatus to carry out the steps of, until all of the first data has been sent to the initiator: sending, to the initiator, an other portion of the first data loaded from the storage system into an allocated second data buffer less than the size of the first data in the storage system.

9. The apparatus of claim 8 , wherein loading the other portion of the first data into the second data buffer is performed at least partially concurrent to sending, to the initiator, the portion of the first data in the first data buffer, and wherein sending, to the initiator, the portion of the first data in the second data buffer performed at least partially concurrent to loading the portion of the first data into the first data buffer.

10. The apparatus of claim 7 further comprising computer program instructions that, when executed by the computer processor, cause the apparatus to carry out the step of maintaining a data structure indicating a last sent portion of the first data.

11. The apparatus of claim 10 , wherein loading the portion of the first data from the storage system into the first data buffer is based on the data structure.

12. The apparatus of claim 7 further comprising computer program instructions that, when executed by the computer processor, cause the apparatus to carry out the steps of:

receiving, from the initiator, a write command to store second data in the storage system;

allocating a second amount of computer memory as a second data buffer having a second memory size less than the size of the first data; and

until all of the second data has been stored in the storage system:

sending, to the initiator, a request for a portion of the second data;

storing the portion of the second data into the second data buffer; and

storing the portion of the second data from the second data buffer into the storage system.

13. A computer program product disposed upon a computer readable medium, the computer program product comprising computer program instructions that, when executed, cause a computer to carry out the steps of:

receiving, from an initiator, a read command for first data stored in a storage system;

in response to receiving the read command, allocating, by the storage system, for sending one or more portions of the first data, a first data buffer that has an amount of allocated computer memory that is smaller than a size of the first data; and

until all of the first data has been sent to the initiator:

loading a portion of the first data from the storage system into a first data buffer of the plurality of data buffers;

while the first data is being sent, loading one or more other portions of the first data from the storage system into one or more other data buffers of the plurality of data buffers; and

sending, to the initiator, the one or more other portions using the one or more other data buffers of the plurality of data buffers.

14. The computer program product of claim 13 further comprising computer program instructions that, when executed, cause the computer to carry out the steps of, until all of the first data has been sent to the initiator: sending, to the initiator, an other portion of the first data loaded from the storage system into an allocated second data buffer less than the size of the first data in the storage system.

15. The computer program product of claim 14 , wherein loading the other portion of the first data into the second data buffer is performed at least partially concurrent to sending, to the initiator, the portion of the first data in the first data buffer, and wherein sending, to the initiator, the portion of the first data in the second data buffer performed at least partially concurrent to loading the portion of the first data into the first data buffer.

16. The computer program product of claim 13 further comprising computer program instructions that, when executed, cause the computer to carry out the step of maintaining a data structure indicating a last sent portion of the first data.

17. The computer program product of claim 16 , wherein loading the portion of the first data from the storage system into the first data buffer is based on the data structure.

Assignments (3)
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS Recorded Jun 11, 2025
From: BARCLAYS BANK PLC, AS ADMINISTRATIVE AGENT
To: PURE STORAGE, INC.
Reel/Frame 071558/0523 →
SECURITY INTEREST Recorded Aug 26, 2020
From: PURE STORAGE, INC.
To: BARCLAYS BANK PLC AS ADMINISTRATIVE AGENT
Reel/Frame 053867/0581 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 10, 2019
From: DREIER, ROLAND; GLAGOLEV, ANATOLIY; KARR, RONALD
To: PURE STORAGE, INC.
Reel/Frame 049419/0183 →
Continuity (1)
Provisional Application 62852558 · May 24, 2019
Cited By (19)
US 12,190,038 US 12,204,468 US 12,204,482 US 12,204,759 US 12,204,794 US 12,204,840 US 12,248,413 US 12,248,419 US 12,248,421 US 12,248,679 US 12,314,567 US 12,438,095 US 12,494,469 US 12,525,540 US 12,579,093 US 12,650,936 US 12,667,022 US 12,699,514 US 12,717,996