One embodiment provides a storage controller. The storage controller includes host data segmentation logic to divide, in response to a write command from a host domain to write a data payload to a storage device, the data payload into a plurality of data segments; cyclic redundancy check (crc) encode logic to generate a crc code for each data segment; and crc reordering encode logic to assign each crc code to another data segment among the plurality of data segments.
|
1. A storage controller, comprising:
host data segmentation circuitry to divide a data payload into a plurality of data segments, in response to a write command from a host domain to write the data payload to a storage device;
cyclic redundancy check (crc) encode circuitry to generate a plurality of crc codes, each of the plurality of crc codes originally paired with a corresponding one of the plurality of data segments;
crc reordering encode circuitry to shift each of the plurality of crc codes to pair with a new data segment different from an originally paired data segment, including any of a subsequent data segment, previous data segment, and random data segment relative to the originally paired data segment; and
wherein, based on one or more shifted crc codes, crc decode circuitry will produce a crc failure of all of the plurality of data segments, including data segments that were successfully written, if any of the plurality of data segments of the data payload were not successfully written before a system interruption event occurred.
9. A method comprising:
dividing, by host data segmentation circuitry, in response to a write command from a host domain to write a data payload to a storage device, the data payload into a plurality of data segments;
generating, by cyclic redundancy check (crc) encode circuitry, a plurality of cyclic redundancy check (crc) codes, each of the plurality of crc codes originally paired with a corresponding one of the plurality of data segments; and
shifting, by crc reordering encode circuitry, each of the plurality of crc codes to pair with a new data segment different from an originally paired data segment, including any of a subsequent data segment, previous data segment, and random data segment relative to the originally paired data segment; and
producing based on one or more shifted crc codes, by crc decode circuitry, a crc failure of all of the plurality of data segments, including data segments that were successfully written, if any of the plurality of data segments of the data payload were not successfully written before a system interruption event occurred.
17. A storage system, comprising:
a storage device having a plurality of sectors; and;
a storage controller comprising:
host data segmentation circuitry to divide a data payload into a plurality of data segments, in response to a write command from a host domain to write the data payload to the storage device;
cyclic redundancy check (crc) encode circuitry to generate a plurality of crc codes, each of the plurality of crc codes originally paired with a corresponding one of the plurality of data segments;
crc reordering encode circuitry to shift each of the plurality of crc codes to pair with a new data segment different from an originally paired data segment, including any of a subsequent data segment, previous data segment, and random data segment relative to the originally paired data segment; and
wherein, based on one or more shifted crc codes, crc decode circuitry will produce a crc failure of all of the plurality of data segments, including data segments that were successfully written, if any of the plurality of data segments of the data payload were not successfully written before a system interruption event occurred.
2. The storage controller of
3. The storage controller of
4. The storage controller of
5. The storage controller of
6. The storage controller of
crc reordering decode circuitry to, in response to a data read command from the host domain to read the data payload from the storage device, reassign a shifted crc code to the originally paired data segment;
crc decode circuitry to decode a reassigned crc code for each data segment to determine a first data integrity status; and
ECC decode circuitry to decode the ECC code of each sector-length portion to determine a second data integrity status.
7. The storage controller of
crc reordering decode circuitry to, in response to a data read command from the host domain to read the data payload from the storage device, reassign a shifted crc code to the originally paired data segment; and
crc decode circuitry to decode a reassigned crc code for each data segment to determine a data integrity status.
8. The storage controller of
10. The method of
dividing each of the plurality of data segments into a plurality of sector-length portions;
wherein each sector-length portion having a bit length based on a sector size of the storage device.
11. The method of
12. The method of
13. The method of
generating, except for the last sector-length portion of a data segment, a null field for each sector-length portion and assembling the null field and the ECC code for each sector-length portion; and
assembling, for the last sector-length portion of the data segment, the ECC code and a crc code from the originally paired data segment.
14. The method of
reassigning, in response to a data read command from the host domain to read the data payload from the storage device, a shifted crc code to the originally paired data segment; and
decoding a reassigned crc code for each data segment to determine a first data integrity status; and
decoding the ECC code of each sector-length portion to determine a second data integrity status.
15. The method of
reassigning, in response to a data read command from the host domain to read the data payload from the storage device, a shifted crc code to the originally paired data segment; and
decoding a reassigned crc code for each data segment to determine a data integrity status.
18. The storage system of
19. The storage system of
20. The storage system of
21. The storage system of
22. The storage system of
crc reordering decode circuitry to, in response to a data read command from the host domain to read the data payload from the storage device, reassign a shifted crc code to the originally paired data segment;
crc decode circuitry to decode a reassigned crc code for each respective one of the plurality of data segments to determine a first data integrity status; and
ECC decode circuitry to decode the ECC code of each sector-length portion to determine a second data integrity status.
23. The storage system of
crc reordering decode circuitry to, in response to a data read command from the host domain to read the data payload from the storage device, reassign a shifted crc code to the originally paired data segment; and
crc decode circuitry to decode a reassigned crc code for each data segment to determine a data integrity status.
24. The storage system of
|
The present disclosure relates to detecting silent data corruption for mass storage devices.
A sector is the smallest granularity of storage that the host can access on a storage device. Host commands address these sectors using a Logical Block Address (LBA) where each LBA points to a particular sector. The optimal sector size (512 bytes, 1 k, 2 k, 4 k, . . . ) varies depending on the host application requirement. However, on the implementation side, hardware and media layout optimizations (for performance, resilience and cost) dictates the media sector size. Typically, a host sector size is multiples of a media sector size. Host applications require that writes be atomic. That means either the entire host sector is either committed to media, or it is not. If a read of a partially committed (torn) host sector does not return a failure, the result is a silent data corruption.
Features and advantages of the claimed subject matter will be apparent from the following detailed description of embodiments consistent therewith, which description should be considered with reference to the accompanying drawings, wherein:
Although the following Detailed Description will proceed with reference being made to illustrative embodiments, many alternatives, modifications, and variations thereof will be apparent to those skilled in the art.
Storage device 104 may include, for example, solid state device (SSD) circuitry (e.g., non-volatile memory (NVM) circuitry), e.g., a storage medium that does not require power to maintain the state of data stored by the storage medium. Nonvolatile memory may include, but is not limited to, a NAND flash memory (e.g., a Triple Level Cell (TLC) NAND or any other type of NAND (e.g., Single Level Cell (SLC), Multi Level Cell (MLC), Quad Level Cell (QLC), etc.)), NOR memory, solid state memory (e.g., planar or three Dimensional (3D) NAND flash memory or NOR flash memory), storage devices that use chalcogenide phase change material (e.g., chalcogenide glass), byte addressable nonvolatile memory devices, ferroelectric memory, silicon-oxide-nitride-oxide-silicon (SONOS) memory, polymer memory (e.g., ferroelectric polymer memory), byte addressable random accessible 3D crosspoint memory, ferroelectric transistor random access memory (Fe-TRAM), magnetoresistive random access memory (MRAM), phase change memory (PCM, PRAM), resistive memory, ferroelectric memory (F-RAM, FeRAM), spin-transfer torque memory (STT), thermal assisted switching memory (TAS), millipede memory, floating junction gate memory (FJG RAM), magnetic tunnel junction (MTJ) memory, electrochemical cells (ECM) memory, binary oxide filament cell memory, interfacial switching memory, battery-backed RAM, ovonic memory, nanowire memory, electrically erasable programmable read-only memory (EEPROM), etc. In some embodiments, the byte addressable random accessible 3D crosspoint memory may include a transistor-less stackable cross point architecture in which memory cells sit at the intersection of words lines and bit lines and are individually addressable and in which bit storage is based on a change in bulk resistance. In other embodiments, the storage device 104 may include a hard disk drive and/or other types of mass storage devices. The storage device 104 is generally organized to include a plurality of sectors (“media sectors” or “storage device sectors”) Sector 0 (124-0), Sector 1 (124-1), . . . , Sector Y (124-Y); where Y is a whole number greater than 1. The size of each media sector is generally dependent on the type of device, layout optimization, etc. The media sector size is typically fixed for a given device, for example, media sector size of 512 Bytes. The storage device 104 may also be referred to herein as “storage domain 154”.
Host system memory 108 may host an operating system (OS) 110 and an associated file system (not shown). As an application (not shown) is executed by host processor circuitry 106, read and/or write operations targeting the storage device 104 may be issued by a file system associated with the OS 110. Such read and write operations typically include a logical block address (LBA) having an associated LBA sector size to be read from storage device 104 and/or written to storage device 104. In some embodiments, the LBA sector size may be a single, fixed size, e.g. 512 Bytes, and in other embodiments (as will be described below), the LBA sector size may be different for different applications/usage models. The LBA sector size, as issued by the host processor circuitry 106, is referred to herein as “host sector size”. In general, the host sector size is typically multiples of the media sector size, and the length of the host sector may be based on, for example, operating environment, application demand/optimization, etc.
Storage controller circuitry 102 (hereafter “controller 102”) is generally configured to control read and write operations between host processor circuitry 106 and storage device 104. Controller 102 is also referred to herein as “storage controller domain 152”. To execute a read or write command, the controller 102 is generally configured to address physical sectors 124-0, 124-1, . . . , 124-Y of the storage device 104 using at least one LBA issued from the host processor circuitry 106. During a write operation controller 102 is configured to segment the host data (associated with a host sector) into a plurality of segments. The controller 102 may also be configured to further divide the segments into a plurality of media sector size data portions (sectorization), as will be described in greater detail below.
Controller 102 includes host data segmentation logic 112 generally configured to segment a data payload, issued with a write command from the host domain 150, into a plurality of smaller segments. In at least one embodiment, host data segmentation logic 112 is configured to segment the data payload into 2N segments; where N is a whole number. The size of each segment may be based on, for example, processing overhead requirements for error correction calculations for the data payload (as a general matter, smaller segments require less processing overhead for error correction than larger segments). Controller 102 also includes CRC (cyclic redundancy check) encode/decode logic 114 generally configured to encode CRC code for each segment (and, during a read operation, decode the CRC code to confirm data integrity). The CRC code generated by CRC encode/decode logic 114 may include a short (e.g., 4 bits) check value that is paired with a segment. The CRC encode/decode logic 114 may generate the CRC code, for example, as a remainder of a polynomial division of a segment.
As described above, silent data corruption may occur when one segment of the data payload is properly written to a storage device, but a system interruption event (e.g., power failure, system reset, etc.) occurs before the remaining segment(s) are written to the storage device. Thus, in the conventional storage system, there will be “correct” data in the segment(s) that were written to successfully, but “stale” data in the segment(s) that were not written before the system interruption event occurred. Such “stale” data is data that typically has “correct” CRC codes for each segment (as written during a prior write operation), but the stale data is not correct for the current (partially failed) write operation. Thus, when the stale data is read, it will be “correct” in the sense that it will have correct CRC codes, but incorrect because it is not the data that was intended to be written during the failed write operation. Thus, such data may return incorrect results during a read operation, but such incorrect results will go undetected in a conventional storage system.
Accordingly, to enable detection of silent data corruption during a write operation, the controller 102 of the present embodiments also includes CRC reordering encode logic 116 generally configured to “switch” or “shift” the CRC codes of each segment during a write operation. In one embodiment, logic 116 is configured to shift the CRC code of each segment to a subsequent segment, and shift the CRC code of the last segment to the first segment. In another embodiment, logic 116 is configured to shift the CRC code of each segment to a previous segment, and shift the CRC code of the first segment to the last segment. In still other embodiments, logic 116 is configured to shift the CRC codes by some number of subsequent and/or previous segments, for example shift each CRC code to a segment that is two segments away. In still other embodiments, logic 116 is configured to shift the CRC codes randomly, while ensuring that each segment receives a “new” CRC code from another segment. Thus, and as will be described in greater detail below, when the data payload is read from the storage device 104 (during a read operation), if there was a system interruption event before all of the segments are written to memory, a CRC decode operation will produce a CRC failure of any segment(s) that were not successfully written before the system interruption event occurred, and thus, the entire data payload will be flagged as a failed read operation.
As described above, depending on the sector size of the storage device 104 and during a data write operation, each segment of the payload data (from the host domain 150) may be further divided into sector-length portions, each sector length portion having a bit length that is equal to (or less than) the size of a sector 124-0, 124-1, . . . , and/or 124-Y of the storage device 104. Accordingly, controller 102 may also include segment sectorization logic 118 generally configured to divide each segment into a plurality of sector-length portions. In at least one embodiment, segment sectorization logic 118 is configured to sectorize each segment into 2X sector-sized portions; where 2X≥2N and X is a whole number. Of course, for some write operations, the size of each segment may match the sector size of the storage device 104, in which case no further division of the payload data may be necessary
Controller 102 may also include ECC encode/decode logic 120. ECC encode decode logic 120 is configured to encode each segment and/or sector length portion with an error correction code during a write operation, and decode the error correction code during a read operation. provide error checking functionality for controller 102. For example, ECC encode/decode logic 120 may be configured to attach parity information, e.g., an ECC, to data being stored (i.e., during write operations) in storage device 104. In response to and/or as part of a read operation, the ECC encode/decode logic 120 may be further configured to determine parity checks (i.e., error syndromes) that may then be utilized to detect errors, identify the bits with errors, and/or correct data read from storage device 104. One or more techniques may be used for error correction and/or detection, e.g., Hamming codes, Reed-Solomon codes, Low Density Parity Check Codes (LDPCs), Bose-Chaudhuri-Hocquenghem (BCH) codes, etc. Of course, the listed error correction codes are merely examples and other ECCs configured to detect memory cell errors, to identify the error cells and/or to correct a number of detected errors may be utilized consistent with the present disclosure. In the context of the present disclosure, the ECC encode/decode logic 120 may be applied to read and write operations for each segment and/or sector length portion and thus, ECC encode/decode logic 120 may be configured to select an error correction scheme that is appropriately sized based on the size of a segment and/or sector-length portion.
During a write operation, and assuming that segment sectorization logic 118 has divided each segment of a data payload by 2X to generate a plurality of sector-length portions, segment sectorization logic 118 may be configured to append a CRC code (determined for a segment by CRC encode/decode logic 114) to the last sector-length portion of a segment, and append a null set “spacer” to the remaining sector-length portions of that segment. Each sector-length portion may include ECC code. The “spacer” (or “pad”) may have the same bit length as the CRC code, but does not operate as CRC code. Thus, in the case of a partial write where only one or more sector-length portions are written to the storage device before an interruption event occurs, a subsequent read and ECC decode operation of those sector-length portions with “spacer” CRC code will result in a data read fail.
Controller 102 also includes CRC reordering decode logic 122 generally configured to “switch back” each CRC code to each original CRC code/data segment pair during a read operation, and before CRC encode/decode logic decodes the CRC code for each segment. Thus, if one or more segments (and/or sector sized portions) failed to write during a previous write operation, the CRC code that is switched from a stale segment to a “fresh” segment will fail a CRC decode process, and the read operation will be flagged as a read fail (critical fail).
If there is a system interruption event during these write operations, the storage controller domain 152 may detect the following data corruption scenarios during subsequent read operations (e.g., read commands issued by the host domain 150):
Scenario 1
Assume data portion 212 is partially committed (e.g., to sector 0), e.g., DataA 206 is torn. When the storage controller domain 152 reads this sector, ECC logic 120 will decode ECCO 216 and return an error. Thus, the read operation for Data A and Data B will result in a read error (fatal error).
Scenario 2
Assume data portion 212 is committed to the storage device correctly, but the interruption event occurs before data portion 218 has started to write to the storage device. In this scenario, when the storage controller domain 152 reads Sector 0, the ECC logic 120 will not detect any errors for this sector, but when the storage controller domain 152 reads Sector 1, 2 and 3 the CRC logic 120 will decode “stale” ECC codes at fields 220 and 230, and since the data in Sector 1 is “stale” the ECC codes will return a read error.
Scenario 3
Assume that Data 0 212 and Data 1 218 have been committed to the storage device correctly, but the interruption event occurs before Data 2 (222) and Data 3 (228) have started. Thus, CRCb 210 is committed, but the CRC code for Data B 204 is “stale”. In this scenario, the storage controller domain 152 reads Data A 206 and Data B (from Sectors 0, 1, 2 and 3) and the CRC codes are reordered so that “stale” CRCa is appended to Data A and “new” CRCb is appended to “stale” DataB. In this manner, each CRC code will return an error, thus reducing or eliminating silent data corruption.
Of course, the example of
While the flowcharts of
As used in any embodiment herein, the term “logic” may refer to an application, software, firmware and/or circuitry configured to perform any of the aforementioned operations. Software may be embodied as a software package, code, instructions, instruction sets and/or data recorded on non-transitory computer readable storage medium. Firmware may be embodied as code, instructions or instruction sets and/or data that are hard-coded (e.g., nonvolatile) in memory devices.
“Circuitry,” as used in any embodiment herein, may comprise, for example, singly or in any combination, hardwired circuitry, programmable circuitry, state machine circuitry, logic and/or firmware that stores instructions executed by programmable circuitry. The circuitry may be embodied as an integrated circuit, such as an integrated circuit chip, such as an application-specific integrated circuit (ASIC), etc. In some embodiments, the circuitry may be formed, at least in part, by a processor (e.g., host processor circuitry 106 and/or controller 102) executing code and/or instructions sets (e.g., software, firmware, etc.) corresponding to the functionality described herein, thus transforming a general-purpose processor into a specific-purpose processing environment to perform one or more of the operations described herein. In some embodiments, the various components and circuitry of the storage controller circuitry or other systems may be combined in a system-on-a-chip (SoC) architecture.
The foregoing provides example system architectures and methodologies, however, modifications to the present disclosure are possible. The processor may include one or more processor cores and may be configured to execute system software. System software may include, for example, an operating system. Device memory may include I/O memory buffers configured to store one or more data packets that are to be transmitted by, or received by, a network interface.
The operating system (OS) 110 may be configured to manage system resources and control tasks that are run on, e.g., system 100. For example, the OS may be implemented using Microsoft® Windows®, HP-UX®, Linux®, or UNIX®, although other operating systems may be used. In another example, the OS may be implemented using Android™, iOS, Windows Phone® or BlackBerry®. In some embodiments, the OS may be replaced by a virtual machine monitor (or hypervisor) which may provide a layer of abstraction for underlying hardware to various operating systems (virtual machines) running on one or more processing units. The operating system and/or virtual machine may implement a protocol stack. A protocol stack may execute one or more programs to process packets. An example of a protocol stack is a TCP/IP (Transport Control Protocol/Internet Protocol) protocol stack comprising one or more programs for handling (e.g., processing or generating) packets to transmit and/or receive over a network.
Memory 108 may each include one or more of the following types of memory: semiconductor firmware memory, programmable memory, non-volatile memory, read only memory, electrically programmable memory, random access memory, flash memory, magnetic disk memory, and/or optical disk memory. Either additionally or alternatively system memory may include other and/or later-developed types of computer-readable memory.
Embodiments of the operations described herein may be implemented in a computer-readable storage device having stored thereon instructions that when executed by one or more processors perform the methods. The processor may include, for example, a processing unit and/or programmable circuitry. The storage device may include a machine readable storage device including any type of tangible, non-transitory storage device, for example, any type of disk including floppy disks, optical disks, compact disk read-only memories (CD-ROMs), compact disk rewritables (CD-RWs), and magneto-optical disks, semiconductor devices such as read-only memories (ROMs), random access memories (RAMs) such as dynamic and static RAMs, erasable programmable read-only memories (EPROMs), electrically erasable programmable read-only memories (EEPROMs), flash memories, magnetic or optical cards, or any type of storage devices suitable for storing electronic instructions.
In some embodiments, a hardware description language (HDL) may be used to specify circuit and/or logic implementation(s) for the various logic and/or circuitry described herein. For example, in one embodiment the hardware description language may comply or be compatible with a very high speed integrated circuits (VHSIC) hardware description language (VHDL) that may enable semiconductor fabrication of one or more circuits and/or logic described herein. The VHDL may comply or be compatible with IEEE Standard 1076-1987, IEEE Standard 1076.2, IEEE1076.1, IEEE Draft 3.0 of VHDL-2006, IEEE Draft 4.0 of VHDL-2008 and/or other versions of the IEEE VHDL standards and/or other hardware description standards.
In some embodiments, a Verilog hardware description language (HDL) may be used to specify circuit and/or logic implementation(s) for the various logic and/or circuitry described herein. For example, in one embodiment, the HDL may comply or be compatible with IEEE standard 62530-2011: SystemVerilog—Unified Hardware Design, Specification, and Verification Language, dated Jul. 7, 2011; IEEE Std 1800-2012: IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language, released Feb. 21, 2013; IEEE standard 1364-2005: IEEE Standard for Verilog Hardware Description Language, dated Apr. 18, 2006 and/or other versions of Verilog HDL and/or SystemVerilog standards.
Examples of the present disclosure include subject material such as a method, means for performing acts of the method, a device, or of an apparatus or system related to a storage system with multiple indirection unit granularities, as discussed below.
According to this example, there is provided a storage controller. The storage controller includes host data segmentation logic to divide, in response to a write command from a host domain to write a data payload to a storage device, the data payload into a plurality of data segments; cyclic redundancy check (CRC) encode logic to generate a CRC code for each data segment; and CRC reordering encode logic assign each CRC code to another data segment among the plurality of data segments.
This example includes the elements of example 1, further including segment sectorization logic to divide each data segment into a plurality of sector-length portions; wherein each sector-length portion having a bit length based on a sector size of the storage device.
This example includes the elements of example 2, further including comprising error correction code (ECC) encode logic to generate ECC code for each sector length portion.
This example includes the elements of example 3, wherein the segment sectorization logic further to, except for the last sector-length portion of a segment, generate a null field for each sector-length portion and assemble the null field and the ECC code for each sector-length portion; and further to, for the last sector-length portion of the segment, assemble the ECC code and the assigned CRC code.
This example includes the elements of example 1, further including CRC reordering decode logic to, in response to a data read command from the host domain to read the data payload from the storage device, reassign the CRC codes for each data segment; and CRC decode logic to decode the CRC code for each data segment to determine a data integrity status.
This example includes the elements of example 3, further including CRC reordering decode logic to, in response to a data read command from the host domain to read the data payload from the storage device, reassign each CRC code for each data segment; CRC decode logic to decode the CRC code for each data segment to determine a first data integrity status; and ECC decode logic to decode the ECC code of each sector length portion to determine a second data integrity status.
This example includes the elements of example 1, wherein the host data segmentation logic to divide the data payload by 2N; where N is a whole number.
This example includes the elements of example 2, wherein the host data segmentation logic to divide the data payload by 2N; and wherein the segment sectorization logic to divide each data segment 2(N+X); where N and X are whole numbers.
According to this example, there is provided a method. The method includes dividing, by host data segmentation logic in response to a write command from a host domain to write a data payload to a storage device, the data payload into a plurality of data segments; generating, by cyclic redundancy check (CRC) encode logic, a CRC code for each data segment; and assigning, by CRC reordering encode logic, each CRC code to another data segment among the plurality of data segments.
This example includes the elements of example 9, further including dividing each segment, by segment sectorization logic, into a plurality of sector-length portions; wherein each sector-length portion having a bit length based on a sector size of the storage device.
This example includes the elements of example 10, further including generating, by error correction code (ECC) encode logic, ECC code for each sector length portion.
This example includes the elements of example 11, further including generating, except for the last sector-length portion of a segment, a null field for each sector-length portion and assembling the null field and the ECC code for each sector-length portion; and assembling, for the last sector-length portion of the segment, the ECC code and the assigned CRC code.
This example includes the elements of example 9, further including reassigning, in response to a data read command from the host domain to read the data payload from the storage device, the CRC codes for each data segment; and decoding, by CRC decode logic, the CRC code for each data segment to determine a data integrity status.
This example includes the elements of example 11, further including reassigning, by CRC reordering decode logic in response to a data read command from the host domain to read the data payload from the storage device, the CRC codes for each data segment; and decoding, by CRC decode logic, the CRC code for each data segment to determine a first data integrity status; and decoding, by ECC decode logic, the ECC code of each sector length portion to determine a second data integrity status.
This example includes the elements of example 9, wherein the host data segmentation logic to divide the data payload by 2N; where N is a whole number.
This example includes the elements of example 10, wherein the host data segmentation logic to divide the data payload by 2N; and wherein the segment sectorization logic to divide each data segment 2(N+X); where N and X are whole numbers.
This example provides a storage system. The storage system includes a storage device having a plurality of sectors; and; a storage controller comprising: host data segmentation logic to divide, in response to a write command from a host domain to write a data payload to the storage device, the data payload into a plurality of data segments; cyclic redundancy check (CRC) encode logic to generate a CRC code for each data segment; and CRC reordering encode logic to assign each CRC code to another data segment among the plurality of data segments.
This example includes the elements of example 17, further including segment sectorization logic to divide each data segment into a plurality of sector-length portions; wherein each sector-length portion having a bit length based on a sector size of the storage device.
This example includes the elements of example 18, further including comprising error correction code (ECC) encode logic to generate ECC code for each sector length portion.
This example includes the elements of example 19, wherein the segment sectorization logic further to, except for the last sector-length portion of a segment, generate a null field for each sector-length portion and assemble the null field and the ECC code for each sector-length portion; and further to, for the last sector-length portion of the segment, assemble the ECC code and the assigned CRC code.
This example includes the elements of example 17, further including CRC reordering decode logic to, in response to a data read command from the host domain to read the data payload from the storage device, reassign the CRC codes for each data segment; and CRC decode logic to decode the CRC code for each data segment to determine a data integrity status.
This example includes the elements of example 19, further including CRC reordering decode logic to, in response to a data read command from the host domain to read the data payload from the storage device, reassign each CRC code for each data segment; CRC decode logic to decode the CRC code for each data segment to determine a first data integrity status; and ECC decode logic to decode the ECC code of each sector length portion to determine a second data integrity status.
This example includes the elements of example 17, wherein the host data segmentation logic to divide the data payload by 2N; where N is a whole number.
This example includes the elements of example 18, wherein the host data segmentation logic to divide the data payload by 2N; and wherein the segment sectorization logic to divide each data segment 2(N+X); where N and X are whole numbers.
According to this example, there is provided A computer readable storage device having stored thereon instructions that when executed by one or more processors result in the following operations including dividing, in response to a write command from a host domain to write a data payload to a storage device, the data payload into a plurality of data segments; generating, a CRC code for each data segment; and assigning each CRC code to another data segment among the plurality of data segments.
This example includes the elements of example 25, wherein the instructions that when executed by one or more processors results in the following additional operations including dividing each segment into a plurality of sector-length portions; wherein each sector-length portion having a bit length based on a sector size of the storage device.
This example includes the elements of example 26, wherein the instructions that when executed by one or more processors results in the following additional operations including generating ECC code for each sector length portion.
This example includes the elements of example 27, wherein the instructions that when executed by one or more processors results in the following additional operations generating, except for the last sector-length portion of a segment, a null field for each sector-length portion and assembling the null field and the ECC code for each sector-length portion; and assembling, for the last sector-length portion of the segment, the ECC code and the assigned CRC code.
This example includes the elements of example 27, wherein the instructions that when executed by one or more processors results in the following additional operations including reassigning, in response to a data read command from the host domain to read the data payload from the storage device, the CRC codes for each data segment; and decoding the CRC code for each data segment to determine a first data integrity status; and decoding the ECC code of each sector length portion to determine a second data integrity status.
This example includes the elements of example 25, wherein the instructions that when executed by one or more processors results in the following additional operations including reassigning, in response to a data read command from the host domain to read the data payload from the storage device, the CRC codes for each data segment; and decoding the CRC code for each data segment to determine a data integrity status.
This example includes the elements of example 25, wherein the host data segmentation logic to divide the data payload by 2N; where N is a whole number.
This example includes the elements of example 26, wherein the host data segmentation logic to divide the data payload by 2N; and wherein the segment sectorization logic to divide each data segment 2(N+X); where N and X are whole numbers.
This example includes the elements of example 1, wherein assigning each CRC code to another data segment includes assigning each CRC code to a subsequent data segment and assigning the CRC code of the last data segment to the first data segment.
This example includes the elements of example 1, wherein assigning each CRC code to another data segment includes assigning each CRC code to a previous data segment and assigning the CRC code of the first data segment to the last data segment.
This example includes the elements of example 1, wherein assigning each CRC code to another data segment includes randomly assigning each CRC code to another data segment.
This example includes the elements of example 9, wherein assigning each CRC code to another data segment includes assigning each CRC code to a subsequent data segment and assigning the CRC code of the last data segment to the first data segment.
This example includes the elements of example 9, wherein assigning each CRC code to another data segment includes assigning each CRC code to a previous data segment and assigning the CRC code of the first data segment to the last data segment.
This example includes the elements of example 9, wherein assigning each CRC code to another data segment includes randomly assigning each CRC code to another data segment.
This example includes the elements of example 17, wherein assigning each CRC code to another data segment includes assigning each CRC code to a subsequent data segment and assigning the CRC code of the last data segment to the first data segment.
This example includes the elements of example 17, wherein assigning each CRC code to another data segment includes assigning each CRC code to a previous data segment and assigning the CRC code of the first data segment to the last data segment.
This example includes the elements of example 17, wherein assigning each CRC code to another data segment includes randomly assigning each CRC code to another data segment.
This example includes the elements of example 25, wherein assigning each CRC code to another data segment includes assigning each CRC code to a subsequent data segment and assigning the CRC code of the last data segment to the first data segment.
This example includes the elements of example 25, wherein assigning each CRC code to another data segment includes assigning each CRC code to a previous data segment and assigning the CRC code of the first data segment to the last data segment.
This example includes the elements of example 25, wherein assigning each CRC code to another data segment includes randomly assigning each CRC code to another data segment.
This example provides a storage system. The storage system includes: a storage domain comprising a storage device having storage media that includes a plurality of sectors; and
This example includes the elements of example 45, further including segment sectorization logic to divide each data segment into a plurality of sector-length portions; wherein each sector-length portion having a bit length based on a sector size of the storage device.
This example includes the elements of example 46, further including comprising error correction code (ECC) encode logic to generate ECC code for each sector length portion.
This example includes the elements of example 47, wherein the segment sectorization logic further to, except for the last sector-length portion of a segment, generate a null field for each sector-length portion and assemble the null field and the ECC code for each sector-length portion; and further to, for the last sector-length portion of the segment, assemble the ECC code and the assigned CRC code.
This example includes the elements of example 45, further including CRC reordering decode logic to, in response to a data read command from the host domain to read the data payload from the storage device, reassign the CRC codes for each data segment; and CRC decode logic to decode the CRC code for each data segment to determine a data integrity status.
This example includes the elements of example 47, further including CRC reordering decode logic to, in response to a data read command from the host domain to read the data payload from the storage device, reassign each CRC code for each data segment; CRC decode logic to decode the CRC code for each data segment to determine a first data integrity status; and ECC decode logic to decode the ECC code of each sector length portion to determine a second data integrity status.
This example includes the elements of example 45, wherein the host data segmentation logic to divide the data payload by 2N; where N is a whole number.
This example includes the elements of example 46, wherein the host data segmentation logic to divide the data payload by 2N; and wherein the segment sectorization logic to divide each data segment 2(N+X); where N and X are whole numbers.
This example includes the elements of example 45, wherein assigning each CRC code to another data segment includes assigning each CRC code to a subsequent data segment and assigning the CRC code of the last data segment to the first data segment.
This example includes the elements of example 45, wherein assigning each CRC code to another data segment includes assigning each CRC code to a previous data segment and assigning the CRC code of the first data segment to the last data segment.
This example includes the elements of example 45, wherein assigning each CRC code to another data segment includes randomly assigning each CRC code to another data segment.
This example includes a system including comprising at least one device arranged to perform the method of any one of examples 9 to 16, or any one of examples 36-38
This example includes means to perform the method of any one of examples 9 to 16, or any one of examples 36-38.
This example includes a computer readable storage device having stored thereon instructions that when executed by one or more processors result in the following operations including the method according to any one of examples 9 to 16, or any one of examples 36-38.
The terms and expressions which have been employed herein are used as terms of description and not of limitation, and there is no intention, in the use of such terms and expressions, of excluding any equivalents of the features shown and described (or portions thereof), and it is recognized that various modifications are possible within the scope of the claims. Accordingly, the claims are intended to cover all such equivalents.
Various features, aspects, and embodiments have been described herein. The features, aspects, and embodiments are susceptible to combination with one another as well as to variation and modification, as will be understood by those having skill in the art. The present disclosure should, therefore, be considered to encompass such combinations, variations, and modifications.
Nguyen, Tung, Koka, Sri Krishna Karthik
Patent | Priority | Assignee | Title |
Patent | Priority | Assignee | Title |
10055285, | Mar 15 2012 | U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT | Physical page, logical page, and codeword correspondence |
5430447, | Aug 23 1993 | Texas Instruments Incorporated | Protection against manipulation of batteryless read/write transponders |
5844918, | Nov 28 1995 | SANYO ELECTRIC CO , LTD | Digital transmission/receiving method, digital communications method, and data receiving apparatus |
6023780, | May 13 1996 | Fujitsu Limited | Disc array apparatus checking and restructuring data read from attached disc drives |
8205128, | Oct 10 2007 | Samsung Electronics Co., Ltd. | Apparatus and method for hybrid automatic repeat request (HARQ) in wireless communication system |
8667357, | Apr 02 2008 | LG Electronics Inc | Method for conducting HARQ with a wireless communications system |
20060195752, | |||
20100017692, | |||
20100205518, | |||
20110055652, | |||
20150095737, | |||
20160164538, | |||
20160374037, | |||
20170063493, | |||
20170207880, | |||
20170222661, | |||
20170250710, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Aug 25 2017 | NGUYEN, TUNG | Intel Corporation | CORRECTIVE ASSIGNMENT TO CORRECT THE CITY NAME OF THE ASSIGNEE TO SANTA CLARA PREVIOUSLY RECORDED ON REEL 043538 FRAME 0623 ASSIGNOR S HEREBY CONFIRMS THE ASSIGNMENT OF ASSIGNORS INTEREST | 049570 | /0287 | |
Aug 25 2017 | KOKA, SRI KRISHNA KARTHIK | Intel Corporation | CORRECTIVE ASSIGNMENT TO CORRECT THE CITY NAME OF THE ASSIGNEE TO SANTA CLARA PREVIOUSLY RECORDED ON REEL 043538 FRAME 0623 ASSIGNOR S HEREBY CONFIRMS THE ASSIGNMENT OF ASSIGNORS INTEREST | 049570 | /0287 | |
Aug 25 2017 | NGUYEN, TUNG | Intel Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 043538 | /0623 | |
Aug 25 2017 | KOKA, SRI KRISHNA KARTHIK | Intel Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 043538 | /0623 | |
Sep 08 2017 | Intel Corporation | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Sep 08 2017 | BIG: Entity status set to Undiscounted (note the period is included in the code). |
Jan 03 2024 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Date | Maintenance Schedule |
Dec 29 2023 | 4 years fee payment window open |
Jun 29 2024 | 6 months grace period start (w surcharge) |
Dec 29 2024 | patent expiry (for year 4) |
Dec 29 2026 | 2 years to revive unintentionally abandoned end. (for year 4) |
Dec 29 2027 | 8 years fee payment window open |
Jun 29 2028 | 6 months grace period start (w surcharge) |
Dec 29 2028 | patent expiry (for year 8) |
Dec 29 2030 | 2 years to revive unintentionally abandoned end. (for year 8) |
Dec 29 2031 | 12 years fee payment window open |
Jun 29 2032 | 6 months grace period start (w surcharge) |
Dec 29 2032 | patent expiry (for year 12) |
Dec 29 2034 | 2 years to revive unintentionally abandoned end. (for year 12) |