(57)【要約】  プロセッサに集中する計算負荷を軽減する加速部を提供する。加速部は、各々が論理演算ユニットを有し、単一の乗算器を共有する２つのデータ処理経路を備える。各データ処理経路は、同じデータに対して設定可能な演算を並行して行うことができる。加速部を介したデータのシングルパスで、ストライプにおけるＰおよびＱシンドロームが計算できるようになる特殊な乗算器および命令が提供される。【選択図】図１
2010514066.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
データブロックを受け取る第１のデータ処理経路と、
前記データブロックを受け取る第２のデータ処理経路と、を備え、
前記第１のデータ処理経路は、前記データブロックを格納する第１の蓄積バッファ、および、前記データブロックに対し第１の演算を実行する第１の論理演算ユニットを有し、
前記第２のデータ処理経路は、前記データブロックを格納する第２の蓄積バッファ、および、前記データブロックに対し第２の演算を実行する第２の論理演算ユニットを有し、
前記第１のデータ処理経路と前記第２のデータ処理経路とで、前記データブロックに対し乗算演算を実行する乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、装置。
【請求項２】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記第１の演算は、前記ストライプについてのＰシンドロームを計算し、前記第２の演算は、前記ストライプについてのＱシンドロームを計算する、請求項１に記載の装置。
【請求項３】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ)ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、ＰシンドロームブロックとＱシンドロームブロックとを有し、前記第１の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第１のデータブロックをリカバリし、前記第２の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第２のデータブロックをリカバリする、請求項１に記載の装置。
【請求項４】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、新しいデータブロックに対してアップデートされ、前記第１の演算は、前記ストライプの古いＰシンドロームブロック、古いデータブロック、および、新しいデータブロックを用いて、前記ストライプについての新しいＰシンドロームを計算する、請求項１に記載の装置。
【請求項５】
前記第２の演算は、前記ストライプの古いＱシンドロームブロック、前記古いデータブロック、および、前記新しいデータブロックを用いて、新しいＱシンドロームを計算する、請求項４に記載の装置。
【請求項６】
前記新しいＱシンドロームが計算される間に前記新しいＰシンドロームが共有メモリに移動される、請求項５に記載の装置。
【請求項７】
前記第１の論理演算ユニットは、第１のプログラム可能な多項式を有し、前記第２の論理演算ユニットは、第２のプログラム可能な多項式を有する、請求項１に記載の装置。
【請求項８】
前記第１の演算は、第１のデータブロックと第２のブロックに対して実行され、前記第１のデータブロックおよび前記第２のブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）レベル６ストライプに含まれ、結果は、他のブロックへの次の演算のために前記第１の蓄積バッファに格納される、請求項１に記載の装置。
【請求項９】
方法であって、
第１のデータ処理経路における第１の蓄積バッファにデータブロックを格納する段階と、
第２のデータ処理経路における第２の蓄積バッファに前記データブロックを格納する段階と、
第１の演算部を用い、前記データブロックに対して第１の演算を実行する段階と、
第２の演算部を用い、前記データブロックに対して第２の演算を実行する段階と、
を備え、
前記第１のデータ処理経路と前記第２のデータ処理経路とで乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、
方法。
【請求項１０】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記第１の演算は、前記ストライプについてのＰシンドロームを計算し、前記第２の演算は、前記ストライプについてのＱシンドロームを計算する、請求項９に記載の方法。
【請求項１１】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、ＰシンドロームブロックとＱシンドロームブロックとを有し、前記第１の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第１のデータブロックをリカバリし、前記第２の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第２のデータブロックをリカバリする、請求項９に記載の方法。
【請求項１２】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、新しいデータブロックに対してアップデートされ、前記第１の演算は、前記ストライプの古いＰシンドロームブロック、古いデータブロック、および、新しいデータブロックを用いて、前記ストライプについての新しいＰシンドロームを計算する、請求項９に記載の方法。
【請求項１３】
前記第２の演算は、前記ストライプの古いＱシンドロームブロック、前記古いデータブロック、および、前記新しいデータブロックを用いて、新しいＱシンドロームを計算する、請求項１２に記載の方法。
【請求項１４】
前記新しいＱシンドロームが計算される間に前記新しいＰシンドロームが共有メモリに移動される、請求項１３に記載の方法。
【請求項１５】
前記第１の論理演算ユニットは、第１のプログラム可能な多項式を有し、前記第２の論理演算ユニットは、第２のプログラム可能な多項式を有する、請求項９に記載の方法。
【請求項１６】
前記第１の演算は、前記第１の蓄積バッファに格納された前記データブロックと、前記第１のデータ処理経路が受け取った第２のデータブロックとに対してパターンマッチングを実行する、請求項９に記載の方法。
【請求項１７】
前記第１の演算は、受け取られた前記データブロックに対して非ゼロ結果演算を実行する、請求項９に記載の方法。
【請求項１８】
前記第１の演算は、第１のデータブロックと第２のブロックに対して実行され、前記第１のデータブロックおよび前記第２のブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）レベル６ストライプに含まれ、結果は、他のブロックへの次の演算のために前記第１の蓄積バッファに格納される、請求項９に記載の方法。
【請求項１９】
関連情報を有する機械アクセス可能媒体を備える物品であって、前記情報はアクセスされると、機械に、
第１のデータ処理経路における第１の蓄積バッファにデータブロックを格納する段階と、
第２のデータ処理経路における第２の蓄積バッファに前記データブロックを格納する段階と、
第１の演算部を用い、前記データブロックに対して第１の演算を実行する段階と、
第２の演算部を用い、前記データブロックに対して第２の演算を実行する段階と、
を実行させ、
前記第１のデータ処理経路と前記第２のデータ処理経路とで乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、
物品。
【請求項２０】
システムであって、
複数のＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）ディスクドライブを有するＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ)システムと、
前記ＲＡＩＤシステムに関するデータを処理する加速部と、
を備え、
前記加速部は、
データブロックを受け取る第１のデータ処理経路と、
前記データブロックを受け取る第２のデータ処理経路と、を備え、
前記第１のデータ処理経路は、前記データブロックを格納する第１の蓄積バッファ、および、前記データブロックに対し第１の演算を実行する第１の論理演算ユニットを有し、
前記第２のデータ処理経路は、前記データブロックを格納する第２の蓄積バッファ、および、前記データブロックに対し第２の演算を実行する第２の論理演算ユニットを有し、
前記第１のデータ処理経路と前記第２のデータ処理経路とで、前記データブロックに対し乗算演算を実行する乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、
システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ＲＡＩＤ（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ）システムに関し、特に、ＲＡＩＤ6システムの計算速度を上げることに関する。
【背景技術】
【０００２】
ＲＡＩＤ（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ）は、信頼性、容量、または、性能を高める目的から複数の物理的ハードディスクドライブを１つの論理ドライブに統合する。したがって、複数の物理的ハードディスクドライブの代わりに、オペレーティングシステムが単一の論理ドライブを監視する。当業者には知られているように、ＲＡＩＤレベルと呼ばれる標準的な方法は数多く存在し、それらは、ＲＡＩＤシステムにおいて物理的ハードディスクドライブにデータを分散させるというものである。
【０００３】
例えば、レベル０のＲＡＩＤシステムでは、データをブロックに分解し、それぞれのブロックを別々のハードディスクドライブに書き込むことによって、データはハードディスクドライブの物理的配列にわたってストライプ化される。多くのハードディスクドライブに負荷を分散させることによって入出力（Ｉ／Ｏ）性能は向上する。レベル０のＲＡＩＤはＩ／０性能を向上させはするものの、１つのハードディスクドライブが故障すると、データのすべてが失われてしまうので、冗長性を提供することはない。
【０００４】
レベル５のＲＡＩＤシステムは、少なくとも３つのハードディスクドライブ全体でデータおよびパリティ情報の両方をストライプ化することによってハイレベルな冗長性を提供する。データのストライプ化とパリティ分散とを組み合わせることによって故障した際のリカバリを提供することができる。レベル６のＲＡＩＤシステムは、２つのディスクが故障した場合もリカバリを可能にすることによってレベル５のＲＡＩＤシステムよりさらにハイレベルな冗長性を提供できる。レベル６のＲＡＩＤシステムでは、データに対してＰシンドロームおよびＱシンドロームと呼ばれる２つのシンドロームが生成され、ＲＡＩＤシステム内のハードディスクドライブに格納される。Ｐシンドロームは、ストライプ（データブロック（ストリップ）、Ｐシンドロームブロック、および、Ｑシンドロームブロック）におけるデータのパリティ情報を単に計算することによって生成される。ディスクドライブが故障した場合にＱシンドロームを生成するには、ガロアフィールド乗算を必要とし、複雑である。ディスクのリカバリ動作の間に実行されるデータ、および／または、Ｐおよび／またはＱシンドロームをリカバリするための再生方式は、ガロア乗算および逆演算のどちらも必要とする。
【０００５】
再生は、一般的に、計算用ルックアップテーブルを用いるか、または、特定の多項式に限定された複数のガロアフィールド乗算を用いて行われる。
【図面の簡単な説明】
【０００６】
請求される内容の実施形態の特徴は、以下の詳細な説明を図面を参照しながら読み進めていくにつれ明らかになろう。図面における同様の参照符号は同様の部分を示す。
【０００７】
【図１】ハードディスクアレイにおいてストライプ化されたデータブロック(ストリップ)と、ＰおよびＱシンドロームとを含む各ストライプからなる複数のストライプを表すＲＡＩＤ６アレイの一実施形態を示すブロック図である。
【０００８】
【図２】本発明の原理に従う、計算を加速させる加速部を有するシステムの一実施形態を含むシステムのブロック図である。
【０００９】
【図３】図２に示された加速部におけるデータ処理部の一実施形態を示すブロック図である。
【００１０】
【図４】図３に示されたデータ処理部におけるデータ処理経路のいずれか１つのためのコンフィギュレーションレジスタの一実施形態を示すブロック図である。
【００１１】
【図５】図３に示されたデータ処理部におけるデータ処理経路のいずれか１つのためのステータスレジスタの一実施形態を示すブロック図である。
【００１２】
【図６】図２に示された加速部、および、図３に示されたデータ処理部を用い、ＰおよびＱシンドロームを並列計算する方法の一実施形態を示す。
【００１３】
【図７】図１に示されたＲＡＩＤ６アレイにおいて部分的ＰおよびＱシンドローム計算を行う方法の一実施形態を示す。
【００１４】
【図８】図１に示されたＲＡＩＤ６アレイにおける２つのデータディスクの損失をリカバリする方法の一実施形態を示す。
【００１５】
【図９】図２に示された加速部で実行されてよい比較検査を実行する方法の一実施形態を示す。
【００１６】
【図１０】図２に示される加速部で実行されてよい結果非ゼロチェックを実行する方法の一実施形態を示す。
【００１７】
【図１１】本発明の原理に従う、ＲＡＩＤ６計算を加速させる加速部の一実施形態を含むシステムのブロック図である。
【００１８】
以下の詳細な説明は、請求項の内容の例示的実施形態を参照しながら説明されるが、多くの変形例、修正、および、変更がなされうることは当業者にとって明らかであろう。したがって、請求される内容は広く検討され、添付の請求項の範囲に記載されるとおりに定義されることが意図される。
【発明を実施するための形態】
【００１９】
図１は、ハードディスク１５０アレイ上でストライプ化されたデータブロック（ストリップ）と、ＰおよびＱシンドロームとを含む各ストライプからなる複数のストライプを表すＲＡＩＤ６アレイ１００の一実施形態を示すブロック図である。図示された実施形態では、ＲＡＩＤアレイは、３つのデータディスクと、２つのシンドローム（Ｐ、Ｑ）ディスクとを含む５つのハードディスク１５０を有する。データは、各ハードディスクに分散されたＰおよびＱシンドロームによるブロックレベルのストライプ化を用い、ラウンドロビン方式でＲＡＩＤ６アレイに書き込まれる。逐次データ、例えば、複数のブロックに分割たファイルは、複数のブロックの１つが３つのデータディスク１０２（）におけるデータブロック１０２、１０４、１０６のいずれかに格納されるように水平ストライプ０などのストライプに分散される。水平ストライプ０におけるデータブロック１０２、１０４、１０６について計算されるＰおよびＱシンドロームは、Ｐブロック１３０、および、Ｑブロック１３２にそれぞれ格納される。ＰおよびＱシンドロームブロックは、異なるハードディスク１５０のそれぞれのストライプに格納される。一実施形態では、ストライプにおける各ブロックは５１２バイトである。
【００２０】
Ｐシンドロームは、排他的論理和（ＸＯＲ）演算を実行することにより生成されうる。ＸＯＲは、オペランドのうちの１つのみが論理値「１」を有する場合、結果として論理値「１」となる２つのオペランドに対する論理演算である。例えば、値「１１００１０１０」を有する第１のオペランドと、値「１０００００１１」を有する第２のオペランドとのＸＯＲの結果は、値「０１００１００１」となる。第１のオペランドを格納するハードドライブが故障した場合、第２のオペランドと上記結果とのＸＯＲ演算の実行により第１のオペランドはリカバリされうる。
【００２１】
Ｐシンドロームは、
【数１】
2010514066.tif 000003
（ＸＯＲ)演算を用いてストライプ全体にわたって計算されたデータ（Ｄ）の単純なパリティである。ｎ個のデータディスクを有するシステムでは、Ｐシンドロームの生成は、以下の方程式１によって表される。
【数２】
2010514066.tif 000004
【００２２】
Ｑシンドロームの計算は、ガロアフィールド多項式（ｇ）を用いた乗算（＊）を必要とする。８ビット(バイト)ガロアフィールド多項式に対する非常に高性能な算術演算が行われる。多項式は、加算、減算、乗算、および、負でない整数の指数を用いて有限個の定数および変数を組み合わせた式である。１つの原始多項式は、Ｘ８＋Ｘ４＋Ｘ３＋Ｘ２＋１であり、１６進法における１Ｄで示されてよい。多項式に対するガロアフィールド（ＧＦ）演算は、ＧＦ（２＾８）算術とも呼ばれる。データディスクを有するシステムでは、Ｑシンドロームの生成は、以下の方程式２によって表される。
【数３】
2010514066.tif 000005
【００２３】
バイト毎のガロアフィールド演算がストライプベースで実行され、ブロックにおける各バイトは、互いに別々に計算される。バイト毎のガロアフィールド演算は、２５５（２＾８−１）ものデータディスクに対応できる。
【００２４】
図２は、本発明の原理に従う、計算を加速させる加速部２００の一実施形態を含むシステムのブロック図である。
【００２５】
システムは、作業要求２１０を格納するメモリ２０２と、作業要求２１０を処理するステートマシン（マイクロエンジン）２０４とを有する。ステートマシン２０４は、共有メモリ２０６を介して加速部２０８に対し命令を発する。ステートマシン２０４から実行される命令に基づき、加速部２０８は、８ビットのガロアフィールド多項式に対し算術演算を実行してよい。
【００２６】
一実施形態では、ステートマシン２０４は、例えば、インテル社から購入できるＩＸＰ(登録商標)２４００プロセッサなどのプロセッサ内の複数のマイクロエンジンのうちの１つであってよい。加速部２０８は、ステートマシン(マイクロエンジン)２０４から、８ビットガロアフィールド多項式の計算をオフロードする。
【００２７】
メモリ２０２および共有メモリ２０６は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）、ＳＲＡＭ（スタティックＲＡＭ）、ＳＤＲＡＭ（シンクロナスＤＲＡＭ）、ＤＤＲ２（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ２）ＲＡＭ、または、ＲＤＲＡＭ（Ｒａｍｂｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、あるいは、他のいかなるタイプのメモリであってよい。
【００２８】
加速部２０８は、データに対し演算を実行するデータ処理部２１８を有する。メモリに格納された作業要求２１０に基づき、ステートマシン２０４は、ＲＡＩＤアレイ演算の計算処理を加速部２０８にオフロードしてよい。一実施形態では、ＲＡＩＤアレイは、図示されるようなＲＡＩＤ６アレイ１００であってよい。加速部２０８は、制御レジスタ２１２、ステータスレジスタ２１４、および、加速部ステートマシン２１６も有する。
【００２９】
図３は、図２に示される加速部２０８におけるデータ処理部２１８の一実施形態を示すブロック図である。図示される実施形態では、データ処理部２１８は、２つの論理演算ユニット（ＡＬＵ）３１４、３１６を有する。ＡＬＵは、オペランドに対し、数値および論理演算を実行する。それぞれのＡＬＵ３１４および３１６で実行される論理または数値演算は、当該ＡＬＵ３１４および３１６に対応付けられたコンフィギュレーションレジスタ２１２(図２)によって設定可能である。
【００３０】
一実施形態では、各ＡＬＵ３１４および３１６は、バイト毎に数値および論理演算を実行してよい。各ＡＬＵ３１４および３１６は、ＸＯＲアレイと、比較およびゼロチェック関数とを有してよく、データ処理部２１８を介し、データのシングルパスでＰシンドロームまたはＱシンドロームの計算を別々に行ってよい。
【００３１】
一実施形態では、ＡＬＵ３１４および３１６のそれぞれは、６４ビット（８バイト)データ経路を有し、８つの設定可能なガロアフィールド（ＧＦ）バイトスライスを含む。各ＧＦバイトスライスは、８バイトデータ経路における１つのバイトを処理する。ＡＬＵ３１４および３１６のそれぞれは、６４ビットデータ経路内の８バイトを同時に処理する。これによって、ディスクブロックの演算は、各ディスクブロックからの適切なバイトを用いて並列に実行されることができる。ＡＬＵ３１４および３１６のそれぞれは、５１２バイトまで格納できる個別の蓄積バッファ３０６および３０８を有する。ＡＬＵ３１４、３１６は、ＧＦ（８）バイト乗算器３２２を共有する。蓄積バッファ３１４および３１６は、処理部２１８におけるＡＬＵ３１４、３１６および乗算器３２２による演算の中間結果を格納するのに用いられてよい。
【００３２】
データ処理部２１８は、２つの別々のデータ処理経路を有する。一方のデータ処理経路は、蓄積バッファ３０６およびＡＬＵ３１４を有する。もう一方のデータ処理経路は、蓄積バッファ３０８およびＡＬＵ３１６を有する。
【００３３】
２つのデータ処理経路は、乗算器３２２を共有する。データ処理経路が両方とも同時に一般的な乗算・累積関数を実行する必要がある場合、乗算器３２２の使用はＡＬＵ３１４と３１６との間で切り替えられる。スループットは減少するものの、加速部２０８は、共有メモリ２０６からのデータのシングルパスに対する単一の一般的乗算・累積によるダブルディスクリカバリを可能とする。
【００３４】
加速部２０８は、例えば、ＰおよびＱシンドロームを計算し、データリカバリを実行するなどの格納用途においてパフォーマンスをほとんどロスせずに単一の乗算器３２２を効率的に用いる。しかしながら、加速部２０８の使用は、格納用途に限定されない。加速部２０８は、８ビットフィールドを形成する８ビット多項式を含む計算に用いられてよい。さらに、ＡＬＵ３１４および３１６のそれぞれは、各自の多項式を個別に処理してよい。
【００３５】
データ処理部２１８は、複数のマルチプレクサを有する。各マルチプレクサは、セレクタの状態に基づき、２つ以上の入力についての情報を単一の出力にエンコード（または多重化）する。例えば、マルチプレクサ３０２および３０４は、データソースの選択が蓄積バッファ３０６および３０８のそれぞれに格納されるようにできる。データソースは、共有メモリ２０６(図２)から受け取ったプッシュデータ、または、ＡＬＵ３１４、３１６または乗算器３２２から出力された中間結果であってよい。マルチプレクサ３１０、３１２は、ＡＬＵ３１４、３１６それぞれへのオペランドの１つに対するソースの選択を可能にする。オペランドのソースは、蓄積バッファ３０６および蓄積バッファ３０８のいずれかでよい。
【００３６】
マルチプレクサ３１８は、乗算器３２２についてのオペランドの１つを選択できる。オペランドのソースは、ＡＬＵ３１４またはＡＬＵ３１６における演算結果、共有メモリから受け取ったプッシュデータ、および、蓄積バッファ３０６または蓄積バッファ３０８に格納されたデータのいずれかでよい。
【００３７】
マルチプレクサ３２０は、乗算器３２２による乗算演算を実行すべく、複数の多項式（ＰＯＬＹ１、ＰＯＬＹ２）の選択肢の１つが用いられることを可能にする。多項式は、プログラム可能であり、ＡＬＵ３１４、３１６のそれぞれを介しての各処理経路は、異なるプログラム可能な多項式を有してよい。例えば、一実施形態では、ＰＯＬＹ１は、ＡＬＵ３１４に関連したプログラム可能多項式であってよく、ＰＯＬＹ２は、ＡＬＵ３１６に関連したプログラム可能多項式であってよい。マルチプレクサ３２４は、乗算器３２２による乗算演算を実行すべく、複数の乗算係数（Ｍ１、Ｍ２）の選択肢の１つが用いられることを可能にする。例えば、乗算係数Ｍ１は、ＡＬＵ３１４を介した処理経路に関連してよく、乗算係数Ｍ２は、ＡＬＵ３１６を介した処理経路に関連してよい。
【００３８】
マルチプレクサ３２８、３３２は、ＡＬＵ３１４、３１６のそれぞれから出力された現在の演算の結果、または、乗算器３２２から出力されたＸＯＲ３３０の選択を可能にする。データ処理経路（ＡＬＵ３１４またはＡＬＵ３１６を含む）の１つの結果は、共有メモリに戻されるべき最終結果、または、蓄積バッファ３０６、３０８のそれぞれに格納されるべき中間結果であってよい。
【００３９】
６４ビットＸＯＲ３３０およびマルチプレクサ３２６は、データ処理経路内の計算がデータ処理経路内で実行されるべき乗算演算およびＸＯＲ演算を含むようにできる。さまざまなマルチプレクサを介しての出力の選択に基づき、各データ処理経路は、ＡＬＵ演算（ＡＬＵ３１４、３１６）、乗算演算(乗算器３２２)、および／または、排他論理和（ＸＯＲ）演算（ＸＯＲ３３０）を含んでよい。
【００４０】
図２に関連して採り上げられたコンフィギュレーションレジスタ２１２は、図３に示された個別のデータ処理経路のそれぞれについてのコンフィギュレーションレジスタを含む。
【００４１】
図４は、図３に示されたデータ処理部２１８におけるデータ処理経路のいずれか１つのためのコンフィギュレーションレジスタ４００の一実施形態を示すブロック図である。一実施形態では、コンフィギュレーションレジスタ４００は、データ処理経路を管理する、すなわち、加速機能を管理するのに用いられうる３２ビットを有する。図示される実施形態では、コンフィギュレーションレジスタ４００は、１つ以上の予約済みビット４０２を含んでよい。
【００４２】
コンフィギュレーションレジスタ４００は、演算後にステータスレジスタの内容が保存されたか消去されたかを示す１ビットを含みうる保存ステータスフィールド４０４を含む。例えば、保存ステータスフィールド４０４は、単一のビットであってよく、ステータスを保存するために論理値「１」に設定されるか、または、消去される、すなわち、次の演算の前にステータスレジスタの内容を消去するために論理値「０」に設定され、その結果、次の演算によってステータスはアップデートされうる。
【００４３】
コンフィギュレーションレジスタ４００におけるソースフィールド４０６は、マルチプレクサ３１０、３１２を介し、ＡＬＵ３１４、３１６についてのデータソースを選択するよう設定されてよい。例えば、ＡＬＵ３１４で実行されるべき演算についてのデータソースは、蓄積バッファ３０６または蓄積バッファ３０８であってよい。一実施形態では、ソースフィールド４０６は、マルチプレクサ３１０、３１２を介してＡＬＵオペランドのソースを選択するよう設定されるかまたは消去される１ビットを有してよい。
【００４４】
コンフィギュレーションレジスタ４００における蓄積フィールド４０８は、データ処理部２１８を介したデータ処理経路の結果がそれぞれの蓄積バッファに戻されるべきかどうかを選択する。
【００４５】
コンフィギュレーションレジスタ４００における計算モードフィールド４１０は、各データ処理経路が異なる演算を実行するように設定されることを可能にする。計算モードフィールド４１０の状態は、マルチプレクサ３２８、３３２から蓄積バッファ３０６、３０８、および／または、マルチプレクサ３３４までのデータ経路を制御するのに用いられてよい。一実施形態では、計算モードフィールド４１０は、８つの演算のうちの１つが選択されるようにできる３ビットを有する。これらの演算は、関連する計算モードおよび結果と共に以下の表１に示される。
【表１】
2010514066.tif 000006
【００４６】
モード１００、１０１、１１０、および、１１１のＸＯＲ演算は、６４ビットＸＯＲ３３０によって実行される。例えば、モード１００では、マルチプレクサ３２６は、６４'ｈ０を選択し、データ処理経路は、６４ビットＸＯＲ３３０から出力された演算（Ｍ・データ）の結果を用いて乗算器３２２においてＧＦ８乗算演算を実行する。表１に記載された他のモードについては後ほど詳しく説明する。
【００４７】
コンフィギュレーションレジスタ４００は、各データ処理経路が乗算器３２２における乗算演算を実行するために異なる乗算係数およびガロアフィールド（ＧＦ）多項式を設定できるようにする。乗算器３３２を介した経路は、両方のデータ処理経路によって共有される、すなわち、ＡＬＵ３１４およびＡＬＵ３１６からマルチプレクサ３２０、３２４まで通じている経路によって、乗算器は、処理経路の１つに対して選択されるべき現在の演算のために利用されることできるようになる。
【００４８】
乗算係数フィールド４１２は、複数の乗算係数（Ｍ）のうちの１つが設定されることを可能にする。それぞれのデータ処理経路に対して設定される乗算係数（Ｍ１、Ｍ２）は、現在の演算のために乗算器３２２を使用中しているそれぞれのデータ処理経路のマルチプレクサ３２４を介して入力される。一実施形態では、乗算係数フィールドは、８ビットを有する。
【００４９】
ＧＦ多項式フィールド４１４は、データ処理経路に対して複数の多項式のうちの１つが設定されることを可能にする。一実施形態では、ＧＦ多項式フィールドは、８ビットを有する。それぞれのデータ処理経路に対して設定されるＧＦ多項式（ＰＯＬＹ１、ＰＯＬＹ２）は、現在の演算のために乗算器３２２を使用しているそれぞれのデータ処理経路のマルチプレクサ３２０を介して入力される。一実施形態では、ＧＦ多項式フィールド４１４は、「１Ｄ」（１６進法（ｈｅｘ））に設定される。しかしながら、ＧＦ多項式フィールド４１４は、他のＧＦ多項式が設定されるようにすることもできる。
【００５０】
加速部２０８は、任意のＧＦ（２＾８）多項式フィールドを処理してよく、共通に使用される発生器１Ｄ（ｈｅｘ）に対して電力効率良く動作するよう最適化される。加速部２０８は、１サイクルにつき８バイト処理する単一の乗算器３２２による、任意の係数を用いた乗算の高速実装を可能にする。スループットは、８バイトに対して乗算を並行して行うことにより向上する。
【００５１】
図３に関連して採り上げられた特殊な乗算器と、命令とによって、加速部２０８は、加速部２０８と共有メモリ２０６との間のデータ移動を重複させることによる部分的な（ランダムな）書き込みの性能を高めることができる。
【００５２】
複数の経路は、データの無駄なマルチパス、すなわち、異なる演算を実行するために同じデータを共有メモリ２０６からデータ処理部２１８に送ることも削減する。
【００５３】
加速部２０８は、大掛かりな追加ロジックを加えなくてもハイパフォーマンスを提供することができる。一実施形態では、メモリサイズを最小限にすべく蓄積バッファ３０６、３０８が選ばれる。単一の大きな乗算器３２２は、記憶用途におけるパフォーマンスロスをあまりせずに効率良く用いられる。加速部２０８は、８ビットフィールドを形成するいかなる８ビット多項式もサポートするという点において、柔軟性も有する。さらに、ＡＬＵ３１４、３１６のそれぞれは、異なる多項式を個別に処理してよい。
【００５４】
図５は、図３に示されたデータ処理部２１８におけるデータ処理経路のいずれか１つのためのステータスレジスタ５００の一実施形態を示すブロック図である。データ処理部２１８におけるＡＬＵ３１４、３１６それぞれを介した各データ処理経路は、ステータスレジスタ５００をそれぞれ有する。図示された一実施形態では、ステータスレジスタ５００は、結果ゼロチェックフィールド５０２と、第１の非ゼロの結果バイトのバイトアドレスを格納するバイトアドレスフィールド５０４とを有する。結果ゼロチェックフィールド５０２は、１の演算結果に基づき設定されるかまたは削除される１ビットフィールドであってよい。バイトアドレスフィールド５０４は、５１２バイトデータブロック内の１バイトのアドレスを格納するために９ビットを有してよい。
【００５５】
一実施形態では、図２に示された加速部２０８は、ＲＡＩＤ６ストライプ書き込み動作のためのＰおよびＱシンドロームの計算を加速させる。ＰおよびＱシンドロームは、共有メモリ２０６に格納されるストライプを構成するデータブロックにおいて、加速部２０８で並列に計算される。ストライプを構成するデータブロックは、共有メモリ２０６から加速部２０８に供給される。一方のデータ処理経路は、ストライプを構成するＰシンドロームを計算するよう設定されたＡＬＵ３１４、３１６それぞれを有し、もう一方のデータ処理経路は、同じストライプを構成するＱシンドロームを計算するよう設定されたＡＬＵ３１４、３１６それぞれを有する。
【００５６】
上述のごとく、Ｐシンドロームは、ｎ個のデータディスクドライブに格納されるべきストライプにおけるデータブロックに対しＸＯＲ演算を実行することによって計算され、以下の方程式１によって表される。
【数４】
2010514066.tif 000007
【００５７】
図１を参照すると、ストライプは、同じサイズのデータブロック１０２、１０４、１０６のグループを有し、これをストリップと称してよい。各ストライプに対し、Ｐシンドローム１３０、Ｑシンドローム１３２という２つのチェックサムがある。ＰおよびＱシンドロームは、各ストライプのデータブロックにおけるデータバイト全体にわたって計算されてよい。
【００５８】
ＰおよびＱシンドロームは、因数分解を用いて計算されてよい。各係数ｇｉは、８ビット多項式である。一般的な乗算も、加速部２０６を用いて、１サイクルスループット（８バイト）のシングルパスで効率よく実行されることができる。Ｑシンドロームは、以下の方程式２に示すように、ｎ個のディスクドライブに格納されるべき（＊）データブロックに乗算器３２２のガロアフィールド（ＧＦ）多項式（ｇ）を乗じ、乗算演算の結果にＸＯＲ３３０のＸＯＲ演算を実行することによって計算される。
【数５】
2010514066.tif 000008
【００５９】
本発明の一実施形態では、ＰおよびＱシンドロームは、同じデータに対して同時に計算される。加速部２０８を介してのデータのシングルパスで実行される２つの計算により、データ移動は最適化され、システムバスの帯域幅（すなわち、共有メモリ２０６との行き来）も節約される。このように、加速部２０８は、ＰおよびＱシンドロームの計算能力を向上させる。
【００６０】
図６は、図２に示された加速部２０８と、図３に示されたデータ処理部２１８とを用い、ＰおよびＱシンドロームを同時に計算する方法の一実施形態を示す。
【００６１】
上述のごとく、ＰおよびＱシンドロームは、複数のハードディスクにわたるストライプにおけるデータブロックに対して計算される。一実施形態では、ストライプにおける各データブロック(ストリップ)は、５１２バイトを格納しうる。
【００６２】
ブロック６００では、データ処理経路のそれぞれは、加速部２０８における各コンフィギュレーションレジスタ４００にコンフィギュレーションデータを格納することによって構成される。ＡＬＵ３１４を介した第１のデータ処理経路は、Ｐシンドロームを計算するよう設定され、ＡＬＵ３１６を介した第２のデータ処理経路は、同じデータに対して同時にＱシンドロームを計算するよう設定されてよい。
【００６３】
各データ処理経路に設けられた加速部コンフィギュレーションレジスタ４００のそれぞれは、まず、データを共有メモリ２０６(図２)からそれぞれの蓄積バッファ３０６、３０８に移動させるよう設定される。計算モードフィールド４１０は、ＮＵＬＬに設定され、蓄積フィールド４０８は、「１」に設定されることにより蓄積バッファ３０６、３０８にプッシュデータが蓄積され、保存ステータスビットは「１」に設定されることにより、各ステータスレジスタ５００の内容が保存される。各コンフィギュレーションレジスタ４００における他のすべてのフィールドがデフォルト値に設定される場合、ＧＦ多項式フィールド４１４は１Ｄ（ｈｅｘ）のデフォルト値に設定され、乗算係数フィールド４１２は、デフォルト値０に設定され、蓄積バッファソースフィールド４０８は、ＡＬＵ３１４、３１６に対応付けられたそれぞれの蓄積バッファ３０６、３０８に設定される。
【００６４】
一実施形態では、加速部のコンフィギュレーションレジスタ４００に、共有メモリ２０６に格納されたコンフィギュレーションレジスタをロードする命令は、アクセラレータステートマシン２１６によって実行される。処理はブロック６０２に進む。
【００６５】
ブロック６０２では、各データ処理経路は、共有メモリ２０６（図２）からのデータブロックを蓄積バッファ３０６、３０８のそれぞれに格納するよう、コンフィギュレーションレジスタ４００のそれぞれを介して設定されている。アクセラレータステートマシン２１６は、共有メモリ２０６からデータを移動し、当該データを蓄積バッファ３０６、３０８に格納するよう、両データ処理経路に書き込み命令を発する。蓄積バッファ３０６、３０８に格納されたデータは、ストライプにおける第１のディスクドライブの第１のデータブロックである。コンフィギュレーションレジスタ４００の状態に基づき、共有メモリ２０６から供給されたプッシュデータは、ＡＬＵ３１４、３１６に入る。コンフィギュレーションレジスタ４００における計算モードフィールド４１０がＮＵＬＬなので、ＡＬＵ３１４、３１６では、演算は実行されない。変更されていないデータは、ＡＬＵ３１４、３１６を出て、マルチプレクサ３２８、３３２を通り抜け、マルチプレクサ３０２、３０４へと戻されて蓄積バッファ３０６、３０８に格納される。処理はブロック６０４へと進む。
【００６６】
ブロック６０４では、ストライプの構成要素である第１のデータブロックが蓄積バッファ３０６、３０８に格納された後、それぞれのデータ処理経路に設けられたコンフィギュレーションレジスタ４００は、ＰおよびＱシンドロームの計算を実行するよう設定される。一実施形態では、コンフィギュレーションレジスタの状態に基づき、ＡＬＵ３１４は、ストライプに対してＰシンドロームの演算を実行するよう設定され、ＡＬＵ３１６は、ストライプに対してＱシンドロームの演算を実行するよう設定される。
【００６７】
ＡＬＵ３１４がＰシンドロームを計算するよう設定される場合、対応するコンフィギュレーションレジスタ４００内では、計算モードフィールド４１０は、「ＸＯＲ」に設定され、蓄積フィールド４０８は、蓄積に設定され、保存ステータスフィールド４０４は、「保存」に設定される。上述のごとく、コンフィギュレーションレジスタ４００内の他のすべてのフィールドは、デフォルト値に設定される。
【００６８】
ＡＬＵ３１６がＱシンドロームを計算するよう設定される場合、対応するコンフィギュレーションレジスタ４００では、計算モードフィールド４１０は、「ＸＯＲ前データ乗算」に設定され、蓄積フィールド４０８は蓄積に設定され、保存ステータスフィールド４０４は、保存ステータスに設定される。処理は、ブロック６０６へと進む。
【００６９】
ブロック６０６において、各ＡＬＵ３１４、３１６は、それぞれのコンフィギュレーションレジスタ４００の状態に基づき、２つのオペランドに対して設定された演算を実行する。第１のオペランドは、蓄積バッファ３０６、３０８のそれぞれに格納される。他のオペランドは、共有メモリ２０６からプッシュデータを介して送られる。各ＡＬＵ３１４、３１６によって実行される演算の結果は、蓄積バッファ３０６、３０８のそれぞれに格納される。
【００７０】
例えば、Ｐシンドロームを計算すべく、ＡＬＵ３１４は、マルチプレクサ３１０を介し、蓄積バッファ３０６が受け取って蓄積バッファ３０６内に格納されたデータと、共有メモリ２０６から読み出されたプッシュデータとにＸＯＲ演算を実行する。蓄積バッファ３０６に格納されたデータ（オペランド）は、ストライプにおける第１のディスクドライブの第１のストリップであってよい。共有メモリ２０６から送られた他のデータ（オペランド）は、ストライプにおける第２のディスクドライブの第２のストリップであってよい。コンフィギュレーションレジスタ４００における蓄積フィールド４０８が蓄積に設定されている場合、ＡＬＵ３１４における演算結果は、マルチプレクサ３２８および３０２を介して蓄積バッファ３０６に再び格納される。処理はブロック６０８へと進む。
【００７１】
ブロック６０８では、他のストリップ（最後のストリップ以外）が存在する場合、ストライプに対してさらなるＰまたはＱ計算の実行が必要であり、処理はブロック６０６へと進む。ない場合、処理は、ブロック６１０へと進む。
【００７２】
ブロック６１０では、ＰおよびＱシンドロームのどちらも、ストライプの最後のストリップ以外に対しては計算済みである。ＰシンドロームおよびＱシンドロームは、オペランドの１つとしての最後のストリップからのデータを有するストライプに対して計算される。もう一方のオペランドは、蓄積バッファ３０６、３０８に格納されている他のストリップに対して実行された計算の結果である。Ｐシンドロームの計算結果は、マルチプレクサ３２８、３３４を介し、両方のデータ処理経路で共有されている「Ｐｕｌｌ」ＦＩＦＯ（先入れ先出し）メモリ（図示せず）に送られる。Ｑ演算の結果は、蓄積バッファ３０８に格納される。処理は、ブロック６１２へと進む。
【００７３】
ブロック６１２では、ＰｕｌｌＦＩＦＯに格納されたストライプに対して計算されたＰシンドロームは、共有メモリ２０６に移動する。処理は、ブロック６１４へと進む。
【００７４】
ブロック６１４では、Ｑシンドロームを計算するＡＬＵ３１６に対応付けられた蓄積バッファ３０８は、ＰｕｌｌＦＩＦＯにＱシンドロームを送出する。処理は、ブロック６１６へと進む。
【００７５】
ブロック６１６では、ＰｕｌｌＦＩＦＯに格納されたＱシンドロームは、共有メモリ２０６へと移される。ストライプについてのＱシンドロームおよびＰシンドロームはどちらも、共有メモリ２０６から供給されたストライプについてのデータのシングルパスによって計算されている。結果（ＰおよびＱ）は、共有メモリ２０６に戻される。
【００７６】
図７は、図１に示されたＲＡＩＤ６アレイ１００で部分的なＰおよびＱ計算を実行する方法の一実施形態を示す。部分的なＰおよびＱ計算は、ストライプにおけるデータが、当該ストライプを構成する１つのデータディスクに格納された単一のデータブロック（Ｄ）でのみ変更されている場合に実行される。したがって、入力は、ストライプについてのＰ、Ｑの古い値である。出力は、Ｄ、Ｐ、Ｑの古い値と、Ｄの新しい値とに基づく。以下の方程式３および４は、ＰおよびＱシンドロームの新しい値を計算する演算を定義する。
【数６】
2010514066.tif 000009
【００７７】
式
【数７】
2010514066.tif 000010
は、新しいＰシンドロームおよび新しいＱシンドロームを計算するために方程式３および方程式４の両方で用いられる。したがって、この式は、Ｐｎｅｗを一旦計算してからＱｎｅｗを計算するために用いられる。加速部２０６は、コンフィギュレーションレジスタ４００を介してこの計算を実行するよう設定される。
【００７８】
ブロック７００において、両方のデータ処理経路は、それぞれのコンフィギュレーションレジスタ４００内に適切なビットを設定することにより、それぞれの蓄積バッファ３０６、３０８におけるデータブロックＤの古い値を格納するよう設定される。計算モードフィールド４１０は、ＮＵＬＬに設定され、蓄積フィールド４０８は、蓄積バッファ３０６、３０８に結果を再び格納するよう「１」に設定され、保存ステータスビットは、ステータスレジスタ２１４の内容を保存するよう「１」に設定される。データ処理経路のそれぞれに設けられたコンフィギュレーションレジスタ４００における他のすべてのフィールドがデフォルト値に設定される場合、ＧＦ多項式フィールド４１４はデフォルト値１Ｄ（ｈｅｘ）に設定され、乗算係数フィールド４１２は、デフォルト値'０に設定され、蓄積ソースフィールド４０８は、ＡＬＵ３１４、３１６にそれぞれ対応付けられた蓄積バッファ３０６、３０８に設定される。ステートマシン２１６によって実行される命令は、共有メモリ２０６に格納されたコンフィギュレーションレジスタをロードして各コンフィギュレーションレジスタ４００におけるフィールドを初期化する。処理はブロック７０２へと進む。
【００７９】
ブロック７０２では、各データ処理経路は、それぞれのコンフィギュレーションレジスタ４００を介し、共有メモリ２０６からのデータブロックを蓄積バッファ３０６、３０８のそれぞれに格納するよう設定されている。アクセラレータステートマシン２１６は、両方のデータ処理経路に書き込み命令を発し、データを共有メモリ２０６から移動させて蓄積バッファ３０６、３０８に格納させる。蓄積バッファ３０６、３０８に格納されたデータは、古いデータブロックである。コンフィギュレーションレジスタ４００の状態に基づき、共有メモリ２０６から供給されたプッシュデータは、ＡＬＵ３１４、３１６に入る。コンフィギュレーションレジスタ４００における計算モードフィールド４１０はＮＵＬＬなので、ＡＬＵ３１４、３１６では演算は実行されない。変更されていないデータは、ＡＬＵ３１４、３１６を出て、マルチプレクサ３２８、３３２を通り抜け、マルチプレクサ３０２、３０４へと戻されて蓄積バッファ３０６、３０８に格納される。処理はブロック７０４へと進む。
【００８０】
ブロック７０４では、それぞれのデータ処理経路に設けられたコンフィギュレーションレジスタ４００は、新しいデータブロックについての新しいＰおよびＱシンドロームを計算するよう設定される。一実施形態では、各コンフィギュレーションレジスタ４００の状態に基づき、ＡＬＵ３１４は、Ｐシンドロームを計算するよう設定され、ＡＬＵ３１６は、Ｑシンドロームを計算するよう設定される。
【００８１】
ＡＬＵ３１４が新しいＰシンドロームの部分結果を計算するよう設定される場合、それぞれのコンフィギュレーションレジスタ４００のフィールドは以下のように設定される：計算モードフィールド４１０は、「ＸＯＲ」に設定され、蓄積フィールド４０８は、蓄積に設定され、保存ステータスフィールド４０４は、保存に設定される。コンフィギュレーションレジスタ４００における他のすべてのフィールドは、上述のごとくデフォルト値に設定される。
【００８２】
ＡＬＵ３１６が新しいＱシンドロームの部分結果を計算するよう設定される場合、それぞれのコンフィギュレーションレジスタ４００のフィールドは以下のように設定される：計算モードフィールド４１０は、「ＸＯＲ後データ乗算」に設定され、蓄積フィールド４０８は、蓄積に設定され、保存ステータスフィールド４０４は、保存ステータスに設定され、乗算係数フィールド４１２は、ＡＬＵ３１６によって実行されるべき乗算演算のための乗算係数を格納するよう設定される。処理は、ブロック７０６へと進む。
【００８３】
ブロック７０６では、ＡＬＵ３１４、３１６のそれぞれは、それぞれのコンフィギュレーションレジスタ４００の状態に基づき、設定された演算を２つのデータ入力に対して実行する。一方のデータ入力（古いデータ）は、蓄積バッファ３０６、３０８のそれぞれに格納され、他方のデータ入力（新しいデータ）は、共有メモリ２０６からＡＬＵ３１４、３１６内へ送られる。ＡＬＵ３１４、３１６それぞれによって実行された演算の結果は、各蓄積バッファ３０６、３０８に格納される。ＡＬＵ３１４は、蓄積バッファ３０６に格納された古いデータと、「プッシュデータ」を介して送られる新しいデータとに対してＸＯＲ演算を実行する。ＡＬＵ３１６も、蓄積バッファ３０８に格納された古いデータと、共有メモリ２０６からの「プッシュデータ」を介して送られる新しいデータとに対してＸＯＲ演算を実行する。乗算器３２２は、ＡＬＵ３１６からマルチプレクサ３１８を介して受け取ったＸＯＲ演算の結果をマルチプレクサ３２４の出力から供給された乗算係数で乗じる。設定された演算を実行した後、蓄積バッファ３０６は、
【数８】
2010514066.tif 000011
の結果を格納し、蓄積バッファ３０８は、
【数９】
2010514066.tif 000012
の結果を格納する。処理は、ブロック７０８へと進む。
【００８４】
ブロック７０８では、Ｐの計算に関連するコンフィギュレーションレジスタ４００は、蓄積バッファ３０６内に格納された部分結果を用いて新しいＰシンドローム（Ｐｎｅｗ）を計算するよう設定される。Ｐｎｅｗを計算すべく、コンフィギュレーションレジスタ４００内のフィールドは、以下のように設定される：計算モードフィールド４１０は、ＸＯＲに設定され、蓄積フィールド４０８は、蓄積するよう「１」に設定され、保存ステータスビットは、ステータスを保存するよう「１」に設定される。
【００８５】
ＡＬＵ３１６を含むもう一方のデータ処理経路に設けられたコンフィギュレーションレジスタ４００におけるフィールドは、以下のように設定される：計算モードフィールド４１０は、ＮＵＬＬに設定され、蓄積フィールド４０８は、蓄積しないよう「０」に設定され、保存ステータスビットは、ステータスレジスタの内容を保存するよう「１」に設定される。処理は、ブロック７１０へと進む。
【００８６】
ブロック７１０では、古いＰが共有メモリ２０６からＡＬＵ３１４、３１６へと送られる。古いＰ、および、蓄積バッファ３０６、３０８に格納された前の演算結果は、ＡＬＵ３１４、３１６に入力される。ＡＬＵ３１４における演算結果、すなわち、
【数１０】
2010514066.tif 000013
（蓄積バッファ３０６の内容）は、新しいＰ（Ｐｎｅｗ）であり、マルチプレクサ３３４を介してＰｕｌｌＦＩＦＯに送られ、蓄積バッファ３０６に戻される。ＡＬＵ３１６内ではＮＵＬＬ演算が実行され、その結果が蓄積バッファ３０８に戻されるので、蓄積バッファ３０８に格納されたデータは、変更されていない。処理は、ブロック７１２へと進む。
【００８７】
ブロック７１２において、ＰｕｌｌＦＩＦＯに格納された新しいＰ（Ｐｎｅｗ）は、共有メモリ２０６に格納される。処理は、ブロック７１４へと進む。
【００８８】
ブロック７１４において、ＡＬＵ３１６を含むデータ処理経路に対応付けられたコンフィギュレーションレジスタ４００は、蓄積バッファ３０８に格納された部分結果を用いて新しいＱ（Ｑｎｅｗ）を計算するよう設定される。Ｐシンドロームの計算に関わるコンフィギュレーションレジスタ４００は、以下のように設定される：計算モードフィールド４１０は、ＮＵＬＬに設定され、蓄積フィールド４０８は、蓄積しないよう'０'に設定され、保存ステータスビットは、ステータスレジスタの内容を保存するよう「１」に設定される。Ｑシンドロームの計算に関わるコンフィギュレーションレジスタ４００は、新たなＱシンドロームを計算するよう設定され、フィールドは以下のように設定される：計算モードフィールド４１０は、ＸＯＲに設定され、蓄積フィールド４０８は、蓄積するよう「１」に設定され、保存ステータスビットは、ステータスを保存するよう「１」に設定される。処理は、ブロック７１６へと進む。
【００８９】
ブロック７１６では、古いＱが共有メモリ２０６からプッシュデータを介して送られる。古いＱと、蓄積バッファ３０６、３０８に格納された前の演算結果とは、ＡＬＵ３１４、３１６に入力される。ＡＬＵ３１６における演算結果、すなわち、
【数１１】
2010514066.tif 000014
（蓄積バッファ３０８の内容）は、新しいＱ（Ｑｎｅｗ）であり、ＰｕｌｌＦＩＦＯに転送され、蓄積バッファ３０８に戻される。ＡＬＵ３１４ではＮＵＬＬ演算が実行され、その結果が蓄積バッファ３０６に戻されるので、蓄積バッファ３０６に格納されたデータは変更されていない。ブロック７１４の実行後、データは同時に実行されるブロック７１２および７１６に転送される。したがって、新しいＰが共有メモリ２０６に移動する間に新しいＱが計算される。これによって、加速部から演算結果を出力する時間が短縮される。処理は、ブロック７１８へと進む。
【００９０】
ブロック７１８では、ＰｕｌｌＦＩＦＯに格納された新しいＱ（ｎｅｗＱ）がＦＩＦＯから読み出され、共有メモリ２０６に格納される。
【００９１】
図８は、図１に示されたＲＡＩＤ６アレイにおける２つのデータディスクの損失をリカバリする方法の実施形態を示す。例えば、ｎ個のデータディスクが存在し、そのうちのデータディスクＤ０およびＤ１が故障した場合、データディスクＤ０およびＤ１は、残りのディスクに以下の方程式５、および、方程式６による計算を実行することによってリカバリしうる。
【数１２】
2010514066.tif 000015
通常、Ｄ０は、最初に計算される。Ｄ１は、Ｄ０を用いて以下のように計算される。
【数１３】
2010514066.tif 000016
【００９２】
しかしながら、これにはデータのツーパスが必要である。上述のごとく、上記方程式５および６を用いたＤ０およびＤ１の計算には乗算器が必要である。２つのディスクが同時に故障する可能性は低く、加速部２０８に第２の乗算器３２２を追加するには付加的なコストがかかるので、パフォーマンスの上げ幅から見てそれは妥当ではないだろう。したがって、データのシングルパスによって２つのデータディスクのリカバリを可能とすべく、単一の乗算器が２つのデータ処理経路で共有される。乗算器の共有は、乗算器３２２を使用中の特定のデータ処理経路について、マルチプレクサ３２０による多項式（Ｐ）と、マルチプレクサ３２４による乗算係数（Ｍ）とを選択することによって実現されうる。
【００９３】
図３に示されるデータ処理部２１８を用いた一実施形態では、６つのデータディスクＤ０からＤ５までを有し、そのうちのＤ４およびＤ５が故障している。この場合、Ｄ４およびＤ５は、Ｄ０からＤ３、ＰおよびＱを用い、データのシングルパスによってリカバリされてよい。
【００９４】
Ｄ４は、集合｛Ｄ０，Ｄ１，Ｄ２，Ｄ３，Ｐ，Ｑ｝と、乗算係数｛ｍ０，ｍ１，ｍ２，ｍ３，ｍＰ，ｍＱ｝との線形結合として計算されてよい。一実施形態では、集合における各データブロックは、５１２バイトを有してよく、各乗算係数は、１バイトであって、データブロック全体に適用される。したがって、Ｄ４およびＤ５をリカバリするために以下の演算が実行される。
【数１４】
2010514066.tif 000017
【００９５】
ブロック８００では、各データ処理経路に対してＡＬＵ３１４、３１６が設定される。ＡＬＵ３１４に対応付けられたコンフィギュレーションレジスタ４００は、以下のように設定される：計算モードフィールド４１０が、ＮＵＬＬに設定され、蓄積フィールド４０８は、蓄積するよう設定される。もう一方のデータ処理経路におけるＡＬＵ３１６に対応付けられたコンフィギュレーションレジスタ４００は、以下のように設定される：計算モードフィールド４１０は、ＧＦ８  ＭＵＬに設定され、蓄積フィールド４０８は、ＧＦ８  ＭＵＬ演算の結果を蓄積するよう設定される。処理は、ブロック８０２へと進む。
【００９６】
ブロック８０２において、各データ処理経路は、設定された演算を共有メモリから受け取ったデータのブロック対して実行する。ＡＬＵ３１４におけるＮＵＬＬ演算の結果は、蓄積バッファ３０６に格納されている受け取ったデータブロックのままである。データブロックへのＧＦ８乗算の結果は、蓄積バッファ３０８に格納される。処理は、ブロック８０４へと進む。
【００９７】
ブロック８０４において、次のデータブロックの乗算係数（Ｍ）は、ＡＬＵ３１６のコンフィギュレーションレジスタ４００における乗算係数フィールド４１２に格納される。両方のコンフィギュレーションレジスタ４００に格納された演算（ＡＬＵ３１４に格納されたＸＯＲ、および、ＡＬＵ３１６に格納されたＸＯＲ前データ乗算）は、蓄積バッファ３０６、３０８のそれぞれに格納された前の演算結果と、共有メモリ２０６から送られた新しいブロックとに対して実行される。処理は、ブロック８０６へと進む。
【００９８】
ブロック８０６では、送り出されるべき他のデータブロックがある場合、処理は、ブロック８０４へと進む。ない場合、処理は、ブロック８０８へと進む。
【００９９】
ブロック８０８において、蓄積バッファ３０６、３０８は、以下の演算の結果を格納する。
蓄積バッファ３０８＝
【数１５】
2010514066.tif 000018
蓄積バッファ３０６＝
【数１６】
2010514066.tif 000019
【０１００】
ＡＬＵ３１４を含むデータ処理経路に対応付けられたコンフィギュレーションレジスタ４００は、Ｐに対する乗算係数によって設定される。Ｐブロックは、ＡＬＵ３１４、３１６の両方に送り込まれる。蓄積バッファ３０６、３０８は、以下の演算の結果を格納する。蓄積バッファ３０８＝
【数１７】
2010514066.tif 000020
蓄積バッファ３０６＝
【数１８】
2010514066.tif 000021
【０１０１】
ブロック８１０において、ＡＬＵ３１６を含むデータ処理経路に対応付けられたコンフィギュレーションレジスタ４００は、Ｑに対する乗算係数によって設定され、ＡＬＵ３１４を含むデータ処理経路に対応付けられたコンフィギュレーションレジスタ４００は、当該演算結果を蓄積しないよう設定される。Ｑデータは、ＡＬＵ３１４、３１６の両方に送り込まれる。ＡＬＵ３１６における演算結果、すなわち、
【数１９】
2010514066.tif 000022
（蓄積バッファ３０８の内容）は、ＰｕｌｌＦＩＦＯに転送され、蓄積バッファ３０８に戻されるリカバリ済みＤ４である。それぞれのＡＬＵに設定された演算がＱブロックに対して実行された後、蓄積バッファ３０６、３０８は、以下の演算の結果を格納する。  蓄積バッファ３０８＝
【数２０】
2010514066.tif 000023
蓄積バッファ３０６＝
【数２１】
2010514066.tif 000024
処理は、ブロック８１２へと進む。ブロック８１２において、Ｄ４のリカバリ済みデータは、再び共有メモリ２０６に格納される。処理は、ブロック８１４へと進む。
【０１０２】
ブロック８１４において、ＡＬＵ３１４を含むデータ処理経路に対応付けられたコンフィギュレーションレジスタ４００は、ＸＯＲおよび蓄積に設定され、ＡＬＵ３１６を含むデータ処理経路に対応付けられたコンフィギュレーションレジスタ４００は、データ処理経路からの結果が蓄積バッファに戻されないように設定される。Ｄ４データは、ＡＬＵ３１４、３１６の両方に送り込まれる。ＡＬＵ３１４における演算の結果、すなわち、
【数２２】
2010514066.tif 000025
（蓄積バッファ３０６の内容）は、ＰｕｌｌＦＩＦＯに転送され、蓄積バッファ３０６に戻されるリカバリ済みＤ５である。すなわち、以下の演算が実行される。
【数２３】
2010514066.tif 000026
結果は、蓄積バッファ３０６に格納される。ブロック８１６では、データディスクＤ５のリカバリ済みデータが共有メモリに戻される。
【０１０３】
図６から８に関連して説明したダブルディスク故障のリカバリを実行する方法、部分的なＰおよびＱのアップデート、および、ＰおよびＱシンドロームの計算に加えて、加速部は、リカバリ動作を実行するようコンフィギュレーションレジスタを設定することにより、データディスクとＰディスクとのダブルディスク故障、または、データディスクとＱディスクとのダブルディスク故障のリカバリを加速するためにも用いられてよい。ＰおよびＱディスクの両方が故障した場合、ＰおよびＱディスクは、図７に関連して説明された方法を用いてリカバリされてよい。
【０１０４】
加速部は、Ｐ、Ｑ、および、データディスクのリカバリと、ＲＡＩＤ６システムのＰおよびＱシンドロームの計算とに関する動作以外のデータ処理動作を加速するのにも用いられてよい。
【０１０５】
図９は、図２に示された加速部で実行されうる比較検査を実行する方法の一実施形態を示す。比較機能は、２つのデータブロック（ＡおよびＢ）を比較し、データブロックＡがデータブロックＢと等しいかどうかを検査する。図９は、図２および３と関連付けて説明される。
【０１０６】
ブロック９００において、ＡＬＵ３１４のコンフィギュレーションレジスタ４００は、比較演算を実行するよう設定される。ＡＬＵ３１４用のコンフィギュレーションレジスタ４００の計算モードフィールド４１０は、ＸＯＲに設定され、蓄積フィールド４０８は、その結果を蓄積するよう設定される。ＡＬＵ３１６用のコンフィギュレーションレジスタ４００の計算モードフィールド４１０は、ＮＵＬＬに設定され、その結果は蓄積されない。処理は、ブロック９０２へと進む。
【０１０７】
ブロック９０２では、第１のデータブロックからのデータ（Ａデータ）は、蓄積バッファ３０６にロードされる。処理は、ブロック９０４へと進む。
【０１０８】
ブロック９０４では、第２のデータブロックからのデータ（Ｂデータ）は、共有メモリ２０６から加速部２０８内に送り込まれ、蓄積バッファ３０６に格納されたＡデータを用い、ＸＯＲ演算がバイト毎に行われる。処理はブロック９０６へと進む。
【０１０９】
ブロック９０６では、ＢデータがＡＬＵ３１４を介して送られた後、ＡＬＵ３１４に対応付けられたステータスレジスタ５００が読み出される。ＡＬＵ３１４に対応付けられたステータスレジスタ５００における結果ゼロチェックフィールド５０２の状態は、不一致が検出されたかどうかを示している。また、データブロックにおける最初の不一致バイトのバイトアドレスは、ステータスレジスタ５００におけるバイトアドレスフィールド５０４に格納されてよい。
【０１１０】
図１０は、図２に示された加速部２０８で実行されうる結果非ゼロチェックを実行する方法の一実施形態を示す。
【０１１１】
ブロック１０００において、ＡＬＵ３１４用のコンフィギュレーションレジスタ４００は、結果非ゼロチェック演算を実行するよう設定される。ＡＬＵ３１４用のコンフィギュレーションレジスタ４００の計算モードフィールド４１０は、ＮＵＬＬに設定され、保存ステータスフィールド４０４はステータスをアップデートするよう設定され、蓄積フィールド４０８は、結果を蓄積しないよう設定される。ＡＬＵ３１６用のコンフィギュレーションレジスタ４００の計算モードフィールド４１０も、ＮＵＬＬに設定され、その結果は蓄積されない。処理は、ブロック１００２へと進む。
【０１１２】
ブロック１００２において、データブロックのデータは、共有メモリからＡＬＵ３１４、３１６の両方に送り込まれ、バイト毎にＮＵＬＬ演算が実行されるので、蓄積バッファ３０６にはデータが格納されない。
【０１１３】
ブロック１００４において、ＡＬＵ３１４、３１６を介してデータが送り込まれた後、ＡＬＵ３１４に対応付けられたステータスレジスタ５００が読み出される。ＡＬＵ３１４に対応付けられたステータスレジスタ５００における結果ゼロチェックフィールド５０２の状態は、結果非ゼロが検出されたかどうかを示す。また、ブロックにおける最初の結果非ゼロ結果のバイトのバイトアドレスは、ステータスレジスタ５００におけるバイトアドレスフィールド５０４に格納されてよい。
【０１１４】
他の実施形態では、一方のデータ処理経路におけるＡＬＵは、結果非ゼロチェックを実行し、もう一方のデータ処理経路におけるＡＬＵは、比較検査を実行するよう設定されてよい。２つの演算が同じデータブロックに対して同時に行われてよい。
【０１１５】
拡張バイトサーチ機能は、ＰＫＣＳ（Ｐｕｂｌｉｃ  Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  Ｓｙｓｔｅｍｓ）およびＲＮＧ（乱数発生器）で役立ち、例えば、ゼロバイトを探すか、または、０＊０×０１＊形式のメッセージ開始時における可変パターンを見つけるのに役立つ。後者の場合、可変パターンの位置は、適格なメッセージボディの開始を示す。マイクロエンジン２０４で実行される場合、適格なメッセージボディの開始を見つけるには非常に時間がかかり、大きなコード空間を要する。
【０１１６】
図１１は、本発明の原理に従うＲＡＩＤ６計算を加速させる加速部の一実施形態を含むシステムのブロック図である。
【０１１７】
システム１１００は、ホスト中央処理装置（ＣＰＵ）１１０１、メモリコントローラハブ（ＭＣＨ）１１０２、および、Ｉ／Ｏコントローラハブ（ＩＣＨ）１１０４を有する。ＭＣＨ１１０２は、ＣＰＵ１１０１とメモリ２０２との間の通信を制御するメモリコントローラ１１０６を有する。ＣＰＵ１１０１およびＭＣＨ１１０２は、システムバス１１１６を介して通信する。
【０１１８】
ホストＣＰＵ１１０１は、シングルコアのインテル（登録商標）ＰｅｎｔｉｕｍＩＶ（登録商標）プロセッサ、シングルコアのインテル（登録商標）Ｃｅｌｅｒｏｎ（登録商標）プロセッサ、インテル（登録商標）ＸＳｃａｌｅプロセッサなどの複数のプロセッサのいずれか１つ、または、インテル（登録商標）Ｐｅｎｔｉｕｍ  Ｄ（登録商標）、インテル（登録商標）Ｘｅｏｎ（登録商標）プロセッサなどのマルチコアプロセッサ、または、インテル（登録商標）Ｃｏｒｅ（登録商標）Ｄｕｏプロセッサ、あるいは、他のいかなるタイプのプロセッサであってよい。
【０１１９】
メモリ２０２は、ＤＲＡＭ（ダイナミックＲＡＭ）、ＳＲＡＭ（スタティックＲＡＭ）、ＳＤＲＡＭ（シンクロナスＤＲＡＭ）、ＤＤＲ２（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  ２）ＲＡＭ、または、ＲＤＲＡＭ（Ｒａｍｂｕｓ  ＤＲＡＭ）、あるいは、他のいかなるタイプのメモリであってよい。
【０１２０】
ＩＣＨ１１０４は、ＤＭＩ（ダイレクトメディアインターフェース）のようなチップ間高速インターコネクト１１１４を用いてＭＣＨ１１０２に結合されてよい。ＤＭＩは、２つの単方向レーンによって２ギガビット／秒の並列転送速度をサポートする。
【０１２１】
ＩＣＨ１１０４は、当該ＩＣＨ１１０４に結合されるＲＡＩＤアレイ１００のＲＡＩＤ計算を加速させる加速部２０８を有してよい。ＩＣＨ１１０４は、シリアルストレージプロトコルを用い、ストレージプロトコルインターコネクト１１１８を介してＲＡＩＤアレイ１００と通信してよい。フレームに含まれるコマンド、データ、および、ステータス情報は、標準的なシリアルアタッチドストレージプロトコルスイートを用い、ストレージプロトコルインターコネクト１１１８を介してＩＣＨ１１０４とＲＡＩＤアレイ１００との間で交換されてよい。
【０１２２】
シリアルストレージプロトコルスイートは数多く存在し、例えば、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、および、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）などである。ＳＡＴＡプロトコルのバージョンは、Ｓｅｒｉａｌ  ＡＴＡ  Ｗｏｒｋｉｎｇ  Ｇｒｏｕｐにより２００３年１月７に発表された「Ｓｅｒｉａｌ  ＡＴＡ：  Ｈｉｇｈ  Ｓｐｅｅｄ  Ｓｅｒｉａｌｉｚｅｄ  ＡＴ  Ａｔｔａｃｈｍｅｎｔ」改訂版１．０ａに記載されている。ＳＡＳプロトコルのバージョンは、ＡＮＳＩ（米国規格協会）によって２００３年９月１８日に発表された「情報技術−Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ−  １．１」ワーキングドラフト、ＩＮＣＩＴＳ（情報技術規格国際委員会）の米国標準規格、プロジェクトＴ１０／１５６２−Ｄ、改訂版１に記載されている。ＦＣ（ファイバーチャネル)プロトコルのバージョンは、２００５年８月９日に発表されたＡＮＳＩ（米国規格協会）標準ＦＣ−ＦＳ−２（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｐｈｙｓｉｃａｌ  ａｎｄ  Ｓｉｇｎａｌｉｎｇ  Ｉｎｔｅｒｆａｃｅ−２）仕様書に記載されている。
【０１２３】
当業者であれば、本発明の実施形態に含まれる方法は、コンピュータ使用可能媒体を含むコンピュータプログラム製品において実現できることが理解できよう。例えば、このようなコンピュータ使用可能媒体は、ＣＤ  ＲＯＭディスクのようなリードオンリーメモリデバイス、または、従来のＲＯＭデバイス、あるいは、コンピュータ可読プログラムコードを格納したコンピュータディスケットからなる。
【０１２４】
これまで特定の実施形態に関連して本発明を説明してきたが、添付の請求項に含まれる本発明の実施形態の範囲に逸脱せずに、形態および詳細におけるさまざまな変更がなされうることが当業者には理解できよう。
【図１】
2010514066.tif 000027
【図２】
2010514066.tif 000028
【図３】
2010514066.tif 000029
【図４】
2010514066.tif 000030
【図５】
2010514066.tif 000031
【図６】
2010514066.tif 000032
【図７】
2010514066.tif 000033
【図８】
2010514066.tif 000034
【図９】
2010514066.tif 000035
【図１０】
2010514066.tif 000036
【図１１】
2010514066.tif 000037
【手続補正書】
【提出日】平成21年7月28日(2009.7.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
装置であって、
データブロックを受け取る第１のデータ処理経路と、
前記データブロックを受け取る第２のデータ処理経路と、を備え、
前記第１のデータ処理経路は、前記データブロックを格納する第１の蓄積バッファ、および、前記データブロックに対し第１の演算を実行する第１の論理演算ユニットを有し、
前記第２のデータ処理経路は、前記データブロックを格納する第２の蓄積バッファ、および、前記データブロックに対し第２の演算を実行する第２の論理演算ユニットを有し、
前記第１のデータ処理経路と前記第２のデータ処理経路とで、前記データブロックに対し乗算演算を実行する乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、装置。
【請求項２】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記第１の演算は、前記ストライプについてのＰシンドロームを計算し、前記第２の演算は、前記ストライプについてのＱシンドロームを計算する、請求項１に記載の装置。
【請求項３】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ)ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、ＰシンドロームブロックとＱシンドロームブロックとを有し、前記第１の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第１のデータブロックをリカバリし、前記第２の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第２のデータブロックをリカバリする、請求項１に記載の装置。
【請求項４】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、新しいデータブロックに対してアップデートされ、前記第１の演算は、前記ストライプの古いＰシンドロームブロック、古いデータブロック、および、新しいデータブロックを用いて、前記ストライプについての新しいＰシンドロームを計算する、請求項１に記載の装置。
【請求項５】
前記第２の演算は、前記ストライプの古いＱシンドロームブロック、前記古いデータブロック、および、前記新しいデータブロックを用いて、新しいＱシンドロームを計算する、請求項４に記載の装置。
【請求項６】
前記新しいＱシンドロームが計算される間に前記新しいＰシンドロームが共有メモリに移動される、請求項５に記載の装置。
【請求項７】
前記第１の論理演算ユニットは、第１のプログラム可能な多項式を有し、前記第２の論理演算ユニットは、第２のプログラム可能な多項式を有する、請求項１に記載の装置。
【請求項８】
前記第１の演算は、第１のデータブロックと第２のブロックに対して実行され、前記第１のデータブロックおよび前記第２のブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）レベル６ストライプに含まれ、結果は、他のブロックへの次の演算のために前記第１の蓄積バッファに格納される、請求項１に記載の装置。
【請求項９】
方法であって、
第１のデータ処理経路における第１の蓄積バッファにデータブロックを格納する段階と、
第２のデータ処理経路における第２の蓄積バッファに前記データブロックを格納する段階と、
第１の演算部を用い、前記データブロックに対して第１の演算を実行する段階と、
第２の演算部を用い、前記データブロックに対して第２の演算を実行する段階と、
を備え、
前記第１のデータ処理経路と前記第２のデータ処理経路とで乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、
方法。
【請求項１０】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記第１の演算は、前記ストライプについてのＰシンドロームを計算し、前記第２の演算は、前記ストライプについてのＱシンドロームを計算する、請求項９に記載の方法。
【請求項１１】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、ＰシンドロームブロックとＱシンドロームブロックとを有し、前記第１の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第１のデータブロックをリカバリし、前記第２の演算は、前記ＲＡＩＤストライプにおける前記Ｐシンドロームブロック、前記Ｑシンドロームブロック、および、他のデータブロックを用いて前記ＲＡＩＤストライプにおける第２のデータブロックをリカバリする、請求項９に記載の方法。
【請求項１２】
前記データブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）ストライプにおけるデータブロックであり、前記ＲＡＩＤストライプは、新しいデータブロックに対してアップデートされ、前記第１の演算は、前記ストライプの古いＰシンドロームブロック、古いデータブロック、および、新しいデータブロックを用いて、前記ストライプについての新しいＰシンドロームを計算する、請求項９に記載の方法。
【請求項１３】
前記第２の演算は、前記ストライプの古いＱシンドロームブロック、前記古いデータブロック、および、前記新しいデータブロックを用いて、新しいＱシンドロームを計算する、請求項１２に記載の方法。
【請求項１４】
前記新しいＱシンドロームが計算される間に前記新しいＰシンドロームが共有メモリに移動される、請求項１３に記載の方法。
【請求項１５】
前記第１の論理演算ユニットは、第１のプログラム可能な多項式を有し、前記第２の論理演算ユニットは、第２のプログラム可能な多項式を有する、請求項９に記載の方法。
【請求項１６】
前記第１の演算は、前記第１の蓄積バッファに格納された前記データブロックと、前記第１のデータ処理経路が受け取った第２のデータブロックとに対してパターンマッチングを実行する、請求項９に記載の方法。
【請求項１７】
前記第１の演算は、受け取られた前記データブロックに対して非ゼロ結果演算を実行する、請求項９に記載の方法。
【請求項１８】
前記第１の演算は、第１のデータブロックと第２のブロックに対して実行され、前記第１のデータブロックおよび前記第２のブロックは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）レベル６ストライプに含まれ、結果は、他のブロックへの次の演算のために前記第１の蓄積バッファに格納される、請求項９に記載の方法。
【請求項１９】
コンピュータに、
第１のデータ処理経路における第１の蓄積バッファにデータブロックを格納する段階と、
第２のデータ処理経路における第２の蓄積バッファに前記データブロックを格納する段階と、
第１の演算部を用い、前記データブロックに対して第１の演算を実行する段階と、
第２の演算部を用い、前記データブロックに対して第２の演算を実行する段階と、
を実行させるプログラムであって、
前記第１のデータ処理経路と前記第２のデータ処理経路とで乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、
プログラム。
【請求項２０】
システムであって、
複数のＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）ディスクドライブを有するＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ)システムと、
前記ＲＡＩＤシステムに関するデータを処理する加速部と、
を備え、
前記加速部は、
データブロックを受け取る第１のデータ処理経路と、
前記データブロックを受け取る第２のデータ処理経路と、を備え、
前記第１のデータ処理経路は、前記データブロックを格納する第１の蓄積バッファ、および、前記データブロックに対し第１の演算を実行する第１の論理演算ユニットを有し、
前記第２のデータ処理経路は、前記データブロックを格納する第２の蓄積バッファ、および、前記データブロックに対し第２の演算を実行する第２の論理演算ユニットを有し、
前記第１のデータ処理経路と前記第２のデータ処理経路とで、前記データブロックに対し乗算演算を実行する乗算器を共有し、
前記第１のデータ処理経路および前記第２のデータ処理経路が前記データブロックを同時に処理することにより、第１の結果データブロックおよび第２の結果データブロックを、前記第１のデータ処理経路と前記第２のデータ処理経路とを通じての前記データブロックのシングルパスで提供する、
システム。
【国際調査報告】
2010514066.tif 000038
2010514066.tif 000039