JP4935367B2 - Raid装置及びガロア体の積演算処理方法 - Google Patents

Raid装置及びガロア体の積演算処理方法 Download PDF

Info

Publication number
JP4935367B2
JP4935367B2 JP2007010204A JP2007010204A JP4935367B2 JP 4935367 B2 JP4935367 B2 JP 4935367B2 JP 2007010204 A JP2007010204 A JP 2007010204A JP 2007010204 A JP2007010204 A JP 2007010204A JP 4935367 B2 JP4935367 B2 JP 4935367B2
Authority
JP
Japan
Prior art keywords
data
value
parity
galois field
symbol
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.)
Expired - Fee Related
Application number
JP2007010204A
Other languages
English (en)
Other versions
JP2008176621A (ja
Inventor
伊東利雄
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2007010204A priority Critical patent/JP4935367B2/ja
Priority to EP07123711.9A priority patent/EP1947771B1/en
Priority to US12/004,826 priority patent/US8131794B2/en
Priority to KR1020080004384A priority patent/KR100953884B1/ko
Priority to CN2008100030529A priority patent/CN101226492B/zh
Publication of JP2008176621A publication Critical patent/JP2008176621A/ja
Application granted granted Critical
Publication of JP4935367B2 publication Critical patent/JP4935367B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • 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
    • 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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1057Parity-multiple bits-RAID6, i.e. RAID 6 implementations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)

Description

