IP Library Granted Patent US 11,928,360
Granted Patent B2
US 11,928,360 · App. 17/177,647 · Granted Mar 12, 2024

Command slot management for memory devices

Inventors: Shay Benisty (Beer Sheva, IL); Karin Inbar (Ramat Hasharon, IL)
Assignee: Western Digital Technologies, Inc.
G06F3/0659G06F3/0604G06F3/0611G06F3/0653G06F3/0679
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,928,360
App. No.
17/177,647
Granted
Mar 12, 2024
Kind
B2
Abstract

A data storage device including a non-volatile memory device including one or more non-volatile memory sets and one or more endurance groups. Each of the endurance groups includes at least one of the non-volatile memory sets. The data storage device includes a controller coupled to the non-volatile memory device. The controller is configured to receive a pending command message from a host interface, where the received pending command message includes a command configured to be executed by a first endurance group of the number of endurance groups. The controller is further configured to determine an assigned command slot for storing the command, where the assigned command slot is selected form one of a private command slot pool associated with the first endurance group or a shared command slot pool, fetch the command from the host device, and store the fetched command in the assigned command slot.

Claims (86)

1. A data storage device, comprising:

a non-volatile memory device including a plurality of non-volatile memory sets and a plurality of endurance groups, wherein each endurance group of the plurality of endurance groups includes at least one of the plurality of non-volatile memory sets, and wherein the each endurance group is grouped together for wear-leveling across a portion of the plurality of non-volatile memory sets that is included in the each endurance group, the portion being less than all of the plurality of non-volatile memory sets; and

a controller coupled to the non-volatile memory device and configured to:

receive a pending command message from a host interface, wherein the received pending command message includes a command configured to be executed by a first endurance group of the plurality of endurance groups;

determine an assigned command slot for storing the command, wherein the assigned command slot is selected from one of two command slot pools of the non-volatile memory device, the two command slot pools including a private command slot pool associated with the first endurance group and a shared command slot pool that is shared by two or more of the plurality of endurance groups;

fetch the command from a host device; and

store the fetched command in the assigned command slot;

determine whether a number of shared command slots assigned to commands configured to be executed by the first endurance group exceeds a predetermined threshold; and

deny a shared command slot from being assigned to the first endurance group in response to determining that the number of shared command slots assigned to commands associated with the first endurance group exceeds the predetermined threshold.

2. The data storage device of claim 1 , wherein, to determine the assigned command slot for storing the command, the controller is further configured to:

determine whether one or more private command slots are available within the private command slot pool associated with the first endurance group;

assign the fetched command to a first private command slot within the private command slot pool associated with the first endurance group in response to determining that the first private command slot is available within the private command slot pool associated with the first endurance group;

determine whether one or more shared command slots are available within the shared command slot pool in response to determining that no private command slots are available within the private command slot pool associated with the first endurance group; and

assign the fetched command to a first shared command slot within the shared command slot pool in response to determining that the first shared command slot is available within the shared command slot pool.

3. The data storage device of claim 1 , wherein the controller is further configured to:

receive a command completion request for a first command;

determine a first command slot associated with the first command;

determine whether the first command slot is a private command slot;

release the first command slot to the private command slot pool associated with the private command slot in response to determining that the first command slot is the private command slot; and

release the first command slot to the shared command slot pool in response to determining that the first command slot is not the private command slot.

4. The data storage device of claim 3 , wherein the controller is further configured to update a shared command slot pool status in response to releasing the first command slot to the shared command slot pool, wherein updating the shared command slot pool status includes updating a number of commands assigned to command slots in the shared command slot pool.

5. The data storage device of claim 1 , wherein the controller is further configured to:

receive a command completion request for a first command, wherein the first command is stored in a first command slot;

determine whether one or more shared command slots in the shared command slot pool are allocated, wherein a shared command slot is determined to be allocated based on the shared command slot storing a second command;

