IP Library › Granted Patent US 9,658,966
Granted Patent B2
US 9,658,966 · App. 14/551,980 · Granted May 23, 2017

Systems and methods of write cache flushing

Inventors: Gadi Vishne (Petah-Tikva, IL); Eran Erez (San Jose, CA); Roman Rozental (Netanya, IL); Polina Marimont (Modiin, IL); Judah Gamliel Hahn (Ofra, IL)
Assignee: Sandisk Technologies LLC
G06F12/12G06F12/0844G06F12/0246G06F12/0868G06F2212/1041G06F2212/69
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 9,658,966
App. No.
14/551,980
Granted
May 23, 2017
Kind
B2
Abstract

A data storage device includes a write cache, a non-volatile memory, and a controller coupled to the write cache and to the non-volatile memory. The controller is configured to, responsive to receiving a command to flush particular data from the write cache, attempt to fill a write block of data using the particular data and pending data obtained after receipt of the command.

Claims (41)

1. A device comprising:

a write cache; and

a controller configured to, responsive to receiving a command to flush the write cache, generate a write block that includes at least data stored at the write cache and pending data related to one or more pending unexecuted write instructions, the pending data stored at a location distinct from the write cache.

2. The device of claim 1 , wherein the controller is configured to:

compare a size of the data stored at the write cache to a size of the write block to determine a size of an unfilled portion of the write block; and

compare sizes of the pending data related to the one or more pending unexecuted write instructions to the unfilled portion of the write block to identify a the pending data to aggregate with the data stored at the write cache to generate the write block.

3. The device of claim 2 , the one or more pending unexecuted write instructions comprising first pending unexecuted write instructions and second pending unexecuted write instructions, wherein the first pending unexecuted write instructions correspond to pending unexecuted write instructions that, when the write instructions are received, are identified in a submission queue of an accessing device and are identified at the controller, and wherein the second pending unexecuted write instructions correspond to pending unexecuted write instructions that, when the write instructions are received, are identified in the submission queue of the accessing device and are not identified at the controller.

4. The device of claim 3 , wherein the controller is further configured to compare sizes of write data of the first pending unexecuted write instructions to the unfilled portion of the write block, and to compare sizes of write data of the second pending unexecuted write instructions to the unfilled portion of the write block in response to the write data of the first pending unexecuted write instructions failing to fill the write block.

5. The device of claim 1 , wherein the controller is further configured to initiate a timer responsive to receiving the command, wherein in response to the timer expiring before the controller is able to fill the write block using the data stored at the write cache and the pending data, the controller is configured to generate a full write block including the data stored at the write cache and padding and to write the full write block to a non-volatile memory.

6. The device of claim 1 , wherein the command is a flush command and the data stored at the write cache corresponds to one or more write instructions that are identified in a submission queue of an accessing device and that are identified in a completion queue of the accessing device.

7. A method comprising:

receiving a command, the command instructing writing of particular data to a non-volatile memory, wherein the particular data includes first data stored at a write cache, second data received with the command, or both;

responsive to receiving the command, generating a full write block using the particular data and third data, the third data corresponding to one or more unexecuted write commands that are identified in a submission queue of an accessing device; and

writing the full write block to the non-volatile memory.

8. The method of claim 7 , further comprising, before receiving the command:

receiving at least one write command, the at least one write command identifying the first data;

storing the first data at the write cache; and

generating an output indicating receipt of the first data, wherein the output is used to update a completion queue associated with the at least one write command.

9. The method of claim 7 , further comprising:

initiating a timer responsive to receiving the command; and

upon expiration of the timer, aggregating the particular data, the third data, and padding to generate the full write block.

10. The method of claim 9 , wherein the timer is initiated according to a first duration if the command is a flush command and the timer is initiated according to a second duration if the command is a write command with a force unit access flag.

11. The method of claim 7 , wherein generating the full write block comprises:

evaluating a set of pending commands to identify pending data that is associated with pending unexecuted write commands;

determining, based on a size of the particular data, sizes of the pending data, and a size of a write block, whether the pending data can be aggregated with the particular data within the write block; and

in response to determining that the pending data can be combined with the particular data within the write block, using the pending data as the third data to generate the full write block.

12. The method of claim 11 , wherein the pending unexecuted write commands include at least one pending unexecuted write command identified at a command processing unit of a data storage device, and wherein the pending unexecuted write commands are not identified in a completion queue of an accessing device.

13. The method of claim 11 , wherein using the pending data as the third data includes:

causing a completion queue associated with the pending data at an accessing device to be updated; and

aggregating the particular data and the pending data to generate aggregate data.

14. The method of claim 13 , further comprising:

determining whether the aggregate data fills the write block; and

responsive to determining that the aggregate data does not fill the write block, aggregating additional pending data with the aggregate data to generate the full write block.

15. The method of claim 7 , further comprising, after writing the full write block to the non-volatile memory, generating an output indicating that at least the particular data has been written to the non-volatile memory.

16. The method of claim 7 , wherein the full write block comprises the second data identified by the command and data associated with a partial write block stored at the write cache.

17. A device comprising:

means for storing data to be written to a non-volatile memory; and

means for generating, responsive to receiving a particular write command that identifies particular data and that includes a flag indicating a completion indication condition, a write block that includes at least the particular data and pending data received after receipt of the particular write command.

18. The device of claim 17 , wherein the pending data is accessible at a location that is distinct from the means for storing, and wherein the particular write command comprises a force unit access (FUA)-enabled write command.

19. The device of claim 17 , further comprising means for processing commands, wherein the data is related to pending unexecuted write commands that are identified at the means for processing commands, are identified in a submission queue of an accessing device, or both.

20. The device of claim 17 , wherein the means for generating is configured to include padding in the write block in response to expiration of a timer that is initiated responsive to receipt of the particular write command.

Assignments (5)
PARTIAL RELEASE OF SECURITY INTERESTS Recorded Apr 25, 2025
From: JPMORGAN CHASE BANK, N.A., AS AGENT
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 071382/0001 →
SECURITY AGREEMENT Recorded Apr 25, 2025
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 071050/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 31, 2024
From: SANDISK TECHNOLOGIES LLC
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 069796/0423 →
CHANGE OF NAME Recorded May 25, 2016
From: SANDISK TECHNOLOGIES INC
To: SANDISK TECHNOLOGIES LLC
Reel/Frame 038807/0807 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 24, 2014
From: VISHNE, GADI; EREZ, ERAN; ROZENTAL, ROMAN; MARIMONT, POLINA; HAHN, JUDAH GAMLIEL
To: SANDISK TECHNOLOGIES INC.
Reel/Frame 034253/0240 →
Continuity (1)
Related Publication 20160147671A1 · May 26, 2016