本発明は、ガロア体演算により、データのパリテイを計算するRAID装置及びガロア体の積演算方法に関し、特に、ディスク群の2重故障を復元するのに好適なRAID装置及びガロア体の積演算方法に関する。
ディスクの2重故障を復元できる方法として、RAID(Redundant Array of Independent Disks)6が知られている。このRAID6の方式として、1次元冗長方式が提案されている(例えば、特許文献1参照)。
図14のRAID6の構成で説明すると、RAIDコントローラ110に、3台のデータディスク装置(ハードディスクドライブ)101,102,103と、2台のパリテイディスク装置(ハードディスクドライブ)104,105が、接続される。
1次元冗長方式は、データから2種類のパリテイを生成する。図15に示すように、1つ目のパリティPは、従来のRAID5と同じく、各データD1,D2,D3の足し算(XOR)を行った結果を、パリティとする。そして、このパリテイPは、第1のディスク装置104に保存する。尚、以下、「+」の記号は、XOR(排他的論理和)を示す。
2つ目のパリティQは、各データD1,D2,D3に対し、ガロア体の積演算による重み付け行った後、それらを足し合わせた結果(XOR)をパリティとする。そして、このパリテイQは、第2のディスク装置105に保存される。
このガロア体は、各データディスク装置101,102,103に対して、1つ決定され、2重故障の復元のためには、各データディスク装置101,102,103で、異なっている必要がある。例えば、図15に示すように、データビット数を16ビットとすると、ガロア体GF(2^16)は、2の16乗個の有限個の点を取りうる。又、ガロア体の四則演算が、所定の法則で可能である。1次元冗長方式は、パリテイの分散が可能となり、2重故障の検出、復元に有効である。
図15に示したように、ガロア体を利用したパリテイ生成においては、ガロア体の積演算として、データとガロア体の2つの変数を用いて、演算を行う必要がある。このため、RAID5のXOR演算(パリテイPの演算)に対し、パリテイ生成に処理時間を要し、性能が劣化する。
このガロア体の積演算を簡略化するため、複数のデータをシフトやAND,XORを使用し、α倍の重み付け(積演算)のアルゴリズムが提案されている(例えば、非特許文献1参照)。この提案された論文では、その4頁から5頁に、データが8ビットの場合のパリテイ生成、データ復元の方程式を解説し、6頁の下欄から7頁に、α倍のアルゴリズムをC言語で開示している。
このC言語で記述されたアルゴリズムを、図16及び図17を用いて、各々8ビットの4シンボルのデータを対象として、説明する。図16の「v」は、8ビット、4シンボル(32ビット)の対象データを示す。
先ず、ディスク装置の8ビットのデータを、4つ、32ビットのレジスタにロードする(S100)。この対象データv(32ビット)全体を、1ビット左(上位方向)にシフトする(S101)。1ビット左にシフトされたデータv<<1は、32ビット単位で、対象データvの2倍の値となる。
次に、シフトされたデータv<<1において、このデータvのシフトにより、他のシンボルへ影響したビットをマスクする。このため、マスク値「0xfefefefe」を用意し、シフトされたデータv<<1と、マスク値とのアンド(AND)演算を行い、マスクされたデータvvを得る(S102)。この操作により、8ビット間隔の右端(シフトにより影響されたビット)の値が、「0」に設定される。即ち、32ビット全体をシフトしているので、対象シンボルの右隣のシンボルの最上位ビットにより、対象シンボルの右端ビットが影響されることを防止する。
次に、対象データvからマスク(v)関数を、図17のように作成する(S103)。マスク(v)関数は、図17に示すように、32ビットの対象データvの8ビット間隔の左端が、「1」である場合には、8ビットの「11111111」を、左端が、「0」である場合には、8ビットの「00000000」を表す。即ち、シフトにより、桁上げされたシンボルには、8ビットのオール「1」を、桁上げされないシンボルには、8ビットのオール「0」を施すマスク(v)関数を作成する。
このため、マスク値「0x80808080」と、即ち、8ビット間隔で、「1」が現れ、その他は、「0」の値と、対象データvとの論理積(AND)をとる(S110)。このマスク値は、各シンボルの先頭ビットを抽出する。
次に、論理積値を、左に1ビットシフトした32ビットデータv<<1(2倍データ)を演算し、且つ論理積値を、右に7ビットシフトした32ビットデータv>>7(1/128倍データ)を演算し,左に1ビットシフトした32ビットデータv<<1(2倍データ)から右に7ビットシフトした32ビットデータv>>7を差し引き、マスク(v)関数MASK(v)を得る(S112)。この関数は、先頭ビットが、「1」のシンボルと、それ以外を区別する役目を持つ。
図16に戻り、8ビットのガロア体GF(2の8乗)の生成多項式(=x^8+x^2+1)に対応する係数値「0x1d1d1d1d」と、マスク(v)関数MASK(v)との論理積(AND)を演算する(S104)。即ち、4シンボルの内、先頭ビットが、「1」のシンボルのみに、係数値「0x1d1d1d1d」の「00011101」に置き換える。
この論理積結果と、ステップS102で、演算したマスクされた対象データvvとのXORを演算することにより、α倍された対象データα・vを得る(S105)。このα倍された対象データα・vに、これらのステップを再度繰り返すと、対象データvのαの二乗倍のデータが得られる。同様にして、対象データvのαの繰り返し倍のデータを演算できる。
このように、従来技術では、ステップS100で、代入、シフト、ステップS101で、AND,ステップS103(図17)で、AND,2回シフト、減算、ステップS104で、AND,ステップS105で、XORの9回の操作で、数シンボル(ここでは、4シンボル)のガロア体積演算の並列処理を実現できる。
日本国特開2000−259359号公報(図5、図6) 論文「The mathematics of RAID−6」(著者 H.Peter Anvin、online paper, http://kernel.org/pub/linux/kernel/people/hpa/raid6.pdf、2006年10月26日アクセス)
この従来のガロア体の積演算処理では、複数シンボル(上の例では、4シンボル)の並列処理を実現できるが、α倍するには、9ステップの演算が必要となる。従って、αのn乗倍を演算するには、9・nステップの演算回数が必要となる。
特に、近年の記憶容量の増大に伴い、対象データのシンボル数(データディスク装置の数)も増大する傾向にあり、例えば、2台のパリテイディスク装置に対し、14台のデータディスク装置を設けてRAID6を構成する場合には、αの13乗倍を演算する必要があり、9・13=117ステップの演算が必要となり、更なるステップ数の削減が望まれる。
又、繰り返しにより、演算する場合には、その繰り返し数又は反復回数(積演算アルゴリズムのループ回数)が少ないことが、高速化のため、望まれる。
更に、生成処理のみならず、復元処理においても、ガロア体の積演算処理に、反復回数が少ないことが、処理時間短縮の点で、望まれる。
従って、本発明の目的は、ガロア体積演算の処理時間を短縮するためのRAID装置及びガロア体の積演算処理方法を提供することにある。
又、本発明の他の目的は、ガロア体積演算の並列処理のステップ数を低減するためのRAID装置及びガロア体の積演算処理方法を提供することにある。
更に、本発明の他の目的は、ガロア体積演算の並列処理の繰り返し数を低減するためのRAID装置及びガロア体の積演算処理方法を提供することにある。
この目的の達成のため、本発明のRAID装置は、データを分割し、分割されたデータを各々格納する複数のデータストレージユニットと、前記分割されたデータの組み合わせから得た第1のパリテイデータと、パリテイの生成法定式におけるガロア体の元を前記分割されたデータに積演算し、且つ積演算結果を用いて前記生成方程式を演算して得た第2のパリテイデータとを格納するパリテイストレージユニットと、前記データを分割し、前記第1のパリテイデータと第2のパリテイデータとを演算し、前記第1のパリテイデータと第2のパリテイデータとを前記パリテイストレージユニットに格納する制御ユニットとを有し、前記制御ユニットは、前記分割されたデータの各々をレジスタにロードし、且つレジスタの各データを上位桁方向にビットシフトし、前記ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとり、且つ前記論理積の結果と前記固定値とを比較して、前記桁上がりビットを有するデータを、前記データの最大値に置き換え、マスクを作成し、前記マスクの最大値と前記桁上がりを補正する補正値との論理積を演算し、前記演算結果と前記シフトされたデータとの排他的論理和(XOR)を演算して、前記データを前記ガロア体の元で積演算した結果を得る。
又、本発明のプログラムは、分散されたデータの各々をレジスタにロードするステップと、前記レジスタの各データを上位桁方向にビットシフトするステップと、前記ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとるステップと、前記論理積の結果と前記固定値とを比較して、前記桁上がりビットを有するデータを、前記データの最大値に置き換え、マスクを作成するステップと、前記マスクの最大値と前記桁上がりを補正する補正値との論理積を演算するステップと、前記演算結果と前記シフトされたデータとの排他的論理和(XOR)を演算して、前記データを前記ガロア体の元で積演算した結果を得るステップとを、コンピュータに実行させる。
又、本発明のガロア体積演算処理方法は、分散されたデータの各々をレジスタにロードするステップと、前記レジスタの各データを上位桁方向にビットシフトするステップと、前記ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとるステップと、前記論理積の結果と前記固定値とを比較して、前記桁上がりビットを有するデータを、前記データの最大値に置き換え、マスクを作成するステップと、前記マスクの最大値と前記桁上がりを補正する補正値との論理積を演算するステップと、前記演算結果と前記シフトされたデータとの排他的論理和(XOR)を演算して、前記データを前記ガロア体の元で積演算した結果を得るステップとからなる。
更に、本発明では、好ましくは、前記制御ユニットは、前記データストレージユニットの任意のデータストレージユニットの障害時に、前記障害発生したデータストレージユニットのデータを未知データとし、前記第1のパリテイデータ及び第2のパリテイデータと、前記障害発生したデータストレージユニット以外の前記データストレージユニットのデータとを用いて、前記ガロア体の連立方程式から、前記未知データを復元する。
更に、本発明では、好ましくは、前記制御ユニットは、最上位ビットのみが「1」である前記データのビット数と同一のビット数を有する前記固定値を使用する。
更に、本発明では、好ましくは、前記制御ユニットは、複数のデータを前記レジスタにロードし、前記複数のデータに対し、前記積演算処理を並列に実行する。
更に、本発明では、好ましくは、前記制御ユニットは、前記ガロア体の原始多項式から得た前記補正値を使用する。
更に、本発明では、好ましくは、前記制御ユニットは、前記ガロア体の元の次数分、前記積演算を繰り返す。
更に、本発明では、好ましくは、前記制御ユニットは、前記ガロア体の元を、ベクトル表現し、且つ分配法則を用いて、重み付け値を分配して、前記ガロア体の元の積演算を実行する。
更に、本発明では、好ましくは、前記制御ユニットは、前記分配した第1の重み付け値の積演算を第1の重み付け値の回数分実行した後、前記実行結果を用いて、前記積演算を第2の重み付け値の回数分実行し、前記第1の重み付け値の積演算結果と、前記第2の重み付け値の積演算結果の排他的論理和をとり、前記ガロア体の元の積演算結果を得る。
分割されたデータの各々がロードされたレジスタの各データを上位桁方向にビットシフトし、ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとり、且つ論理積の結果と固定値とを比較して、桁上がりビットを有するデータを、データの最大値に置き換え、マスクを作成する。そして、マスクの最大値と桁上がりを補正する補正値との論理積を演算し、演算結果とシフトされたデータとの排他的論理和(XOR)を演算して、データをガロア体の元で積演算した結果を得るので、少ないステップ、命令で、ガロア体の積演算が可能となる。
以下、本発明の実施の形態を、RAID装置、ガロア体積演算処理、他のガロア体積演算処理、更に他のガロア体積演算処理、他の実施の形態の順で説明するが、本発明は、この実施の形態に限られない。
(RAID装置)
図1は、本発明の一実施の形態のRAID装置の構成図、図2は、そのガロア体を用いたパリテイ演算の説明図である。図1に示すように、RAID装置は、ホストコンピュータ16に接続されたRAIDコントローラ12と、RAIDコントローラ12にFC(Fibre Channel)ループ14等により接続され、且つ制御される複数(ここでは、14台)のデータディスク装置(ハードディスクドライブ)10−1〜10−14と、2台のパリテイディスク装置(ハードディスクドライブ)10−15,10−16とからなる。即ち、2重パリテイを持つRAID6の構成である。
図2に示すように、第1のパリテイPは、データディスク装置10−1〜10−14の列方向のデータD1〜D14のXORで生成され、第1のパリテイディスク装置10−15の対応アドレスに格納される。第2のパリテイQは、データディスク装置10−1〜10−14の列方向のデータD1〜D14を、ガロア体の積演算による重み付け後に、XORして生成され、第2のパリテイディスク装置10−16の対応アドレスに格納される。即ち、パリテイQは、下記式(1)で演算される。
Figure 0004935367
尚、記号「+」は、XOR演算を示す。これらのパリテイ演算は、RAIDコントローラ12が、実行する。ここで、1シンボルを16ビットとすると、ガロア体は、GF(2の16乗)であり、その原始多項式(生成多項式)は、下記式(2)で表される。
Figure 0004935367
又、この実施例で、ガロア体積演算に使用されるマスク値は、「32768」であり、16ビットのデータの最上位ビットのみが、「1」のデータである。又、値「4107」は、式(2)の原始多項式のxの16乗を除き、xに「2」を代入して得た値である。
RAIDコントローラ12は、データをディスク装置10−1〜10−4にライト処理する際に、XOR演算により、パリテイPを計算し、第1のパリテイディスク装置10−15に格納し、以下で説明するガロア体の積演算処理とXOR演算を行い、パリテイQを計算し、第2のパリテイディスク装置10−16に格納する。
(ガロア体積演算)
図3は、本発明の一実施の形態のガロア体積演算処理フロー図、図4は、図3の詳細処理フロー図、図5は、図3及び図4の具体例の説明図、図6は、桁上がりシンボルの積演算の説明図である。
図3以下では、1シンボルを16ビットとして、8シンボルを並列処理する例で説明する。例えば、インテル社(登録商標)のCPUでは、MMX命令セットが備わっている。MMX命令セットは、xmmレジスタを使用する。このxmmレジスタを用いて、並列処理を行う。xmmレジスタ長は、16Byteであり、1度に、1シンボルが16ビットの時、8シンボルのデータの重み付けの並列処理が行える。
図3により、ガロア体積演算の基本的処理を説明する。
(S10)先ず、xmm1レジスタに、8シンボルをロードする。
(S12)次に、xmm1レジスタの各シンボルを、左に1ビットシフトし、各シンボルの値を2倍とする。
(S14)マスク値を用いて、シフトにより値が小さくなるシンボル(即ち、最上位ビットの桁上がりが生じるシンボル)を検出する。
(S16)シフトしたシンボルの内、値が小さくなったシンボルに、予め定めた値(「4107」)をXORする。
次に、図4により、MMXを用いた重み付け処理を詳細に説明する。又、図5、図6を用いて、データディスク番号i=2のガロア体の重み付け(ガロア体の積演算)処理を例に、具体的に説明を行う。データディスク番号i=2の場合には、式(1)のパリテイQの生成多項式から、データDi=2に、α倍の重みづけを行う。
(S20)xmmレジスタに、データを代入し、処理すべき繰り返し回数MAXを設定する。例えば、ディスク番号i=2の場合には、MAX=1である。又、繰り返し回数ポインタiを「0」に初期化する。更に、MAX=0の場合には、xmmレジスタの内容を出力し、以下のステップを実行しないこととする。例えば、図5に示すように、データディスク番号i=2のディスクから、重み付けを行う8シンボル(1シンボル、16ビット)のデータ(Di=2データ)をピックアップし、これをxmm1レジスタに代入する(図5のxmm1)。
又、「32768」と「4107」の値が入力された8シンボルのデータv32768,v4107を用意する。値「32768」は、16ビット目のみに「1」の値があることを示し、シフトにより桁上げが生じるシンボルを検出するためのデータである。値「4107」は、16ビットのガロア体GF(2^16)の原始多項式(x^16+x^12+x^3+x+1)の(x^12+x^3+x+1)に、x=2を代入した値である。即ち、4096+8+2+1=4107である。
(S22)次に、移動命令(MOVQ)に応じて、xmm1レジスタに代入された値を、xmm2レジスタに移動する。シフト命令(PSLLW)に応じて、xmm2レジスタの各シンボルを、左に(上位方向に)1ビットシフトする(図5のxmm2)。これにより、各シンボルは、2倍(=α倍)されるが、1シンボルが、16ビットのため、桁上げされたビット部分は、オーバーフローする。このため、図5のxmm2に示すように、値が2倍になる箇所(一重下線)と、シフト前よりも値が小さくなる箇所(二重下線)がある。シフト前よりも値が小さくなる箇所は、オーバーフローした箇所である。
(S24)この値が小さくなる箇所(シンボル)のみに、値「4107」のXORを行う。このため、先ず、値が小さくなったシンボルを抽出し、その抽出したシンボルの値を、オール「1」(即ち、65535)とする。図6も参照して、説明する。AND命令(PAND)に応じて、図5のxmm1レジスタの各シンボルの値と、v32768の値「32768」との論理積(AND)をとり、xmm1レジスタを更新する。図4及び図5の(xmm1&v32768)に示すように、8シンボルの内、オーバーフローしたシンボル(値が小さくなったシンボル)のみが、値「32768」に置き換えられ、オーバーフローしないシンボルは、値「0」に置き換えられる。
次に、8シンボルの値判定を行い、シンボルの値を、値「65535」又は値「0」に置き換える。即ち、比較及び最大値設定命令(PCMPEQW)に応じて、(xmm1&v32768)の各シンボルの値と、値「32768」を比較して、両者が一致すると、そのシンボルの16ビットを、オール「1」(=65535)に置き換え、両者が一致しないと、そのシンボルの16ビットを、オール「0」(=0)に置き換える。これにより、値「4107」のマスクを作成する。
(S26)そして、AND命令(PAND)に応じて、このxmm1レジスタの各シンボルの値と、v4107の値「4107」の論理積(AND)をとり、xmm1レジスタを更新する。これにより、8シンボルのxmm1レジスタの内、値が小さくなったシンボルのみが、値「4107」に置き換えられ、値が小さくならないシンボルは、値「0」に置き換えられる。
(S28)XOR命令(PXOR)に応じて、この更新されたxmm1レジスタの各シンボルの値と、ステップS22で得たxmm2レジスタの各シンボルの値とのXOR(排他的論理輪)をとり、α倍の重みづけを行った結果を得る。
(S30)「break」が、検出された時に、処理を停止し、xmm1の値を確定する。それ以外は、ステップS24に戻る。
(S32)α倍計算処理開始にあたり、繰り返し回数ポインタiを、「1」インクリメントする。そして、繰り返し回数ポインタiが、設定繰り返し回数MAX以上であるかを判定する。繰り返し回数ポインタiが、設定繰り返し回数MAX以上でなければ、ステップS24に進む。
(S34)一方、繰り返し回数ポインタiが、設定繰り返し回数MAX以上である場合には、設定した繰り返し回数が終了したので、「break」を通知し、xmm1を結果として、出力する。
例えば、図5において、第2番目のシンボルの値「36934」を単純に2倍すると、「73868」となるが、1シンボルが16ビットに制限されるため、オーバーフローが生じ、そのシンボルの値は、1ビットオーバーフローしているため、16ビット表示で、8332(=73868−65536)となる。しかし、第2番目のシンボルの2倍値の有意ビットは、17ビットから2ビット目の16ビットである。この有意ビットを補正するため、補正値「4107」を使用し、値「12423」に変換する。
ステップS22〜S28の処理は、どれもレイテンシが小さい(レイテンシ=2)命令で実現でき、処理時間を短くすることができる。α^j倍の重みづけでは、ステップS22〜S28の処理をj回繰り返す。
ここで、この実施の形態のマスク処理を、図6で説明する。図6は、シフトにより値が小さくなったシンボルを抽出するマスク処理を示し、先ず、xmm1レジスタの値と、v32768のアンドで、オーバーフローシンボルと、オーバーフローしないシンボルを識別する。次に、これらのシンボルと、値「32768」を比較し、両者が一致するシンボルを、オール「1」(=65535)に置き換え、マスクを作成する。そして、値v4107とのアンドをとり、求めるxmm1を得る。
一方、図17に示すように、従来技術では、元のシンボルvに、値「0x80808080」をアンドし、オーバーフローシンボルと、オーバーフローしないシンボルを識別する。次に、この結果から、マスクを作成するため、この結果を、左1ビットシフトしたものを作成し、且つ右に7ビットシフトしたものを作成し、これらのシフト結果を引き算する。
即ち、本実施の形態では、図6のマスク処理は、マスク作成に、ANDと、比較命令の2命令で行っているのに対し、従来は、AND,シフト2回、引き算命令の4命令で実行している。
更に、本実施の形態では、図5に示すように、左シフトは、シンボル単位に、独立で行っているのに対し、従来技術では、図16に示すように、レジスタ全体、即ち、4シンボル単位で行っている。このため、従来技術では、シフト後、シンボルの右端が、右隣のシンボルの最上位ビットに影響されないように、シンボルの右端を、強制的に、「0」に置き換える処理が余分に必要である。
従って、従来は、9命令で実行していたものを、本実施の形態では、6命令で実行できる。即ち、α倍するのに、2/3の処理時間で済み、高速に、ガロア体の積演算を実行できる。例えば、αの13乗の積演算では、従来は、9×13=117命令(ステップ)必要としたのに対し、本実施の形態は、6×13=78命令(ステップ)で済む。更に、式(1)の積演算では、従来は、9×(1+2+3+4+5+6+7+8+9+10+11+12+13=91)=819命令の実行を要するが、本実施の形態では、6×(1+2+3+4+5+6+7+8+9+10+11+12+13=91)=546命令の実行で済み、高速に、ガロア体積演算を実行できる。
更に、本実施の形態では、8シンボルを並列処理できるため、従来の4シンボルの並列処理に比し、更に2倍の高速処理が可能となり、結果として、1/3の処理時間で、ガロア体積演算を実現できる。
(他のガロア体積演算処理)
図7は、本発明のガロア体積演算処理の他の実施の形態の処理フロー図、図8は、図7の重み付け処理の説明図、図9は、図7のα−1倍の積演算処理フロー図、図10は、そのオペレーションの説明図、図11は、図9の詳細処理フロー図である。
前述の実施の形態は、ガロア体の積演算処理の1回の処理時間を短縮するものであったが、この実施の形態は、積演算処理の並列処理アルゴリズムのループ回数が少なくなるように、ガロア体の元を決定し、ガロア体の積演算処理時間を短縮するものである。
図7に示すように、図1乃至図2と同様に、データディスク装置を14台で構成した例とすると、データディスク番号 i (=1〜14)に対し、i=1〜8の場合は、αi−1倍による重み付けを行い、図4乃至図6の重み付け演算処理を行い、i=9〜14の場合は、α−i+8倍による重み付けを行い、図8以下で説明するα−1倍の重みづけアルゴリズムを使用する。
この重み付けの割り振りを一般化すると、データディスク装置をn台で構成した例とすると、(n−1)/2より大きな最小の整数をsとする時に、データディスク番号i=1〜s+1の場合は、α^(i−1)倍による重み付けを行い、図4乃至図6の重み付け演算処理を行い、i=s+2〜nの場合は、α−i+s+1倍による重み付けを行う。
α倍の重みづけ処理は、図4乃至図6で説明したので、ここでは、説明を省略し、α−1倍の重み付け処理を、図8乃至図11で説明する。
図8に示すように、第1のパリテイPは、データディスク装置10−1〜10−14の列方向のデータD1〜D14のXORで生成され、第1のパリテイディスク装置10−15の対応アドレスに格納される。第2のパリテイQは、データディスク装置10−1〜10−14の列方向のデータD1〜D14を、ガロア体の積演算による重み付け後に、XORして生成され、第2のパリテイディスク装置10−16の対応アドレスに格納される。即ち、パリテイQは、下記式(3)で演算される。
Figure 0004935367
尚、記号「+」は、XOR演算を示す。これらのパリテイ演算は、RAIDコントローラ12が、実行する。ここで、1シンボルを16ビットとすると、ガロア体は、GF(2の16乗)であり、その原始多項式(生成多項式)は、前記式(2)で表される。
又、この実施例で、α−1倍のガロア体積演算に使用されるマスク値は、「1」であり、16ビットのデータの最下位ビットのみが、「1」のデータである。又、値「34821」は、式(2)の原始多項式をxで割り、割った式のxに「2」を代入して得た値である。
RAIDコントローラ12は、データをディスク装置10−1〜10−14にライト処理する際に、XOR演算により、パリテイPを計算し、第1のパリテイディスク装置10−15に格納し、以下で説明するガロア体の積演算処理とXOR演算を行い、パリテイQを計算し、第2のパリテイディスク装置10−16に格納する。
図9以下でも、1シンボルを16ビットとして、8シンボルを並列処理する例で説明する。例えば、インテル社(登録商標)のCPUでは、MMX命令セットが備わっている。MMX命令セットは、xmmレジスタを使用する。このxmmレジスタを用いて、並列処理を行う。xmmレジスタ長は、16Byteであり、1度に、1シンボルが16ビットの時は、8シンボルのデータの重み付けの並列処理が行える。
図9により、α−1倍のガロア体積演算の基本的処理を説明する。
(S40)先ず、xmm1レジスタに、8シンボルをロードする。
(S42)次に、xmm1レジスタの各シンボルを、右方向(最下位ビット方向)に1ビットシフトし、各シンボルの値を1/2倍とする。
(S44)マスク値を用いて、シフトにより値の桁落ちが生じるシンボル(即ち、対象シンボルの最下位ビット「1」が、消失するシンボル)を検出する。
(S46)シフトしたシンボルの内、桁落ちしたシンボルに、予め定めた値(「34821」)をXORする。
次に、図11により、MMXを用いた重み付け処理を詳細に説明する。又、図10を用いて、データディスク番号i=9のα−1倍のガロア体の重み付け(ガロア体の積演算)処理を例に、具体的に説明を行う。データディスク番号i=9の場合には、式(3)のパリテイQの生成多項式から、データDi=9に、α−1倍の重みづけを行う。
(S50)xmmレジスタに、データを代入し、処理すべき繰り返し回数MAXを設定する。例えば、ディスク番号i=9場合には、MAX=1である。又、繰り返し回数ポインタiを「0」に初期化する。例えば、図5と同様に、データディスク番号i=9のディスクから、重み付けを行う8シンボル(1シンボル、16ビット)のデータ(Di=9データ)をピックアップし、これをxmm1レジスタに代入する(図10の(1))。
又、「1」と「34821」の値が入力された8シンボルのデータv1,v34821を用意する。値「1」は、最下位である1ビット目のみに「1」の値があることを示し、左シフトにより桁落ちが生じるシンボルを検出するためのデータである。
値「34281」は、16ビットのガロア体GF(2^16)の原始多項式(x^16+x^12+x^3+x+1)から「1」を除き、且つこの結果をxで割った多項式(x^15+x^11+x^2+1)に、x=2を代入した値である。この意味は、16ビットのガロア体GF(2^16)の原始多項式(α^16+α^12+α^3+α+1)=0の原則により、(α^16+α^12+α^3+α)=1が成立する。このαに「2」を代入すると、69642=1が得られる。両辺を右(最下位)方向に1ビットシフトすると、34821=値が消失、となる。16ビットデータの右辺に、「1」が有る場合に、右シフトすると、右辺の「1」が消失するため、「34821」をXORすることにより、値を補正するものである。
(S52)次に、移動命令(MOVQ)に応じて、xmm1レジスタに代入された値を、xmm2レジスタに移動する。シフト命令(PSRLW)に応じて、xmm2レジスタの各シンボルを、右に(下位方向に)1ビットシフトする(図10の(2)のxmm2)。これにより、各シンボルは、1/2倍(=α−1倍)されるが、1シンボルが、16ビットのため、桁落ちされたビット部分は、アンダーフローする。このため、図5と同様に、値がそのまま2倍になる箇所と、桁落ちする箇所(アンダーフローした箇所)とが混在する。
(S54)この桁落ちした箇所(シンボル)のみに、値「34821」のXORを行う。このため、先ず、桁落ちしたシンボルを抽出し、その抽出したシンボルの値を、オール「1」(即ち、65535)とする。即ち、AND命令(PAND)に応じて、図10のxmm1レジスタの各シンボルの値と、v1の値「1」との論理積(AND)をとり、xmm1レジスタを更新する。(xmm1&v1)は、8シンボルの内、最下位桁が「1」であるシンボルのみが、値「1」に置き換えられ、それ以外は、値「0」に置き換えられる。
次に、8シンボルの値判定を行い、シンボルの値を、値「65535」又は値「0」に置き換える。即ち、比較及び最大値設定命令(PCMPEQW)に応じて、(xmm1&v1)の各シンボルの値と、値「1」を比較して、両者が一致すると、そのシンボルの16ビットを、オール「1」(=65535)に置き換え、両者が一致しないと、そのシンボルの16ビットを、オール「0」(=0)に置き換える。これにより、値「34821」のマスクを作成する。
(S56)そして、AND命令(PAND)に応じて、このxmm1レジスタの各シンボルの値と、v34821の値「34821」の論理積(AND)をとり、xmm1レジスタを更新する。これにより、8シンボルのxmm1レジスタの内、最下位桁が「1」のシンボルのみが、値「34821」に置き換えられ、それ以外のシンボルは、値「0」に置き換えられる。
(S58)XOR命令(PXOR)に応じて、この更新されたxmm1レジスタの各シンボルの値と、ステップS52で得たxmm2レジスタの各シンボルの値とのXOR(排他的論理輪)をとり、α−1倍の重みづけを行った結果を得る。
(S60)「break」が、検出された時に、処理を停止し、xmm1の値を確定する。それ以外は、ステップS54に戻る。
(S62)α^−1倍計算処理開始にあたり、繰り返し回数ポインタiを、「1」インクリメントする。そして、繰り返し回数ポインタiが、設定繰り返し回数MAX以上であるかを判定する。繰り返し回数ポインタiが、設定繰り返し回数MAX以上でなければ、ステップS54に進む。
(S64)一方、繰り返し回数ポインタiが、設定繰り返し回数MAX以上である場合には、設定した繰り返し回数が終了したので、「break」を通知し、xmm1を結果として、出力する。
このように、このα−1倍の重み付けアルゴリズムの特徴は、xmmレジスタに代入された値を、右1ビットシフトする点であり、基本的な考え方はα倍の重みづけアルゴリズムと同じである。出力は、ディスク番号i=9〜14に対し、α^-(i-8)倍の重みづけ結果が出力される。
このように、ガロア体の元は、各ディスクで異なれば良く、必ずしも、式(1)のように、ディスク番号iに比例する乗数を持つガロア体の元を使用しなくても良い。これを利用して、α倍と、α−1倍の重み付け処理を用い、且つ繰り返し数が最小となるディスク番号iで、使用するガロア体を、αi−1倍と、α−i+8倍の重みを割り振る。これにより、図7及び図8では、ループ回数が、最大7回となる。
もし、図4の方法のみで行うと、ループ回数は、最大13回となり、この実施の形態による、ループ回数の削減の効果は、大きい。
又、この実施の形態では、α倍と、α−1倍の重み付け処理を、図4の例で説明したが、他の1回の繰り返しでα倍、n回の繰り返しで、α倍の積演算ができる他の方法も適用できる。
勿論、図4の実施の形態の積演算処理を使用すれば、本実施の形態でも、6命令で実行でき、α倍するのに、2/3の処理時間で済み、高速に、ガロア体の積演算を実行できる。同様に、8シンボルを並列処理できるため、従来の4シンボルの並列処理に比し、更に2倍の高速処理が可能となり、結果として、1/3の処理時間で、ガロア体積演算を実現できる。
(更に別のガロア体積演算処理)
図12は、本発明のガロア体積演算処理の更に別の実施の形態の処理フロー図、図13は、図12の処理の説明図である。この実施の形態は、図4乃至図6の実施の形態のα倍演算処理を使用した任意のガロア体の元α^k倍の重みづけ処理を示し、最大反復回数が15回で済むというメリットがある。この積演算処理は、特に、k倍のkが大きい時に、有効であり、ディスクの2重故障を復元させる際に使用することが好適である。
図13に示すように、例えば、16ビットのガロア体GF(2^16)の最大のガロア体の元α^33653倍(αの33653乗)の重みづけを行う際に、図4のα倍の重みづけアルゴリズムを用いた場合では、反復回数が33653回、図7のα^(-1)倍の重みづけアルゴリズムを用いた場合では、反復回数が31882回必要となり、効率的とは言えない。
そこで、このようなケースでは、任意のガロア体重みづけアルゴリズムを使用する。このアルゴリズムは、ガロア体のベクトル表現を使用するところに特徴がある。任意のガロア体の元は、下記(4)式の関係がある。
Figure 0004935367
但し、gfw(i)は、「0」又は「1」のいずれかである。即ち、任意のガロア体を、2進数のベクトル表現(gfw(0), gfw(1),・・・, gfw(15))で表すことができる。
又、1シンボルDのα^k倍の重み付けは、下記(5)式のように、分配法則が成立する。
Figure 0004935367
図12及び図13の重み付け処理は、この分配法則を用いて重み付けを行う。例えば、α^33653倍の重みづけを行う場合には、ガロア体の法則から、下記(6)式の関係がある。
Figure 0004935367
従って、前述のベクトル表現では、( gfw(0), gfw(1),・・・, gfw(15) ) = ( 1, 0, 1, 0, ・・・, 0 )となる。
また、反復回数は、gfw(i)=1となる最大のiを設定値として使用するため、反復回数MAX=2と設定する。この理由は、α^3・D, α^4・D, ・・・ の重み付けを、必要としないため、反復回数MAXを「2」に指定することで、余分な反復回数を減らすことが可能となり、処理時間を短縮する効果がある。
図13は、8シンボルデータ(D1,D2,D3,D4,D5,D6,D7,D8)のα^33653倍の重みづけの例を示す。MAX=2回反復を繰り返すとき、α^0=1倍, α^1倍, α^2倍の重みづけデータが作成される。このうち、gfw(i)=1となるi回目のα^i倍重み付けデータを足し算(XOR)する。この例の場合には、0回目と2回目の重み付けデータを足し算(XOR)する。
これにより、目的の重み付けデータα^33653・Dj(j=1,2,・・、8)を、(α^0・Dj+α^2・Dj)により、得ることができる。
図12により処理を説明する。
(S70)xmm1レジスタに、データを代入し、処理すべき繰り返し回数MAXを設定する。xmm2レジスタを、v0(オール「0」)に初期化する。又、繰り返し回数ポインタiを「0」に初期化する。更に、MAX=0の場合には、xmmレジスタ1の内容を出力し、以下のステップを実行しないこととする。そして、ベクトルgfwを設定する。
又、図4と同様に、「32768」と「4107」の値が入力された8シンボルのデータv32768,v4107を用意する。値「32768」は、16ビット目のみに「1」の値があることを示し、シフトにより桁上げが生じるシンボルを検出するためのデータである。値「4107」は、16ビットのガロア体GF(2^16)の原始多項式(x^16+x^12+x^3+x+1)の(x^12+x^3+x+1)に、x=2を代入した値である。即ち、4096+8+2+1=4107である。
(S72)次に、移動命令(MOVQ)に応じて、xmm1レジスタに代入された値を、xmm3レジスタに移動する。シフト命令(PSLLW)に応じて、xmm3レジスタの各シンボルを、左に(上位方向に)1ビットシフトする。これにより、各シンボルは、2倍(=α倍)されるが、1シンボルが、16ビットのため、桁上げされたビット部分は、オーバーフローする。このため、値が2倍になる箇所と、シフト前よりも値が小さくなる箇所がある。シフト前よりも値が小さくなる箇所は、オーバーフローした箇所である。
(S74)この値が小さくなる箇所(シンボル)のみに、値「4107」のXORを行う。このため、先ず、値が小さくなったシンボルを抽出し、その抽出したシンボルの値を、オール「1」(即ち、65535)とする。即ち、AND命令(PAND)に応じて、xmm1レジスタの各シンボルの値と、v32768の値「32768」との論理積(AND)をとり、xmm1レジスタを更新する。8シンボルの内、オーバーフローしたシンボル(値が小さくなったシンボル)のみが、値「32768」に置き換えられ、オーバーフローしないシンボルは、値「0」に置き換えられる。
次に、8シンボルの値判定を行い、シンボルの値を、値「65535」又は値「0」に置き換える。即ち、比較及び最大値設定命令(PCMPEQW)に応じて、(xmm1&v32768)の各シンボルの値と、値「32768」を比較して、両者が一致すると、そのシンボルの16ビットを、オール「1」(=65535)に置き換え、両者が一致しないと、そのシンボルの16ビットを、オール「0」(=0)に置き換える。これにより、値「4107」のマスクを作成する。
(S76)そして、AND命令(PAND)に応じて、このxmm1レジスタの各シンボルの値と、v4107の値「4107」の論理積(AND)をとり、xmm1レジスタを更新する。これにより、8シンボルのxmm1レジスタの内、値が小さくなったシンボルのみが、値「4107」に置き換えられ、値が小さくならないシンボルは、値「0」に置き換えられる。
(S78)XOR命令(PXOR)に応じて、この更新されたxmm1レジスタの各シンボルの値と、ステップS72で得たxmm3レジスタの各シンボルの値とのXOR(排他的論理輪)をとり、α倍の重みづけを行った結果を得る。
(S80)「break」が、検出された時に、処理を停止し、xmm1の値を確定する。それ以外は、ステップS74に戻る。
(S82)XOR計算部では、移動命令(MOVQ)に応じて、xmm1レジスタの処理結果を、xmm4レジスタに移動する。
(S84)その処理時のgfw(i)が、「1」であるかを判定する。
(S86)gfw(i)が、「1」である場合には、前述のように、XORの対象であるため、xmm2レジスタの内容とxmm4レジスタの内容とのXORを演算し、演算結果で、xmm2レジスタを更新する。
(S88)繰り返し回数ポインタiを、「1」インクリメントする。
(S90)そして、繰り返し回数ポインタiが、設定繰り返し回数MAX以上であるかを判定する。繰り返し回数ポインタiが、設定繰り返し回数MAX以上でなければ、ステップS74に進む。
(S92)一方、繰り返し回数ポインタiが、設定繰り返し回数MAX以上である場合には、設定した繰り返し回数が終了したので、「break」を、α倍計算部のループに通知し、xmm2を結果として、出力する。
このように、α^k倍の重みづけ処理の最大反復回数を減少でき、kが大きい時に、有効であり、ディスクの2重故障を復元させる際に使用すると、高速に復元できる。
(他の実施の形態)
前述の実施の形態では、14台のデータディスク装置と2台のパリテイディスク装置とで構成されるRAID6のストレージ装置で、説明したが、他の台数の構成にも適用できる。
又、パリテイQの生成は、図4の実施の形態又は図11の他の実施の形態のガロア体積演算処理を使用し、パリテイP、Qを使用した2重故障の復元には、図12の更に別の実施の形態のガロア体積演算処理を使用することが、パリテイ生成と復元の両方を高速に実行できる。しかし、パリテイQの生成は、図4の実施の形態又は図11の他の実施の形態のガロア体積演算処理を使用し、パリテイP,Qによる二重故障の復元も、図4の実施の形態又は図11の他の実施の形態のガロア体積演算処理を使用することもできる。又、パリテイQの生成及びパリテイP,Qによる二重故障の復元とも、図4の実施の形態を含む図12の更に別の実施の形態のガロア体積演算処理を使用することもできる。
以上、本発明を、実施の形態で説明したが、本発明は、その趣旨の範囲内で種々の変形が可能であり、これを本発明の範囲から排除するものではない。
(付記1)データを分割し、分割されたデータを各々格納する複数のデータストレージユニットと、前記分割されたデータの組み合わせから得た第1のパリテイデータと、パリテイの生成法定式におけるガロア体の元を前記分割されたデータに積演算し、且つ積演算結果を用いて前記生成方程式を演算して得た第2のパリテイデータとを格納するパリテイストレージユニットと、前記データを分割し、前記第1のパリテイデータと第2のパリテイデータとを演算し、前記第1のパリテイデータと第2のパリテイデータとを前記パリテイストレージユニットに格納する制御ユニットとを有し、前記制御ユニットは、前記分割されたデータの各々をレジスタにロードし、且つレジスタの各データを上位桁方向にビットシフトし、前記ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとり、且つ前記論理積の結果と前記固定値とを比較して、前記桁上がりビットを有するデータを、前記データの最大値に置き換え、マスクを作成し、前記マスクの最大値と前記桁上がりを補正する補正値との論理積を演算し、前記演算結果と前記シフトされたデータとの排他的論理和(XOR)を演算して、前記データを前記ガロア体の元で積演算した結果を得ることを特徴とするRAID装置。
(付記2)前記制御ユニットは、前記データストレージユニットの任意のデータストレージユニットの障害時に、前記障害発生したデータストレージユニットのデータを未知データとし、前記第1のパリテイデータ及び第2のパリテイデータと、前記障害発生したデータストレージユニット以外の前記データストレージユニットのデータとを用いて、前記ガロア体の連立方程式から、前記未知データを復元することを特徴とする付記1のRAID装置。
(付記3)前記制御ユニットは、最上位ビットのみが「1」である前記データのビット数と同一のビット数を有する前記固定値を使用することを特徴とする付記1のRAID装置。
(付記4)前記制御ユニットは、複数のデータを前記レジスタにロードし、前記複数のデータに対し、前記積演算処理を並列に実行することを特徴とする付記1のRAID装置。
(付記5)前記制御ユニットは、前記ガロア体の原始多項式から得た前記補正値を使用することを特徴とする付記1のRAID装置。
(付記6)前記制御ユニットは、前記ガロア体の元の次数分、前記積演算を繰り返すことを特徴とする付記1のRAID装置。
(付記7)前記制御ユニットは、前記ガロア体の元を、ベクトル表現し、且つ分配法則を用いて、重み付け値を分配して、前記ガロア体の元の積演算を実行することを特徴とする付記1のRAID装置。
(付記8)前記制御ユニットは、前記分配した第1の重み付け値の積演算を第1の重み付け値の回数分実行した後、前記実行結果を用いて、前記積演算を第2の重み付け値の回数分実行し、前記第1の重み付け値の積演算結果と、前記第2の重み付け値の積演算結果の排他的論理和をとり、前記ガロア体の元の積演算結果を得ることを特徴とする付記7のRAID装置。
(付記9)データをn分割し、分割されたデータを各々格納するn台のデータストレージユニットと、前記分割されたデータの組み合わせから得た第1のパリテイデータと、パリテイの生成方程式におけるガロア体の元を前記分割されたデータに積演算し、且つ積演算結果を用いて前記生成方程式を演算して得た第2のパリテイデータとを格納するパリテイストレージユニットと、前記データをn分割し、前記第1のパリテイデータと第2のパリテイデータとを演算し、前記第1のパリテイデータと第2のパリテイデータとを前記パリテイストレージユニットに格納する制御ユニットとを有し、前記制御ユニットは、前記n台のデータストレージユニットの内、(n−1)/2より大きな最小の整数をsとする時に、i=1〜s+1番目のデータストレージユニットのデータのガロア体の元として、α^(i−1)を、i=s+2〜n番目のデータストレージユニットのデータのガロア体の元を、α^(−i+s+1)を、重み付けとして、前記積演算を実行することを特徴とするRAID装置。
(付記10)前記制御ユニットは、前記n分割されたデータのシフト、シフトによる桁上がりデータの抽出、桁上がりデータのマスク作成、前記マスクを使用して、前記シフトされたデータと補正値とのXOR演算を行い、α倍の積演算結果を演算することを特徴とする付記9のRAID装置。
(付記11)前記制御ユニットは、前記積演算を、m回繰り返し、α^m倍の積演算結果を演算することを特徴とする付記10のRAID装置。
(付記12)前記制御ユニットは、前記データストレージユニットの任意のデータストレージユニットの障害時に、前記障害発生したデータストレージユニットのデータを未知データとし、前記第1のパリテイデータ及び第2のパリテイデータと、前記障害発生したデータストレージユニット以外の前記データストレージユニットのデータとを用いて、前記ガロア体の連立方程式から、前記未知データを復元することを特徴とする付記9のRAID装置。
(付記13)分散されたデータの各々をレジスタにロードするステップと、前記レジスタの各データを上位桁方向にビットシフトするステップと、前記ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとるステップと、前記論理積の結果と前記固定値とを比較して、前記桁上がりビットを有するデータを、前記データの最大値に置き換え、マスクを作成するステップと、前記マスクの最大値と前記桁上がりを補正する補正値との論理積を演算するステップと、前記演算結果と前記シフトされたデータとの排他的論理和(XOR)を演算して、前記データを前記ガロア体の元で積演算した結果を得るステップとからなることを特徴とするガロア体積演算処理方法。
(付記14)前記固定値との論理積ステップは、最上位ビットのみが「1」である前記データのビット数と同一のビット数を有する前記固定値を使用するステップからなることを特徴とする付記13のガロア体積演算処理方法。
(付記15)前記ロードステップは、複数のデータを前記レジスタにロードするステップからなり、前記複数のデータに対し、前記シフトステップ、論理積ステップ、作成ステップ、論理積ステップ、排他的論理和ステップを並列に実行することを特徴とする付記13のガロア体積演算処理方法。
(付記16)前記補正値との論理積ステップは、前記ガロア体の原始多項式から得た前記補正値を使用するステップからなることを特徴とする付記13のガロア体積演算処理方法。
(付記17)前記ガロア体の元の次数分、前記積演算を繰り返すステップを、更に、有することを特徴とする付記13のガロア体積演算処理方法。
(付記18)前記ガロア体の元を、ベクトル表現し、且つ分配法則を用いて、重み付け値を分配して、前記ガロア体の元の積演算を実行するステップを、更に、有することを特徴とする付記13のガロア体積演算処理方法。
(付記19)前記実行ステップは、前記分配した第1の重み付け値の積演算を第1の重み付け値の回数分実行するステップと、前記実行結果を用いて、前記積演算を第2の重み付け値の回数分実行するステップと、前記第1の重み付け値の積演算結果と、前記第2の重み付け値の積演算結果の排他的論理和をとり、前記ガロア体の元の積演算結果を得るステップとからなることを特徴とする付記18のガロア体積演算処理方法。
(付記20)データをn分割し、分割されたデータを各々格納するn台のデータストレージユニットのデータのパリテイデータをガロア体を用いて生成するためのガロア体積演算処理方法において、n台のデータストレージユニットの内、(n−1)/2より大きな最小の整数をsとする時に、i=1〜s+1番目のデータストレージユニットのデータのガロア体の元として、α^(i−1)を、i=s+2〜n番目のデータストレージユニットのデータのガロア体の元を、α^(−i+s+1)を、重み付けとして、積演算を実行するステップと、前記積演算結果で、前記パリテイのガロア体を用いた生成方程式を演算するステップを有することを特徴とするガロア体積演算処理方法。
(付記21)前記積演算ステップは、前記n分割されたデータのシフト、シフトによる桁上がりデータの抽出、桁上がりデータのマスク作成、前記マスクを使用して、前記シフトされたデータと補正値とのXOR演算を行い、α倍の積演算結果を演算するステップからなることを特徴とする付記20のガロア体積演算処理方法。
(付記22)前記積演算を、m回繰り返し、α^m倍の積演算結果を演算するステップを、更に有することを特徴とする付記21のガロア体積演算処理方法。
分割されたデータがロードされたレジスタの各データを上位桁方向にビットシフトして、α倍のデータを得て、且つロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとり、且つ論理積の結果と固定値とを比較して、桁上がりビットを有するデータを、データの最大値に置き換え、マスクを作成する。そして、マスクの最大値と桁上がりを補正する補正値との論理積を演算し、演算結果とシフトされたデータとの排他的論理和(XOR)を演算して、データをガロア体の元で積演算した結果を得るので、少ないステップ、命令で、ガロア体の積演算が可能となる。
本発明の一実施形態のRAID装置の構成図である。 本発明の一実施形態のパリテイ生成方法の説明図である。 図1のパリテイQのガロア体積演算処理フロー図である。 図2の詳細処理フロー図である、 図4の積演算処理の具体例の説明図である、 図5のマスク作成処理の説明図である。 本発明の他の実施の形態のガロア体積演算処理の説明図である。 図7の積演算処理の説明図である。 図7のパリテイQのガロア体積演算処理フロー図である。 図9の操作処理フロー図である、 図9の詳細処理フロー図である、 本発明の更に別の実施の形態のガロア体積演算処理フロー図である。 図12の積演算処理の説明図である。 従来のRAID6の構成図である。 従来のRAID6のパリテイデータの説明図である。 従来のガロア体の積演算の説明図である、 従来のマスク作成処理の説明図である、
符号の説明
10−1〜10−14 データディスク装置
10−15〜10−16 パリテイディスク装置
12 RAIDコントローラ
14 接続バス
16 ホスト

Claims (6)

  1. データを分割し、分割されたデータを各々格納する複数のデータストレージユニットと、
    前記分割されたデータの組み合わせから得た第1のパリテイデータと、パリテイの生成法定式におけるガロア体の元を前記分割されたデータに積演算し、且つ積演算結果を用いて前記生成方程式を演算して得た第2のパリテイデータとを格納するパリテイストレージユニットと、
    前記データを分割し、前記第1のパリテイデータと第2のパリテイデータとを演算し、前記第1のパリテイデータと第2のパリテイデータとを前記パリテイストレージユニットに格納する制御ユニットとを有し、
    前記制御ユニットは、前記分割されたデータの各々をレジスタにロードし、且つレジスタの各データを上位桁方向にビットシフトし、前記ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとり、且つ前記論理積の結果と前記固定値とを比較して、前記桁上がりビットを有するデータを、前記データの最大値に置き換え、マスクを作成し、前記マスクの最大値と前記桁上がりを補正する補正値との論理積を演算し、前記演算結果と前記シフトされたデータとの排他的論理和(XOR)を演算して、前記データを前記ガロア体の元で積演算した結果を得る
    ことを特徴とするRAID装置。
  2. 前記制御ユニットは、
    前記データストレージユニットの任意のデータストレージユニットの障害時に、前記障害発生したデータストレージユニットのデータを未知データとし、前記第1のパリテイデータ及び第2のパリテイデータと、前記障害発生したデータストレージユニット以外の前記データストレージユニットのデータとを用いて、前記ガロア体の連立方程式から、前記未知データを復元する
    ことを特徴とする請求項1のRAID装置。
  3. 前記制御ユニットは、複数のデータを前記レジスタにロードし、前記複数のデータに対し、前記積演算処理を並列に実行する
    ことを特徴とする請求項1のRAID装置。
  4. 前記制御ユニットは、前記ガロア体の元の次数分、前記積演算を繰り返す
    ことを特徴とする請求項1のRAID装置。
  5. 前記制御ユニットは、前記ガロア体の元を、ベクトル表現し、且つ分配法則を用いて、重み付け値を分配して、前記ガロア体の元の積演算を実行する
    ことを特徴とする請求項1のRAID装置。
  6. 分散されたデータの各々をレジスタにロードするステップと、
    前記レジスタの各データを上位桁方向にビットシフトするステップと、
    前記ロードされたデータと前記シフトにより桁上がりビットを検出するための固定値との論理積をとるステップと、
    前記論理積の結果と前記固定値とを比較して、前記桁上がりビットを有するデータを、前記データの最大値に置き換え、マスクを作成するステップと、
    前記マスクの最大値と前記桁上がりを補正する補正値との論理積を演算するステップと、
    前記演算結果と前記シフトされたデータとの排他的論理和(XOR)を演算して、前記データを前記ガロア体の元で積演算した結果を得るステップとからなる
    ことを特徴とするガロア体積演算処理方法。
JP2007010204A 2007-01-19 2007-01-19 Raid装置及びガロア体の積演算処理方法 Expired - Fee Related JP4935367B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2007010204A JP4935367B2 (ja) 2007-01-19 2007-01-19 Raid装置及びガロア体の積演算処理方法
EP07123711.9A EP1947771B1 (en) 2007-01-19 2007-12-19 RAID system and galois field product computation method
US12/004,826 US8131794B2 (en) 2007-01-19 2007-12-21 RAID system and Galois field product computation method
KR1020080004384A KR100953884B1 (ko) 2007-01-19 2008-01-15 Raid 장치 및 갈로아체의 곱 연산 처리 방법
CN2008100030529A CN101226492B (zh) 2007-01-19 2008-01-18 Raid系统和伽罗瓦域乘积计算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007010204A JP4935367B2 (ja) 2007-01-19 2007-01-19 Raid装置及びガロア体の積演算処理方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2011269776A Division JP5131379B2 (ja) 2011-12-09 2011-12-09 Raid装置及びガロア体の積演算処理方法

Publications (2)

Publication Number Publication Date
JP2008176621A JP2008176621A (ja) 2008-07-31
JP4935367B2 true JP4935367B2 (ja) 2012-05-23

Family

ID=39470201

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007010204A Expired - Fee Related JP4935367B2 (ja) 2007-01-19 2007-01-19 Raid装置及びガロア体の積演算処理方法

Country Status (5)

Country Link
US (1) US8131794B2 (ja)
EP (1) EP1947771B1 (ja)
JP (1) JP4935367B2 (ja)
KR (1) KR100953884B1 (ja)
CN (1) CN101226492B (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7269621B2 (en) * 2004-03-31 2007-09-11 Google Inc. Method system and graphical user interface for dynamically updating transmission characteristics in a web mail reply
JP4905161B2 (ja) * 2007-01-31 2012-03-28 富士通株式会社 Raid装置及びガロア体を用いたデータ復元装置
US8150031B2 (en) * 2008-12-19 2012-04-03 Intel Corporation Method and apparatus to perform redundant array of independent disks (RAID) operations
JP5278115B2 (ja) 2009-03-31 2013-09-04 日本電気株式会社 冗長符号生成方法及び装置、データ復元方法及び装置、並びにraid記憶装置
TWI416347B (zh) * 2009-06-22 2013-11-21 Realtek Semiconductor Corp 處理有限域運算之方法與運算電路
US9037564B2 (en) 2011-04-29 2015-05-19 Stephen Lesavich Method and system for electronic content storage and retrieval with galois fields on cloud computing networks
US9361479B2 (en) 2011-04-29 2016-06-07 Stephen Lesavich Method and system for electronic content storage and retrieval using Galois fields and geometric shapes on cloud computing networks
US9137250B2 (en) 2011-04-29 2015-09-15 Stephen Lesavich Method and system for electronic content storage and retrieval using galois fields and information entropy on cloud computing networks
US9569771B2 (en) 2011-04-29 2017-02-14 Stephen Lesavich Method and system for storage and retrieval of blockchain blocks using galois fields
JP5730812B2 (ja) * 2012-05-02 2015-06-10 日本電信電話株式会社 演算装置、その方法およびプログラム
KR102572357B1 (ko) 2016-02-03 2023-08-29 삼성전자주식회사 Raid-6 데이터 저장 장치와 이를 포함하는 데이터 처리 시스템
US10831602B2 (en) * 2018-04-06 2020-11-10 International Business Machines Corporation Dynamically merging parity data for multiple data stripes

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR950010452B1 (ko) * 1992-11-30 1995-09-18 삼성전자 주식회사 유한체상의 역수 산출방법 및 장치
US6148430A (en) * 1998-05-15 2000-11-14 Quantum Corporation Encoding apparatus for RAID-6 system and tape drives
JP2000259359A (ja) 1999-03-04 2000-09-22 Toshiba Corp Raid装置および記録媒体
KR100386979B1 (ko) * 2000-05-25 2003-06-09 주식회사데이콤 갈로아체상에서 비트 직렬 승산기의 병렬화 방법 및 이를이용한 직병렬 승산기
US6779011B2 (en) * 2001-02-28 2004-08-17 Maxtor Corporation System for performing multiplication and division in GF(22M)
US6766345B2 (en) * 2001-11-30 2004-07-20 Analog Devices, Inc. Galois field multiplier system
US7392458B2 (en) * 2004-11-19 2008-06-24 International Business Machines Corporation Method and system for enhanced error identification with disk array parity checking
JP4435705B2 (ja) * 2005-03-14 2010-03-24 富士通株式会社 記憶装置、その制御方法及びプログラム
US7664915B2 (en) * 2006-12-19 2010-02-16 Intel Corporation High performance raid-6 system architecture with pattern matching

Also Published As

Publication number Publication date
KR100953884B1 (ko) 2010-04-22
KR20080068555A (ko) 2008-07-23
JP2008176621A (ja) 2008-07-31
EP1947771B1 (en) 2018-06-13
CN101226492A (zh) 2008-07-23
US8131794B2 (en) 2012-03-06
CN101226492B (zh) 2010-06-02
US20080177815A1 (en) 2008-07-24
EP1947771A1 (en) 2008-07-23

Similar Documents

Publication Publication Date Title
JP4935367B2 (ja) Raid装置及びガロア体の積演算処理方法
EP1953920B1 (en) RAID system and data recovery apparatus using galois field
KR102168960B1 (ko) 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법
US7219289B2 (en) Multiply redundant raid system and XOR-efficient method and apparatus for implementing the same
KR101522509B1 (ko) 갈루아 필드 산술을 사용하는 효율적이고 스케일링가능한 순환 중복 검사 회로
EP1828899B1 (en) Method and system for syndrome generation and data recovery
JP5353655B2 (ja) エラー検出・訂正符号生成回路及びその制御方法
US8099655B1 (en) Galois field multiplier system and method
CN114389752A (zh) 循环冗余校验码生成方法、装置、设备、介质和程序产品
JP5131379B2 (ja) Raid装置及びガロア体の積演算処理方法
JP2022519258A (ja) アンカーデータ要素における特殊値の符号化
WO2019214266A1 (zh) 计算crc编码的方法和装置
WO2016181978A1 (ja) 行列作用装置、行列作用方法、およびプログラム
JP5278115B2 (ja) 冗長符号生成方法及び装置、データ復元方法及び装置、並びにraid記憶装置
CN106603085B (zh) 生成多项式的生成方法、生成装置、编码器、控制器及电子设备
JP2022519848A (ja) アンカーデータ値のオーバーフロー又はアンダーフロー処理
JP2013069000A (ja) パリティ予測器、キャリーレス乗算器、及び演算処理装置
US11342939B2 (en) Processing of data read from a memory
CN106100827B (zh) 错误保护密钥生成方法和系统
US10503477B2 (en) Galois field pipelined multiplier with polynomial and beta input passing scheme
CN115499019A (zh) 用于系统擦除编码的硬件架构和方法
JPS613528A (ja) 誤り訂正回路

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090907

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111209

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120124

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120206

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150302

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4935367

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees