IP Library Granted Patent US 10,585,749
Granted Patent B2
US 10,585,749 · App. 15/789,884 · Granted Mar 10, 2020

System and method for distributed erasure coding

Inventors: Ramdas P. Kachare (Cupertino, CA); Fred Worley (San Jose, CA); Stephen Fischer (Mountain View, CA); Oscar Pinto (San Jose, CA)
Assignee: Samsung Electronics Co., Ltd.
G06F11/1076H03M13/154
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,585,749
App. No.
15/789,884
Granted
Mar 10, 2020
Kind
B2
Abstract

A system and method for distributed erasure coding. A plurality of storage devices is directly connected to one or more host computers, without an intervening central controller distributing data to the storage devices and providing data protection. Parity codes are stored in one or more dedicated storage devices or distributed over a plurality of the storage devices. When a storage device receives a write command, it calculates a partial parity code, and, if the parity code for the data being written is on another storage device, sends the partial parity code to the other storage device, which updates the parity code using the partial parity code.

Claims (101)

1. A method for storing data in an array of storage devices, the method comprising:

receiving, by a first storage device of the array of storage devices, a write command from a host computer, the write command including write data to be written to the first storage device at a logical block address in the first storage device;

retrieving by the first storage device, old data stored at the logical block address;

calculating, by the first storage device, from the old data and the write data, a partial parity code, the partial parity code being a number that:

when evaluated, together with an old parity code,

the old parity code being a data protection code for an old virtual stripe of data including the old data and extending across all of the array of storage devices,

results in a new parity code, the new parity code being a data protection code for a new virtual stripe of data extending across all of the array of storage devices and including the write data instead of the old data;

evaluating, by a second storage device of the array of storage devices, the old parity code together with the partial parity code, to generate the new parity code;

storing, by a third storage device of the array of storage devices, the new parity code; and

storing, by the first storage device, the write data.

2. The method of claim 1 , wherein the third storage device is a same storage device as the second storage device.

3. The method of claim 1 , further comprising:

calculating, by the first storage device, an identifier of the second storage device;

determining whether the identifier of the second storage device is different from an identifier of the first storage device; and

when the identifier of the second storage device is different from the identifier of the first storage device, sending, to the second storage device, a parity message comprising the partial parity code.

4. The method of claim 3 , wherein the write command further includes a namespace identifier, and the calculating of the identifier of the second storage device comprises:

obtaining a namespace offset from a namespace offset table based on the namespace identifier; and

calculating a virtual stripe identifier as the sum of the namespace offset and the logical block address.

5. The method of claim 4 , wherein the calculating of the identifier of the second storage device comprises:

retrieving, by the first storage device, from a first table in the first storage device, a stride size; and

calculating:

the virtual stripe identifier

modulo

the stride size.

6. The method of claim 5 , wherein the sending, to the second storage device, of the parity message comprises:

retrieving, by the first storage device, from a second table in the first storage device, an address of the second storage device; and

sending the parity message to the address of the second storage device.

7. The method of claim 6 , wherein:

the first storage device is an Ethernet storage device;

the second storage device is an Ethernet storage device; and

the address of the second storage device is an Ethernet address of the second storage device.

8. The method of claim 6 , further comprising storing, by a storage system management circuit, the address of the second storage device in the second table in the first storage device.

9. The method of claim 8 , further comprising storing, by the storage system management circuit, the stride size in the first table.

10. The method of claim 6 , wherein:

the first storage device is connected to a peripheral component interconnect express switch;

the second storage device is connected to the peripheral component interconnect express switch; and

the address of the second storage device is a peripheral component interconnect express address of the second storage device.

11. The method of claim 1 , wherein each of the old parity code and the new parity code is a data protection code utilized in a data protection system selected from the group consisting of RAID 4, RAID 5, RAID 6, and erasure code data protection systems.

12. The method of claim 1 , wherein the first storage device is connected to a storage interface switch, the method further comprising, upon failure or disconnection of the first storage device:

reconfiguring, by a storage system management circuit, the storage interface switch to route storage commands addressed to the first storage device to the storage system management circuit; and

sending, in response to a received storage command, by the storage system management circuit, the same command completion, through the storage interface switch, as the first storage device would have sent were it present and operating correctly.

13. The method of claim 12 , further comprising:

recovering, by the storage system management circuit, data previously stored on the first storage device; and

storing the recovered data on a fourth storage device.

14. The method of claim 1 , wherein the first storage device is connected to a storage interface switch, the method further comprising, upon failure or disconnection of the first storage device:

reconfiguring, by a storage system management circuit, the storage interface switch to route storage commands addressed to the first storage device to a fourth storage device; and

sending, in response to a received storage command, by the fourth storage device, the same command completion, through the storage interface switch, as the first storage device would have sent were it present and operating correctly.

