IP Library Granted Patent US 12,306,749
Granted Patent B2
US 12,306,749 · App. 18/355,771 · Granted May 20, 2025

Redundant storage across namespaces with dynamically allocated capacity in data storage devices

Inventors: Sridhar Sabesan (Bangalore, IN); Dinesh Babu (Bangalore, IN); Pavan Gururaj (Bangalore, IN)
Assignee: Western Digital Technologies, Inc.
G06F12/023G06F3/0604G06F3/0665G06F3/0689
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,306,749
App. No.
18/355,771
Granted
May 20, 2025
Kind
B2
Abstract

Systems, methods, and data storage devices for redundant storage of data across namespaces with dynamic capacity allocation are described. Data storage devices may support multiple host connections to multiple namespaces allocated in their non-volatile storage medium according to a storage protocol, such as non-volatile memory express (NVMe). Each namespace may initially be allocated with an allocated capacity. For at least some of the namespaces, a portion of the allocated capacity may be allocated to a floating namespace pool. A redundant array of independent disks (RAID) configuration may be established across the namespaces for redundant storage of host data. When the fill mark for one of the namespaces reaches a flexible capacity threshold, capacity from the floating namespace pool may be dynamically allocated to that namespace and removed from the floating namespace pool.

Claims (113)

1. A system, comprising:

at least one data storage device, wherein each data storage device of the at least one data storage device comprises:

a non-volatile storage medium configured to store host data for at least one host system; and

a host interface configured to communicate with the at least one host system using a storage protocol; and

a controller configured to:

determine a plurality of host connections to a plurality of namespaces in the at least one data storage device, wherein:

each namespace of the plurality of namespaces has a first allocated capacity;

at least one namespace of the plurality of namespaces is configured to allocate a portion of the first allocated capacity to a floating namespace pool; and

the portion of the first allocated capacity allocated to the floating namespace pool remains allocated to that at least one namespace until used by another namespace;

determine a redundant array of independent disks (RAID) configuration comprising a RAID set of namespaces from the plurality of namespaces;

store, based on the RAID configuration, host data to the RAID set of namespaces;

determine, for a target namespace of the RAID set of namespaces, whether a filled mark of the target namespace meets a flexible capacity threshold for the target namespace; and

allocate, responsive to the filled mark meeting the flexible capacity threshold, a capacity unit from the floating namespace pool to the target namespace to increase the first allocated capacity to a second allocated capacity.

2. The system of claim 1 , wherein:

the RAID set of namespaces comprises only namespaces in the non-volatile storage medium of a first data storage device of the at least one data storage device;

a first namespace of the RAID set of namespaces is configured to store a first block of host data; and

a second namespace of the RAID set of namespaces is configured to store a parity block based on the first block of host data.

3. The system of claim 1 , wherein the controller is further configured to:

determine a RAID capacity of each namespace of the RAID set of namespaces for the at least one data storage device; and

determine, based on a difference between the first allocated capacity and the RAID capacity of each namespace of the RAID set of namespaces, an unused capacity allocated to the floating namespace pool.

4. The system of claim 1 , wherein:

the at least one data storage device comprises a plurality of data storage devices; and

the RAID set of namespaces comprises namespaces on at least two data storage devices of the plurality of data storage devices.

5. The system of claim 1 , wherein the controller is further configured to:

receive a request for a new namespace in the plurality of namespaces;

determine, from the request, a flexible capacity flag;

selectively determine, based on the flexible capacity flag and for the new namespace, a number of capacity units from the new namespace to allocate to the floating namespace pool;

determine, from the request, a redundancy flag; and

selectively determine, based on the redundancy flag, that the new namespace is in the RAID set of namespaces.

6. The system of claim 1 , wherein:

the controller is further configured to:

determine, for each namespace of the plurality of namespaces, whether that namespace is an operating type selected from:

a fast filling namespace; or

a slow filling namespace; and

determine, responsive to allocating the capacity unit from the floating namespace pool and based on the operating type for each namespace of the plurality of namespaces, a source namespace for a physical allocation of the capacity unit;

the source namespace is selected from among slow filling namespaces; and

the first allocated capacity of the source namespace is reduced by the capacity unit.

7. The system of claim 6 , wherein:

the target namespace is a first namespace in the RAID set of namespaces; and

the source namespace is a second namespace in the RAID set of namespaces.

8. The system of claim 1 , wherein the controller is further configured to:

aggregate contributions to the floating namespace pool from the plurality of namespaces to determine a floating namespace capacity;

create at least one virtual namespace using a portion of the floating namespace capacity; and

attach the at least one virtual namespace to at least one host system.

9. The system of claim 8 , wherein:

the at least one virtual namespace comprises a plurality of virtual namespaces; and

the controller is further configured to:

determine a second RAID configuration comprised of a second RAID set of namespaces selected from the plurality of virtual namespaces; and

store, based on the second RAID configuration, host data to the plurality of virtual namespaces.

10. The system of claim 1 , wherein the controller is further configured to:

determine a hot spare capacity for the RAID configuration;

allocate the hot spare capacity from the floating namespace pool to a virtual namespace;

recover, responsive to a failure of a namespace in the RAID set of namespaces, data from the failed namespace to the virtual namespace; and

attach the virtual namespace to a host system previously attached to the failed namespace.

11. A computer-implemented method, comprising:

determining a plurality of host connections to a plurality of namespaces in a non-volatile storage medium of at least one data storage device, wherein:

each namespace of the plurality of namespaces has a first allocated capacity;

at least one namespace of the plurality of namespaces allocates a portion of the first allocated capacity to a floating namespace pool; and

the portion of the first allocated capacity allocated to the floating namespace pool remains allocated to that at least one namespace until used by another namespace;

determining a redundant array of independent disks (RAID) configuration comprising a RAID set of namespaces from the plurality of namespaces;

storing, based on the RAID configuration, host data to the RAID set of namespaces;

determining, for a target namespace of the RAID set of namespaces, whether a filled mark of the target namespace meets a flexible capacity threshold for the target namespace; and

allocating, responsive to the filled mark meeting the flexible capacity threshold, a capacity unit from the floating namespace pool to the target namespace to increase the first allocated capacity to a second allocated capacity.

12. The computer-implemented method of claim 11 , wherein:

the RAID set of namespaces comprises only namespaces in the non-volatile storage medium of a first data storage device of the at least one data storage device;

a first namespace of the RAID set of namespaces is configured to store a first block of host data; and

a second namespace of the RAID set of namespaces is configured to store a parity block based on the first block of host data.

13. The computer-implemented method of claim 11 , further comprising:

determining a RAID capacity of each namespace of the RAID set of namespaces for the at least one data storage device; and

determining, based on a difference between the first allocated capacity and the RAID capacity of each namespace of the RAID set of namespaces, an unused capacity allocated to the floating namespace pool.

14. The computer-implemented method of claim 11 , wherein:

the at least one data storage device comprises a plurality of data storage devices; and

the RAID set of namespaces comprises namespaces on at least two data storage devices of the plurality of data storage devices.

15. The computer-implemented method of claim 11 , further comprising:

receiving a request for a new namespace in the plurality of namespaces;

determining, from the request, a flexible capacity flag;

selectively determining, based on the flexible capacity flag and for the new namespace, a number of capacity units from the new namespace to allocate to the floating namespace pool;

determining, from the request, a redundancy flag; and

selectively determining, based on the redundancy flag, that the new namespace is in the RAID set of namespaces.

16. The computer-implemented method of claim 11 , further comprising:

determining, for each namespace of the plurality of namespaces, whether that namespace is an operating type selected from:

a fast filling namespace; or

a slow filling namespace; and

determining, responsive to allocating the capacity unit from the floating namespace pool and based on the operating type for each namespace of the plurality of namespaces, a source namespace for the physical allocation of the capacity unit, wherein:

the source namespace is selected from among slow filling namespaces;

the first allocated capacity of the source namespace is reduced by the capacity unit;

the target namespace is a first namespace in the RAID set of namespaces; and

the source namespace is a second namespace in the RAID set of namespaces.

17. The computer-implemented method of claim 11 , further comprising:

aggregating contributions to the floating namespace pool from the plurality of namespaces to determine a floating namespace capacity;

creating at least one virtual namespace using a portion of the floating namespace capacity; and

attaching the at least one virtual namespace to at least one host system.

18. The computer-implemented method of claim 17 , further comprising:

determining a second RAID configuration comprised of a second RAID set of namespaces selected from a plurality of virtual namespaces of the at least one virtual namespace; and

storing, based on the second RAID configuration, host data to the plurality of virtual namespaces.

19. The computer-implemented method of claim 11 , further comprising:

determining a hot spare capacity for the RAID configuration;

allocating the hot spare capacity from the floating namespace pool to a virtual namespace;

recovering, responsive to a failure of a namespace in the RAID set of namespaces, data from the failed namespace to the virtual namespace; and

attaching the virtual namespace to a host system previously attached to the failed namespace.

20. A data storage device comprising:

a processor;

a memory;

a non-volatile storage medium configured to store host data for at least one host system;

a host interface configured to communicate with the at least one host system using a storage protocol;

means for determining a plurality of host connections to a plurality of namespaces in the non-volatile storage medium, wherein:

each namespace of the plurality of namespaces has a first allocated capacity;

at least one namespace of the plurality of namespaces is configured to allocate a portion of the first allocated capacity to a floating namespace pool; and

the portion of the first allocated capacity allocated to the floating namespace pool remains allocated to that at least one namespace until used by another namespace;

means for determining a redundant array of independent disks (RAID) configuration comprising a RAID set of namespaces including the plurality of namespaces;

means for storing, based on the RAID configuration, host data to the RAID set of namespaces;

means for determining, for a target namespace of the RAID set of namespaces, whether a filled mark of the target namespace meets a flexible capacity threshold for the target namespace; and

means for allocating, responsive to the filled mark meeting the flexible capacity threshold, a capacity unit from the floating namespace pool to the target namespace to increase the first allocated capacity to a second allocated capacity.

Assignments (3)
PATENT COLLATERAL AGREEMENT- A&R Recorded Nov 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 065656/0649 →
PATENT COLLATERAL AGREEMENT - DDTL Recorded Nov 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 065657/0158 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 20, 2023
From: SABESAN, SRIDHAR; BABU, DINESH; GURURAJ, PAVAN
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 064329/0955 →
Continuity (2)
Provisional Application 63498037 · Apr 25, 2023
Related Publication 20240362161A1 · Oct 31, 2024
References Cited (26)
US 6209066B1 · Holzle · 2001 [cited by examiner]
US 9047216B2 · Soran · 2015 [cited by applicant]
US 10564857B2 · Benisty · 2020 [cited by applicant]
US 10768820B2 · Subramanian · 2020 [cited by applicant]
US 10866740B2 · Benisty · 2020 [cited by applicant]
US 11429293B1 · Vankamamidi · 2022 [cited by examiner]
US 12106134B2 · Pinto · 2024 [cited by applicant]
US 20070168634A1 · Morishita · 2007 [cited by examiner]
US 20090234897A1 · Qi · 2009 [cited by examiner]
US 20130067186A1 · Pronovost · 2013 [cited by examiner]
US 20140250269A1 · Shanbhag · 2014 [cited by examiner]
US 20160124843A1 · Kanno · 2016 [cited by applicant]
US 20170024160A1 · Feldman · 2017 [cited by examiner]
US 20180217951A1 · Benisty · 2018 [cited by applicant]
US 20190121543A1 · Frolikov · 2019 [cited by examiner]
US 20200401348A1 · Satoyama · 2020 [cited by examiner]
US 20210103399A1 · Lyu · 2021 [cited by examiner]
US 20210334207A1 · Kanno · 2021 [cited by applicant]
US 20220137844A1 · Goss · 2022 [cited by applicant]
US 20220391091A1 · Frolikov · 2022 [cited by examiner]
US 20230058424A1 · Frolikov · 2023 [cited by examiner]
US 20230143076A1 · Clifton · 2023 [cited by examiner]
US 20230185476A1 · Bert · 2023 [cited by examiner]
US 20230418516A1 · Weiss · 2023 [cited by examiner]
US 20240427523A1 · Gururaj · 2024 [cited by applicant]
Junyi Shu, Ruidong Zhu, Yun Ma, Gang Huang, Hong Mei, Xuanzhe Liu, and Xin Jin. Mar. 25, 2023. Disaggregated RAID Storage in Modern Datacenters. In Proceedings of the 28th ACM International Conference on Architectural S… [cited by examiner]