IP Library Granted Patent US 9,454,551
Granted Patent B2
US 9,454,551 · App. 14/210,135 · Granted Sep 27, 2016

System and method for management of garbage collection operation in a solid state drive

Inventors: Joao Alcantara (Irvine, CA); Vladimir Alves (Tustin, CA)
Assignee: NXGN Data, Inc.
G06F17/30306G06F3/0631
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,454,551
App. No.
14/210,135
Granted
Sep 27, 2016
Kind
B2
Abstract

A method of garbage collection in a storage device including a central processing unit (CPU), a self-organized fast release buffer (FRB), and a non-volatile memory, the method including receiving a command to perform garbage collection in a first block stripe of the non-volatile memory from the CPU, the command including a second block stripe to write to and valid logical block numbers (LBNs) corresponding to a first codewords (CWs) stored in the first block stripe, allocating space in a buffer memory of the FRB for storage of the first CWs, storing the first CWs into the allocated space in the buffer memory, transferring a second CWs to a plurality of physical addresses in the second block stripe of the non-volatile memory, and sending the valid LBNs and the plurality of physical addresses to the CPU to update a logical-to-physical table, wherein the second CWs is based on the first CWs.

Claims (84)

1. A method of garbage collection in a storage device comprising a central processing unit (CPU), a self-organized fast release buffer (FRB), and a non-volatile memory, the method comprising:

receiving, by the FRB, a command to perform garbage collection in a first block stripe of the non-volatile memory from the CPU, the command comprising a second block stripe to write to and a plurality of valid logical block numbers (LBNs) corresponding to a first plurality of codewords (CWs) stored in the first block stripe;

allocating space, by the FRB, in a buffer memory of the FRB for storage of the first plurality of CWs;

storing, by the FRB, the first plurality of CWs into the allocated space in the buffer memory;

transferring, by the FRB, a second plurality of CWs to a plurality of physical addresses in the second block stripe of the non-volatile memory; and

sending, by the FRB, the plurality of valid LBNs and the plurality of physical addresses to the CPU to update a logical-to-physical table,

wherein the second plurality of CWs is based on the first plurality of CWs,

wherein the buffer memory comprises a plurality of codeword (CW) spaces, each CW space of the plurality of CW spaces being associated with a CW index of a plurality of CW indexes, the CW indexes being stored in a CW pool of the FRB, and

wherein the allocating of the space in the buffer memory comprises:

determining, by the FRB, a count N (N being an integer greater than 1) of CWs of the first and second plurality of CWs;

retrieving, by the FRB, N CW indexes from the CW pool on a first-in-first-out basis;

removing, by the FRB, the N CW indexes from the CW pool; and

associating, by the FRB, the N CW indexes with the plurality of valid LBNs.

2. The method of claim 1 , wherein the second plurality of CWs is a same as the first plurality of CWs.

3. The method of claim 1 , further comprising reading the plurality of CWs from the first block stripe of the non-volatile memory one codeword at a time.

4. The method of claim 1 , wherein the transferring of the second plurality of CWs comprises:

determining, by the FRB, if a size of the CWs stored in the buffer memory is greater or equal to a size of a flash memory page; and

in response to the determination, transferring, by the FRB, the second plurality of CWs from the buffer memory to a channel controller for storage in a physical address in the non-volatile memory.

5. The method of claim 1 , wherein the transferring of the second plurality of CWs comprises:

receiving, by the FRB, a command to transfer the second plurality of CWs from the buffer memory to a channel controller for storage in a physical address in the non-volatile memory; and

transferring, by the FRB, the second plurality of CWs from the buffer memory to the channel controller,

wherein the command to transfer the second plurality of CWs is received when a size of the CWs stored in the buffer memory is greater or equal to a size of a flash memory page.

6. The method of claim 1 , wherein the plurality of CW indexes is added to the CW pool at time of initialization of the storage device.

7. The method of claim 1 , wherein the storing of the first plurality of CWs comprises storing the first plurality of CWs into N CW spaces of the buffer memory that are associated with the retrieved N CW indexes.

