DE102018105848A1 - CPU-Fehlerkorrektur während Erasure-Code-Codierung - Google Patents

CPU-Fehlerkorrektur während Erasure-Code-Codierung Download PDF

Info

Publication number
DE102018105848A1
DE102018105848A1 DE102018105848.9A DE102018105848A DE102018105848A1 DE 102018105848 A1 DE102018105848 A1 DE 102018105848A1 DE 102018105848 A DE102018105848 A DE 102018105848A DE 102018105848 A1 DE102018105848 A1 DE 102018105848A1
Authority
DE
Germany
Prior art keywords
data
crcs
crc
mixed
sequential
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102018105848.9A
Other languages
English (en)
Other versions
DE102018105848B4 (de
Inventor
Cyril Guyot
Lluis Pamies-Juarez
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE102018105848A1 publication Critical patent/DE102018105848A1/de
Application granted granted Critical
Publication of DE102018105848B4 publication Critical patent/DE102018105848B4/de
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/093CRC update after modification of the information word
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/154Error and erasure correction, e.g. by using the error and erasure locator or Forney polynomial
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/616Matrix operations, especially for generator matrices or check matrices, e.g. column or row permutations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/617Polynomial operations, e.g. operations related to generator polynomials or parity-check polynomials
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6508Flexibility, adaptability, parametrability and configurability of the implementation
    • H03M13/6516Support of multiple code parameters, e.g. generalized Reed-Solomon decoder for a variety of generator polynomials or Galois fields
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes

Abstract

Es wird eine Technologie offenbart, die Rechnerfehler ermittelt, in der ein System einen oder mehrere Prozessoren und Speicherlogik umfassen kann. Die Speicherlogik kann von dem einen oder mehreren Prozessoren ausgeführt werden, um Operationen durchzuführen, die Folgendes umfassen: das Empfangen eines Datenvektors, wobei der Datenvektor eine Vielzahl geordneter Blöcke umfasst; das Transponieren des Datenvektors in eine Menge von Subvektoren, wobei jeder der Subvektoren ein entsprechendes Datenelement aus jedem der geordneten Blöcke umfasst; das Generieren einer Menge diskreter zyklischer Redundanzprüfungen (CRCs) basierend auf der Menge von Subvektoren; das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs, wobei jede der gemischten CRCs ein CRC-Datenelement aus jeder der diskreten CRCs umfasst; und das Kompaktieren der Menge gemischter CRCs in eine reduzierte CRC.

Description

  • HINTERGRUND
  • Die vorliegende Offenbarung betrifft Datencodierung.
  • Während der Codierung von zu speichernden Daten mittels Erasure Codes kann das Rechnersystem, das die den codierten Daten zugeordnete Paritäten berechnet, Fehler einführen, die sich im Endeffekt zum Speichermedium ausbreiten und dort unerkannt bleiben. Gängige Fehler, die üblicherweise in die Daten eingeführt werden können, umfassen Systembusfehler, interne Busfehler, Zwischenspeicher-Bit-Flip-Fehler und Bit-Flip-Fehler im Arbeitsspeicher, obwohl auch andere Fehler auftreten.
  • Die Fehler, die in Computerspeichersystemen auftreten können, stellen eine Gefahr für die Datenlebensdauer und -integrität dar, da sie unerkannt auftreten können und als Folge daraus Daten erzeugen, die sich von den zu speichernden Originaldaten unterscheiden.
  • Manche bestehenden Systeme können die bereits beschriebenen Fehler durch Erasure Codierung der Daten über Galoisfelder niedriger Ordnung, wie einem 2-Galoiskörper (GF (2)), und die Anwendung von zyklischen Redundanzprüfungs- (CRC-) Operationen auf die durch Erasure Code codierte Daten, um sicherzustellen, dass die gespeicherten Daten gültig sind, erkennen. Insbesondere nutzen diese bestehenden Systeme CRC-Algorithmen, die die lineare Eigenschaft über Galoisfelder niedriger Ordnung ausnutzen, um Fehler zu erkennen (z.B. durch die Verwendung von Koeffizienten gleich 1). Diese lineare Eigenschaft kann genutzt werden, um die CRC der generierten Paritäten von der CRC der Eingabedaten mittels bitweiser Operationen vorherzusagen.
  • Nichtsdestotrotz nimmt, wenn man die elektronische und digitale Vorrichtungstechnologie betrachtet, die Datenmenge, die verarbeitet und gespeichert wird, rasch zu und genauso die Anzahl der Fehler und die Verarbeitungsmenge, die benötigt wird, um die Integrität der Daten zu verifizieren. Die Ansätze, die von diesen bestehenden Systemen genutzt werden, können nicht in gleichem Maße angepasst werden und somit zu Verarbeitungsengpässen und hohen Kosten der Rechnerressourcen führen.
  • Darüber hinaus können nicht einfach Galoisfelder höherer Ordnung, wie 256-Galoisfelder (GF (256)), anstelle der Galoisfelder niedriger Ordnung (z.B. (GF (2))) für den Codierungs- und CRC-Generierungsprozess genutzt werden, um auf das Anpassungsproblem einzugehen, da CRC-Funktionen höherer Ordnung allein nicht die lineare Eigenschaft zeigen, die bereits für CRCs über Galoisfeldern niedriger Ebene beschrieben wurde und sie daher nicht für bitweise Operationen (z.B. wie XOR) geeignet sind.
  • ZUSAMMENFASSUNG
  • Die vorliegende Offenbarung betrifft die Generierung einer diskreten zyklischen Redundanzprüfung (CRC), um die Integrität von durch Erasure Code codierten Daten zu verifizieren. Gemäß einem innovativen Aspekt des Gegenstands in dieser Offenbarung umfasst ein System eine Vielzahl von Speichervorrichtungen und eine Speicherlogik, die kommunikativ mit der Vielzahl von Speichervorrichtungen gekoppelt ist. Diese Speicherlogik ist ausführbar, um einen Datenvektor mit einer Vielzahl von geordneten Blöcken zu empfangen. Die Speicherlogik ist ausführbar, um den Datenvektor in eine Menge von Subvektoren zu transponieren, die dann in manchen Fällen als Datenspalten bezeichnet werden. Die Speicherlogik ist ausführbar, um eine Menge diskreter CRCs basierend auf der jeweiligen Menge von Subvektoren zu generieren. Die diskreten CRCs bilden gemeinsam eine CRC-Matrix mit einer Vielzahl von CRC-Spalten. Die Speicherlogik ist ausführbar, um die Menge diskreter CRCs, der der CRC-Matrix zugeordnet ist, in eine Menge gemischter CRCs zu transponieren. Die Speicherlogik ist ferner ausführbar, um die Menge gemischter CRCs in eine reduzierte CRC zu Kompaktieren, die mit einer dem Datenvektor zugeordneten Paritäts-CRC verglichen werden kann, um die Integrität des Datenvektors zu verifizieren.
  • In einem weiteren innovativen Aspekt kann ein Verfahren das Empfangen eines Datenvektors, wobei der Datenvektor eine Vielzahl von geordneten Blöcken umfasst; das Transponieren des Datenvektors in eine Menge von Subvektoren, in dem jeder Subvektor ein entsprechendes Datenelement aus jedem der geordneten Blöcke umfasst; das Generieren einer Menge diskreter CRCs basierend auf der entsprechenden Menge von Subvektoren; das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs, wobei jede der gemischten CRCs ein Datenelement aus jeder der diskreten CRCs umfasst; und das Kompaktieren der Menge gemischter CRCs in eine reduzierte CRC, die mit einer dem Datenvektor zugeordneten Paritäts-CRC verglichen werden kann, um die Integrität der Daten zu verifizieren, umfassen.
  • Weitere Ausführungen von einem oder mehreren dieser Aspekte umfassen entsprechende Systeme, Vorrichtungen und Computerprogramme, die so konfiguriert sind, um die Arbeitsschritte der Verfahren durchzuführen, wobei diese Aspekte die Verfahren auf Computerspeichervorrichtungen codieren.
  • Diese und weitere Ausführungen können gegebenenfalls eine oder mehrere der folgenden Funktionen umfassen, einschließlich aber nicht ausschließlich: dass die geordneten Blöcke eine Datenzeile mit einer Vielzahl von sequentiellen Spalten umfassen, die jeweils sequentielle Datenelemente enthalten; das Transponieren der Datenzeile aus jedem geordneten Block in eine Datenspalte; dass die Datenspalte eine Vielzahl von sequentiellen Zeilen aufweist, die die entsprechenden sequentiellen Datenelemente enthalten; dass die Datenspalte aus jedem der geordneten Blöcke zusammen eine transponierte Datenmatrix bildet; dass die transponierte Datenmatrix eine Vielzahl von gemischten sequentiellen Zeilen umfasst; dass jede gemischte sequentielle Zeile aus der Vielzahl von gemischten sequentiellen Zeilen eine Gruppe der ersten sequentiellen Zeilen an einer entsprechenden Schicht umfasst; dass die Gruppe der ersten sequentiellen Zeilen das entsprechende Datenelement aus jedem der geordneten Blöcke an der entsprechenden Schicht umfasst; dass Die Menge von Subvektoren eine Datenmatrix, einschließlich einer Vielzahl von sequentiellen Zeilen umfasst; dass jede der sequentiellen Zeilen eine Menge gemischter Datenelemente umfasst, der das entsprechende Datenelement aus jedem der geordneten Blöcke umfasst; dass das Generieren der Menge diskreter CRCs, basierend auf der Menge entsprechender Subvektoren, das Generieren einer diskreten CRC für jede sequentielle Zeile der sequentiellen Zeilen aus der Datenmatrix unter Verwendung der Menge gemischter Datenelemente aus der sequentiellen Zeile umfasst; dass es sich bei den diskreten CRCs um eine CRC32c handeln kann; dass das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs das Transponieren von 8 32-Bit CRCs in einen 32-Byte Datenvektor umfassen kann; dass das Kompaktieren der Menge gemischter CRCs in eine reduzierte CRC das Anwenden einer Kompaktierfunktion auf die Menge gemischter CRCs umfassen kann, um die reduzierte CRC zu erhalten; dass die Kompaktierfunktion ein höhergradiges Polynom umfassen kann; dass ein höhergradiges Polynom ein Polynom vierten oder höheren Grades umfassen kann; dass der Datenvektor eine zugeordnete Parität umfassen kann; dass eine Paritäts-CRC mithilfe der zugeordneten Parität generiert wird; dass die Paritäts-CRC mit der reduzierten CRC verglichen werden kann; und dass ein Fehler basierend auf dem Vergleich der Paritäts-CRC mit der reduzierten CRC ermittelt werden kann.
  • Die hierin offenbarte Technologie ist in vielerlei Hinsicht von Vorteil. Beispielsweise in Systemen, die Codes nutzen, die über ein höheres Feld (z.B. als GF(2)) definiert sind, wie Code, der über GF(2^8) gebaut ist, in dem lineare bitweise Datenverifikationsoperationen (z.B. XOR von Daten-CRCs), die auf GF(2) anwendbar sind, nicht mehr zutreffen, kann die offenbarte Technologie wirksamer und verlässlicher sicherstellen, dass Fehler, die während der Datencodierung auftreten, erkannt werden können, ohne dass alle Daten neu codiert werden müssen (was rechnerisch teuer ist). Als weiteres Beispiel kann die Technologie vorteilhaft lineare CRC-Funktionen für Codes, die über ein höheres Feld definiert sind, bereitstellen, wie eine CRC-Funktion, die die Eigenschaft von f (p + a · d) = f(p) + a · f(d) aufweist, wobei d der Datenvektor, p die Parität und a ein Koeffizient größer als 1 ist (z.B. ein Spider-Code-Koeffizient in GF (2^8)). Das ist insofern vorteilhaft, als dass diese Technologie in manchen Anwendungen bestehende effiziente CPU-interne Befehle nutzen kann, die CRCs berechnen und somit die Kompatibilität mit bestehenden zentralen Verarbeitungseinheits- (CPU-) Architekturen aufrechterhalten.
  • Es versteht sich dennoch, dass die erwähnte Liste an Funktionen und Vorteilen nicht umfassend ist und viele zusätzliche Funktionen und Vorteile in Frage kommen und im Schutzumfang der vorliegenden Offenbarung liegen. Darüber hinaus gilt es zu verstehen, dass die in der vorliegenden Offenbarung verwendete Sprache in erster Linie zum Zwecke der Lesbarkeit und der Lehre gewählt wurde und den Umfang des hierin offenbarten Gegenstands in keiner Weise einschränken soll.
  • Figurenliste
    • 1 ist ein Blockdiagramm eines beispielhaften Datenspeichersystems.
    • 2A veranschaulicht ein beispielhaftes System zur Datenverarbeitung.
    • 2B veranschaulicht eine beispielhafte Datenkommunikation zwischen einem CPU-Zwischenspeicher und einer Speichervorrichtung.
    • 2C veranschaulicht eine beispielhafte Speicherlogik.
    • 3 ist ein Flussdiagramm eines beispielhaften Verfahrens zur Generierung einer reduzierten CRC aus einem Datenvektor.
    • 4 ist ein Flussdiagramm eines beispielhaften Verfahrens zur Generierung diskreter CRCs mittels sequentieller Zeilen einer Datenmatrix.
    • 5 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Erhalt einer reduzierten CRC.
    • 6 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Vergleichen einer reduzierten CRC mit einer Paritäts-CRC.
    • 7 ist ein Datenflussdiagramm, das einen beispielhaften Ablauf zur Generierung einer reduzierten CRC aus einem Datenvektor zeigt.
  • DETAILLIERTE BESCHREIBUNG
  • Die hierin offenbarte innovative Technologie umfasst zahlreiche Aspekte, wie Systeme, Verfahren, Vorrichtungen, computerlesbare Medien, Computerprogrammprodukte, etc., zur Erkennung von Fehlern in mittels Erasure Code codierten Daten. Durch das Beheben vieler Leistungsschwächen, die von früheren Systemen gezeigt wurden, stellen die hierin offenbarten Aspekte eine Vielzahl an Verbesserungen gegenüber früheren Speichersystemen bereit. Beispielsweise kann die hierin offenbarte innovative Technologie verlässlicher garantieren, dass ein Fehler, der während des Codierens auftritt, danach erkannt werden kann, ohne dass die darunter liegenden Daten neu codiert werden müssen, was in der Regel komplex und rechnerisch teuer ist.
  • Um unterschiedliche Vorteile der Technologie weiter zu veranschaulichen, wird nun die in 7 dargestellte nichteinschränkende Ausführungsform beschrieben, die sich auf Elemente in 1 und 2 bezieht, die genauer an anderer Stelle hierin beschrieben werden. Im Speziellen ist 7 ein Datenflussdiagramm, das einen beispielhaften Ablauf zur Generierung einer reduzierten zyklischen Redundanzprüfung (CRC) aus einem Datenvektor zeigt. Eine CRC ist ein Fehlererkennungscode, der eingesetzt wird, um unbeabsichtigte Datenveränderungen zu erkennen, die durch eine Vielzahl von Faktoren verursacht werden können, wie an anderer Stelle hierin besprochen.
  • Ein Datenvektor ist eine Sequenz von Datenelementen, wie geordneten Datenblöcken. Wie in 7 gezeigt, kann der Datenvektor 700 in manchen Ausführungsformen die Vielzahl von geordneten Blöcken 702a, 702b, ... 702n (auch kollektiv oder einzeln einfach als 702 bezeichnet) umfassen. Ein geordneter Block 702 ist eine Datenstruktur, die eine Vielzahl sequentieller Datenelemente umfasst, wie beispielsweise aber nicht einschränkend d1,1, d1,2,... d1,z, die im geordneten Block 702a mitinbegriffen sind. Die sequentiellen Datenelemente eines geordneten Blocks 702 bilden zusammen eine Datenzeile. Da die Datenelemente sequentiell sind, können sie als zu sequentiellen Schichten gehörend betrachtet werden. Beispielsweise gehört das erste Datenelement d1,1 zu einer ersten Schicht (Schicht 1), das zweite Datenelement d1,2 zu einer zweiten Schicht (Schicht 2), das z-te Datenelement d1,z zu einer z-ten Schicht (Schicht z), usw.
  • Die Technologie umfasst System 200, das den Datenvektor verarbeiten kann, um die neue Kompaktierte CRC zu erzeugen, die es verwenden kann, um Daten effizienter zu verifizieren. Beispielsweise, wie im Folgenden in Bezug auf 2A besprochen, kann das System 200 Speicherlogik 104, einschließlich einer Datenschnittstelle 211, eines Datentransponierers 212 und eines CRC-Generators 213, umfassen.
  • Die Datenschnittstelle 211 kann den Datenvektor 700 empfangen und der Datentransponierer 212 kann die geordneten Blöcke 702a, 702b,... 702n von Datenvektor 700 in eine Menge von Datenspalten 705a, 705b,... 705n (auch kollektiv oder einzeln einfach als 705 bezeichnet) Transponieren (701a, 701b, ... 701n). Jede Datenspalte 705 umfasst die Menge sequentieller Datenelemente aus dem entsprechenden geordneten Block 702.
  • Sind sie einmal transponiert, bilden die Subvektoren 705/Datenspalten eine transponierte Datenmatrix 740, einschließlich einer Vielzahl an Subvektoren, die als sequentielle Zeilen 704a,... 704n betrachtet werden. Jede sequentielle Zeile umfasst ein Datenelement aus jeder der Datenspalten (Subvektoren 705). Da jede sequentielle Zeile eine Mischung von Datenelementen aus den Datenspalten (aus jeder eines) umfasst, wird sie hierin manchmal als gemischte sequentielle Zeile bezeichnet. Insbesondere umfasst jede sequentielle Zeile Datenelemente, die zu einer entsprechenden Schicht gehören. Beispielsweise umfasst die erste sequentielle Zeile 704a Datenelemente aus einer ersten Schicht jedes geordneten Blocks 702 (d1,1, d2,1,... dn,1); die zweite sequentielle Zeile (nicht gezeigt) umfasst Datenelemente aus der zweiten Schicht jedes geordneten Blocks 702 (d1,2, d2,2,... dn,2); bis zur z-ten sequentiellen Zeile 704z, die die Datenelemente aus der z-ten Schicht jedes geordneten Blocks 702 (d1,z, d2,z,... dn,z) umfasst.
  • Der CRC-Generator 213 kann diskrete CRCs unter Verwendung der sequentiellen Zeilen der Datenmatrix 740 generieren (703a, ... 703z). Beim Generieren diskreter CRCs führt der CRC-Generator eine CRC-Operation auf einer bestimmten Zeile der Datenmatrix durch und speichert die Ergebnisse der CRC-Operation in einer entsprechenden Zeile einer CRC-Matrix. Wie gezeigt, ist die generierte diskrete CRC, die Zeile 704a der Datenmatrix entspricht, Zeile 706a der CRC-Matrix; die generierte diskrete CRC, die Zeile 704z der Datenmatrix entspricht, ist Zeile 706y der CRC-Matrix, usw. In manchen Ausführungsformen kann der CRC-Generator 213 die bereits erwähnten CRC-Operationen durchführen, indem er Datenelemente aus jeder Zeile der Datenmatrix 740 durch Mapping entsprechenden CRCs zuordnet, die er generiert und die entsprechende Zeilen der CRC-Matrix 720 bilden. In manchen Fällen können die CRC-Operationen basierend auf einem oder mehreren CRC-Algorithmen ausgeführt werden. Ein nichteinschränkendes Beispiel eines CRC-Algorithmus umfasst CRC32c, obwohl auch andere geeignete Algorithmen in Frage kommen.
  • Wie gezeigt, umfasst die CRC-Matrix 720 eine Vielzahl von Spalten 707a, 707b,... 707j (auch kollektiv oder einzeln einfach als 707 bezeichnet). Die Vielzahl von Spalten der CRC-Matrix 720 kann von dem Datentransponierer 212 in eine Menge gemischter CRCs 730 transponiert werden (711a, 711b, ... 711j). Die Menge gemischter CRCs 730 umfasst CRC-Blöcke 708a, 708b,... 708j (auch kollektiv oder einzeln einfach als 708 bezeichnet). Jeder CRC-Block 708 umfasst CRC-Datenelemente aus den Spalten 707 der CRC-Matrix. Beispielsweise umfasst CRC-Block 708a CRC-Elemente C1,1, C2,1,... Cy,1 aus Spalte 707a der CRC-Matrix 720; CRC-Block 708b umfasst CRC-Elemente C2,1, C2,2,... Cy,2 aus Spalte 707b der CRC-Matrix 720; CRC-Block 708j umfasst CRC-Elemente C1,j, C2,j,... Cy,j aus Spalte 707j der CRC-Matrix 720, usw.
  • Der CRC-Generator 213 kann eine Kompaktierfunktion (709a, 709b, ... 709j) auf die Menge gemischter CRCs 730 anwenden, um eine reduzierte CRC 710 zu erhalten. Die reduzierte CRC weist eine Vielzahl reduzierter CRC-Elemente 710a, ... 710j auf. Die Kompaktierfunktion kann vom CRC-Generator 213 auf CRC-Blöcken 708a, ... 708j angewendet werden (709a, 709b, ... 709j), um die reduzierten CRC-Elemente 710a, 710b, ... 710j zu erhalten.
  • In manchen Ausführungsformen kann das Anwenden einer Kompaktierfunktion durch den CRC-Generator 213 das Teilen jedes CRC-Blocks aus der Menge gemischte CRCs 708 durch ein höhergradiges Polynom umfassen, um die reduzierte CRC 710 zu erhalten. Ein höhergradiges Polynom kann in manchen Fällen ein Polynom vierten oder höheren Grades umfassen. Ein beispielhaftes höhergradiges Polynom, durch das jeder CRC-Block der Menge gemischter CRCs geteilt werden kann, ist ein Polynom 4. Grades über 256-Galoiskörper, d.h. GF (256). Wie an anderer Stelle hierin beschrieben, kann die reduzierte CRC verwendet werden, um Fehler zu erkennen, die an einer beliebigen Stelle während den Operationen, wie einer Erasure-Code-Codierung, auftreten können, indem die reduzierte CRC mit einer Paritäts-CRC, die dem Datenvektor 700 zugeordnet ist, verglichen wird.
  • 1 ist ein Blockdiagramm eines beispielhaften Speichersystems 100, das in der Lage ist, den Speicher und mit CRC verbundenen Vorgänge, Strukturen und Funktionalitäten, wie hierin beschrieben, bereitzustellen. In der dargestellten Ausführungsform kann das Speichersystem 100 Speicherlogik 104 und eine oder mehrere Speichervorrichtungen 110a, 110b,... 110n umfassen. Es ist anzumerken, dass die Begriffe „Speichermedium“ und die „Speichervorrichtung“ in der vorliegenden Offenbarung austauschbar genutzt werden können, um sich auf die physischen Medien, auf denen die Daten gespeichert werden, zu beziehen. Die Speicherlogik 104 und die eine oder mehreren Speichervorrichtungen 110a, 110b, ... 110n sind kommunikativ über Signalleitungen 126a, 126b, ... 126n gekoppelt. Darüber hinaus ist, in der dargestellten Ausführungsform, die Speicherlogik 104 weiter kommunikativ über Signalleitung 124 mit anderen System-100-Elementen, wie internen und/oder externen Systemen, Computernetzwerken, entfernten Systemelementen, etc. gekoppelt (nicht gezeigt).
  • Beispielsweise kann die Signalleitung 124 einen Computerbus, einschließlich eines Serial-Advanced-Technology-Attachment- (SATA-) Busses, einer seriell angeschlossenen SCSI- (SAS-) Schnittstelle, einer peripheren Komponentenschnittstelle (PCI), PCI express (PCIe), oder eine beliebige andere geeignete Art eines internen und/oder externen Busses zur Übertragung von Daten zwischen Komponenten einer Rechner- und/oder Speichervorrichtung und/oder zwischen Komponenten verschiedener Komponenten, darstellen. Als weiteres Beispiel kann der Computerbus kommunikativ mit einem Host-Bus eines Computersystems verbunden sein. Es gilt zu erkennen, dass der Speicherlogikblock eine verteilte Architektur darstellen kann oder anderweitig mehrere Elemente von Speicherlogik 104 umfassen kann. Der Einfachheit halber und zum leichteren Verständnis werden die Systemkonfiguration von Speichersystem 100 und die davon ausgeführten Operationen im Kontext einer einzigen Speicherlogik 104 beschrieben, obwohl es sich versteht, dass es sich bei der Speicherlogik 104 um mehrere Komponenten handeln kann, die für die Kommunikation gekoppelt sind. Darüber hinaus kann ein System 100 mehrere Anlagen einschließlich eines Beispiels der Speicherlogik 104 und eine Menge von einer oder mehreren Speichervorrichtung(en) 110 umfassen. Zahlreiche andere geeignete Konfigurationen kommen ebenso in Frage und sind möglich.
  • Nichtsdestotrotz beschränkt sich die vorliegende Offenbarung nicht auf diese Konfiguration und eine Vielzahl unterschiedlicher Systemumgebungen und -konfigurationen können angewendet werden und liegen im Schutzumfang der vorliegenden Offenbarung. Weitere Ausführungsformen können zusätzliche oder weniger Komponenten umfassen.
  • Einfachheitshalber kann in den Figuren eine Angabe eines Buchstaben nach einer Bezugsnummer oder -zahl, z.B. „110a“ ein spezifischer Bezug auf das Element oder die Komponente sein, die mit dieser speziellen Bezugsnummer bezeichnet wird, während eine Referenznummer, die im Text ohne darauffolgenden Buchstaben erscheint, z.B. „110“ einen allgemeinen Bezug auf unterschiedliche Ausführungsformen des Elements oder der Komponente mit dieser allgemeinen Bezugsnummer darstellen kann.
  • In manchen Ausführungsformen kann die Speicherlogik 104 Erasure-Codierung, Paritätsüberprüfung, CRC-Generierung, Auslesung, Einschreibung, Aktualisierung, Löschung, automatische Speicherbereinigung und andere mit dem Speicher verbundenen Operationen in Verbindung mit der Speichervorrichtungen 110 durchführen. Die Speicherlogik 104 kann Rechnerfunktionalitäten, -dienste und/oder -ressourcen bereitstellen, um Daten von anderen Einheiten von System 100 zu senden, empfangen, auszulesen, einzuschreiben und umzuwandeln.
  • In manchen Ausführungsformen kann sich die Speicherlogik 104 aus Hardware- und/oder Software-Logik zusammensetzen, die konfiguriert ist, um die hierin beschriebenen Arbeitsschritte und/oder Funktionalitäten durchzuführen. Die Speicherlogik 104 ist mit den Speichervorrichtungen 110a, 110b, ... 110n über Signalleitungen 126a, 126b, ... 126n für die Kommunikation und Kooperation mit den Speichervorrichtungen 110a, 110b, ... 110n von Speichersystem 100 gekoppelt.
  • In manchen Ausführungsformen kann die Speicherlogik 104 zusätzliche Komponenten umfassen, die in 1 nicht gezeigt sind, um die Zeichnung zu vereinfachen. Außerdem sind mitunter in manchen Ausführungsformen nicht alle der gezeigten Komponenten vorhanden. Darüber hinaus können die unterschiedlichen Steuerungen, Blöcke und Schnittstellen auf eine beliebige geeignete Weise implementiert werden. Beispielsweise kann eine Speicherlogik 104 die Form eines oder mehr z.B. Mikroprozessors oder Prozessors und eines computerlesbaren Mediums annehmen, das computerlesbaren Programmcode (z.B. Software oder Firmware) speichert und vom (Mikro-) Prozessor, Logikgattern, Schaltern, einer anwendungsspezifischen integrierten Schaltung (ASIC), einer programmierbaren Logiksteuerung, einer eingebetteten Mikrosteuerung, etc., wie an anderer Stelle hierin besprochen, ausgeführt werden kann. In Bezug auf 2A beispielsweise kann die Speicherlogik Befehle umfassen, die im Arbeitsspeicher 104 und/oder dem CPU-Zwischenspeicher 210 gespeichert sind; sie kann Hardware (z.B. einschließlich und/oder nicht einschließlich Firmware) umfassen, die mit dem Bus 230 zur Kommunikation mit dem Prozessor 202, Arbeitsspeicher 204 und/oder anderen Komponenten gekoppelt ist, etc.; und/oder sie kann Hardware (z.B. einschließlich und/oder nicht einschließlich Firmware) umfassen, die mit der Rechnereinheit 205 gekoppelt und/oder in diese inkorporiert ist; und/oder sie kann in einer anderen geeigneten Form implementiert sein.
  • Die Speichervorrichtungen 110 umfassen nichtflüchtige computerverwendbare (z.B. lesbare, schreibbare, etc.) Medien, bei denen es sich um ein beliebiges nichtflüchtiges Gerät oder eine Vorrichtung handeln kann, die Befehle, Daten, Computerprogramme, Software, Coderoutinen, etc. zur Verarbeitung durch oder in Verbindung mit einem Prozessor enthalten, speichern, kommunizieren, ausbreiten oder befördern kann. Während in vielen Ausführungsformen beschrieben wird, dass die Speichervorrichtungen 110 einen Halbleiterspeicher (z.B. Flash) enthalten, gilt es zu verstehen, dass die Speichervorrichtungen 110 in manchen Ausführungsformen andere nichtflüchtige Speichervorrichtungen mit geeigneten Eigenschaften, Festplatten, hybride Speichervorrichtungen, etc. umfassen können. Weitere beispielhafte Speichervorrichtungen können eine dynamischen Direktzugriffsspeicher- (DRAM-) Vorrichtung, eine statische Direktzugriffsspeicher- (SRAM-) Vorrichtung, ein Magnetband, einen optischen festplattenbasierten Speicher oder eine andere nichtflüchtige Speichervorrichtung umfassen.
  • In manchen Fällen kann Speicherlogik 104 und/oder die Speichervorrichtung(en) 110 in einer einzigen Speichervorrichtung integriert sein. In weiteren Fällen kann Speicherlogik 104 als Steuerung, wie eine RAID-Steuerung ausgeführt sein und Speichervorrichtungen 110 können mehrere mit der Steuerung verbundene Vorrichtungen umfassen. In manchen Fällen kann ein Speichersystem 100 ein verteiltes Speichersystem sein, das einige geographische Regionen umspannt. Beispielsweise kann die Speicherlogik 104 eine Programmierschnittstelle (API) umfassen, die auf einem oder mehreren Serverknoten im verteilten Speichersystem 100 implementiert ist. Somit kann Steuerleitung 124 ein Transportprotokoll darstellen, das über das Internet Protocol (IP) operiert. In so einem Beispiel kann bzw. können Speichervorrichtung(en) 110 einige andere Serverknoten umfassen, die sich über einige geographische Regionen erstrecken und Steuerleitungen 126 können auch ein Transferprotokoll umfassen, das über IP operiert, obwohl andere Protokolle zur Datenübertragung ebenso in Frage kommen.
  • 2A veranschaulicht ein beispielhaftes System zur Datenverarbeitung. Das System 200 umfasst eine Rechnervorrichtung 201, die kommunikativ mit einer oder mehreren Speichervorrichtungen 110 über einen Datenbus 220 gekoppelt ist.
  • Die Rechnervorrichtung 201 kann einen Prozessor 202 umfassen, der kommunikativ über einen Datenbus 230 mit einem Arbeitsspeicher 204, einer Kommunikationseinheit 207 und/oder anderen Komponenten (nicht gezeigt) gekoppelt ist. Wie gezeigt, kann der Prozessor einen CPU-Zwischenspeicher 210 mit einer Vielzahl temporärer Speicherorte 201a, 201b, 201c, ... 201n umfassen, der über den Datenbus 203 mit einer Rechnereinheit 205 gekoppelt ist. Rechnereinheit 205 kann Daten vom CPU-Zwischenspeicher 210 abrufen, Operation(en) auf den Daten, basierend auf Befehl(en) von der Speicherlogik 104 durchführen und die Ergebnis(se) der Operation(en) zurück im CPU-Zwischenspeicher 210 speichern. In manchen Ausführungsformen kann die Rechnereinheit 205 Löschungscodecodierung durchführen, indem sie Daten aus dem CPU-Zwischenspeicher 210 über den Datenbus 203 abruft, die Daten basierend auf einem Löschungscodecodierungsalgorithmus codiert und die codierten Daten zurück in CPU-Zwischenspeicher 210 speichert.
  • Die Speicherlogik 104 kann zahlreiche Unterkomponenten umfassen, die von der Rechnereinheit 205 ausgeführt werden können, um Rechnereinheit 205 dazu zu veranlassen, zahlreiche Operationen durchzuführen. Wie beispielsweise in 2C gezeigt, kann die Speicherlogik 104 eine Datenschnittstelle 211, einen Datentransponierer 212 und einen CRC-Generator 213 umfassen. Die Datenschnittstelle 211 umfasst Software- und/oder Hardware-Logik zum Abrufen und/oder Speichern von Daten an einem oder mehreren Orten, einschließlich CPU-Zwischenspeicher 210, Arbeitsspeicher 204 und/oder Speichervorrichtungen 110, wie an anderer Stelle hierin beschrieben. Der Datentransponierer 212 umfasst Software- und/oder Hardware-Logik zum Transponieren von Daten, wie an anderer Stelle hierin beschrieben. Der CRC-Generator 213 umfasst Software- und/oder Hardware-Logik zur Generierung von CRCs, wie hierin an anderer Stelle beschrieben.
  • Daten können zwischen dem Arbeitsspeicher 204 und dem CPU-Zwischenspeicher 210 über den Datenbus 230 der Rechnervorrichtung 201 kommuniziert werden. Zusätzlich dazu können Daten auch zwischen der Speichervorrichtung 110n und dem CPU-Zwischenspeicher 210 über die Kommunikationseinheit 207 kommuniziert werden, die kommunikativ mit den Datenbussen 220 und 230 gekoppelt ist.
  • Während eine spezielle Prozessor-202-Konfiguration in 2A beschrieben wird, gilt es zu verstehen, dass auch andere Prozessor-202-Konfigurationen von dieser Offenbarung umfasst werden. Beispielsweise kann der Prozessor 202 einen beliebigen Prozessor mit einer oder mehreren arithmetischen Logikeinheiten, Mikroprozessoren, Allzwecksteuerungen oder anderen Prozessoranordnungen umfassen, um Rechenoperationen durchzuführen und elektronische Anzeigesignale an eine Anzeigevorrichtung bereitzustellen. In manchen Ausführungsformen umfasst der Prozessor 202 einen Hardwareprozessor mit einem oder mehreren Prozessorkernen. Der Prozessor 202 ist mit dem Bus 230 zur Kommunikation mit den anderen Komponenten gekoppelt. Prozessor 202 verarbeitet Datensignale und kann unterschiedliche Rechnerarchitekturen umfassen, einschließlich einer Rechnerarchitektur mit komplexem Befehlssatz (CISC), einer Rechnerarchitektur mit reduziertem Befehlssatz (RISC) oder einer Architektur, die eine Kombination der Befehlssätze implementiert. Obwohl nur eine einziger Block für den Prozessor 202 im Beispiel von 2A gezeigt wird, können mehrere Prozessoren und/oder Prozessorkerne den Prozessor 202 umfassen.
  • Der Arbeitsspeicher 204 und/oder CPU-Zwischenspeicher 210 können Befehle und/oder Daten speichern, die von einem spezifisch angepassten Prozessor (z.B. dem Prozessor 202) ausgeführt werden können. Der Arbeitsspeicher 204 und/oder CPU-Zwischenspeicher 210 sind zur Kommunikation mit den anderen Komponenten der Rechnervorrichtung 201 gekoppelt. Die im Arbeitsspeicher 204 und/oder CPU-Zwischenspeicher 210 gespeicherten Befehle und Daten können Code zur Durchführung der hierin beschriebenen Verfahren umfassen. In manchen Ausführungsformen können Arbeitsspeicher 204 und/oder CPU-Zwischenspeicher 210 Befehle speichern, die die Speicherlogik 104 oder Abschnitte davon verkörpern.
  • Der Arbeitsspeicher 204 und/oder CPU-Zwischenspeicher 210 können ein oder mehrere nichtflüchtige computerverwendbare (z.B. lesbare, schreibbare, etc.) Medien umfassen, die ein beliebiges nichtflüchtiges Gerät oder eine Vorrichtung umfassen können, die Befehle, Daten, Computerprogramme, Software, Coderoutinen, etc. zur Verarbeitung durch oder in Verbindung mit dem Prozessor 202 enthalten, speichern, kommunizieren, ausbreiten oder befördern können. Beispielsweise kann ein nichtflüchtiger Arbeitsspeicher eine dynamische Direktzugriffsspeicher- (DRAM-) Vorrichtung, eine statische Direktzugriffsspeicher- (SRAM-) Vorrichtung oder eine andere flüchtige oder nichtflüchtige Arbeitsspeichervorrichtung umfassen, ist jedoch nicht auf diese beschränkt.
  • Die Busse 220 und/oder 230 können einen Kommunikationsbus zur Übertragung von Daten zwischen Komponenten einer Rechnervorrichtung oder zwischen Rechnervorrichtungen, ein Netzwerkbussystem, einen Prozessor-Mesh, SATA, SCSI, SAS, PCI, PCIe und/oder eine beliebige andere Art eines internen und/oder externen Kommunikationsbusses umfassen, um Daten zwischen Komponenten einer Rechner- und/oder Speichervorrichtung und/oder zwischen Komponenten verschiedener Komponenten zu übertragen. In manchen Ausführungsformen können die Rechnervorrichtungen (z.B. Client(s), Server, etc.) und die Speicherlogik 104 über eine Softwarekommunikationsmechanismus, der in Verbindung mit den Bussen 220 und/oder 230 implementiert ist, kooperieren und kommunizieren. Der Softwarekommunikationsmechanismus kann beispielsweise Interprozesskommunikation, lokale Funktions- oder Prozeduraufrufe, ferne Prozeduraufrufe, netzwerkbasierte Kommunikation, sichere Kommunikation, etc. umfassen und/oder vereinfachen.
  • Die Kommunikationseinheit 207 kann eine oder mehrere Schnittstellenvorrichtungen für eine Draht- und drahtlose Verbindung mit einem Computernetzwerk umfassen, mit der die Rechnervorrichtung 201 (z.B. die mitunter Speicherlogik 104 verkörpert) gekoppelt sein kann, wie Client-Vorrichtungen 106, Server, Datenquellen, Datenspeichervorrichtungen 110, etc. Beispielsweise kann die Kommunikationseinheit 207 CAT-Typ-Schnittstellen, drahtlose Sendeempfänger zum Senden und Empfangen von Signalen mittels Wi-Fi™; Bluetooth®, Mobilkommunikation, etc.; Busschnittstellen; USB-Schnittstellen; proprietäre Verbindungstypen; zahlreiche Kombinationen davon; etc. umfassen, beschränkt sich jedoch nicht darauf. In manchen Ausführungsformen kann die Kommunikationseinheit 207 den Prozessor 202 mit einem Netzwerk verbinden, das wiederum mit anderen Prozessorsystemen gekoppelt sein kann. Die Kommunikationseinheit 207 kann unter Verwendung von zahlreichen Standardkommunikationsprotokollen, einschließlich z.B. jener, die an anderer Stelle hierin besprochen werden, weitere Verbindungen mit dem Netzwerk und anderen Einheiten des Systems 100 bereitstellen.
  • Die Rechnervorrichtung 201 kann in verschiedenen Ausführungsformen weitere Komponenten umfassen, wie einen oder mehrere eines Graphikprozessors; eines hochauflösenden Touchscreens; einer physischen Tastatur; Front- und Rückkameras; eines Bluetooth®-Moduls; arbeitsspeicheranwendbare Firmware; und/oder zahlreiche physische Verbindungsschnittstellen (z.B. HDMI, Headset-Anschluss, etc.); etc. Zusätzlich dazu können auf der Rechnervorrichtung 201 ein Betriebssystem zur Verwaltung der Hardware und Ressourcen der Rechnervorrichtung 201, Programmierschnittstelle (APIs), um Anwendungszugriffe auf die Hardware und Ressourcen bereitzustellen, ein Benutzerschnittstellenmodul (nicht gezeigt) zur Generierung und Anzeige von Schnittstellen für die Benutzerinteraktion und -eingabe und Anwendungen einschließlich z.B. Anwendungen zur Bearbeitung von Dokumenten, Bildern, E-Mail(s) und Anwendungen zum Surfen im Internet, etc. gespeichert und ausgeführt werden.
  • Wie im Hintergrund besprochen, können in manchen Fällen während der Datenverarbeitung Rechensystemfehler auftreten, die unbeabsichtigte Fehler in den in der Speichervorrichtung 110 zu speichernden Daten einführen können. Beispielsweise können während des Vorgangs der Datenkommunikation zwischen der Rechnereinheit 205 und dem CPU-Zwischenspeicher 210 über den Datenbus 203 (siehe 2A) Signal- und/oder andere Fehler die Daten beschädigen und/oder verändern.
  • In weiteren Beispielen können Fehler während des Speichervorgangs, wie in 2B dargestellt, auftreten. Wie gezeigt, kann der CPU-Zwischenspeicher 210 eine Vielzahl von Speicherorten (bezeichnet als 201a, 201b, 201c, ..., 201n) umfassen und die Speichervorrichtung 110n kann eine Vielzahl von Speicherorten (202a, 202b, 202c, ... 202n) umfassen. Die Rechnereinheit 205 kann Daten zwischen den Orten des CPU-Zwischenspeichers 210 und den Orten der Speichervorrichtung 110 kommunizieren. Beispielsweise können Signalleitungen 209a, 209b, ... 209n Daten darstellen, die über die Datenbusse 220 und 230 und/oder die Kommunikationseinheit 207 kommuniziert werden.
  • Während der Kommunikation der Daten zwischen dem Zwischenspeicher 210 und/oder Speichervorrichtungen 110 (z.B. 110n) können Fehler, wie Bit-Flip-Fehler im Arbeitsspeicher, in die Daten vor deren Speicherung in den vorgesehenen Speichern (z.B. 201a, 201b, 202c, etc.) eingeführt werden. Insbesondere kann der CPU-Zwischenspeicher 210 Daten aus den Orten 202a und 202b der Speichervorrichtung 110n abrufen, wie von Signalleitungen 209a und 209b gezeigt und Daten für die Speicherung an Ort 202c bereitstellen, wie von Signalleitung 209c gezeigt. Wenn beispielsweise Daten B vom Ort 202a abgerufen werden und als B’ an Ort 201b gespeichert werden; wenn Daten A vom Ort 202b abgerufen und als A’ an Ort 201a gespeichert werden; und/oder wenn Daten C vom Ort 201c abgerufen und als C’ an Ort 202c gespeichert werden, können Fehler eingeführt werden. Diese Fehler sind auch auf den Arbeitsspeicher 204 und/oder andere Komponenten, wie an anderer Stelle hierin angemerkt, anwendbar.
  • 3 ist ein exemplarisches Verfahren 300 zur Generierung einer reduzierten CRC aus einem Datenvektor. In Block 302 kann die Datenschnittstelle 211 einen Datenvektor mit einer Vielzahl von geordneten Blöcken empfangen. Der Datentransponierer 212 bei 304 kann den empfangenen Datenvektor in eine Menge von Subvektoren Transponieren. Ein Subvektor kann entsprechende Datenelemente aus jedem der geordneten Blöcke umfassen.
  • In manchen Ausführungsformen kann der geordnete Block als Datenzeile dargestellt sein. Der Datentransponierer 212 kann die Datenzeile in eine Datenspalte Transponieren. Eine Datenspalte kann die sequentiellen Datenelemente des geordneten Blocks enthalten, von dem sie transponiert wurde. Die Datenspalten, die von den geordneten Blöcken transponiert wurden, können zusammen eine transponierte Datenmatrix bilden, die die Datenspalten nebeneinander anordnet, sodass die Datenelemente der Datenspalten einer Schicht entsprechen. Jede sequentielle Zeile der transponierten Datenmatrix kann einen Subvektor und eine Gruppe von Datenelementen umfassen.
  • 4 zeigt ein weiteres Beispiel der Operation(en) 400, die in Block 304 durchgeführt werden können. Insbesondere bei Block 402 kann der Datentransponierer 212 einen Datenvektor, der eine Vielzahl von geordneten Blöcken aufweist, in eine Menge von Subvektoren Transponieren. Die Menge von Subvektoren kann eine Vielzahl von sequentiellen Zeilen umfassen, die eine Datenmatrix bilden. Jede sequentielle Zeile aus der Vielzahl von sequentiellen Zeilen der Datenmatrix umfasst eine Menge gemischter Datenelemente, der entsprechende Datenelemente aus jedem der geordneten Blöcke umfasst.
  • Als weiteres Beispiel mit Bezug auf 7 kann der Datenvektor (z.B. 700) eine Zeilenmatrix (z.B. 702) umfassen und der Datentransponierer 212 kann die Zeilen in Spalten (z.B. 705) Transponieren. Diese Spalten können eine abgeleitete Matrix bilden (z.B. 740), deren Zeilen (z.B. 704) Daten aus jeder Spalte (z.B. 705) umfassen. Die Datenelemente in jeder Zeile (z.B. Subvektor) umfassen eine Mischung von Elementen entlang der Datenspalten bei einer entsprechenden Schicht und können daher basierend auf der Reihenfolge der Datenspalten geordnet werden. Beispielsweise kann die erste sequentielle Zeile das erste Datenelement aus jeder Datenspalte (die erste Schicht) umfassen, die zweite sequentielle Zeile kann das zweite Datenelement aus jeder Datenspalte (die zweite Schicht) umfassen, usw.
  • Bezugnehmend auf 3 bei Block 306 kann der CRC-Generator 213 eine Menge diskreter CRCs basierend auf dem entsprechendie Menge von Subvektoren generieren. In manchen Ausführungsformen können die diskreten CRCs den Zeilen der Datenmatrix entsprechen, die auch aus den vom Datenvektor transponierten Spalten gebildet wird. Beispielsweise, wie in Block 404 des Verfahrens 400 in 4 gezeigt, kann der CRC-Generator 213 eine diskrete CRC für jede sequentielle Zeile der Datenmatrix generieren. In manchen Ausführungsformen kann der CRC-Generator 213 eine bestimmte diskrete CRC unter Verwendung der gemischten Datenelemente (z.B. d1,1, d2,1,... dn,1) aus einer entsprechenden Zeile (z.B. 704a) der Datenmatrix generieren. Der CRC-Generator 213 kann einen beliebigen geeigneten CRC-Algorithmus anwenden, um die CRC zu generieren. Ein nichteinschränkendes Beispiel kann CRC32c umfassen, obwohl andere Variationen ebenso möglich sind und hiermit miteingeschlossen sind.
  • Bei Block 308 von 3 kann der Datentransponierer 212 die Menge diskreter CRCs in eine Menge gemischter CRCs Transponieren. JeDie Menge gemischter CRCs umfasst ein CRC-Datenelement aus jeder der diskreten CRCs. In manchen Ausführungsformen kann der Datentransponierer 212 auch die Menge diskreter CRCs in eine Menge gemischter CRCs Transponieren, indem er eine Spalte (z.B. 707a) der CRC-Matrix in eine Zeile (z.B. 708a) der Menge gemischter CRCs transponiert. In einem nichteinschränkenden Beispiel kann der Datentransponierer 212 die Menge gemischter CRCs Transponieren, indem er 8 32-Bit CRCs zu einem 32-Byte Datenvektor transponiert, obwohl andere Variationen ebenfalls möglich sind und hiermit miteingeschlossen sind. In diesem nichteinschränkenden Fall umfasst die CRC-Matrix 32 Spalten, wobei jede Spalte 8 Bits aufweist.
  • Bei Block 310 von 3 kann der CRC-Generator 213 die Menge gemischter CRCs in eine reduzierte CRC bei Block 310 unter Verwendung einer Kompaktierfunktion Kompaktieren. In manchen Ausführungsformen kann die Kompaktierfunktion ein höhergradiges Polynom umfassen, obwohl Polynome niedrigeren Grades in alternativen Ausführungsformen ebenfalls verwendet werden können. Wie hierin verwendet, ist ein höhergradiges Polynom ein Polynom vierten oder höheren Grades und ein Polynom niedrigeren Grades ein Polynom niedriger als vierten Grades. Ein beispielhaftes höhergradiges Polynom ist x4+x+1, wohingegen ein Polynom niedrigeren Grades x2 sein kann. In manchen Fällen ist das höhergradige Polynom ausgewählt, um über GF2 verwendet werden zu können, wodurch die rechnerische Effizienz erhöht wird.
  • In verschiedenen Ausführungsformen können die hierin beschriebenen Datentransponieroperationen, wie jene, die in Bezug auf 7 und die Verfahren 300 und 400 beschrieben wurden (z.B. Block 304, Block 308, Block 402 etc.) leistungsfähig auf dem Prozessor 202 durchgeführt werden, wie unter Verwendung von Single-Instruction-Multiple-Data- (SIMD-) Befehlen, obwohl andere geeignete Variationen ebenfalls möglich und mitgedacht sind. Zusätzlich oder alternativ dazu können in verschiedenen Ausführungsformen die hierin beschriebenen CRC-Operationen vorteilhaft durchgeführt werden, indem bestehende prozessorinterne CRC-Logik genutzt wird, wie an anderer Stelle hierin besprochen. Damit kann ein vergleichsweise effizienter Vorgang für die Codierung höherer Ordnung mit CRCs vorteilhaft bereitgestellt werden, verglichen mit dem der Codierung niedrigerer Ordnung mit CRCs unter Verwendung von bestehender Computerhardware.
  • 5 veranschaulicht ein weiteres Beispiel von Operation(en) 500, die in Block 310 von 3 durchgeführt werden können. Bei Block 502 im Speziellen kann der CRC-Generator 213 eine Kompaktierfunktion, die ein höhergradiges Polynom umfasst, auf die Menge gemischter CRCs anwenden, um die reduzierte CRC zu erhalten. In manchen Ausführungsformen kann der CRC-Generator 213 die Kompaktierfunktion auf CRC-Blöcke (z.B. 708a, 708b, ... 708j) anwenden, die die Menge gemischter CRCs umfassen, um die reduzierte CRC (z.B. 710) zu erhalten.
  • 6 zeigt ein beispielhaftes Verfahren 600, um eine reduzierte CRC mit einer Paritäts-CRC zu vergleichen. In Block 602 kann die Datenschnittstelle 211 eine vorberechnete einem Datenvektor zugeordnete Parität erhalten. In manchen Ausführungsformen kann der CRC-Generator 212 die vorberechnete Parität aus dem Datenvektor als Teil der Generierung von erasurecodierten Daten generieren. Beispielsweise kann der CRC-Generator 212 die Parität mittels mehrerer Operationen generieren, die mitunter eine lineare Eigenschaft aufweisen, obwohl andere Variationen ebenfalls möglich und hiermit miteingeschlossen sind. In einem nichteinschränkenden Beispiel können die mehreren Operationen eine mathematische Operation wie —p = p + a * d umfassen, wobei p für eine vorberechnete Parität, a für einen Skalarwert/Koeffizienten und d für einen Datenvektor steht. In manchen Ausführungsformen ist der Skalarwert a gleich 1. In manchen Ausführungsformen kann der Skalarwert größer als 1 oder höherer Ordnung sein.
  • In Block 604 von Verfahren 600 kann der CRC-Generator 212 eine Paritäts-CRC unter Verwendung einer vorberechneten Parität generieren. In manchen Ausführungsformen kann der CRC-Generator die Paritäts-CRC basierend auf einem oder mehreren CRC-Algorithmen generieren. Ein nichteinschränkendes Beispiel eines CRC-Algorithmus umfasst CRC32c, obwohl andere geeignete Algorithmen in Frage kommen.
  • Bei Block 606 von Verfahren 600 kann die Datenschnittstelle 211 eine reduzierte, einem Datenvektor zugeordnete CRC erhalten und bei Block 608 die reduzierte CRC mit einer Paritäts-CRC vergleichen, um eine Übereinstimmung zu ermitteln. In manchen Ausführungsformen kann der von Datenschnittstelle 211 durchgeführte Vergleich genutzt werden, um die Paritäts-CRC vorherzusagen. Beispielsweise kann die Datenschnittstelle feststellen, ob die reduzierte CRC mit der Paritäts-CRC übereinstimmt (d.h. eine Übereinstimmung zeigt eine zutreffende Vorhersage der Paritäts-CRC an), um die Integrität des Datenvektors, aus dem die reduzierte CRC abgeleitet wurde, zu überprüfen. In manchen Fällen ist die Paritäts-CRC dem Datenvektor zugeordnet, dem auch die reduzierte CRC zugeordnet ist. Falls daher die Datenschnittstelle 211 bei Block 608 feststellt, dass die reduzierte CRC nicht mit der Paritäts-CRC übereinstimmt, kann die Datenschnittstelle einen Fehler bei Block 610 anzeigen. Wenn die Datenschnittstelle jedoch feststellt, dass die Paritäts-CRC mit der reduzierten CRC übereinstimmt, kann die Datenschnittstelle 211 mit einer Speicheroperation bei Block 612 fortfahren. Beispielsweise kann die Datenschnittstelle 211 als Antwort auf die Feststellung durch die Datenschnittstelle 211 bei Block 608, dass die Paritäts-CRC mit der reduzierten CRC übereinstimmt, den Datenvektor in der Speichervorrichtung 110n speichern, obwohl es zu verstehen gilt, dass Datenschnittstelle 211 den Datenvektor auch an anderen Speicherorten, wie Datenspeichern, USB-Sticks oder anderen geeigneten Speichermedien, speichern kann.
  • Das Verfahren 600 verbessert bestehende Systeme in vielerlei Hinsicht. In manchen Ausführungsformen, wenn die Datenschnittstelle bei Block 608 die reduzierte CRC mit der Paritäts-CRC vergleicht, könnte das Ergebnis dieses Vergleichs anzeigen, dass die verarbeiteten Daten frei von Fehlern sind. Wenn beispielsweise ein Rechnersystem einen Datenvektor erasure-codiert, kann Rechnervorrichtung 201 das Verfahren 600 nutzen, um festzustellen, ob an irgendeinem Punkt des Codierungsvorgangs Fehler eingeführt wurden, bevor sie mit der Speicherung des codierten Datenvektors fortfährt. Beispielsweise kann eine mit der Rechnervorrichtung 201 verbundenen Datenschnittstelle eine dem codierten Datenvektor zugeordnete reduzierte CRC vergleichen und die reduzierte CRC mit einer dem codierten Datenvektor zugeordneten Paritäts-CRC vergleichen. Wenn die Datenschnittstelle 211 feststellt, dass die dem codierten Datenvektor zugeordnete reduzierte CRC mit der dem codierten Datenvektor zugeordneten Paritäts-CRC übereinstimmt, kann die Datenschnittstelle mit der Speicherung des codierten Datenvektors fortfahren. Wenn der Datenvektor jedoch feststellt, dass die dem codierten Datenvektor zugeordnete reduzierte CRC nicht mit der dem codierten Datenvektor zugeordneten Paritäts-CRC übereinstimmt, kann die Datenschnittstelle 211 einen Fehler anzeigen. Wie an anderer Stelle hierin besprochen, kann es sich bei dem Fehler um einen beliebigen anwendbaren Fehler handeln, der während einer Rechenverarbeitung und/oder Datenübertragungen auftritt, wie Systembus-Fehler, interne Busfehler, Zwischenspeicher-Bit-Flip-Fehler, Bit-Flip-Fehler im Arbeitsspeicher und/oder auch andere Systemfehler können in den codierten Datenvektor eingeführt werden.
  • In der erwähnten Beschreibung wurden zum Zwecke der Erklärung zahlreiche spezifische Details dargelegt. Nichtsdestotrotz wird es offensichtlich sein, dass die offenbarten Technologien ohne einen bestimmten Teilsatz dieser spezifischen Details umgesetzt werden können. In anderen Beispielen sind Strukturen und Vorrichtungen in Form eines Blockdiagramms gezeigt. Beispielsweise werden die offenbarten Technologien in manchen erwähnten Anwendungen in Bezug auf Benutzerschnittstellen und spezielle Hardware beschrieben. Darüber hinaus sind die Technologien in erster Linie im Kontext von Online-Diensten offenbart; nichtsdestotrotz sind die offenbarten Technologien auf andere Datenquellen und Datentypen (z.B. Sammlungen anderer Quellen z.B. Bilder, Audio, Webseiten) anwendbar.
  • Verweise in der Beschreibung auf „eine Ausführungsform“ oder „Ausführungsform“ bedeutet, dass eine spezielle Funktion, Struktur oder Eigenschaft, die in Zusammenhang mit der Ausführungsform beschrieben wird, in zumindest in einer Ausführungsform der offenbarten Technologien mitinbegriffen ist. Das Aufkommen des Ausdrucks „in einer Ausführungsform“ an unterschiedlichen Stellen der Beschreibung bezieht sich nicht notwendigerweise jedes Mal auf die gleiche Ausführungsform.
  • Manche Abschnitte der erwähnten detaillierten Beschreibung wurden in Bezug auf Vorgänge und symbolische Darstellungen von Operationen an Datenbits im Arbeitsspeicher eines Computers vorgelegt. Ein Vorgang kann im Allgemeinen als stimmige Abfolge von Schritten betrachtet werden, die zu einem Ergebnis führen. Die Schritte können physische Manipulationen physischer Größen umfassen. Diese Größen nehmen die Form elektrischer oder magnetischer Signale an, die gespeichert, übertragen, kombiniert, verglichen und anderweitig manipuliert werden können. Diese Signale können in Form von Bits, Werten, Elementen, Symbolen, Zeichen, Termen, Zahlen oder dergleichen bezeichnet werden.
  • Diese und ähnliche Ausdrücke können den passenden physischen Größen zugeordnet werden und als Bezeichnung betrachtet werden, die auf diese Größen angewendet werden. Wenn nicht spezifisch anderweitig ausgeführt, wie aus der vorangegangenen Diskussion ersichtlich, versteht es sich, dass sich in der gesamten Beschreibung, die Verwendungen von z.B. den Begriffen „Verarbeiten“ oder „Rechnen“ oder „Berechnen“ oder „Feststellen“ oder „Anzeigen“ oder dergleichen auf die Abläufe und Vorgänge eines Computersystems oder einer ähnlichen Rechnervorrichtung bezieht, die Daten, die als physische (elektronische) Größen in den Registern und Speichern des Computersystems dargestellt werden, in andere Daten, die auf ähnliche Weise als physische Größe in den Speichern oder Registern des Computersystems oder anderen solchen Informationsspeicher-, Übertragungs- oder Anzeigevorrichtungen dargestellt werden, manipuliert und überträgt.
  • Die offenbarten Technologien können auch eine Vorrichtung zur Durchführung der Operationen hierin betreffen. Diese Vorrichtung kann speziell für die erforderlichen Zwecke konstruiert sein oder sie kann einen Allzweck-Computer umfassen, der von einem am Computer gespeicherten Computerprogramm selektiv aktiviert oder rekonfiguriert wird. So ein Computerprogramm kann auf einem computerlesbaren Speichermedium gespeichert sein, einschließlich aber nicht ausschließlich einer beliebigen Art von Disk, einschließlich Disketten, optischer Disks, CD-ROMs und magnetischer Disks, Nur-Lese-Speichern (ROMs), Direktzugriffsspeichern (RAMs), EPROMs, EEPROMs, magnetischen oder optischen Karten, Flash-Speichern, einschließlich USB-Sticks mit nichtflüchtigem Speicher oder einer beliebigen Art eines geeigneten Mediums, um elektronisch Befehle zu speichern, das mit einem Computersystembus gekoppelt ist.
  • Die offenbarten Technologien können die Form einer reinen Hardwareausführung, einer reinen Softwareausführung oder einer Ausführung, die sowohl Hardware- als auch Softwareelemente enthält, annehmen. In manchen Ausführungen ist die Technologie in einer Software ausgeführt, die Firmware, residente Software, Mikrocode, etc. umfasst, sich jedoch nicht auf diese beschränkt.
  • Darüber hinaus können die offenbarten Technologien die Form eines Computerprogrammprodukts annehmen, auf das von einem nichtflüchtigen computerverwendbaren oder computerlesbaren Medium zugegriffen werden kann, das Programmcode zur Verwendung in oder in Verbindung mit einem Computer oder einem beliebigen Befehlsausführungssystem bereitstellt. Zum Zwecke dieser Beschreibung kann es sich bei einem computerverwendbaren oder computerlesbaren medium um eine beliebige Vorrichtung handeln, die das Programm zur Verwendung in oder in Verbindung mit dem Befehlsausführungssystem, Gerät oder der Vorrichtung enthalten, speichern, kommunizieren, ausbreiten oder transportieren kann.
  • Ein Rechnersystem oder Datenverarbeitungssystem, das für die Speicherung und/oder Ausführung von Programmcode geeignet ist, umfasst zumindest einen Prozessor (z.B. einen Hardwareprozessor), der direkt oder indirekt mit den Arbeitsspeicherelementen durch ein Bussystem gekoppelt ist. Die Arbeitsspeicherelemente können einen lokalen Arbeitsspeicher, der während der eigentlichen Ausführung des Programmcodes genutzt wird, Massenspeicher und Zwischenarbeitsspeicher umfassen, die eine vorübergehende Speicherung von zumindest einem Teil des Programmcodes bereitstellen, um die Anzahl der Codeabrufe aus dem Massenspeicher während der Ausführung zu verringern.
  • Eingabe/Ausgabe- oder I/O-Vorrichtungen (einschließlich aber nicht ausschließlich Tastaturen, Bildschirmen, Zeigegeräten, etc.) können mit dem System entweder direkt oder durch zwischengeschaltete I/O-Steuerungen gekoppelt sein.
  • Netzwerkadapter können ebenfalls mit dem System gekoppelt sein, um die Koppelung des Datenverarbeitungssystems mit anderen Datenverarbeitungssystemen oder entfernten Druckern oder Speichervorrichtungen durch zwischengeschaltete private oder öffentliche Netzwerke zu ermöglichen. Modems, Kabelmodems und Ethernet-Karten stellen nur ein paar der derzeitig erhältlichen Arten von Netzwerkadaptern dar.
  • Schließlich können die hierin vorgelegten Abläufe und Darstellungen nicht grundsätzlich auf einen bestimmten Computer oder eine andere Vorrichtung bezogen werden. Es können zahlreiche Allzweck-Systeme mit Programmen gemäß den Lehren hierin genutzt werden oder es kann sich als praktisch erweisen, spezialisiertere Vorrichtungen zu konstruieren, um die erforderlichen Verfahrensschritte durchzuführen. Die für eine Vielzahl dieser Systeme erforderliche Struktur ist aus der folgenden Beschreibung ersichtlich. Zusätzlich dazu wurden die offenbarten Technologien nicht in Bezug auf eine bestimmte Programmiersprache beschrieben. Es versteht sich, dass eine Vielzahl von Programmiersprachen genutzt werden kann, um die Lehren der Technologien, wie hierin beschrieben, durchzuführen.
  • Die vorangegangene Beschreibung der Ausführungen der vorliegenden Techniken und Technologien wurde zum Zwecke der Illustration und Beschreibung dargelegt. Sie soll nicht umfassend gedacht sein oder die vorliegenden Verfahren und Technologien auf die spezifische offenbarte Form einschränken. Im Sinne der erwähnten Lehre sind viele Abwandlungen und Variationen möglich. Der Schutzumfang der vorliegenden Verfahren und Technologien soll nicht auf diese detaillierte Beschreibung beschränkt sein. Die vorliegenden Verfahren und Technologien können in anderen spezifischen Formen durchgeführt werden, ohne dass man sich damit vom Geist oder essentiellen Merkmalen davon entfernt. Genauso sind die bestimmten Namen und Aufteilungen der Module, Routinen, Funktionen, Attribute, Methodologien und anderen Aspekten nicht verpflichtend oder von Bedeutung und die Mechanismen, die die vorliegenden Verfahren und Technologien oder deren Funktionen umsetzen können unterschiedliche Namen, Aufteilungen und/oder Formate aufweisen. Darüber hinaus können die Module, Routinen, Funktionen, Attribute, Methodologien und anderen Aspekte der vorliegenden Technologie als Software, Hardware, Firmware oder eine beliebige Kombination der drei ausgeführt werden. Außerdem, immer wenn eine Komponente, z.B. ein Modul, als Software ausgeführt wird, kann die Komponenten als eigenständiges Programm, als Teil eines größeren Programms, als eine Vielzahl einzelner Programme, als statisch oder dynamisch verbundene Bibliothek, als kernladbares Modul, als Vorrichtungstreiber und/oder auf beliebig andere Weise ausgeführt werden, die derzeit oder zukünftig in der Computerprogrammierung bekannt ist. Zusätzlich dazu sind die vorliegenden Verfahren und Technologien in keiner Weise auf die Ausführung in einer spezifischen Programmiersprache oder für ein spezifisches Betriebssystem oder Umgebung beschränkt. Dementsprechend soll die Offenbarung der vorliegenden Verfahren und Technologien veranschaulichend aber nicht einschränkend sein.

Claims (20)

  1. System, das Folgendes umfasst: einen oder mehrere Prozessoren; und Speicherlogik, die wenn sie von dem einen oder mehreren Prozessoren ausgeführt wird, Operationen durchführt, die Folgendes umfassen: das Empfangen eines Datenvektors, wobei der Datenvektor eine Vielzahl geordneter Blöcke umfasst; das Transponieren des Datenvektors in eine Menge von Subvektoren, wobei jeder der Subvektoren ein entsprechendes Datenelement von jedem der Vielzahl geordneter Blöcke umfasst; das Generieren einer Menge diskreter zyklischer Redundanzprüfungen (CRCs) basierend auf der Menge von Subvektoren; das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs, wobei jede der gemischten CRCs ein CRC-Datenelement aus jeder der diskreten CRCs umfasst; und das Kompaktieren der Menge gemischter CRCs in eine reduzierte CRC.
  2. System nach Anspruch 1, wobei jeder der Vielzahl von geordneten Blöcken eine Datenzeile mit sequentiellen Datenelementen umfasst.
  3. System nach Anspruch 2, wobei: das Transponieren des Datenvektors in eine Menge von Subvektoren das Transponieren der Datenzeile jedes geordneten Blocks in eine Datenspalte umfasst; die Datenspalte die sequentiellen Datenelemente aus der Datenzeile des geordneten Blocks enthält; die Datenspalte aus jedem der geordneten Blöcke zusammen eine transponierte Datenmatrix bildet; die transponierte Datenmatrix eine Vielzahl gemischter sequentieller Zeilen umfasst; jede gemischte sequentielle Zeile aus der Vielzahl von gemischten sequentiellen Zeilen eine Gruppe geordneter Datenelemente an einer entsprechenden Schicht umfasst; und die Gruppe geordneter Datenelemente das entsprechende Datenelement aus jedem der geordneten Blöcke an der entsprechenden Schicht umfasst.
  4. System nach Anspruch 1, wobei: Die Menge von Subvektoren eine Datenmatrix mit einer Vielzahl von sequentiellen Zeilen umfasst; jede der sequentiellen Zeilen eine Menge gemischter Datenelemente umfasst, der das entsprechende Datenelement aus jedem der geordneten Blöcke umfasst; und das Generieren der Menge diskreter CRCs basierend auf der Menge von Subvektoren Folgendes umfasst: das Generieren einer diskreten CRC für jede sequentielle Zeile der sequentiellen Zeilen aus der Datenmatrix unter Verwendung der Menge gemischter Datenelemente aus der sequentiellen Zeile.
  5. System nach Anspruch 4, wobei es sich bei der diskreten CRC um eine CRC32c handelt.
  6. System nach Anspruch 1, wobei das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs das Transponieren von 8 32-Bit CRCs in einen 32-Byte-Datenvektor umfasst.
  7. System nach Anspruch 1, wobei das Kompaktieren der Menge gemischter CRCs in eine reduzierte CRC Folgendes umfasst: das Anwenden einer Kompaktierfunktion auf die Menge gemischter CRCs, um die reduzierte CRC zu erhalten, wobei die Kompaktierfunktion ein höhergradiges Polynom umfasst.
  8. System nach Anspruch 7, wobei das höhergradiges Polynom ein Polynom vierten oder höheren Grades umfasst.
  9. System nach Anspruch 1, wobei: der Datenvektor eine zugeordnete vorberechnete Parität umfasst; und die Operationen ferner Folgendes umfassen: das Generieren einer Paritäts-CRC für die zugeordnete vorberechnete Parität; das Durchführen eines Vergleichs zwischen der Paritäts-CRC und der reduzierten CRC; und das Feststellen eines Fehlers im Datenvektor basierend auf dem Vergleich.
  10. Computerimplementiertes Verfahren zur Erkennung von Rechenfehlern, wobei das computerimplementierte Verfahren Folgendes umfasst: das Empfangen eines Datenvektors, wobei der Datenvektor eine Vielzahl geordneter Blöcke umfasst; das Transponieren des Datenvektors in eine Menge von Subvektoren, wobei jeder der Subvektoren ein entsprechendes Datenelement aus jedem der geordneten Blöcke umfasst; das Generieren einer Menge diskreter zyklischer Redundanzprüfungen (CRCs) basierend auf der Menge von Subvektoren; das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs, wobei jede der gemischten CRCs ein CRC-Datenelement aus jeder der diskreten CRCs umfasst; und das Kompaktieren der Menge gemischter CRCs in eine reduzierte CRC.
  11. Computerimplementiertes Verfahren nach Anspruch 10, wobei jeder der geordneten Blöcke eine Datenzeile mit einer Vielzahl sequentieller Spalten umfasst, die entsprechend sequentielle Datenelemente enthalten.
  12. Computerimplementiertes Verfahren nach Anspruch 11, wobei: das Transponieren des Datenvektors in eine Menge von Subvektoren das Transponieren der Datenzeile aus jedem geordneten Block in eine Datenspalte umfasst; die Datenspalte die sequentiellen Datenelemente aus der Datenzeile des geordneten Blocks umfasst; die Datenspalte von jedem der geordneten Blöcke zusammen eine transponierte Datenmatrix bildet; die transponierte Datenmatrix eine Vielzahl gemischter sequentieller Zeilen umfasst; jede gemischte sequentielle Zeile aus der Vielzahl gemischter sequentieller Zeilen eine Gruppe geordneter Datenelemente an einer entsprechenden Schicht umfasst; und die Gruppe geordneter Datenelemente das entsprechende Datenelement aus jedem der geordneten Blöcke an der entsprechenden Schicht umfasst.
  13. Computerimplementiertes Verfahren nach Anspruch 10, wobei: Die Menge von Subvektoren eine Datenmatrix mit einer Vielzahl sequentieller Zeilen umfasst; jede der sequentiellen Zeilen eine Menge gemischter Datenelemente umfasst, der das entsprechende Datenelement aus jedem der geordneten Blöcke umfasst; und das Generieren der Menge diskreter CRCs basierend auf der Menge von Subvektoren Folgendes umfasst: das Generieren einer diskreten CRC für jede sequentielle Zeile der sequentiellen Zeilen aus der Datenmatrix unter Verwendung der Menge gemischter Datenelemente aus der sequentiellen Zeile.
  14. Computerimplementiertes Verfahren nach Anspruch 13, wobei es sich bei der diskreten CRC um eine CRC32c handelt.
  15. Computerimplementiertes Verfahren nach Anspruch 10, wobei das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs das Transponieren von 8 32-Bit CRCs in einen 32-Byte Datenvektor umfasst.
  16. Computerimplementiertes Verfahren nach Anspruch 10, wobei das Kompaktieren der Menge gemischter CRCs in eine reduzierte CRC Folgendes umfasst: das Anwenden einer Kompaktierfunktion auf die Menge gemischter CRCs, um die reduzierte CRC zu erhalten, wobei die Kompaktierfunktion ein höhergradiges Polynom umfasst.
  17. Computerimplementiertes Verfahren nach Anspruch 16, wobei das höhergradige Polynom ein Polynom vierten oder höheren Grades umfasst.
  18. Computerimplementiertes Verfahren nach Anspruch 10, wobei der Datenvektor eine zugeordnete vorberechnete Parität umfasst und das Verfahren ferner Folgendes umfasst: das Generieren einer Paritäts-CRC für die zugeordnete vorberechnete Parität.
  19. Computerimplementiertes Verfahren nach Anspruch 18, das ferner Folgendes umfasst: das Durchführen eines Vergleichs zwischen der Paritäts-CRC und der reduzierten CRC; und das Feststelle eines Fehlers im Datenvektor basierend auf dem Vergleich.
  20. System, das Folgendes umfasst: Mittel für das Empfangen eines Datenvektors, wobei der Datenvektor eine Vielzahl geordneter Blöcke umfasst; Mittel für das Transponieren des Datenvektors in eine Menge von Subvektoren, wobei jeder der Subvektoren ein entsprechendes Datenelement aus jedem der geordneten Blöcke umfasst; Mittel für das Generieren einer Menge diskreter zyklischer Redundanzprüfungen (CRCs) basierend auf der Menge von Subvektoren; Mittel für das Transponieren der Menge diskreter CRCs in eine Menge gemischter CRCs, wobei jede der gemischten CRCs ein CRC-Datenelement aus jeder der diskreten CRCs umfasst; und Mittel für die Kompaktierung der Menge gemischter CRCs in eine reduzierte CRC.
DE102018105848.9A 2017-06-16 2018-03-14 CPU-Fehlerkorrektur während Erasure-Code-Codierung Expired - Fee Related DE102018105848B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/626,043 2017-06-16
US15/626,043 US10243583B2 (en) 2017-06-16 2017-06-16 CPU error remediation during erasure code encoding

Publications (2)

Publication Number Publication Date
DE102018105848A1 true DE102018105848A1 (de) 2018-12-20
DE102018105848B4 DE102018105848B4 (de) 2022-08-11

Family

ID=64457609

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018105848.9A Expired - Fee Related DE102018105848B4 (de) 2017-06-16 2018-03-14 CPU-Fehlerkorrektur während Erasure-Code-Codierung

Country Status (3)

Country Link
US (1) US10243583B2 (de)
CN (1) CN109144768B (de)
DE (1) DE102018105848B4 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113505019A (zh) * 2021-05-14 2021-10-15 山东云海国创云计算装备产业创新中心有限公司 一种纠删码数据及校验恢复方法、装置、设备及可读介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10991414B2 (en) * 2019-04-12 2021-04-27 Western Digital Technologies, Inc. Granular refresh rate control for memory devices based on bit position

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0614294A1 (de) 1993-03-03 1994-09-07 International Business Machines Corporation Verfahren zur Erzeugung eines Prüfmusters für Rahmen
US6952797B1 (en) 2000-10-25 2005-10-04 Andy Kahn Block-appended checksums
US20020144208A1 (en) 2001-03-30 2002-10-03 International Business Machines Corporation Systems and methods for enabling computation of CRC' s N-bit at a time
US20040158794A1 (en) * 2002-07-19 2004-08-12 Niesen Joseph W. Reduced overhead CRC functionality for packets and link layer superframes
US20040153935A1 (en) * 2002-07-19 2004-08-05 Niesen Joseph W. Reduced overhead CRC functionality for packets and link layer superframes
US7114116B2 (en) 2002-09-13 2006-09-26 Sun Microsystems, Inc. Accelerated Galois data integrity crosscheck system and method
CN1799104B (zh) 2003-06-05 2011-07-13 Nxp股份有限公司 存储在非易失性存储器中的数据的完整性控制
WO2007069406A1 (ja) * 2005-12-15 2007-06-21 Mitsubishi Electric Corporation 通信システム、送信側通信装置および受信側通信装置
US8898536B2 (en) 2007-04-27 2014-11-25 Netapp, Inc. Multi-core engine for detecting bit errors
US8572459B2 (en) * 2008-10-16 2013-10-29 Codman Neuro Sciences Sárl Insuring proper communication with chosen implant among multiple implants in proximity to one another
US8464125B2 (en) * 2009-12-10 2013-06-11 Intel Corporation Instruction-set architecture for programmable cyclic redundancy check (CRC) computations
US8417961B2 (en) * 2010-03-16 2013-04-09 Oracle International Corporation Apparatus and method for implementing instruction support for performing a cyclic redundancy check (CRC)
US8510639B2 (en) 2010-07-01 2013-08-13 Densbits Technologies Ltd. System and method for multi-dimensional encoding and decoding
WO2013185271A1 (zh) * 2012-06-11 2013-12-19 北京大学深圳研究生院 网络存储中抗拜占庭失效的数据重构、失效数据恢复方法及装置
US20140013181A1 (en) 2012-07-04 2014-01-09 Lisa Fredrickson Error Correction Coding Using Large Fields
KR20140081954A (ko) * 2012-12-21 2014-07-02 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 에러 정정 코드 처리 방법
CN103199873B (zh) * 2013-04-23 2016-03-30 常熟理工学院 两级分块crc运算的快速配置方法
US9304709B2 (en) * 2013-09-06 2016-04-05 Western Digital Technologies, Inc. High performance system providing selective merging of dataframe segments in hardware
US9785501B2 (en) 2014-02-18 2017-10-10 Sandisk Technologies Llc Error detection and handling for a data storage device
CN106462481A (zh) * 2014-04-30 2017-02-22 慧与发展有限责任合伙企业 使用循环冗余校验的重复数据
CN105912622A (zh) * 2016-04-05 2016-08-31 重庆大学 一种针对无损压缩文件的数据去重方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113505019A (zh) * 2021-05-14 2021-10-15 山东云海国创云计算装备产业创新中心有限公司 一种纠删码数据及校验恢复方法、装置、设备及可读介质
CN113505019B (zh) * 2021-05-14 2024-01-26 山东云海国创云计算装备产业创新中心有限公司 一种纠删码数据及校验恢复方法、装置、设备及可读介质

Also Published As

Publication number Publication date
CN109144768B (zh) 2021-12-17
US20180367162A1 (en) 2018-12-20
US10243583B2 (en) 2019-03-26
DE102018105848B4 (de) 2022-08-11
CN109144768A (zh) 2019-01-04

Similar Documents

Publication Publication Date Title
DE112014005266B4 (de) Verfahren und System zur Vorwärtsreferenz-Protokollierung in einem peristenten Datenspeicher
DE112017000220T5 (de) Effektiver, mit einem Geheimschlüssel verschlüsselter sicherer Datenabschnitt
US9152542B2 (en) Automatic generation of test scripts
DE102018123103A1 (de) Halbleitervorrichtung, die Sicherheitsschlüssel erzeugt, Verfahren zum Erzeugen eines Sicherheitsschlüssels und Verfahren zum Registrieren des Sicherheitsschlüssels
DE102013108394A1 (de) Verfahren zum Verwalten eines Schlüssels für sicheres Speichern von Daten und Vorrichtung dafür
DE102018125530A1 (de) Verfahren und Anordnungen für impliziete Integrität
US10157000B2 (en) Data operation method and device
DE102013201174A1 (de) Online-Überprüfung einer Standby-Datenbank in physischen Replikationsumgebungen mit Protokollversand
DE112012005222T5 (de) Halbleiter-Datenspeicherverwaltung
DE102017104073B4 (de) Verallgemeinertes Verifikationsverfahren für Schreiboperationen
DE102007044330A1 (de) Verschlüsselungsprozessor und Verfahren zum Schreiben und Lesen von Daten
DE112008004014T5 (de) Analysieren von Serverkopien von Clientdateien
DE102018123926A1 (de) Dynamische mehrstufige Decodierung
US9971735B2 (en) Information retrieval using sparse matrix sketching
DE102016107718A1 (de) Auslesen von Fehlervektoren aus einer Speichereinheit
DE112014002403B4 (de) Hochleistungs-Lese-Modifizier-Schreib-System mit Zeilenratenzusammenführung von Datenrahmensegmenten in Hardware
DE112016002305B4 (de) Reduktion der Schreibverstärkung in einem Objektspeicher
DE112020003004T5 (de) Dma-scatter- und gather-operationen für nicht zusammenhängenden speicher
DE102020105939A1 (de) Enhanced-Serial-Peripheral-Interface-(eSPI)-Signalisierung zurAbsturzereignisbenachrichtigung
DE102017001995A1 (de) Effiziente geräteübergreifende redundanzimplementierung auf direkt angeschlossenen, nicht-flüchtigen hochleistungsspeichern mit datenreduktion
DE102018105848B4 (de) CPU-Fehlerkorrektur während Erasure-Code-Codierung
DE102020119888A1 (de) Hardware-basierte erkennung von fehlern bezüglich der erhaltung lokaler zustände
DE102019119831A1 (de) Verschlüsselungsschaltung zum Durchführen von virtuellen Verschlüsselungsoperationen
DE102020121075A1 (de) Einrichtung und Verfahren zur Authentifizierung von Software
CN113159195A (zh) 一种超声图像分类方法、系统、电子装置及存储介质

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee