IP Library Granted Patent US 10,635,341
Granted Patent B2
US 10,635,341 · App. 15/953,373 · Granted Apr 28, 2020

Multi-stream journaled replay

Inventors: David George Dreyer (Rochester, MN); Colin Christopher McCambridge (Rochester, MN); Phillip Peterson (Rochester, MN); Sanjay Subbarao (Irvine, CA)
Assignee: Western Digital Technologies, Inc.
G06F3/0647G06F3/064G06F3/0619G06F3/0652G06F3/0679G06F3/0688G06F12/0246G06F12/1009G06F2212/1041G06F2212/2022G06F2212/7201G06F2212/7205
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 10,635,341
App. No.
15/953,373
Granted
Apr 28, 2020
Kind
B2
Abstract

A method of indirection replay for a flash storage system includes writing data, in a host stream, to blocksets of the flash storage system. The host blocksets are assigned a major sequence number incremented from the most recently closed host blockset. The method includes writing an indirection journal to each host blockset which are associated with the assigned major sequence number. The method includes writing data, in a garbage collection (GC) stream, to other blocksets of the flash storage system. The GC blocksets are assigned a major sequence number, based on the most recently closed host blockset, and a minor sequence number, incremented from the most recently closed GC blockset. The method includes writing an indirection journal to each GC blockset which are associated with the assigned major and minor sequence numbers. The indirection table is constructed by replaying the journals of the blocksets in order of major sequence and minor sequence numbers.

Claims (68)

1. A method comprising:

opening, in a storage device, a first stream comprising a first plurality of blocksets for storage of information in the first plurality of blocksets;

opening, in the storage device concurrently with the first stream, a second stream comprising a second plurality of blocksets for storage of information in the second plurality of blocksets;

writing respective first sequence information to each of the first plurality of blocksets, wherein each written first sequence information includes a first sequence number incremented from a previous first sequence number written to a most recently closed blockset of the first plurality of blocksets;

writing respective second sequence information to each of the second plurality of blocksets, each written second sequence information comprising a previous first sequence number written to the most recently closed blockset of the first plurality of blocksets and a second sequence number incremented from a previous second sequence number written to a most recently closed blockset of the second plurality of blocksets; and

constructing an indirection table in a memory of the storage device by reading journal information from the first and second pluralities of blocksets, ordered first according to respective first sequence numbers and second according to respective second sequence numbers.

2. The method of claim 1 , further comprising:

writing, to each of the first plurality of blocksets, journal information describing changes to a mapping of respective first virtual to physical addresses, the journal information corresponding to data written to the blockset of the first plurality of blocksets and being associated with the first sequence number written to the blockset of the first plurality of blocksets;

writing, to each of the second plurality of blocksets, journal information describing changes to a mapping of respective second virtual to physical addresses, the journal information corresponding to data written to the blockset of the second plurality of blocksets and being associated with the first and second sequence numbers written to the blockset of the second plurality of blocksets.

3. The method of claim 2 , further comprising:

writing, for each of the first and second plurality of blocksets, the journal information as the blockset is updated with the data written to the blockset.

4. The method of claim 1 , wherein constructing the indirection table comprises:

ordering the first plurality of blocksets according to respective first sequence numbers;

ordering the second plurality of blocksets according to respective first sequence numbers; and

ordering blocksets of the second plurality of blocksets having a same first sequence number according to respective second sequence numbers.

5. The method of claim 1 , wherein constructing the indirection table comprises:

identifying, in the storage device, the first plurality of blocksets and the second plurality of blocksets based on identifying journal information within the respective blocksets;

organizing the first plurality of blocksets into a first list sorted by first sequence numbers;

organizing the second plurality of blocksets into a second list, first sorted by first sequence numbers and then by second sequence numbers;

replaying journal information from the organized first and second pluralities of blocksets based on identifying and replaying blocksets from the first list until a first sequence number of a currently identified blockset of the first list matches a first sequence number of a blockset at a beginning of the second list, and then identifying and replaying blocksets from the second list having the same sequence number as the currently identified blockset of the first list, and then identifying and replaying a next blockset from the first list.