release the first command slot to the shared command slot pool in response to determining that the one or more shared command slots are allocated; and

release the first command slot to a first private command pool in response to determining that no shared command slots are allocated.

6. The data storage device of claim 5 , wherein the first private command pool is assigned to an endurance group of the plurality of endurance groups that executed the first command.

7. The data storage device of claim 5 , wherein the controller is further configured to:

update a status of a first private command slot pool in response to releasing the first command slot to the first private command slot pool; and

update a status of the shared command slot pool in response to releasing the first command slot to the shared command slot pool.

8. The data storage device of claim 1 , wherein the shared command slot pool is accessible to and shared by each of the plurality of endurance groups,

wherein the each of the plurality of endurance groups has a minimal performance and guaranteed quality of service (QoS) that is supported by the each of the plurality of endurance groups, and

wherein the each of the plurality of endurance groups broadcasts the minimal performance and guaranteed QoS to at least one of the controller or the host device.

9. The data storage device of claim 1 , wherein the predetermined threshold is equal to a number of shared command slots assigned to the first endurance group of the plurality of endurance groups.

10. A method performed by a controller coupled to a non-volatile memory device, the method comprising:

receiving a pending command message from a host interface, wherein the received pending command message includes a command configured to be executed by a first endurance group of a plurality of endurance groups;

determining an assigned command slot for storing the command, wherein the assigned command slot is selected from one of two command slot pools of the non-volatile memory device, the two command slot pools including a private command slot pool associated with the first endurance group and a shared command slot pool that is shared by two or more of the plurality of endurance groups;

fetching the command from a host device;

storing the fetched command in the assigned command slot;

determining whether a number of shared command slots assigned to commands configured to be executed by the first endurance group exceeds a predetermined threshold; and

denying a shared command slot from being assigned to the first endurance group in response to determining the number of shared command slots assigned to commands associated with the first endurance group exceeds the predetermined threshold;

wherein each endurance group of the plurality of endurance groups is grouped together for wear-leveling across a portion of a plurality of non-volatile memory sets that is included in the each endurance group, the portion being less than all of the plurality of non-volatile memory sets.

11. The method of claim 10 , wherein determining the assigned command slot for storing the command comprises:

determining whether one or more private command slots are available within the private command slot pool associated with the first endurance group;

assigning the fetched command to a first private command slot within the private command slot pool associated with the first endurance group in response to determining that the first private command slot is available within the private command slot pool associated with the first endurance group;

determining whether one or more shared command slots are available within the shared command slot pool in response to determining that no private command slots are available within the private command slot pool associated with the first endurance group; and

assign the fetched command to a first shared command slot within the shared command slot pool in response to determining that the first shared command slot is available within the shared command slot pool.

12. The method of claim 10 , further comprising:

receiving a command completion request for a first command;

determining a first command slot associated with the first command;

determining whether the first command slot is a private command slot;

releasing the first command slot to the private command slot pool associated with the private command slot in response to determining that the first command slot is the private command slot; and

releasing the first command slot to the shared command slot pool in response to determining that the first command slot is not the private command slot.

13. The method of claim 12 , further comprising:

updating a shared command slot pool status in response to releasing the first command slot to the shared command slot pool, wherein updating the shared command slot pool status includes updating a number of commands assigned to command slots in the shared command slot pool.

14. The method of claim 10 , further comprising:

receiving a command completion request for a first command, wherein the first command is stored in a first command slot;

determining whether one or more shared command slots in the shared command slot pool are allocated, wherein a shared command slot is determined to be allocated based on the shared command slot storing a second command;

releasing the first command slot to the shared command slot pool in response to determining that the one or more shared command slots are allocated; and

releasing the first command slot to a first private command pool in response to determining that no shared command slots are allocated.

15. The method of claim 10 , wherein the predetermined threshold is equal to a number of shared command slots assigned to the first endurance group of the plurality of endurance groups.

16. An apparatus, comprising:

means for receiving a pending command message from a host interface, wherein the received pending command message includes a command configured to be executed by a first endurance group of a plurality of endurance groups;

means for determining an assigned command slot for storing the command, wherein the assigned command slot is selected from one of two command slot pools of the apparatus, the two command slot pools including a private command slot pool associated with the first endurance group and a shared command slot pool that is shared by two or more of the plurality of endurance groups;

means for determining whether a number of shared command slots assigned to commands configured to be executed by the first endurance group exceeds a predetermined threshold;

means for denying a shared command slot from being assigned to the first endurance group in response to determining the number of shared command slots assigned to commands associated with the first endurance group exceeds the predetermined threshold;

means for fetching the command from a host device; and

means for storing the fetched command in the assigned command slot,

wherein each endurance group of the plurality of endurance groups is grouped together for wear-leveling across a portion of a plurality of non-volatile memory sets that is included in the each endurance group, the portion being less than all of the plurality of non-volatile memory sets.

17. The apparatus of claim 16 , further comprising:

means for determining whether one or more private command slots are available within the private command slot pool associated with the first endurance group;

means for assigning the fetched command to a first private command slot within the private command slot pool associated with the first endurance group in response to determining that the first private command slot is available within the private command slot pool associated with the first endurance group;

means for determining whether one or more shared command slots are available within the shared command slot pool in response to determining that no private command slots are available within the private command slot pool associated with the first endurance group; and

means for assigning the fetched command to a first shared command slot within the shared command slot pool in response to determining that the first shared command slot is available within the shared command slot pool.

18. The apparatus of claim 16 , further comprising:

means for receiving a command completion request for a first command;

means for determining a first command slot associated with the first command;

means for determining whether the first command slot is a private command slot;

means for releasing the first command slot to the private command slot pool associated with the private command slot in response to determining that the first command slot is the private command slot; and

means for releasing the first command slot to the shared command slot pool in response to determining that the first command slot is not the private command slot.

19. The apparatus of claim 16 , further comprising:

means for receiving a command completion request for a first command, wherein the first command is stored in a first command slot;

means for determining whether one or more shared command slots in the shared command slot pool are allocated, wherein a shared command slot is determined to be allocated based on the shared command slot storing a second command;

means for releasing the first command slot to the shared command slot pool in response to determining that the one or more shared command slots are allocated; and

means for releasing the first command slot to a first private command pool in response to determining that no shared command slots are allocated.

20. The apparatus of claim 16 , wherein the predetermined threshold is equal to a number of shared command slots assigned to the first endurance group of the plurality of endurance groups.

Assignments (11)
SECURITY AGREEMENT Recorded Apr 25, 2025
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 071050/0001 →
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 →
PATENT COLLATERAL AGREEMENT Recorded Aug 23, 2024
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS THE AGENT
Reel/Frame 068762/0494 →
CHANGE OF NAME Recorded Jun 27, 2024
From: SANDISK TECHNOLOGIES, INC.
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 067982/0032 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 29, 2024
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 067567/0682 →
PATENT COLLATERAL AGREEMENT - DDTL LOAN AGREEMENT Recorded Aug 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 067045/0156 →
PATENT COLLATERAL AGREEMENT - A&R LOAN AGREEMENT Recorded Aug 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 064715/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 17, 2023
From: KIOXIA TECHNOLOGY UK LTD
To: KIOXIA AMERICA, INC.
Reel/Frame 063668/0970 →
RELEASE OF SECURITY INTEREST AT REEL 056285 FRAME 0292 Recorded Feb 8, 2022
From: JPMORGAN CHASE BANK, N.A.
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 058982/0001 →
SECURITY INTEREST Recorded May 19, 2021
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS AGENT
Reel/Frame 056285/0292 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 17, 2021
From: BENISTY, SHAY; INBAR, KARIN
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 055296/0113 →
Continuity (2)
Provisional Application 63116326 · Nov 20, 2020
Related Publication 20220164140A1 · May 26, 2022