8. The method of claim 1 , further comprising de-allocating, by the FRB, the allocated space in the buffer memory.

9. The method of claim 8 , wherein the de-allocating of the allocated space in the buffer memory comprises adding, by the FRB, the removed N CW indexes to the CW pool.

10. The method of claim 1 , wherein the storing of the first plurality of CWs further comprises:

extracting, by the FRB, data from the stored first plurality of CWs;

organizing, by the FRB, the data into a second plurality of CWs; and

storing, by the FRB, the second plurality of CWs into the allocated space in the buffer memory.

11. The method of claim 10 , wherein the extracting of the data from the stored first plurality of CWs comprises:

instructing, by the FRB, an error correction code (ECC) engine to decode the first plurality of CWs and to generate a first plurality of payload sections and a corresponding first plurality of parity sections;

receiving, by the FRB, the first plurality of payload sections; and

combining, by the FRB, the first plurality of payload sections to recreate the data,

wherein bits of the first plurality of payload sections are corrected by the ECC engine based on the corresponding first plurality of parity sections.

12. The method of claim 1 , wherein the transferring of the second plurality of CWs comprises writing the second plurality of CWs to memory dies of the second block stripe that are not marked as invalid by the CPU.

13. A method of garbage collection in a storage device comprising a central processing unit (CPU), a self-organized fast release buffer (FRB), and a non-volatile memory, the method comprising:

receiving, by the FRB, a command to perform garbage collection in a first block stripe of the non-volatile memory from the CPU, the command comprising a second block stripe to write to and a plurality of valid logical block numbers (LBNs) corresponding to a first plurality of codewords (CWs) stored in the first block stripe;

allocating space, by the FRB, in a buffer memory of the FRB for storage of the first plurality of CWs;

storing, by the FRB, the first plurality of CWs into the allocated space in the buffer memory;

transferring, by the FRB, a second plurality of CWs to a plurality of physical addresses in the second block stripe of the non-volatile memory; and

sending, by the FRB, the plurality of valid LBNs and the plurality of physical addresses to the CPU to update a logical-to-physical table,

wherein the second plurality of CWs is based on the first plurality of CWs,

wherein the storing of the first plurality of CWs further comprises:

extracting, by the FRB, data from the stored first plurality of CWs;

organizing, by the FRB, the data into a second plurality of CWs; and

storing, by the FRB, the second plurality of CWs into the allocated space in the buffer memory,

wherein the extracting of the data from the stored first plurality of CWs comprises:

instructing, by the FRB, an error correction code (ECC) engine to decode the first plurality of CWs and to generate a first plurality of payload sections and a corresponding first plurality of parity sections;

receiving, by the FRB, the first plurality of payload sections; and

combining, by the FRB, the first plurality of payload sections to recreate the data,

wherein bits of the first plurality of payload sections are corrected by the ECC engine based on the corresponding first plurality of parity sections, and

wherein the organizing of the data into a second plurality of CWs comprises:

dividing, by the FRB, the data into a second plurality of payload sections; and

instructing, by the FRB, an ECC engine to encode the second plurality of payload sections and to generate a second plurality of parity sections;

receiving, by the FRB, the second plurality of parity sections from the FCC engine, each parity section of the second plurality of parity sections corresponding to a payload section of the second plurality of payload sections; and

combining, by the FRB, each payload section of the second plurality of payload sections with the corresponding one of the second plurality of parity sections to generate the second plurality of CWs.

14. The method of claim 13 , wherein each parity section of the second plurality of parity sections comprises one or more parity bits.

15. The method of claim 13 , wherein the FRB varies a size of each payload section of the second plurality of payload sections and instructs the ECC engine to vary a size of each parity section of the second plurality of parity sections based on one or more parameters comprising a state of the non-volatile memory at the second block stripe.

16. A storage device configured to perform garbage collection, the storage device comprising a central processing unit (CPU), a self-organized fast release buffer (FRB), and a non-volatile memory, the FRB comprising:

a processor; and

a memory having stored thereon instructions that, when executed by the processor, cause the processor to perform:

receiving a command to perform garbage collection in a first block stripe of the non-volatile memory from the CPU, the command comprising a second block stripe to write to and a plurality of valid logical block numbers (LBNs) corresponding to a first plurality of codewords (CWs) stored in the first block stripe;

allocating space in a buffer memory of the FRB for storage of the first plurality of CWs;

storing the first plurality of CWs into the allocated space in the buffer memory;

transferring a second plurality of CWs to a plurality of physical addresses in the second block stripe of the non-volatile memory; and

sending the plurality of valid LBNs and the plurality of physical addresses to the CPU to update a logical-to-physical table,

wherein the second plurality of CWs is based on the first plurality of CWs,

wherein the buffer memory comprises a plurality of codeword (CW) spaces, each CW space of the plurality of CW spaces being associated with a CW index of a plurality of CW indexes, the CW indexes being stored in a CW pool of the FRB, and

wherein the allocating of the space in the buffer memory comprises:

determining, by the FRB, a count N (N being an integer greater than 1) of CWs of the plurality of CWs;

retrieving, by the FRB, N CW indexes from the CW pool on a first-in-first-out basis;

removing, by the FRB, the N CW indexes from the CW pool; and

associating, by the FRB, the N CW indexes with the plurality of valid LBNs.

17. The storage device of claim 16 , wherein the second plurality of CWs is a same as the first plurality of CWs.

18. The storage device of claim 16 , wherein the transferring of the second plurality of CWs comprises writing the second plurality of CWs to memory dies of the second block stripe that are not marked as invalid by the CPU.

19. The storage device of claim 16 , wherein the storing of the first plurality of CWs comprises storing the first plurality of CWs into N CW spaces of the buffer memory that are associated with the retrieved N CW indexes.

20. The storage device of claim 16 , wherein the transferring of the second plurality of CWs comprises:

Determining if a size of the CWs stored in the buffer memory is greater or equal to a size of a flash memory page; and

in response to the determination, transferring the second plurality of CWs from the buffer memory to a channel controller for storage in a physical address in the non-volatile memory.

21. The storage device of claim 16 , wherein the transferring of the second plurality of CWs comprises:

Receiving a command to transfer the second plurality of CWs from the buffer memory to a channel controller for storage in a physical address in the non-volatile memory; and

transferring the second plurality of CWs from the buffer memory to the channel controller,

wherein the command to transfer the second plurality of CWs is received when a size of the CWs stored in the buffer memory is greater or equal to a size of a flash memory page.

Assignments (5)
CORRECTIVE ASSIGNMENT TO CORRECT THE NAME OF CONVEYING PARTY PREVIOUSLY RECORDED AT REEL: 69518 FRAME: 243. ASSIGNOR(S) HEREBY CONFIRMS THE ASSET PURCHASE AGREEMENT. Recorded Jan 29, 2025
From: NGD SYSTEMS, INC.
To: NETLIST, INC.
Reel/Frame 070163/0719 →
ASSET PURCHASE AGREEMENT Recorded Dec 5, 2024
From: CMBG-FBC NGD SYSTEMS, LLC
To: NETLIST, INC.
Reel/Frame 069518/0243 →
SECURITY INTEREST Recorded Nov 3, 2021
From: NGD SYSTEMS, INC.
To: SILICON VALLEY BANK
Reel/Frame 058012/0289 →
MERGER AND CHANGE OF NAME Recorded Oct 20, 2016
From: NXGN DATA, INC.; NGD SYSTEMS, INC.
To: NGD SYSTEMS, INC.
Reel/Frame 040448/0657 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 2, 2014
From: ALCANTARA, JOAO; ALVES, VLADIMIR
To: NXGN DATA, INC.
Reel/Frame 032587/0811 →
Continuity (1)
Related Publication 20150261797A1 · Sep 17, 2015