6. The method of claim 5 , wherein constructing the indirection table comprises:

wherein identifying the first and second pluralities of blocksets comprises identifying, before organizing the first and second plurality of blocksets into respective first and second lists, that the first and second plurality of blocksets as having valid data.

7. The method of claim 1 , wherein opening the first and second streams comprises opening a block of the second plurality of blocksets after a first blockset of the first plurality of blocksets is closed and while a second blockset of the first plurality of blocksets is open, and

wherein a respective blockset of the first or second plurality of blocksets is closed when the respective blockset is no able to be written to.

8. The method of claim 1 , wherein the first stream is utilized in connection with write operations initiated by a host device, and the second stream is utilized in connection with garbage collection operations performed by the storage device.

9. The method of claim 1 , wherein the opening of the first and second stream occurs prior to a loss of power in the storage device, and wherein the indirection table is constructed following the power being restored.

10. A storage system, comprising:

a non-transitory volatile memory medium;

a non-transitory non-volatile memory medium; and

a controller configured to:

open a first stream comprising a first plurality of blocksets for storage of information in the first plurality of blocksets on the non-volatile memory;

open, concurrently with the first stream, a second stream comprising a second plurality of blocksets for storage of information in the second plurality of blocksets on the non-volatile memory;

write respective first sequence information to each of the first plurality of blocksets, wherein each written first sequence information includes a first sequence number incremented from a previous first sequence number written to a most recently closed blockset of the first plurality of blocksets;

write respective second sequence information to each of the second plurality of blocksets, each written second sequence information comprising a previous first sequence number written to the most recently closed blockset of the first plurality of blocksets and a second sequence number incremented from a previous second sequence number written to a most recently closed blockset of the second plurality of blocksets; and

construct an indirection table in the volatile memory medium by reading journal information from the first and second pluralities of blocksets, ordered first according to respective first sequence numbers and second according to respective second sequence numbers.

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

write, to each of the first plurality of blocksets, journal information describing changes to a mapping of respective first virtual to physical addresses, the journal information corresponding to data written to the blockset of the first plurality of blocksets and being associated with the first sequence number written to the blockset of the first plurality of blocksets;

write, to each of the second plurality of blocksets, journal information describing changes to a mapping of respective second virtual to physical addresses, the journal information corresponding to data written to the blockset of the second plurality of blocksets and being associated with the first and second sequence numbers written to the blockset of the second plurality of blocksets.

12. The storage system of claim 11 , wherein the controller is further configured to:

write, for each of the first and second plurality of blocksets, the journal information as the blockset is updated with the data written to the blockset.

13. The storage system of claim 10 , wherein the controller being configured to construct the indirection table comprises the controller being configured to:

order the first plurality of blocksets according to respective first sequence numbers;

order the second plurality of blocksets according to respective first sequence numbers; and

order blocksets of the second plurality of blocksets having a same first sequence number according to respective second sequence numbers.

14. The storage system of claim 10 , wherein the controller being configured to construct the indirection table comprises the controller being configured to:

identify, from the non-volatile memory medium, the first plurality of blocksets and the second plurality of blocksets based on identifying journal information within the respective blocksets;

organize the first plurality of blocksets into a first list sorted by first sequence numbers;

organize the second plurality of blocksets into a second list, first sorted by first sequence numbers and then by second sequence numbers;

replay journal information from the organized first and second pluralities of blocksets based on identifying and replaying blocksets from the first list until a first sequence number of a currently identified blockset of the first list matches a first sequence number of a blockset at a beginning of the second list, and then identify and replay blocksets from the second list having the same sequence number as the currently identified blockset of the first list, and then identify and replay a next blockset from the first list.