15. The method of claim 1 , wherein the first storage device is connected to a storage interface switch, the method further comprising, upon occurrence of a discrete failure in the first storage device and receipt of a read command:

recovering data affected by the discrete failure, by the first storage device; and

sending, in response to the read command, by the first storage device, the same command completion, through the storage interface switch, as the first storage device would have sent had the discrete failure not occurred.

16. The method of claim 1 , wherein the first storage device is connected to a storage interface switch, the method further comprising, upon occurrence of a discrete failure in the first storage device and receipt of a read command:

recovering data affected by the discrete failure, by a storage system management circuit; and

sending, in response to the read command, by the storage system management circuit, the same command completion, through the storage interface switch, as the first storage device would have sent had the discrete failure not occurred.

17. A system for storing data, comprising an array of storage devices, the system being configured to:

receive, by a first storage device of the array of storage devices, a write command from a host computer, the write command including write data to be written to the first storage device at a logical block address in the first storage device;

retrieve by the first storage device, old data stored at the logical block address;

calculate, by the first storage device, from the old data and the write data, a partial parity code, the partial parity code being a number that:

when evaluated, together with an old parity code,

the old parity code being a data protection code for an old virtual stripe of data including the old data and extending across all of the array of storage devices,

results in a new parity code, the new parity code being a data protection code for a new virtual stripe of data extending across all of the array of storage devices and including the write data instead of the old data;

evaluate, by a second storage device of the array of storage devices, the old parity code together with the partial parity code, to generate the new parity code;

store, by a third storage device of the array of storage devices, the new parity code; and

store, by the first storage device, the write data.

18. The system of claim 17 , wherein the third storage device is a same storage device as the second storage device.

19. The system of claim 17 , further configured to:

calculate, by the first storage device, an identifier of the second storage device;

determine whether the identifier of the second storage device is different from an identifier of the first storage device; and

when the identifier of the second storage device is different from the identifier of the first storage device, sending, to the second storage device, a parity message comprising the partial parity code.

20. The system of claim 19 , wherein the calculating of the identifier of the second storage device comprises:

retrieving, by the first storage device, from a first table in the first storage device, a stride size; and

calculating:

the logical block address

modulo

the stride size.

21. The system of claim 19 , wherein the sending, to the second storage device, of the parity message comprises:

retrieving, by the first storage device, from a second table in the first storage device, an address of the second storage device; and

sending the parity message to the address of the second storage device.

22. The system of claim 21 , wherein:

the first storage device is an Ethernet storage device;

the second storage device is an Ethernet storage device; and

the address of the second storage device is an Ethernet address of the second storage device.

23. The system of claim 21 , further comprising a storage system management circuit configured to store the address of the second storage device in the second table in the first storage device.

24. The system of claim 21 , wherein:

the first storage device is connected to a peripheral component interconnect express switch;

the second storage device is connected to the peripheral component interconnect express switch; and

the address of the second storage device is a peripheral component interconnect express address of the second storage device.

25. The system of claim 17 , wherein each of the old parity code and the new parity code is a data protection code utilized in a data protection system selected from the group consisting of RAID 4, RAID 5, RAID 6, and erasure code data protection systems.

26. A system for storing data, comprising:

an array of storage devices; and

storage system management means,

the system being configured to:

receive, by a first storage device of the array of storage devices, a write command from a host computer, the write command including write data to be written to the first storage device at a logical block address in the first storage device;

retrieve by the first storage device, old data stored at the logical block address;

calculate, by the first storage device, from the old data and the write data, a partial parity code, the partial parity code being a number that:

when evaluated, together with an old parity code,

the old parity code being a data protection code for an old virtual stripe of data including the old data and extending across all of the array of storage devices,

results in a new parity code, the new parity code being a data protection code for a new virtual stripe of data extending across all of the array of storage devices and including the write data instead of the old data;

evaluate, by a second storage device of the array of storage devices, the old parity code together with the partial parity code, to generate the new parity code;

store, by a third storage device of the array of storage devices, the new parity code; and

store, by the first storage device, the write data.

27. The system of claim 26 , wherein the storage system management means is configured to store, in each of the storage devices, an address of another storage device.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 26, 2017
From: KACHARE, RAMDAS P.; WORLEY, FRED; FISCHER, STEPHEN; PINTO, OSCAR
To: SAMSUNG ELECTRONICS CO., LTD
Reel/Frame 043962/0873 →
Continuity (2)
Provisional Application 62543789 · Aug 10, 2017
Related Publication 20190050289A1 · Feb 14, 2019
Cited By (12)
US 12,210,415 US 12,222,809 US 12,222,810 US 12,242,349 US 12,259,784 US 12,259,785 US 12,259,786 US 12,271,266 US 12,298,853 US 12,306,717 US 12,321,236 US 12,399,782