(57)【特許請求の範囲】
【請求項１】
ホストコンピュータに接続されるチャネル制御部と、
前記チャネル制御部に接続される記憶部と、
前記チャネル制御部及び前記記憶部に接続されるプロセッサと、
を備え、
前記チャネル制御部は、複数の演算部と、前記複数の演算部に接続されたバッファと、前記バッファに接続された通信制御部とを有し、
前記プロセッサは、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
前記複数の演算部は並列に、前記記憶部から前記複数の要素データを夫々読み出し、
前記複数の演算部は並列に、前記バッファへ前記複数の要素データを夫々書き込み、
前記複数の演算部は並列に、複数の部分コードであって、前記複数の部分コードの夫々が、対応する要素データの少なくとも一部の保証コードである、前記複数の部分コードを夫々算出し、
前記複数の演算部は、前記プロセッサへ前記複数の部分コードを夫々送り、
前記プロセッサは、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出し、
前記プロセッサは、前記系列コードを前記バッファへ書き込み、
前記通信制御部は、前記バッファ内の前記系列データ及び前記系列コードを連結して前記ホストコンピュータへ送信し、
前記複数の部分コードの夫々は、所定長を有するＣＲＣであり、
前記系列コードは、前記所定長を有するＣＲＣである、
ストレージ装置。
【請求項２】
前記複数の演算部の夫々は、対応する要素データから、対応する要素データの長さ以下で最大の前記所定長の倍数の長さを有する部分を、部分データとして抽出し、所定コードを初期値として、前記部分データを入力として、保証コード演算を行うことにより、対応する部分コードを算出する、
請求項１に記載のストレージ装置。
【請求項３】
前記プロセッサは、前記複数の要素データの一つを対象要素データとして順次選択し、前記対象要素データ内の部分データを対象部分データとして選択し、前記系列データの内の前記対象部分データより前のデータの保証コードを初期値として、前記対象部分データの長さに等しい長さを有するゼロデータを入力として、保証コード演算を行うことにより、一時的な保証コードを算出し、前記一時的な保証コードと前記部分コードのＸＯＲ演算により、前記系列データの内の前記対象部分データまでのデータの保証コードを算出する、
請求項２に記載のストレージ装置。
【請求項４】
前記複数の演算部の夫々は、対応する要素データ内に、対応する部分データの残りのデータである端数データがある場合、前記端数データを前記プロセッサへ送る、
請求項３に記載のストレージ装置。
【請求項５】
前記プロセッサは、前記対象要素データ内の端数データを対象端数データとして選択し、前記系列データの内の前記対象端数データより前のデータの保証コードを初期値として、前記対象端数データを入力として、保証コード演算を行うことにより、前記系列データの内の前記対象端数データまでのデータの保証コードを算出する、
請求項４に記載のストレージ装置。
【請求項６】
前記プロセッサは、前記所定コードを前記複数の演算部の夫々へ送る、
請求項５に記載のストレージ装置。
【請求項７】
前記複数の要素データの中の先頭以外の要素データが指定された演算部に対応する所定コードは、前記所定長のゼロデータである、
請求項６に記載のストレージ装置。
【請求項８】
前記複数の要素データの中の第１要素データの長さは、前記複数の要素データの中の第２要素データの長さと異なる、
請求項１に記載のストレージ装置。
【請求項９】
ホストコンピュータに接続されるチャネル制御部と、前記チャネル制御部に接続される記憶部と、前記チャネル制御部及び前記記憶部に接続されるプロセッサとを有し、前記チャネル制御部が、複数の演算部と、前記複数の演算部に接続されたバッファと、前記バッファに接続された通信制御部とを有するストレージ装置を、制御するためのストレージ装置制御方法であって、
前記プロセッサが、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
前記複数の演算部が並列に、前記記憶部から前記複数の要素データを夫々読み出し、
前記複数の演算部が並列に、前記バッファへ前記複数の要素データを夫々書き込み、
前記複数の演算部が並列に、複数の部分コードであって、前記複数の部分コードの夫々が、対応する要素データの少なくとも一部の保証コードである、前記複数の部分コードを夫々算出し、
前記複数の演算部が、前記プロセッサへ前記複数の部分コードを夫々送り、
前記プロセッサが、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出し、
前記プロセッサが、前記系列コードを前記バッファへ書き込み、
前記通信制御部が、前記バッファ内の前記系列データ及び前記系列コードを連結して前記ホストコンピュータへ送信する、
ことを備え、
前記複数の部分コードの夫々は、所定長を有するＣＲＣであり、
前記系列コードは、前記所定長を有するＣＲＣである、
ストレージ装置制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置におけるデータ保証技術に関する。
【背景技術】
【０００２】
ストレージ装置とホストコンピュータの間の通信インタフェースにおいて、転送されるデータの保証コードの生成や確認を行う技術が知られている（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００８／０１０９６１５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
保証コードにＣＲＣ（Cyclic Redundancy Check）を用い、複数のデータが連結されたデータの保証コードを算出するために、複数のデータの夫々を用いて演算を行う場合、複数のデータの順序によって演算結果が異なるため、複数のデータの順序を維持して保証コードを算出する必要がある。【０００５】
複数のデータの転送に一つのＤＭＡ（Direct Memory Access）コントローラを用いる場合、そのＤＭＡコントローラが、連結されたデータの保証コードを算出する。また、複数のデータの転送に複数のＤＭＡコントローラを用いる場合、或るＤＭＡコントローラが、或るデータの保証コードの演算を行い、別のＤＭＡコントローラが、その演算の結果を引き継いで次のデータの保証コードの演算を行う。この場合、複数のＤＭＡコントローラを用いても、複数のデータを逐次演算する必要があるため、データの転送性能を向上させることが困難である。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明の一態様であるストレージ装置は、ホストコンピュータに接続されるチャネル制御部と、前記チャネル制御部に接続される記憶部と、前記チャネル制御部及び前記記憶部に接続されるプロセッサと、を備える。前記チャネル制御部は、複数の演算部を有する。前記プロセッサは、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定する。前記複数の演算部は、前記記憶部から前記複数の要素データを夫々読み出し、前記複数の要素データに基づいて複数の保証コードである複数の部分コードを夫々算出し、前記プロセッサへ前記複数の部分コードを夫々送る。前記プロセッサは、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出する。
【発明の効果】
【０００７】
本発明の一態様によれば、複数の演算部が、複数のデータに基づいて複数の保証コードを夫々算出することにより、データの転送性能を向上させることができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、本発明の実施例のストレージ装置の構成を示す。
【図２】図２は、チャネルアダプタ２２０の構成を示す。
【図３】図３は、マルチトラックリード要求に対する応答データの一例を示す。
【図４】図４は、マルチトラックリード処理を模式的に示す。
【図５】図５は、ＤＭＡ処理を示す。
【図６】図６は、最終ＣＲＣ処理を示す。
【図７】図７は、ＣＲＣ最終処理の具体例を示す。
【図８】図８は、ＣＲＣ演算に関するＤＭＡコントローラとＭＰ２４０の動作を示す。
【発明を実施するための形態】
【０００９】
以下、本発明の実施例について図面を用いて説明する。
【００１０】
なお、以後の説明では「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」、「ａａａキュー」等の表現にて本発明の情報を説明するが、これら情報はテーブル、リスト、ＤＢ、キュー、等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」、「ａａａキュー」等について「ａａａ情報」と呼ぶことがある。
【００１１】
さらに、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いるが、これらについてはお互いに置換が可能である。
【００１２】
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御デバイス）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。
【００１３】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによってストレージ装置にインストールされてもよい。
【００１４】
以下、本発明の実施例のストレージ装置について説明する。
【００１５】
図１は、本発明の実施例のストレージ装置の構成を示す。この図に示されているストレージ装置１００は、複数のホストコンピュータ４００に接続されている。ストレージ装置１００は、ストレージコントローラ２００と、複数のＨＤＤ（Hard Disk Drive）３００とを有する。ストレージコントローラ２００は、ＳＡＮ（Storage Area Network）等を介してホストコンピュータ４００に接続されている。複数のＨＤＤ３００は、ストレージコントローラ２００に接続されている。なお、ストレージ装置１００は、一つのホストコンピュータ４００に接続されていても良い。また、ストレージ装置１００は、一つのＨＤＤ３００を有していても良い。また、ＨＤＤ３００の代わりに、ＳＳＤ（Solid State Drive）等の他のドライブが用いられても良い。
【００１６】
ストレージコントローラ２００は、スイッチ（ＳＷ）２１０と、複数のチャネルアダプタ（ＣＨＡ）２２０と、複数のデータキャッシュ（Cache）２３０と、複数のＭＰ（Microprocessor）２４０と、複数のディスクアダプタ（ＤＫＡ）２５０とを有する。ストレージコントローラ２００は、一つのデータキャッシュ２３０を有していても良いし、一つのＭＰ２４０を有していても良いし、一つのディスクアダプタ２５０を有していても良い。
【００１７】
スイッチ２１０は、チャネルアダプタ２２０と、データキャッシュ２３０と、ＭＰ２４０と、ディスクアダプタ２５０との間の通信を制御する。
【００１８】
チャネルアダプタ２２０は、ホストコンピュータ４００に接続され、ホストコンピュータ４００との通信を制御する。
【００１９】
データキャッシュ２３０は、ホストコンピュータ４００へ送信されるデータや、ホストコンピュータ４００から受信されたデータを格納する。データキャッシュ２３０は更に、共用メモリを有する。共用メモリは、ＭＰ２４０により用いられるプログラム及びデータを格納する。
【００２０】
ＭＰ２４０は、共用メモリに格納されたプログラム及びデータに基づいて、ストレージ装置１００の各部を制御する。
【００２１】
ディスクアダプタ２５０は、ＨＤＤ３００に接続され、ＨＤＤ３００との通信を制御する。
【００２２】
図２は、チャネルアダプタ２２０の構成を示す。チャネルアダプタ２２０は、複数のホストチャネル制御ＬＳＩ（large‐scale integration）５１０と、ＤＭＡ用ＬＳＩ５２０と、複数の中間バッファ（ＤＸＢＦ）５３０とを有する。チャネルアダプタ２２０は、一つのホストチャネル制御ＬＳＩ５１０を有していても良い。チャネルアダプタ２２０は、一つの中間バッファ５３０を有していても良い。
【００２３】
ホストチャネル制御ＬＳＩ５１０は、通信制御部５１１と、内部バッファ５１２とを有する。通信制御部５１１は、ホストコンピュータ４００に接続され、所定のプロトコルに従って、ホストコンピュータ４００との通信を制御する。本実施例において通信制御部５１１は、ＦＩＣＯＮ（Fiber Connectivity）−ＨＰＦ（High Performance）を用いるが、他のプロトコルを用いても良い。内部バッファ５１２は、ホストコンピュータ４００へ送信するデータを格納する。
【００２４】
中間バッファ５３０は、例えばＤＲＡＭ（Dynamic Random Access Memory）であり、ＤＭＡ用ＬＳＩ５２０によりデータキャッシュ２３０から転送されたデータ等を格納する。
【００２５】
ＤＭＡ用ＬＳＩ５２０は、複数のＤＭＡコントローラ（ＤＭＡＣ）５２１を有する。複数のＤＭＡコントローラ５２１の夫々は、互いに異なるＤＭＡ回路であっても良いし、ＤＭＡ回路が割り当てられる仮想ＤＭＡコントローラであっても良い。なお、ＤＭＡ用ＬＳＩ５２０内の一つのＤＭＡ回路が、論理的に複数のＤＭＡコントローラ５２１に分割されても良い。ＤＭＡ回路は、保証コードを算出する。本実施例における保証コードは、ＣＲＣであり、ＤＭＡ回路は、４バイトの初期値と、４バイトの倍数の長さの入力とを用いて、４バイトのＣＲＣを算出する。このＣＲＣの生成多項式は例えば、０ｘ０４Ｃ１１ＤＢ７で表される。なお、保証コードは、他の誤り検出符号や誤り訂正符号であっても良い。
【００２６】
ＤＭＡコントローラ５２１は、ＭＰ２４０からの指示に従って、データキャッシュ２３０からデータを読み出し、読み出されたデータに基づいてＣＲＣ演算を行い、読み出されたデータを中間バッファ５３０へ書き込む。
【００２７】
ＦＩＣＯＮ−ＨＰＦは、一つのリード要求により複数のトラックを連結して転送するためのマルチトラックリード要求をサポートする。ここでのトラックは、１バイト単位で指定される任意の長さのデータである。
【００２８】
以下、マルチトラックリード処理について説明する。
【００２９】
ホストコンピュータ４００がマルチトラックリード要求をストレージ装置１００へ送信することにより、ストレージ装置１００は、マルチトラックリード処理を行う。マルチトラックリード要求は、複数のトラックを指定する。
【００３０】
図３は、マルチトラックリード要求に対する応答データの一例を示す。
【００３１】
マルチトラックリード要求を受けたストレージ装置１００は、複数のトラックが要求された順に連結された連結データと、最終ＰＡＤと、最終ＣＲＣとを連結した応答データをホストコンピュータ４００へ送信する。連結データの後に最終ＰＡＤが連結されたデータを整形データとする。整形データの長さは４バイトの倍数である。最終ＰＡＤは、長さを調整するためのＡＬＬゼロデータである。最終ＣＲＣは、整形データのＣＲＣである。最終ＣＲＣの長さは４バイトである。ここで、ＭＰ２４０は、連結データ長以上で最も小さい４バイトの倍数を整形データ長として算出し、整形データ長から連結データ長を減じた値を最終ＰＡＤ長として算出する。更にＭＰ２４０は、最終ＰＡＤ長が０でない場合、最終ＰＡＤ長のＡＬＬゼロデータである最終ＰＡＤを生成する。
【００３２】
図４は、マルチトラックリード処理を模式的に示す。
【００３３】
この図は、ホストコンピュータ４００と、ホストチャネル制御ＬＳＩ５１０と、中間バッファ５３０と、複数のＤＭＡコントローラ５２１と、ＭＰ２４０と、データキャッシュ２３０との間のデータの流れを示す。ここでのマルチトラックリード要求は、ストレージ装置１００に格納された三つのトラックであるＴ（０）、Ｔ（１）、Ｔ（２）を指定する。また、ＤＭＡ用ＬＳＩ５２０は、三つのＤＭＡコントローラ５２１であるＸ（０）、Ｘ（１）、Ｘ（２）を有する。ここで、Ｔ（０）、Ｔ（１）、Ｔ（２）は、データキャッシュ２３０に格納されている状態を示す。Ｔ（０）、Ｔ（１）、Ｔ（２）の何れかがキャッシュミスと判定された場合、ディスクアダプタ２５０は、キャッシュミスと判定されたトラックをＨＤＤ３００から読み出し、データキャッシュ２３０へ書き込む。
【００３４】
まず、ホストコンピュータ４００は、マルチトラックリード要求をホストチャネル制御ＬＳＩ５１０へ発行する（Ｓ１１０）。マルチトラックリード要求を受けたホストチャネル制御ＬＳＩ５１０は、そのマルチトラックリード要求をＭＰ２４０へ送る（Ｓ１２０）。
【００３５】
マルチトラックリード要求を受けたＭＰ２４０は、そのマルチトラックリード要求に基づいて、複数のトラックのデータ転送を並列に行うために、Ｔ（０）のデータ転送をＸ（０）に割り当て、Ｔ（１）のデータ転送をＸ（１）に割り当て、Ｔ（２）のデータ転送をＸ（２）に割り当てる。その後、ＭＰ２４０は、ＣＣＷ（channel command word）により、Ｔ（０）を指定する転送起動要求をＸ（０）へ送り（Ｓ１３０）、Ｔ（１）を指定する転送起動要求をＸ（１）へ送り（Ｓ１４０）、Ｔ（２）を指定する転送起動要求をＸ（２）へ送る（Ｓ１５０）。
【００３６】
転送起動要求を受けたＸ（０）は、Ｔ（０）のＤＭＡ処理であるＤＭＡ（０）を起動する（Ｓ１６０）。ＤＭＡ（０）により、Ｘ（０）は、データキャッシュ２３０内のＴ（０）を読み出し、Ｔ（０）に基づいてＣＲＣ演算を行うと共に、Ｔ（０）を中間バッファ５３０へ転送する。転送起動要求を受けたＸ（１）は、Ｔ（１）のＤＭＡ処理であるＤＭＡ（１）を起動する（Ｓ１７０）。ＤＭＡ（１）により、Ｘ（１）は、データキャッシュ２３０内のＴ（１）を読み出し、Ｔ（１）に基づいてＣＲＣ演算を行うと共に、Ｔ（１）を中間バッファ５３０へ転送する。転送起動要求を受けたＸ（２）は、Ｔ（２）のＤＭＡ処理であるＤＭＡ（２）を起動する（Ｓ１８０）。ＤＭＡ（２）により、Ｘ（２）は、データキャッシュ２３０内のＴ（２）を読み出し、Ｔ（２）に基づいてＣＲＣ演算を行うと共に、Ｔ（２）を中間バッファ５３０へ転送する。
【００３７】
ＤＭＡ（０）が完了すると、Ｘ（０）は、ＤＭＡ（０）の結果を示す転送完了報告をＭＰ２４０へ送る（Ｓ１９０）。ＤＭＡ（１）が完了すると、Ｘ（１）は、ＤＭＡ（１）の結果を示す転送完了報告をＭＰ２４０へ送る（Ｓ２００）。ＤＭＡ（２）が完了すると、Ｘ（２）は、ＤＭＡ（２）の結果を示す転送完了報告をＭＰ２４０へ送る（Ｓ２１０）。
【００３８】
Ｘ（０）、Ｘ（１）、Ｘ（２）から転送完了報告を受けたＭＰ２４０は、転送完了報告に基づいて最終ＰＡＤ及び最終ＣＲＣを算出する最終ＣＲＣ処理を行う（Ｓ２２０）。その後、ＭＰ２４０は、最終ＰＡＤ及び最終ＣＲＣを中間バッファ５３０へ書き込み（Ｓ２３０）、応答データをホストコンピュータ４００へ転送することを指示するデータ転送開始指示をホストチャネル制御ＬＳＩ５１０へ送る（Ｓ２４０）。
【００３９】
データ転送開始指示を受けたホストチャネル制御ＬＳＩ５１０は、中間バッファ５３０からＴ（０）、Ｔ（１）、Ｔ（２）、最終ＰＡＤ、最終ＣＲＣを読み出し、１バイト単位でアドレスオフセットを与えることにより、Ｔ（０）、Ｔ（１）、Ｔ（２）、最終ＰＡＤ、最終ＣＲＣを連結し、応答データとして内部バッファ５１２へ格納する（Ｓ２５０）。その後、ホストチャネル制御ＬＳＩ５１０は、応答データをホストコンピュータ４００へ送信する（Ｓ２６０）。応答データの転送が完了すると、ホストチャネル制御ＬＳＩ５１０は、マルチトラックリード要求に対するステータス応答をホストコンピュータ４００へ送信する（Ｓ２７０）。
【００４０】
以上がマルチトラックリード処理の一例である。この処理によれば、ＭＰ２４０が複数のＤＭＡコントローラ５２１にリード対象の複数のトラックを夫々割り当てることにより、複数のＤＭＡコントローラ５２１が並列に複数のＤＭＡ処理を行うことができる。また、ＭＰ２４０が、複数のＤＭＡコントローラ５２１による処理結果に基づいて演算を行うことにより、複数のトラックを順に連結したデータのＣＲＣを算出することができる。
【００４１】
なお、中間バッファ５３０及び内部バッファ５１２の何れか一つが用いられても良い。例えば、ＤＭＡコントローラ５２１は、データキャッシュ２３０内のデータを内部バッファ５１２へ転送しても良い。また、通信制御部５１１は、中間バッファ５３０内のデータをホストコンピュータ４００へ転送しても良い。
【００４２】
以下、前述のＳ１３０〜Ｓ２１０におけるＤＭＡ処理の詳細について説明する。
【００４３】
図５は、ＤＭＡ処理を示す。
【００４４】
転送起動要求は、トラック長（転送長）と、データキャッシュ２３０内のトラックのアドレスである送信元アドレスと、中間バッファ５３０内の送信先のアドレスである送信先アドレスと、ＣＲＣの初期値とを含む。転送起動要求は、トラックのＣＲＣの生成を行うか否かを示す情報を含んでも良い。
【００４５】
ＭＰ２４０は、マルチトラックリード要求の先頭のトラックの転送起動要求におけるＣＲＣの初期値として０ｘＦＦＦＦＦＦＦＦを指定し、先頭以外のトラックの転送起動要求におけるＣＲＣの初期値として０ｘ００００００００を指定する。この例では、Ｘ（０）への転送起動要求におけるＣＲＣの初期値は、０ｘＦＦＦＦＦＦＦＦであり、Ｘ（１）及びＸ（２）の夫々への転送起動要求におけるＣＲＣの初期値は、０ｘ００００００００である。このように、各ＤＭＡコントローラ５２１への転送起動要求は、予め定められた値をＣＲＣの初期値として指定するため、他のＤＭＡコントローラ５２１によるＣＲＣ演算の結果を含む必要がない。
【００４６】
ＤＭＡコントローラ５２１は、転送起動要求からトラック長を取得し、トラック長を４バイトで除した剰余を端数データ長として算出し、４バイトから端数データ長を減じた値をトラックＰＡＤ長として算出し、トラック長から端数データ長を減じた値を短縮データ長として算出し、トラック長にトラックＰＡＤ長を加えた値を延長データ長として算出する。ＤＭＡコントローラ５２１は、トラックのうち先頭から短縮データ長までのデータを短縮データとして抽出し、トラックのうち短縮データの後に続く端数データ長のデータを端数データとして抽出する。ＤＭＡコントローラ５２１は更に、トラックの後にトラックＰＡＤ長のＡＬＬゼロデータであるトラックＰＡＤを連結して延長データとする。言い換えれば、短縮データ長は、トラック長以下で最も大きい４バイトの倍数であり、延長データ長は、トラック長以上で最も小さい４バイトの倍数である。なお、トラック長が４の倍数である場合、端数データ長及びトラックＰＡＤ長は０になり、短縮データ長及び延長データ長はトラック長に等しくなる。
【００４７】
ＤＭＡコントローラ５２１は、データキャッシュ２３０の送信元アドレスからトラックを読み出し、短縮データのＣＲＣである短縮データＣＲＣを算出し、延長データを中間バッファ５３０の送信先アドレスへ書き込む。
【００４８】
ＤＭＡコントローラ５２１は、延長データの書き込みが完了すると、転送起動要求に対する転送完了報告をＭＰ２４０へ送る。転送完了報告は、短縮データＣＲＣと、端数データとを含む。
【００４９】
前述のマルチトラックリード要求処理の例において、Ｘ（０）は、Ｔ（０）を、短縮データであるＴ（０）＿ｔと、端数データであるＴ（０）＿ｄａｔとに分割し、０ｘＦＦＦＦＦＦＦＦを初期値とし入力Ｔ（０）＿ｔを入力として短縮データＣＲＣであるＴ（０）＿ｃｒｃを算出する。また、Ｘ（１）は、Ｔ（１）を、短縮データであるＴ（１）＿ｔと、端数データであるＴ（１）＿ｄａｔとに分割し、０ｘ００００００００を初期値としＴ（１）＿ｔを入力として短縮データＣＲＣであるＴ（１）＿ｃｒｃを算出する。また、Ｘ（２）は、Ｔ（２）を、短縮データであるＴ（２）＿ｔと、端数データであるＴ（２）＿ｄａｔとに分割し、０ｘ００００００００を初期値としＴ（２）＿ｔを入力として短縮データＣＲＣであるＴ（２）＿ｃｒｃを算出する。
【００５０】
以上がＤＭＡ処理である。この処理によれば、各ＤＭＡコントローラ５２１は、ＭＰ２４０により指定される値をＣＲＣの初期値として用いるため、別のＤＭＡコントローラ５２１により算出されたＣＲＣを引き継ぐ必要がない。これにより、複数のＤＭＡコントローラ５２１は、並列にＣＲＣ演算を行うことができる。また、ＤＭＡコントローラ５２１は、４バイト未満の端数データをＭＰ２４０へ送り、端数データのＣＲＣ演算を行わないことから、４バイト単位でＣＲＣ演算を行うＤＭＡ回路を用いることができる。これにより、ＤＭＡコントローラ５２１の回路規模の増大を防ぐことができる。
【００５１】
以下、前述のＳ２２０における最終ＣＲＣ処理の詳細について説明する。
【００５２】
図６は、最終ＣＲＣ処理を示す。ここで、トラックの番号をｉとし、最終トラックの番号をｎとし、Ｔ（ｉ）の短縮データＣＲＣをＴ（ｉ）＿ｃｒｃとし、Ｔ（ｉ）の端数データをＴ（ｉ）＿ｄａｔとし、Ｔ（ｉ）の長さ［バイト］をＴ（ｉ）＿ｌｅｎとし、一時的なＣＲＣをｔｅｍｐ＿ｃｒｃとし、一時的なデータ長をｔｅｍｐ＿ｌｅｎとし、最終ＰＡＤの長さ［バイト］をｐａｄ＿ｌｅｎとする。ＭＰ２４０は、ＤＭＡコントローラ５２１からの転送完了報告から、Ｔ（ｉ）＿ｃｒｃ及びＴ（ｉ）＿ｄａｔを取得する。
【００５３】
まず、ＭＰ２４０は、変数を初期化する（Ｓ３１０）。ここでＭＰ２４０は、ｉに０を代入し、ｔｅｍｐ＿ｃｒｃにＴ（０）＿ｃｒｃを代入する。
【００５４】
その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃを初期値とし、Ｔ（ｉ）＿ｄａｔを入力として、ＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する（Ｓ３２０）。ＣＲＣ演算の関数をＦｄとすると、この処理は次式で表される。
【００５５】
ｔｅｍｐ＿ｃｒｃ  ＝  Ｆｄ（ｔｅｍｐ＿ｃｒｃ，Ｔ（ｉ）＿ｄａｔ）
【００５６】
これまでの処理により、ｔｅｍｐ＿ｃｒｃは、Ｔ（ｉ）までのデータのＣＲＣになる。
【００５７】
その後、ＭＰ２４０は、最終トラックまでＣＲＣ演算を行ったか否かを判定する（Ｓ３３０）。即ち、ＭＰ２４０は、ｉ＝ｎであるか否かを判定する。
【００５８】
Ｓ３３０においてｉ＝ｎでない場合（Ｓ３３０：Ｎ）、ＭＰ２４０は、ｉに１を加算する（Ｓ３４０）。その後、ＭＰ２４０は、Ｔ（ｉ）＿ｌｅｎを超えない４の倍数の最大値を、ｔｅｍｐ＿ｌｅｎに代入する（Ｓ３５０）。この処理は次式で表される。
【００５９】
ｔｅｍｐ＿ｌｅｎ  ＝  Ｔ（ｉ）＿ｌｅｎ  ＆  ０ｘＦＦＦＦＦＦＦＣ
【００６０】
その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃを初期値とし、ｔｅｍｐ＿ｌｅｎの長さのＡＬＬゼロデータを入力として、ＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する（Ｓ３６０）。或る初期値と或る長さのＡＬＬゼロデータの入力とを用いてＣＲＣを算出する関数をＦｚとすると、この処理は次式で表される。
【００６１】
ｔｅｍｐ＿ｃｒｃ  ＝  Ｆｚ（ｔｅｍｐ＿ｃｒｃ，ｔｅｍｐ＿ｌｅｎ）
【００６２】
その後、ＭＰ２４０は、ビット単位でｔｅｍｐ＿ｃｒｃとＴ（ｉ）＿ｃｒｃのＸＯＲ（排他的論理和）演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出し（Ｓ３７０）、処理をＳ３２０へ移行させる。ＸＯＲ演算子を「ｘｏｒ」とすると、この処理は次式で表される。
【００６３】
ｔｅｍｐ＿ｃｒｃ  ＝  ｔｅｍｐ＿ｃｒｃ  ｘｏｒ  Ｔ（ｉ）＿ｃｒｃ
【００６４】
これまでの処理により、ｔｅｍｐ＿ｃｒｃは、Ｔ（ｉ）＿ｔまでのデータのＣＲＣになる。
【００６５】
Ｓ３３０においてｉ＝ｎである場合（Ｓ３３０：Ｙ）、ＭＰ２４０は、初期値をｔｅｍｐ＿ｃｒｃとし、ｐａｄ＿ｌｅｎの長さのＡＬＬゼロデータを入力として、ＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する（Ｓ３８０）。前述のＦｚを用いると、この処理は次式で表される。
【００６６】
ｔｅｍｐ＿ｃｒｃ  ＝  Ｆｚ（ｔｅｍｐ＿ｃｒｃ，ｐａｄ＿ｌｅｎ）
【００６７】
これまでの処理により、ｔｅｍｐ＿ｃｒｃは、整形データのＣＲＣになる。
【００６８】
その後、ＭＰ２４０は、ＦＩＣＯＮ−ＨＰＦの仕様に従い、ｔｅｍｐ＿ｃｒｃのビット反転を行うことにより、最終ＣＲＣを算出し（Ｓ３９０）、このフローを終了する。前述のｘｏｒを用いると、この処理は次式で表される。
【００６９】
ｔｅｍｐ＿ｃｒｃ  ＝  ｔｅｍｐ＿ｃｒｃ  ｘｏｒ  ０ｘＦＦＦＦＦＦＦＦ
【００７０】
以上がＭＰ２４０によるＣＲＣ演算処理である。この処理によれば、ＭＰ２４０は、ＤＭＡコントローラ５２１により算出された各トラックの短縮データＣＲＣに基づいて、整形データの最終ＣＲＣを算出することができる。また、ＭＰ２４０が端数データのＣＲＣを算出することにより、トラック長を１バイト単位で指定することができると共に、ＤＭＡコントローラ５２１は４バイト単位でＣＲＣ演算を行うことができ、ＤＭＡコントローラ５２１の回路規模の増大を防ぐことができる。
【００７１】
また、ＤＭＡコントローラ５２１が連結データ内の特定のデータから第１のＣＲＣを算出した場合、ＭＰ２４０が連結データのうち特定のデータより前のデータのＣＲＣを初期値とし、特定のデータの長さのＡＬＬゼロデータから第２のＣＲＣを算出し、第１のＣＲＣと第２のＣＲＣのＸＯＲ演算を行うことにより、連結データのうち特定のデータまでのデータのＣＲＣを算出することができる。これにより、複数のＤＭＡコントローラ５２１による複数のデータのＣＲＣ演算結果を用いて、ＭＰ２４０が連結された複数のデータのＣＲＣを算出することができる。従って、或るＤＭＡコントローラ５２１によるＣＲＣ演算の結果を別のＤＭＡコントローラ５２１が引き継ぐ必要がない。
【００７２】
また、ＭＰ２４０が、ＤＭＡコントローラ５２１から端数データを取得し、端数データのＣＲＣ演算を行うことにより、ＤＭＡコントローラ５２１は、４バイト単位でＣＲＣ演算を行うことができる。
【００７３】
なお、ＭＰ２４０は、全てのＤＭＡ処理におけるＣＲＣの初期値を０ｘ００００００００と指定しても良いし、全てのＤＭＡ処理におけるＣＲＣの初期値を０ｘ００００００００に固定しても良い。この場合、ＭＰ２４０が、最終ＣＲＣ処理におけるＣＲＣの初期値を０ｘＦＦＦＦＦＦＦＦとし、先頭のトラックの短縮データ長のＡＬＬゼロデータを入力として、ＣＲＣを算出し、そのＣＲＣと短縮データＣＲＣとのＸＯＲ演算を行うことにより、初期値を０ｘＦＦＦＦＦＦＦＦとして算出される短縮データＣＲＣに等しい結果を得ることができる。
【００７４】
以下、ＣＲＣ最終処理の具体例について説明する。
【００７５】
図３の応答データにおいて、Ｔ（０）のデータ長を６７バイトとし、Ｔ（１）のデータ長を１８バイトとし、Ｔ（２）のデータ長を３３バイトとする。従って、連結データ長は、１１８バイトであり、最終ＰＡＤ長は、２バイトであり、整形データ長は、４バイトの倍数である１２０バイトである。
【００７６】
Ｘ（０）は、６７バイトのＴ（０）を、４バイトの倍数である６４バイトのＴ（０）＿ｔと残りの３バイトのＴ（０）＿ｄａｔに分割する。その後、Ｘ（０）は、０ｘＦＦＦＦＦＦＦＦを初期値とし、Ｔ（０）＿ｔを入力としてＣＲＣ演算を行うことにより、Ｔ（０）＿ｃｒｃを算出する。
【００７７】
Ｘ（１）は、１８バイトのＴ（１）を、４バイトの倍数である１６バイトのＴ（１）＿ｔと残りの２バイトのＴ（１）＿ｄａｔに分割する。その後、Ｘ（１）は、０ｘ００００００００を初期値とし、Ｔ（１）＿ｔを入力としてＣＲＣ演算を行うことにより、Ｔ（１）＿ｃｒｃを算出する。
【００７８】
Ｘ（２）は、３３バイトのＴ（２）を、４バイトの倍数である３２バイトのＴ（２）＿ｔと残りの１バイトのＴ（２）＿ｄａｔに分割する。その後、Ｘ（２）は、０ｘ００００００００を初期値とし、Ｔ（２）＿ｔを入力としてＣＲＣ演算を行うことにより、Ｔ（２）＿ｃｒｃを算出する。
【００７９】
図７は、ＣＲＣ最終処理の具体例を示す。ＭＰ２４０は、Ｘ（０）から得られたＴ（０）＿ｃｒｃを初期値とし、Ｘ（０）から得られたＴ（０）＿ｄａｔを入力としてＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。このｔｅｍｐ＿ｃｒｃは、Ｔ（０）までのデータのＣＲＣである。
【００８０】
その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃを初期値とし、Ｔ（１）の短縮データの長さに等しい１６バイトのＡＬＬゼロデータを入力としてＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃと、Ｘ（１）から得られたＴ（１）＿ｃｒｃとのＸＯＲ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃを初期値とし、Ｘ（１）から得られたＴ（１）＿ｄａｔを入力としてＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。このｔｅｍｐ＿ｃｒｃは、Ｔ（１）までのデータのＣＲＣである。
【００８１】
その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃを初期値とし、Ｔ（２）の短縮データの長さに等しい３２バイトのＡＬＬゼロデータを入力としてＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃと、Ｘ（２）から得られたＴ（２）＿ｃｒｃとのＸＯＲ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃを初期値とし、Ｘ（２）から得られたＴ（２）＿ｄａｔを入力としてＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。このｔｅｍｐ＿ｃｒｃは、Ｔ（２）までのデータのＣＲＣである。
【００８２】
その後、ＭＰ２４０は、初期値をｔｅｍｐ＿ｃｒｃとし、最終ＰＡＤ長である２バイトのＡＬＬゼロデータを入力として、ＣＲＣ演算を行うことにより、新たなｔｅｍｐ＿ｃｒｃを算出する。このｔｅｍｐ＿ｃｒｃは、最終ＰＡＤまでのデータのＣＲＣである。
【００８３】
その後、ＭＰ２４０は、ｔｅｍｐ＿ｃｒｃのビット反転を行うことにより、最終ＣＲＣを算出する。
【００８４】
以上が、ＣＲＣ最終処理の具体例である。
【００８５】
以下、前述のＳ３６０及びＳ３８０におけるＦｚの演算方法の一例について説明する。
【００８６】
ＡＬＬゼロデータのＣＲＣ演算を高速化するために、共用メモリは、複数のＬＵＴ（Lookup Table）を格納する。ＭＰ２４０は、ＣＲＣの初期値や入力のＡＬＬゼロデータ長に応じてＬＵＴを参照することにより、Ｆｚの演算を行う。演算方法やＬＵＴのサイズ及び数は、ストレージ装置１００に要求される性能、想定されるＡＬＬゼロデータ長、共用メモリのサイズ等により決定される。
【００８７】
ここでは、初期値を１バイトとし、その値をＢｉで表す。複数のＬＵＴの夫々は、全てのＢｉに対するＣＲＣを格納する。また、用意するＬＵＴのＡＬＬゼロデータ長を特定の長さに限定する。特定の長さをＬｔとすると、Ｌｔは例えば、１、２、３、４、１６、２５６、４０９６である。演算を高速化するために、更に多くの種類のＬｔを用意しても良い。
【００８８】
Ｌｔが４未満である場合、Ｌｔ毎のＬＵＴが用意される。このＬＵＴから得られるＣＲＣを、ＬＵＴ［Ｌｔ］［Ｂｉ］で表す。
【００８９】
Ｌｔが４以上である場合、４バイトの初期値の中のＢｉのバイト位置をＰｂで表し、ＬｔとＰｂの組み合わせ毎のＬＵＴが用意される。このＬＵＴから得られるＣＲＣを、ＬＵＴ［Ｌｔ］［Ｐｂ］［Ｂｉ］で表す。
【００９０】
ＭＰ２４０は、ＡＬＬゼロデータ長をＬｔの組み合わせに分解し、分解された各Ｌｔに対応するＣＲＣ演算を行うことにより、Ｆｚの演算を行う。以下、Ｌｔに応じたＡＬＬゼロデータのＣＲＣ演算であるＬＵＴ演算処理を示す。ここで、４バイトの初期値であるｔｅｍｐ＿ｃｒｃの各バイトをＢ０、Ｂ１、Ｂ２、Ｂ３で表し、左ビットシフトの演算子を「＜＜」で表す。
【００９１】
Ｌｔが１バイトである場合のＬＵＴ演算処理は次式で表される。
【００９２】
ｔｅｍｐ＿ｃｒｃ  ＝  
ＬＵＴ［１］［Ｂ０］  ＸＯＲ  （Ｂ１＜＜８）
ＸＯＲ  （Ｂ２＜＜１６）  ＸＯＲ  （Ｂ３＜＜２４）
【００９３】
Ｌｔが２バイトである場合のＬＵＴ演算処理は次式で表される。
【００９４】
ｔｅｍｐ＿ｃｒｃ  ＝  
ＬＵＴ［２］［Ｂ０］  ＸＯＲ  ＬＵＴ［１］［Ｂ１］
ＸＯＲ  （Ｂ２＜＜１６）  ＸＯＲ  （Ｂ３＜＜２４）
【００９５】
Ｌｔが３バイトである場合のＬＵＴ演算処理は次式で表される。
【００９６】
ｔｅｍｐ＿ｃｒｃ  ＝  
ＬＵＴ［３］［Ｂ０］  ＸＯＲ  ＬＵＴ［２］［Ｂ１］
ＸＯＲ  ＬＵＴ［１］［Ｂ２］  ＸＯＲ  （Ｂ３＜＜２４）
【００９７】
Ｌｔが４バイト以上である場合のＬＵＴ演算処理は次式で表される。
【００９８】
ｔｅｍｐ＿ｃｒｃ  ＝  
ＬＵＴ［Ｌｔ］［０］［Ｂ０］  ＸＯＲ  ＬＵＴ［Ｌｔ］［１］［Ｂ１］
ＸＯＲ  ＬＵＴ［Ｌｔ］［２］［Ｂ２］  ＸＯＲ  ＬＵＴ［Ｌｔ］［３］［Ｂ３］
【００９９】
例えば、ＡＬＬゼロデータ長が８４５８バイトである場合、ＭＰ２４０は、ＡＬＬゼロデータ長を４０９６＋４０９６＋２５６＋４＋４＋２のＬｔに分解し、各Ｌｔに対応するＬＵＴ演算処理を行う。
【０１００】
このような演算方法によれば、ＭＰ２４０によるＡＬＬゼロデータのＣＲＣ演算を高速化することができる。また、ＡＬＬゼロデータ長を特定の長さの組み合わせに分解することにより、ＬＵＴの数を削減することができる。
【０１０１】
なお、ＭＰ２４０は、ＬＵＴを用いて端数データのＣＲＣを算出しても良い。このＬＵＴは例えば、初期値を０ｘ００００００００とし、１バイトの入力のデータ毎のＣＲＣ演算結果を格納する。この場合、ＭＰ２４０は、ＬＵＴから得られたＣＲＣを、端数データの長さに応じてビットシフトし、それ以前のＣＲＣとのＸＯＲ演算を行う。
【０１０２】
以下、ＤＭＡコントローラ５２１の並列動作について説明する。
【０１０３】
図８は、ＣＲＣ演算に関するＤＭＡコントローラ５２１とＭＰ２４０の動作を示す。
【０１０４】
このシーケンス図は、ＭＰ２４０と、ＤＭＡコントローラ５２１であるＸ（０）、Ｘ（１）、Ｘ（２）との動作を示す。前述のＳ１３０、Ｓ１４０、Ｓ１５０において、ＭＰ２４０は、Ｘ（０）、Ｘ（１）、Ｘ（２）へ転送起動要求を夫々送る。転送起動要求を受けたＸ（０）、Ｘ（１）、Ｘ（２）は、ＤＭＡ（０）、ＤＭＡ（１）、ＤＭＡ（２）を夫々起動する。これにより、Ｘ（０）、Ｘ（１）、Ｘ（２）は、並列にＤＭＡ処理を行う。その後、前述のＳ１９０、Ｓ２００、Ｓ２１０において、データ転送を完了したＸ（０）、Ｘ（１）、Ｘ（２）は、ＣＲＣ演算結果を含む転送完了報告をＭＰ２４０へ送る。その後、前述のＳ２２０において、ＭＰ２４０は、Ｘ（０）、Ｘ（１）、Ｘ（２）からのＣＲＣ演算結果を順に用いて、最終ＣＲＣ処理を行うことにより最終ＣＲＣを算出する。
【０１０５】
一方、本発明を適用しないストレージ装置において、或るＤＭＡコントローラが他のＤＭＡコントローラによるＣＲＣ演算の結果を引き継いてＣＲＣ演算を行う場合、それらのＤＭＡコントローラは、並列にＣＲＣ演算を行うことができない。
【０１０６】
本実施例によれば、複数のＤＭＡコントローラ５２１が並列に複数のトラックのＣＲＣ演算を行うことにより、並列に複数のトラックの転送を行うことができる。これにより、マルチトラックリード処理の性能を向上させることができる。
【０１０７】
なお、各トラックの長さが４バイトの倍数であっても良い。この場合、ＭＰ２４０及びＤＭＡコントローラ５２１は、端数データ、トラックＰＡＤ、最終ＰＡＤ等を用いない。
【０１０８】
以上の実施例で説明された技術は、次のように表現することができる。
（表現１）
ホストコンピュータに接続されるチャネル制御部と、
前記チャネル制御部に接続される記憶部と、
前記チャネル制御部及び前記記憶部に接続されるプロセッサと、
を備え、
前記チャネル制御部は、複数の演算部を有し、
前記プロセッサは、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
前記複数の演算部は、前記記憶部から前記複数の要素データを夫々読み出し、前記複数の要素データに基づいて複数の保証コードである複数の部分コードを夫々算出し、前記プロセッサへ前記複数の部分コードを夫々送り、
前記プロセッサは、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出する、
ストレージ装置。
（表現２）
前記複数の演算部は並列に、前記複数の部分コードを夫々算出する、
表現１に記載のストレージ装置。
（表現３）
前記保証コードは、所定長を有するＣＲＣである、
表現２に記載のストレージ装置。
（表現４）
前記複数の演算部の夫々は、前記プロセッサにより指定された要素データから、前記所定長の倍数の長さを有するデータである部分データを抽出し、所定コードを部分コードの初期値として、前記部分データを入力として、保証コード演算を行うことにより前記部分コードを算出する、
表現３に記載のストレージ装置。
（表現５）
前記プロセッサは、前記系列データの内の前記部分データより前のデータの保証コードを保証コードの初期値として、前記部分データに等しい長さのゼロを入力として、保証コード演算を行うことにより、一時的な保証コードを算出し、前記一時的な保証コードと前記部分コードのＸＯＲ演算により、前記系列データの内の前記部分データまでのデータの保証コードを算出する、
表現４に記載のストレージ装置。
（表現６）
前記複数の演算部の夫々は、前記指定された要素データ内に前記部分データの残りのデータである端数データがある場合、前記端数データを前記プロセッサへ送る、
表現５に記載のストレージ装置。
（表現７）
前記プロセッサは、前記系列データの内の前記端数データより前のデータの保証コードを保証コードの初期値として、前記端数データを入力として、保証コード演算を行うことにより、前記系列データの内の前記端数データまでのデータの保証コードを算出する、
表現６に記載のストレージ装置。
（表現８）
前記プロセッサは、前記所定コードを前記複数の演算部の夫々へ送る、
表現７に記載のストレージ装置。
（表現９）
前記複数の要素データの中の先頭以外の要素データが指定された演算部に対応する所定コードは、前記所定長のゼロである、
表現８に記載のストレージ装置。
（表現１０）
前記チャネル制御部は更に、前記複数の演算部に接続されたバッファと、前記バッファに接続された通信制御部とを有し、
前記複数の演算部は、前記複数の要素データを前記バッファへ夫々書き込み、
前記プロセッサは、前記系列コードを前記バッファへ書き込み、
前記通信制御部は、前記バッファ内の前記系列データ及び前記系列コードを連結して前記ホストコンピュータへ送信する、
表現９に記載のストレージ装置。
（表現１１）
ホストコンピュータに接続されるチャネル制御部と、前記チャネル制御部に接続される記憶部と、前記チャネル制御部及び前記記憶部に接続されるプロセッサとを有し、前記チャネル制御部が、複数の演算部を有するストレージ装置を、制御するためのストレージ装置制御方法であって、
前記プロセッサが、複数の要素データを読み出す要求を前記ホストコンピュータから受信した場合、前記複数の演算部に対して前記複数の要素データを夫々指定し、
前記複数の演算部が、前記記憶部から前記複数の要素データを夫々読み出し、前記複数の要素データに基づいて複数の保証コードである複数の部分コードを夫々算出し、前記プロセッサへ前記複数の部分コードを夫々送り、
前記プロセッサが、前記複数の部分コードに基づいて、連結された前記複数の要素データを含む系列データの保証コードである系列コードを算出する、
ことを備えるストレージ装置制御方法。
【０１０９】
以上の表現における用語について説明する。チャネル制御部は、チャネルアダプタ２２０等に対応する。記憶部は、データキャッシュ２３０やＨＤＤ３００等に対応する。プロセッサは、ＭＰ２４０等に対応する。演算部は、ＤＭＡコントローラ５２１等に対応する。バッファは、中間バッファ５３０や内部バッファ５１２等に対応する。通信制御部は、通信制御部５１１等に対応する。要素データは、トラック等に対応する。部分データは、短縮データ等に対応する。部分コードは、短縮データＣＲＣ等に対応する。系列データは、整形データや連結データ等に対応する。系列コードは、最終ＣＲＣ等に対応する。所定コードは、０ｘＦＦＦＦＦＦＦＦや０ｘ００００００００等に対応する。
【符号の説明】
【０１１０】
１００：ストレージ装置、  ２００：ストレージコントローラ、  ２１０：スイッチ、  ２２０：チャネルアダプタ、  ２３０：データキャッシュ、  ２５０：ディスクアダプタ、  ４００：ホストコンピュータ、  ５１０：ホストチャネル制御ＬＳＩ、  ５１１：通信制御部、  ５１２：内部バッファ、  ５２０：ＤＭＡ用ＬＳＩ、  ５２１：ＤＭＡコントローラ、  ５３０：中間バッファ
【図１】
0006046750.tif 000002
【図２】
0006046750.tif 000003
【図３】
0006046750.tif 000004
【図４】
0006046750.tif 000005
【図５】
0006046750.tif 000006
【図６】
0006046750.tif 000007
【図７】
0006046750.tif 000008
【図８】
0006046750.tif 000009