15. The storage system of claim 10 , wherein the controller being configured to open the first and second streams comprises the controller being configured to open a block of the second plurality of blocksets after a first blockset of the first plurality of blocksets is closed and while a second blockset of the first plurality of blocksets is open, and

wherein the controller is further configured to close a respective blockset of the first or second plurality of blocksets when the respective blockset is no able to be written to.

16. The storage system of claim 10 , wherein the controller is configured to utilize the first stream in connection with write operations initiated by a host device, and utilize the second stream in connection with garbage collection operation, and wherein the controller is configured to open of the first and second stream prior to a loss of power in the system, and to construct the indirection table following the power being restored.

17. A machine-readable non-transitory media encoded with executable instructions which, when executed by a processor, cause the processor to perform operations comprising:

opening, in a storage device, a first stream comprising a first plurality of blocksets for storage of information in the first plurality of blocksets;

opening, in the storage device concurrently with the first stream, a second stream comprising a second plurality of blocksets for storage of information in the second plurality of blocksets;

writing respective first sequence information to each of the first plurality of blocksets, wherein each written first sequence information includes a first sequence number incremented from a previous first sequence number written to a most recently closed blockset of the first plurality of blocksets;

writing respective second sequence information to each of the second plurality of blocksets, each written second sequence information comprising a previous first sequence number written to the most recently closed blockset of the first plurality of blocksets and a second sequence number incremented from a previous second sequence number written to a most recently closed blockset of the second plurality of blocksets; and

constructing an indirection table in a memory of the storage device by reading journal information from the first and second pluralities of blocksets, ordered first according to respective first sequence numbers and second according to respective second sequence numbers.

18. The machine-readable non-transitory media of claim 17 , wherein the operations further comprise:

writing, to each of the first plurality of blocksets, journal information describing changes to a mapping of respective first virtual to physical addresses, the journal information corresponding to data written to the blockset of the first plurality of blocksets and being associated with the first sequence number written to the blockset of the first plurality of blocksets;

writing, to each of the second plurality of blocksets, journal information describing changes to a mapping of respective second virtual to physical addresses, the journal information corresponding to data written to the blockset of the second plurality of blocksets and being associated with the first and second sequence numbers written to the blockset of the second plurality of blocksets.

19. The machine-readable non-transitory media of claim 17 , wherein the operations further comprise:

identifying, in the storage device, the first plurality of blocksets and the second plurality of blocksets based on identifying journal information within the respective blocksets;

organizing the first plurality of blocksets into a first list sorted by first sequence numbers;

organizing the second plurality of blocksets into a second list, first sorted by first sequence numbers and then by second sequence numbers;

replaying journal information from the organized first and second pluralities of blocksets based on identifying and replaying blocksets from the first list until a first sequence number of a currently identified blockset of the first list matches a first sequence number of a blockset at a beginning of the second list, and then identifying and replaying blocksets from the second list having the same sequence number as the currently identified blockset of the first list, and then identifying and replaying a next blockset from the first list.

20. The machine-readable non-transitory media of claim 17 , wherein opening the first and second streams comprises opening a block of the second plurality of blocksets after a first blockset of the first plurality of blocksets is closed and while a second blockset of the first plurality of blocksets is open, and

wherein a respective blockset of the first or second plurality of blocksets is closed when the respective blockset is no able to be written to.

Assignments (11)
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 →
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 →
RELEASE OF SECURITY INTEREST AT REEL 052915 FRAME 0566 Recorded Feb 8, 2022
From: JPMORGAN CHASE BANK, N.A.
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 059127/0001 →
SECURITY INTEREST Recorded Feb 6, 2020
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS AGENT
Reel/Frame 052915/0566 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 19, 2019
From: HGST NETHERLANDS B.V.
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 051381/0164 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 19, 2019
From: DREYER, DAVID GEORGE; MCCAMBRIDGE, COLIN CHRISTOPHER; PETERSON, PHILLIP; SUBBARAO, SANJAY
To: HGST NETHERLANDS B.V.
Reel/Frame 051337/0800 →