(57)【要約】【課題】ホストコンピュータからキャッシュメモリへのライトデータの転送を効率的におこない、処理時間のロスを抑制するデータ中継集積回路、データ中継装置およびデータ中継方法を提供する。【解決手段】本発明は、一つの書き込みデータが分割されたデータ（１）〜（３）がホストコンピュータ装置からプロトコル・DMAチップへ順次送信されるとともに、プロトコル・DMAチップにおいてすべて揃う前に、プロトコル・DMAチップは該データ（１）〜（３）を受信する都度、そのデータを直ちにキャッシュメモリへ送信する。すなわち、同一のCCWの書き込みデータのSB2-CRCに基づくデータ検証が終了する前にSNE（Send Engine）を起動し、バッファからキャッシュメモリへ書き込みデータの転送をおこなう。【選択図】        図１
2008225558.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継装置内において、前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積して該書き込みデータに付加されている第１の検証用データに基づいて検証し、前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与し、該データ中継装置の制御装置からの送信処理指示に基づいて該書き込みデータを前記一時記憶部へ送信する処理を実行する送信部を有するデータ中継集積回路であって、
前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とするデータ中継集積回路。
【請求項２】
前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータのすべての前記所定単位を前記一時記憶部へ送信したのちに、前記蓄積領域において前記第１の検証用データに基づいて該書き込みデータを検証することを特徴とする請求項１に記載のデータ中継集積回路。
【請求項３】
前記送信部は、
前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータの該所定単位を、該書き込みデータに一対一に対応する識別子に基づいて管理し、
前記第２の検証用データを、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに算出する算出部と、
前記算出部によって算出された前記第２の検証用データを前記識別子ごとに記憶する記憶部と
をさらに有し、
一の前記識別子に対応する前記書き込みデータの前記所定単位に対して前記第２の検証用データを付与するタイミングであるとされるときに、前記記憶部に記憶される該識別子に対応する該第２の検証用データを該所定単位へ付加することを特徴とする請求項１または２に記載のデータ中継集積回路。
【請求項４】
前記送信部が、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記第２の検証用データを算出するとともに、書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信する処理を一の前記送信処理指示に基づいて実行することを特徴とする請求項３に記載のデータ中継集積回路。
【請求項５】
前記第２の検証用データには、少なくとも一つの前記所定単位からなるフィールドに対して付与されるＦＣＣ（Field Check Code）と、所定個の該フィールドからなる所定データ長のブロックに対して付与されるＢＣＣ（Block Check Code）とがあり、
前記算出部は、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記ＦＣＣおよび前記ＢＣＣを算出することを特徴とする請求項３または４に記載のデータ中継集積回路。
【請求項６】
コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継装置であって、
前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積する蓄積部と、
前記蓄積部に蓄積される前記書き込みデータを該書き込みデータに付加されている第１の検証用データに基づいて検証する第１の検証部と、
前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与する付与部と、
当該データ中継装置の制御装置からの送信処理指示に基づいて前記書き込みデータを前記一時記憶部へ送信する送信部と
を有し、
前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とするデータ中継装置。
【請求項７】
前記送信部は、
前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータの該所定単位を、該書き込みデータに一対一に対応する識別子に基づいて管理し、
前記第２の検証用データを、前記書き込みデータが前記所定単位ごとに前記蓄積部に蓄積される都度、前記識別子ごとに算出する算出部と、
前記算出部によって算出された前記第２の検証用データを前記識別子ごとに記憶する記憶部と
をさらに有し、
一の前記識別子に対応する前記書き込みデータの前記所定単位に対して前記第２の検証用データを付与するタイミングであるとされるときに、前記記憶部に記憶される該識別子に対応する該第２の検証用データを該所定単位へ付加することを特徴とする請求項６に記載のデータ中継装置。
【請求項８】
コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継方法であって、
前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積して該書き込みデータに付加されている第１の検証用データに基づいて検証し、前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与し、該データ中継装置の制御装置からの送信処理指示に基づいて該書き込みデータを前記一時記憶部へ送信する処理を実行する送信工程を含み、
前記送信工程は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とするデータ中継方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継装置内において、コンピュータ装置から記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積して該書き込みデータに付加されている第１の検証用データに基づいて検証し、書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与し、該データ中継装置の制御装置からの送信処理指示に基づいて該書き込みデータを一時記憶部へ送信する処理を実行する送信部を有するデータ中継集積回路、データ中継装置およびデータ中継方法に関し、特に、効率的処理をおこなってデータ中継の処理性能を向上させるデータ中継集積回路、データ中継装置およびデータ中継方法に関する。
【背景技術】
【０００２】
近年のコンピュータの処理能力の向上に伴って、コンピュータが利用するデータは肥大化の一途をたどっており、膨大なデータを記憶しておくためのストレージに関する検討が多く行われている。具体的には、例えばRAID（Redundant Array of Inexpensive Disks）と呼ばれ、複数のハードディスクドライブを組み合わせることにより、高速・大容量・高信頼性を実現するディスクシステムを構築する技術などが確立されている。
【０００３】
このRAIDなどのディスクシステムにおいては、データを記憶する複数のディスクを備えたディスクアレイ装置が上位装置であるホストコンピュータなどからコマンドを受け付け、データの書き込み（ライト）や読み出し（リード）が行われる。このとき、ホストコンピュータとディスクの間でやり取りされるデータは、ディスクアレイ装置内のキャッシュメモリにもキャッシュされ、以降の処理においては、キャッシュメモリからこのデータを読み出して高速化を図るのが一般的である。また、ホストコンピュータは、ディスクアレイ装置内のチャネルアダプタに接続しており、チャネルアダプタによって、ホストコンピュータとキャッシュメモリやディスクとの間でデータ転送が実行される。
【０００４】
チャネルアダプタは、内部にダイレクトメモリアクセス（Direct Memory Access、以下DMAと呼ぶ）によるデータ転送を制御するLSI（Large Scale Integration）などのDMAチップを備えており、DMAチップがCPU（Central Processing Unit）からのデータ転送の指示（ディスクリプタ）に従ってデータを転送する。すなわち、ディスクリプタを受け取ったＤＭＡチップは、ディスクリプタによって指定されるアドレスおよびデータ長のデータをキャッシュメモリなどとの間のバスを介して送受する。
【０００５】
ホストコンピュータからチャネルアダプタへ複数のフレームに分割されて転送されてきたライトデータは、チャネルアダプタ内のデータバッファにいったん格納される。このとき、分割されて転送されてきたライトデータは、連続するアドレスに格納されるとは限らず、大抵は不連続なアドレスに格納される。これは、転送されたタイミングで空きのある領域へライトデータが格納されるためである。
【０００６】
ここで、特許文献１および２に示されるように、ホストコンピュータからチャネルアダプタへ転送されてきた一連のライトデータには、チェックコードが付加されている。チャネルアダプタは、ライトデータがすべてそろったところでチェックコードとデータの整合性を確認する。これによりホストコンピュータからチャネルアダプタ内のデータバッファへのデータ転送でデータ化けが発生していないことを確認する。
【０００７】
そして、特許文献２に示されるように、チャネルアダプタ内のデータバッファ中に分割して格納されたライトデータは、すべてのデータが揃い、データの整合性が確認されてからキャッシュメモリのアドレス領域に転送される。この際ライトデータには、該ライトデータに基づくCRC（Cyclic Redundancy Check）コードが付加されている。このCRCコードに基づいて、キャッシュメモリのアドレス領域に転送されたライトデータの整合性が保証される。
【０００８】
【特許文献１】特開２００６−４００１１号公報
【特許文献２】特開２００２−２３９６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記特許文献１および２に代表される従来技術では、ホストコンピュータからチャネルアダプタへ転送されるライトデータが全て揃わないとキャッシュメモリへデータ転送することができなかった。具体的には、分散するデータバッファ領域に格納されたライトデータをキャッシュメモリへ転送するには、分割されたライトデータが揃ったものごとにCRCコードに基づくデータ検証およびキャッシュメモリへの転送をおこなう処理の起動が必要である。このように、分割されたライトデータが揃わないと該ライトデータをキャッシュメモリへ転送できず、ライトデータが揃うまでの待ち時間が生じる。このため、ホストコンピュータからキャッシュメモリへのライトデータの転送が効率的におこなわれず、処理時間のロスを発生させていた。
【００１０】
本発明は、上記問題点（課題）を解消するためになされたものであって、ホストコンピュータからチャネルアダプタへ転送されるライトデータが分散するデータバッファ領域に格納された場合であっても、ホストコンピュータからキャッシュメモリへのライトデータの転送を効率的におこない、処理時間のロスを抑制するデータ中継集積回路、データ中継装置およびデータ中継方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した問題を解決し、目的を達成するため、本発明は、コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継装置内において、前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積して該書き込みデータに付加されている第１の検証用データに基づいて検証し、前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与し、該データ中継装置の制御装置からの送信処理指示に基づいて該書き込みデータを前記一時記憶部へ送信する処理を実行する送信部を有するデータ中継集積回路であって、前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とする。
【００１２】
また、本発明は、コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継装置であって、前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積する蓄積部と、前記蓄積部に蓄積される前記書き込みデータを該書き込みデータに付加されている第１の検証用データに基づいて検証する第１の検証部と、前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与する付与部と、当該データ中継装置の制御装置からの送信処理指示に基づいて前記書き込みデータを前記一時記憶部へ送信する送信部とを有し、前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とする。
【００１３】
また、本発明は、コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継方法であって、前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積して該書き込みデータに付加されている第１の検証用データに基づいて検証し、前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与し、該データ中継装置の制御装置からの送信処理指示に基づいて該書き込みデータを前記一時記憶部へ送信する処理を実行する送信工程を含み、前記送信工程は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とする。
【００１４】
これらの発明によれば、第１の検証用データに基づく検証を待つことなくデータを所定単位で一時記憶部へ順次送信するので、第１の検証用データに基づく検証の待ち時間を回避し、効率的処理をおこなってデータ中継の処理性能を向上させることができる。
【００１５】
また、本発明は、上記発明において、前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータのすべての前記所定単位を前記一時記憶部へ送信したのちに、前記蓄積領域において前記第１の検証用データに基づいて該書き込みデータを検証することを特徴とする。
【００１６】
また、本発明によれば、第１の検証用データに基づく検証と、データの所定単位での一時記憶部への送信を同時におこなうことが可能となるので、コンピュータ装置からの異なる書き込みデータを並行処理によって一時記憶部へ送信できる。
【００１７】
また、本発明は、上記発明において、前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータの該所定単位を、該書き込みデータに一対一に対応する識別子に基づいて管理し、前記第２の検証用データを、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに算出する算出部と、前記算出部によって算出された前記第２の検証用データを前記識別子ごとに記憶する記憶部とをさらに有し、一の前記識別子に対応する前記書き込みデータの前記所定単位に対して前記第２の検証用データを付与するタイミングであるとされるときに、前記記憶部に記憶される該識別子に対応する該第２の検証用データを該所定単位へ付加することを特徴とする。
【００１８】
また、本発明によれば、コンピュータ装置からのデータを所定単位で一時記憶部へ送信するとともに、第２の検証用データを算出して、必要に応じて該データの所定単位に付加するので、第２の検証用データ算出と、データの所定単位での一時記憶部への送信とを同時におこなうことが可能となるので、効率的処理をおこなってデータ中継の処理性能を向上させることができる。
【００１９】
また、本発明は、上記発明において、前記送信部が、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記第２の検証用データを算出するとともに、書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信する処理を一の前記送信処理指示に基づいて実行することを特徴とする。
【００２０】
また、本発明によれば、第２の検証用データの算出と、コンピュータ装置からのデータの所定単位での一時記憶部への送信とを同時におこない、該第２の検証用データを必要に応じて該データの所定単位に付加する処理を一の送信処理指示に基づいておこなうので、処理を効率的におこなってデータ中継の処理性能を向上させることができる。
【００２１】
また、本発明は、上記発明において、前記第２の検証用データには、少なくとも一つの前記所定単位からなるフィールドに対して付与されるＦＣＣ（Field Check Code）と、所定個の該フィールドからなる所定データ長のブロックに対して付与されるＢＣＣ（Block Check Code）とがあり、前記算出部は、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記ＦＣＣおよび前記ＢＣＣを算出することを特徴とする。
【００２２】
また、本発明によれば、ＦＣＣおよびＢＣＣの算出と、コンピュータ装置からのデータの所定単位での一時記憶部への送信とを同時におこなうので、ＦＣＣおよびＢＣＣの算出とデータ送信とを効率的におこなってデータ中継の処理性能を向上させることができる。
【発明の効果】
【００２３】
本発明によれば、ホストコンピュータとRAIDとの間で送受されるデータを中継するデータ中継装置において、ホストコンピュータから該データ中継装置のバッファへの書き込みデータ送信と、バッファから該データ中継装置のキャッシュメモリへの書き込みデータ送信とを並列に処理可能とし、バッファからキャッシュメモリへの書き込みデータの送信に関し、データ中継装置の性能向上を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００２４】
以下に添付図面を参照し、本発明のデータ中継集積回路、データ中継装置およびデータ中継方法に係る実施例を詳細に説明する。本発明のデータ中継装置は、メインフレームのホストコンピュータやオープンシステムのサーバなどのコンピュータと、記憶装置としてのRAIDとの間で読み書きデータを送受する際に、該コンピュータ装置のデータ形式の差異を吸収して送受データを中継するチャネルアダプタと呼ばれる装置である。そして、データ中継集積回路は、該チャネルアダプタに搭載されるプロトコル・DMAチップと呼ばれるLSI（Large Scale Integration）に実装される機能のひとつであるSNE（Send Engine）である。
【００２５】
そして、コンピュータとRAIDとの間でデータはチャネルアダプタを介して送受されるが、チャネルアダプタは、キャッシュメモリに該データを転送して一時記憶させることによって、コンピュータとRAIDとの間でのデータ送受の効率性を高めている。
【００２６】
本発明は、特に、ホストコンピュータから可変長のデータがファイバチャネル、FICON、FCLinkなどのホストインターフェースの規格にしたがい複数のフレームに分割して送信されてくる場合を前提とし、従来技術でプロトコル・DMAチップがこの分割して送信されてきたデータをキャッシュメモリに転送する場合に発生する問題を解決するためになされたものである。
【００２７】
その従来技術とは、次のようなものである。すなわち、一つのCCW（Channel Control Work、チャネルアダプタの入出力単位の操作を制御する定義済み制御エンコード）に従ってホストコンピュータから分割され送信されてきた一つの書き込みデータは、チャネルアダプタ内のバッファへ一旦格納される。
【００２８】
図９に示すように、従来技術では、バッファからキャッシュメモリへの書き込みデータの送信をおこなうSNE（Send Engine）の動作を規定するディスクリプタには、同一CCWの終了を示すbitである“Group”の“End”、フィールド（“Field”）の開始を示すbitである“Field”の“Start”、フィールド（“Field”）の終了を示すbitである“Field”の“End”、ブロック（後述のLBA、“Block”）の開始を示すbitである“Block”の“Start”が設定されているのみであった。同図に示す例では、データ（１）〜（３）、データ（４）〜（６）のように、同一CCWによるSNEのディスクリプタが連続している必要があった。
【００２９】
ここで、一つのCCWで送信されてくる書き込みデータごとにデータ検証のためのCRCチェックコード（SB2-CRC）が付加されている。前述のように項目が設定されているディスクリプタによれば、例えば第１の書き込みデータがデータ（１）〜（３）に分割され、第２の書き込みデータがデータ（４）〜（６）に分割されてホストコンピュータから送信されてきた場合に、図１０に示すように、データ（１）〜（３）と、データ（４）〜（６）とのように、同一の書き込みデータの分割単位がすべて連続して送信されてきてはじめて、それぞれのSB2-CRCに基づくデータ検証をおこなうことが可能であった。
【００３０】
すなわち、従来技術では、図１０に示すように、データ（１）〜（３）のすべてを受信してこれらに基づくSB2-CRCによるデータ検証をおこなった後にデータ（４）〜（６）のすべてを受信してこれらに基づくSB2-CRCによるデータ検証をおこなう。このように、一つのCCWで送信されてくる書き込みデータごとにSB2-CRCに基づくデータ検証を行う必要があり、いずれの書き込みデータに属する分割単位であるかが識別できないため、異なる書き込みデータの分割単位が交互に送信されてきた場合に、SB2-CRCに基づくデータ検証がおこなえなかった。
【００３１】
また、従来技術では、ホストコンピュータからの同一の書き込みデータの分割単位がすべて連続して送信されてきてはじめて、SNEが起動されていた。この方法であると、例えば8kbyte以上の長いフィールドの書き込みデータをキャッシュメモリへ転送する場合には、連続してSNEを起動する必要があった。さらに、長いフィールドの書き込みデータをキャッシュメモリへ転送する場合には、同一の書き込みデータの分割単位がすべてバッファに揃うまで、他の処理を行うことができず、処理効率に問題があった。
【００３２】
さらに従来技術では、異なる書き込みデータの分割単位が交互に送信されてきた場合に、書き込みデータをキャッシュメモリへ転送する場合に該書き込みデータに付加する後述のFCCおよびBCCを生成できないという問題点があった。
【００３３】
このように、一つの書き込みデータの長いフィールドをキャッシュメモリへ転送している間は、他の処理を一切おこなうことができなかったため、バッファからキャッシュメモリへの書き込みデータの送信に関し、性能上の大きな制約となっていた。
【００３４】
このような制約を解決するために、SNEを一つのCCWで送信されてくる書き込みデータの分割単位がバッファ上に揃わずとも、受信した分割単位を順次キャッシュメモリへ送信するように改良するとともに、ディスクリプタが連続していないSNEからFCCやBCCを生成可能とするために、SNEのディスクリプタにグループID（GID、Group ID）を定義し、該グループIDごとにFCCおよびBCCの計算途中結果を保存・読み出し可能とすることによって、ホストコンピュータからバッファへの書き込みデータ送信と、バッファからキャッシュメモリでのSNEによる書き込みデータ送信を並列に処理可能とし、バッファからキャッシュメモリへの書き込みデータの送信に関し、性能向上を実現することを目的とする。
【００３５】
まず、本発明の実施例の説明に先立ち、本発明の特徴を説明する。図１は、本発明の特徴を説明する図である。同図に示すように、従来方法では、ホストコンピュータからプロトコル・DMAチップへ送信された書き込みデータをキャッシュメモリへデータを送信する場合に、一つの書き込みデータが分割されたデータ（１）〜（３）がホストコンピュータからプロトコル・DMAチップへ順次送信される。このデータ（１）〜（３）には、SB2-CRCと呼ばれる検証コードが付与されている。
【００３６】
そして、プロトコル・DMAチップのLSIの一機能であるCCE（CRC Check Engine）によって、すべてそろったデータ（１）〜（３）のSB2-CRCに基づく該データ（１）〜（３）の検証がおこなわれる。このCCE検証が正常に終了すると、プロトコル・DMAチップからキャッシュメモリへ、データ（１）〜（３）の送信がおこなわれる。この送信がすべて終了すると、プロトコル・DMAチップからキャッシュメモリへ、キャッシュメモリ間ミラーリング指示が送信される。
【００３７】
以上に説明した従来方法によるホストコンピュータ、プロトコル・DMAチップ、キャッシュメモリ間のIO（Input Output）処理と比較すると、本発明は、CCE検証後にプロトコル・DMAチップからキャッシュメモリへデータ（１）〜（３）を送信する処理相当の処理時間を省略し、約10％程度の処理時間短縮を図り、プロトコル・DMAチップ、キャッシュメモリ間のIO処理の効率性を高めることを目的とする。
【００３８】
すなわち、図１に示すように、本発明方法によれば、一つの書き込みデータが分割されたデータ（１）〜（３）がホストコンピュータからプロトコル・DMAチップへ順次送信されるとともに、プロトコル・DMAチップにおいてすべて揃う前に、プロトコル・DMAチップは該データ（１）〜（３）を受信する都度、そのデータを直ちにキャッシュメモリへ送信する。
【００３９】
換言すれば、ホストコンピュータからプロトコル・DMAチップへデータ（１）が送信され、プロトコル・DMAチップは、該データ（１）を受信すると直ちに該データ（１）をキャッシュメモリへ送信する。次にホストコンピュータからプロトコル・DMAチップへデータ（２）が送信され、プロトコル・DMAチップは、該データ（２）を受信すると直ちに該データ（２）をキャッシュメモリへ送信する。さらにホストコンピュータからプロトコル・DMAチップへデータ（３）が送信され、プロトコル・DMAチップは、該データ（３）を受信すると直ちに該データ（３）をキャッシュメモリへ送信する。すなわち、同一のCCWの書き込みデータのSB2-CRCに基づくデータ検証が終了する前にSNEを起動し、バッファからキャッシュメモリへ書き込みデータの転送をおこなう。
【００４０】
その後、プロトコルDMAチップは、データ（１）〜（３）のCCE検証をおこなう。そしてこのCCE検証が正常終了したならば、プロトコル・DMAチップからキャッシュメモリへ、キャッシュメモリ間ミラーリング指示が送信される。
【００４１】
このように、本発明では、プロトコルDMAチップに分割された書き込みデータのすべてがプロトコル・DMAチップに到着しなくともキャッシュメモリへデータを送信することから、分割された書き込みデータのすべてが何らかの理由でプロトコル・DMAチップで揃うことが遅れたとしても、プロトコル・DMAチップ、キャッシュメモリ間のIO処理自体の遅延の影響を抑制することができる。
【実施例】
【００４２】
以下図２〜図８を参照して、本発明の実施例を説明する。図２は、実施例にかかるディスクアレイ装置の概略構成を示すブロック図である。ディスクアレイ装置は、RAIDとも呼ばれる。ディスクアレイ装置１０は、外部装置としてのホストコンピュータ２０（ホストコンピュータ２０Ａ、２０Ｂ）の外部記憶装置として機能する装置であり、データを格納するディスクアレイ部と、ディスクアレイ部の制御を行うディスクアレイ制御部とを備えて構成される。
【００４３】
ディスクアレイ部は、複数の磁気ディスク装置９０（磁気ディスク装置９０Ａ、９０Ｂ）と、複数の磁気ディスク装置９０の切り替えを行うスイッチ８０（スイッチ８０Ａ、８０Ｂ）とから構成される。この磁気ディスク装置９０は、一般的にデータアクセスの速さとデータの冗長性の段階に応じて分類されるRAID（Redundant Array of Inexpensive Disks）のレベルによって異なる構成を有する。
【００４４】
たとえば、データを格納するための磁気ディスク装置９０と、この磁気ディスク装置９０に格納されたデータをミラーリングするための磁気ディスク装置９０と、磁気ディスク装置９０に格納されたデータに対して作成されたパリティデータを格納するための磁気ディスク装置９０というように、RAIDのレベルに対応してそれぞれの磁気ディスク装置９０の用途が分かれている。なお、磁気ディスク装置９０は、固定長のデータフォーマットでデータを格納する。
【００４５】
ディスクアレイ制御部は、ホストコンピュータ２０に対するインターフェース制御を行うチャネルアダプタ４０（チャネルアダプタ４０Ａ、４０Ｂ）と、磁気ディスク装置９０から読み出したデータを一時的に保持するキャッシュメモリ５０（キャッシュメモリ５０Ａ、５０Ｂ）と、データの読み書き時の各種制御を行い、キャッシュメモリ５０の管理を行うキャッシュコントローラ６０（キャッシュコントローラ６０Ａ、６０Ｂ）と、データの読み書き時にキャッシュコントローラ６０の指示に基づいてそれぞれの磁気ディスク装置９０に対する制御を行うディスクアダプタ７０（ディスクアダプタ７０Ａ、７０Ｂ）とを備えて構成される。
【００４６】
キャッシュコントローラ６０は、ホストコンピュータ２０から読み出し要求のあったデータがキャッシュメモリ５０上にない場合に、磁気ディスク装置９０からデータを読み出してキャッシュメモリ５０上に置き、チャネルアダプタ４０によって読み込み可能な状態とする機能を有する。
【００４７】
なお、キャッシュメモリ５０の容量が飽和した場合には、使われていないデータや最後にアクセスされてから所定の期間が経過したデータなどを廃棄して新たなデータを書き込むための領域の確保が行われる。また、キャッシュコントローラ６０は、ホストコンピュータ２０からの書き込み要求によってキャッシュメモリ５０に書き込まれたデータを磁気ディスク装置９０へ書き込むようにディスクアダプタ７０に指示する機能も有する。
【００４８】
データ蓄積用メモリであるキャッシュメモリ５０は、キャッシュコントローラ６０によって磁気ディスク装置９０から読み出されたデータを格納したり、ホストコンピュータ２０からの書き込み要求のあった書き込みデータを格納したりする機能を有する。
【００４９】
ディスクアダプタ７０は、キャッシュコントローラ６０からの指示に基づいて、磁気ディスク装置９０からデータを読み込んだり、磁気ディスク装置９０にデータを書き込んだりする機能を有する。
【００５０】
チャネルアダプタ４０は、ホストコンピュータ２０からの読み出し要求に対応するデータをキャッシュメモリ５０から読み出して、ホストコンピュータ２０に転送するとともに、ホストコンピュータ２０から書き込み要求のあったデータをキャッシュメモリ５０上に書き込む処理を行う機能を有する。
【００５１】
以上の構成において、本発明にかかるデータアクセス方法は、チャネルアダプタ４０からキャッシュメモリ５０へのデータの書き込みに対して適用することができる。そこで、チャネルアダプタ４０とキャッシュメモリ５０との間でデータを転送する際のフォーマット変換とチェックコードについて説明する。図３は、キャッシュメモリへ転送するデータフォーマットを示す図である。すなわち、キャッシュメモリ５０では、データは、図３に示すフォーマットで記憶されることとなる。
【００５２】
固定長データフォーマットに可変長データフォーマットのデータを格納する際に、可変長データフォーマットとしてCKDフォーマットを用いる。CKDフォーマットのレコードは、レコードの末尾に8byteのBCCが付加された複数の512bitのレコード長のLBA（Logical Block Addressing）からなる。CKDフォーマットのレコードは、カウント部（Count）、キー部（Key）、データ部（Data）の３つから構成される。カウント部は、64byteの固定長であり、当該レコードのアドレスとデータ長の情報を含む。キー部は、64byteを単位とした可変長であり、オペレーティングシステムが当該レコードを識別するために用いられる。データ部は、64byteを単位とした可変長であり、ユーザデータが格納される領域である。カウント部、キー部、データ部を総称してフィールドと呼ぶ。
【００５３】
磁気ディスク装置９０では、ホストコンピュータ２０から受け渡された可変長データを固定長の論理ブロックで管理する。このときの固定長は、512byteである。キャッシュメモリ５０では、磁気ディスク装置９０から読み出したデータについて、LBAと呼ばれる512byteの論理ブロックごとに行われたエラーチェックの結果である8byteのエラーチェックコード（ブロックチェックコード（Block Check Code、BCC））がこのLBAの末尾に付されたものが格納されている。つまり、キャッシュメモリ５０に書き込まれるデータは、LBAごとにエラー保護のための8ByteのBCCが続いて付加され、全体として520バイトのデータ長となる。
【００５４】
また、フィールドごとにエラー保護のために計算された8Byteのエラーチェックコード（フィールドチェックコード（Field Check Code、FCC））が付加される。このFCCは、各フィールドの末尾に8Byteで付与される。よって、LBAは、カウント部、キー部、データ部それぞれに8ByteのFCCを含んで520Byteとなる。
【００５５】
なお、BCCは、LBA内の全体のデータを使用して計算した結果生成されることが望ましく、FCCも、各フィールド内の全体のデータを使用して計算した結果生成されることが望ましい。たとえば、エラーチェック方法として巡回冗長検査（CRC（Cyclic Redundancy Check））を用い、このCRCによって生成されるCRC符号を用いてもよいが、これに限定されず、ハミング符号などその他の符号を用いてもよい。
【００５６】
なお、可変長のデータフォーマットのデータをLBA単位の固定長のデータフォーマットに格納する場合に、可変長データの変わり目は、LBAのデータ長の半分、すなわち256byte単位で出現するようになる。すなわち、可変長のデータフォーマットのデータをLBA単位の固定長のデータフォーマットして、最後のLBAの残りのレコード長が256byte以上である場合には、256byteまでパディングデータを埋め込み、当該LBAの先頭から257byte目以降から新しい可変長データを格納することとなる。可変長のデータフォーマットのデータをLBA単位の固定長のデータフォーマットして、最後のLBAの残りのレコード長が256byte未満である場合には、当該LBAの末尾までパディングデータを埋め込み、次のLBAの先頭から新しい可変長データを格納することとなる。
【００５７】
次に、実施例にかかるチャネルアダプタの構成について説明する。図４は、実施例にかかるチャネルアダプタの内部構成を示すブロック図である。チャネルアダプタ４０は、データバッファ４１、LSI（Large Scale Integration）であるプロトコル・DMAチップ４２、ＣＰＵ（Central Processing Unit）４３、メモリ４４、プロトコルコントローラ４５、光モジュール４６を含んで構成される。プロトコル・DMAチップ４２、ＣＰＵ４３、プロトコルコントローラ４５は、所定のバスによって接続されており、相互にデータを転送することができる。
【００５８】
プロトコル・DMAチップ４２は、キャッシュコントローラ６０とのインターフェースを担当する。データの書き込みなどのアクセス要求を出すホストコンピュータ２０とキャッシュメモリ５０との間に位置し、ＣＰＵ４３を経由することなくホストコンピュータ２０とキャッシュメモリ５０との間で、データバッファ４１でデータをバッファリングしながらデータを転送するDMA機能を内蔵し、ＣＰＵ４３からの指示にしたがってキャッシュコントローラ６０との間で通信処理を行う。
【００５９】
なお、図４では、ホストコンピュータ２０とディスクアレイ装置１０とが光ファイバで接続される場合を例示しており、プロトコル・DMAチップ４２のホストコンピュータ２０との接続側には、ホストコンピュータ２０から送られてくる光信号を電気信号に変換し、ディスクアレイ装置１０からの電気信号を光信号に変換する光モジュール４６と、プロトコル・DMAチップ４２およびホストコンピュータ２０の接続に用いられるファイバチャネルのプロトコルを制御するプロトコルコントローラ４５が設けられている。
【００６０】
ＣＰＵ４３は、チャネルアダプタ４０全体の動作制御をつかさどるプロセッサとメモリインターフェース部分を有するLSIであり、データ書き込み方法に関係する機能モジュールとしてデータ処理ブロック（図示せず）を有している。データ処理ブロックは、CKDフォーマットを有するデータを新たにキャッシュメモリ５０に書き込んだりする際に必要なディスクリプタを生成する機能を有する。
【００６１】
たとえば、キャッシュメモリ５０に新たにCKDフォーマットを有するデータを書き込むディスクリプタを生成する機能を有する。ここで、ディスクリプタとは、プロトコル・DMAチップ４２によるデータアクセス処理を実行するために必要な手順を記述したものである。
【００６２】
メモリ４４は、ＣＰＵ４３の処理で使用されるディスクリプタなどを格納する記憶装置であり、ＣＰＵ４３と接続される。ディスクリプタは、ホストコンピュータ２０とキャッシュメモリ５０との間で送受されるデータの識別子を含む。このメモリ４４には、ＣＰＵ４３のデータ処理ブロックによって生成されたディスクリプタを格納するディスクリプタ格納領域（図示せず）が設けられる。
【００６３】
次に、図４に示したプロトコル・DMAチップの構成について説明する。図５は、実施例にかかるプロトコル・DMAチップの構成を示すブロック図である。同図に示すように、プロトコル・DMAチップ４２は、SNE１００と、PCI I/F４２ａと、ホストI/F４２ｂと、CM I/F４２ｃ、プロトコル制御回路４２ｄとを有する。なお、プロトコル・DMAチップ４２は、データバッファ４１に一時的に蓄積されているホストコンピュータからRAIDへの送信データをSB2-CRCに基づいて検証する機能部（CCE）と、キャッシュメモリ間のミラーリング指示を送信する機能部と、キャッシュメモリ５０からデータを読み込む際の処理を行う機能部と、CPU４３のデータ処理ブロックによってメモリ４４に格納されたディスクリプタをリードし、関係する処理部に読み込んだディスクリプタ情報を通知する機能部（レシーブエンジン）とをさらに有するが、ここでの説明を省略する。
【００６４】
プロトコル・DMAチップ４２は、CPU４３とのインターフェースとなるPCI I/F４２ａと、ホストコンピュータ２０とのインターフェースとなるホストI/F４２ｂと、キャッシュコントローラ６０とのインターフェースとなるCM I/F４２ｃと、ホストコンピュータ２０との接続に用いられるファイバチャネルのプロトコルを制御するプロトコル制御回路４２ｄと、ホストコンピュータ２０からのデータの書き込み要求に応じてキャッシュメモリ５０に対するデータ処理を行うSNE１００とを有する。
【００６５】
SNE１００は、インターフェースであるPCI I/F４２ａを介して、メモリ４４に記憶されるディスクリプタ情報をCPU４３から受信する。また、データバッファ４１に一時蓄積されている磁気ディスク装置９０への書き込みデータを取得し、前述のディスクリプタ情報に従って、CM I/F４２ｃを介してキャッシュメモリ５０へと送信する。
【００６６】
SNE１００は、ホストコンピュータ２０から新たに書き込むデータをキャッシュメモリ５０に転送するモジュールであり、さらに、キャッシュメモリ５０に書き込むデータを読み込むホストデータ制御回路１０１と、読み込んだデータのフィールド部分についてフィールドチェックコード（FCC）の生成を行うFCC生成回路１０２と、読み込んだデータについて論理ブロックごとにブロックチェックコード（BCC）の生成を行うBCC生成回路１０３と、ホストデータ制御回路１０１、FCC生成回路１０２およびBCC生成回路１０３からのデータからキャッシュメモリ５０に書き込む論理ブロック長のデータを生成してキャッシュメモリへの書き込みを制御するライト制御回路１０４と、CRC転送情報格納バッファ１０５と、ディスクリプタ制御回路１０６を有する。
【００６７】
ホストデータ制御回路１０１は、データライト用ディスクリプタに基づいてデータバッファ４１から選択的にデータをフィールド単位に読み込む機能を有する。具体的には、データライト用ディスクリプタが新たなデータの書き込みである場合には、データバッファ４１に格納されている書き込みデータを読み込み、そのデータをFCC生成回路１０２、BCC生成回路１０３およびライト制御回路１０４へと受け渡す処理を行う。
【００６８】
FCC生成回路１０２は、データライト用ディスクリプタに基づいて、ホストデータ制御回路１０１がデータバッファ４１から受け渡されたデータについてフィールドごとにFCCを計算して生成し、生成したFCCをCRC転送情報格納バッファ１０５に一時的に記憶させる機能を有する。
【００６９】
BCC生成回路１０３は、データライト用ディスクリプタに基づいて、ホストデータ制御回路１０１から受け渡されたデータについて論理ブロック（LBA）単位でBCCを計算して生成し、生成されたBCCをCRC転送情報格納バッファ１０５に一時的に記憶させる機能を有する。
【００７０】
ライト制御回路１０４は、データライト用ディスクリプタに基づいて、ホストデータ制御回路１０１から受け渡されたデータからキャッシュメモリ５０に書き込むLBAを生成する機能を有する。
【００７１】
具体的には、実施例にかかるディスクアレイ装置１０では、データは512Byteの固定長のLBAで管理されるので、ホストデータ制御回路１０１からの分割されたデータが512byteになると、データライト用ディスクリプタの指定に応じて、その末尾にBCCを付加する処理を行う。また、新たにデータを書き込む場合には各フィールドの末尾を含むフィールド書き込みブロックの所定の位置に、データライト用ディスクリプタの指定に応じて、FCCを付加する処理を行う。
【００７２】
また、ライト制御回路１０４は、キャッシュメモリ５０へのデータ送信が終了したならば、ディスクリプタ制御回路１０６へデータ転送終了通知を送信する。
【００７３】
CRC転送情報格納バッファ１０５は、FCC生成回路１０２およびBCC生成回路１０３が、ホストコンピュータ２０から分割して順次送信されてきた一つの書き込みデータの分割単位ごとに該分割単位に基づいて算出したFCCおよびBCCの計算途中結果を、該一つの書き込みデータを識別する識別子ごとに保持する。そして、データライト用ディスクリプタの指定に応じて、CRC転送情報格納バッファ１０５に格納される最新のFCCまたはBCCが、ライト制御回路１０４により読み出され、キャッシュメモリ５０への転送データに付加されてキャッシュメモリ５０へ送信されることとなる。
【００７４】
これは、前述の一つの書き込みデータのうち、例えば第２の分割単位までデータが送信されてきた場合に、該第２の分割単位の一つ前に送信されてきた第１の分割単位までのデータに基づいて算出されたFCCまたはBCCの計算途中結果と、該第２の分割単位に基づくFCCまたはBCCとに基づいて、該第２の分割単位までのデータに基づくFCCまたはBCCが算出可能であることによる。
【００７５】
また、CRC転送情報格納バッファ１０５は、ライト制御回路１０４が、一つの書き込みデータの分割単位をキャッシュメモリ５０へ書き込んだアドレスを記憶する。この情報によって、ライト制御回路１０４は、分割単位に分割された一つの書き込みデータを、キャッシュメモリの連続領域へ書き込むことが可能となる。
【００７６】
ディスクリプタ制御回路１０６は、CPU４３のデータ処理ブロックによってメモリ４４に格納されたディスクリプタをリードし、関係する処理部に読み込んだディスクリプタ情報をホストデータ制御回路１０１、FCC生成回路１０２およびBCC生成回路１０３、ライト制御回路１０４へ通知する機能を有する。
【００７７】
次に、実施例のディスクリプタの設定例について説明する。図６は、実施例のディスクリプタ設定例を示す図である。ここでのディスクリプタは、データライト用ディスクリプタである。同図の前提として、一のグループである第１の書き込みデータの分割単位であるデータ（１）〜（３）は5bitの情報であるグループID（Group ID、GID、前述の「一の送信データを識別する識別子」に相当）が“4”、また、別の一のグループである第２の書き込みデータの分割単位であるデータ（４）〜（６）はグループIDが“5”である。なお、グループIDが5bitの情報であることから、合計64個のグループを同時に管理可能である。
【００７８】
これらデータ（１）〜（６）が、ホストコンピュータ２０からデータ（１）、データ（４）、データ（５）、データ（２）、データ（３）、データ（６）の順序でプロトコル・DMAチップ４２へ到着したとする。データ（１）は、グループIDが“4”であり、第１の書き込みデータのグループの最終データではないので“Group”の“End”のbitは“0”である。また、データ（１）は、フィールド（“Field”）の開始データであるので、“Field”の“Start”のbitは“1”であり“End”のbitは“0”である。“Field”の“Start”のbitが“1”である場合に、CRC転送情報格納バッファに格納される当該グループIDに対応するFCCの計算途中結果が初期化される。
【００７９】
また、データ（１）は、ブロック（“Block”、LBA）の開始データでもあるので、“Block”の“Start”のbitは“1”である。“Block”の“Start”のbitが“1”である場合に、CRC転送情報格納バッファに格納される当該グループIDに対応するBCCの計算途中結果が初期化される。すなわち、このデータ（１）がプロトコル・DMAチップ４２のSNE１００に受信されると、グループIDが“4”のFCCおよびBCCが初期化されることとなる。
【００８０】
同様に、データ（４）は、グループIDが“5”であり、第２の書き込みデータのグループの最終データではないので“Group”の“End”のbitは“0”である。また、データ（４）は、フィールドの開始データであるので、“Field”の“Start”のbitは“1”であり“End”のbitは“0”である。また、データ（４）は、ブロックの開始データでもあるので、“Block”の“Start”のbitは“1”である。
【００８１】
さらに、データ（５）は、グループIDが“5”であり、第２の書き込みデータのグループの最終データではないので“Group”の“End”のbitは“0”である。また、データ（５）は、フィールドの開始データではないので、“Field”の“Start”のbitは“0”でありフィールドの終了データでもないので“End”のbitも“0”である。また、データ（５）は、ブロックの開始データでもないので、“Block”の“Start”のbitは“0”である。
【００８２】
さらに、データ（２）は、グループIDが“4”であり、第１の書き込みデータのグループの最終データではないので“Group”の“End”のbitは“0”である。また、データ（２）は、フィールドの開始データではないので、“Field”の“Start”のbitは“0”でありフィールドの終了データでもないので“End”のbitも“0”である。また、データ（２）は、ブロックの開始データでもないので、“Block”の“Start”のbitは“0”である。
【００８３】
一方、データ（３）は、グループIDが“4”であり、第１の書き込みデータのグループの最終データであるので“Group”の“End”のbitは“1”である。また、データ（３）は、フィールドの開始データではないので、“Field”の“Start”のbitは“0”であるが、フィールドの終了データであるので“End”のbitが“1”である。“Field”の“End”のbitが“1”である場合に、CRC転送情報格納バッファに格納される当該グループIDに対応するFCCの計算途中結果と、データ（３）とに基づいて計算されるFCCが、データ（３）までを含むキャッシュメモリ５０への書き込みデータの末尾に付加される。また、データ（３）は、ブロックの開始データではないので、“Block”の“Start”のbitは“0”である。
【００８４】
最後に、データ（６）は、グループIDが“5”であり、第２の書き込みデータのグループの最終データであるので“Group”の“End”のbitは“1”である。また、データ（６）は、フィールドの開始データではないので、“Field”の“Start”のbitは“0”であるが、フィールドの終了データであるので“End”のbitが“1”である。また、データ（６）は、ブロックの開始データではないので、“Block”の“Start”のbitは“0”である。
【００８５】
このように、連続していないディスクリプタによって送信されてくる送信データの分割単位ごとにFCCやBCCを計算することが可能となるようにグループIDを定義するため、グループごとにFCCおよびBCCを保存、読み出しができる。また、“Group”の“End”、“Field”の“Start”および“End”、“Block”の“Start”の別を指定するので、分割データの単位ごとに、FCCの付加の必要性を判定可能となり、ディスクリプタによってFCCの付加が必要であるとされる分割単位に対しては、ライト制御回路１０４は、CRC転送情報格納バッファ１０５に記憶される最新のFCCを読み出してデータの末尾に付加する。
【００８６】
なお、キャッシュメモリ５０への書き込みデータへのBCCの付与は、ディスクリプタの指定によらず、ライト制御回路１０４にて書き込みデータのデータ長が512byteに至ったと判定された場合におこなわれる。
【００８７】
次に、図６に示したディスクリプタのフォーマットについて説明する。図７は、実施例のディスクリプタフォーマット例を示す図である。同図に示すように、CPU４３のCPUメモリには、SNE１００で使用されるデータライト用のディスクリプタがキューイングされている。同図に示すように、キューの先頭には、最初に実行されるディスクリプタとしてデータライト用（SNE）ディスクリプタ1がキューイングされている。続いて、実行される順序にしたがってデータライト用（SNE）ディスクリプタ2、・・・、がキューイングされている。そして、最後に実行されるディスクリプタとしてデータライト用（SNE）ディスクリプタxがキューイングされている。チャネルアダプタ４０のファームウェアによって所メモリ４４に構築されたディスクリプタは、このキューイングの順序にしたがって、ディスクリプタ制御回路１０６によって読み出される。各ディスクリプタによって指示される内容にしたがって、データバッファ４１からキャッシュメモリ５０へデータを転送する。
【００８８】
データライト用（SNE）ディスクリプタのフォーマットは、図７に示すように、先頭の所定領域のリザーブ部分以降に、“mode”部、データ長を指定する“dl”部、転送先のキャッシュメモリのアドレスを指定する“cma”部、転送元のデータバッファのアドレスを指定する“mema”部、BCCのIDを設定する“bbid”部、FCCのIDを設定する“fbid”部を含む。
【００８９】
“mode”部は、FCCを生成するか否かを設定する“bit0”、BCCを生成するか否かを設定する“bit1”、フィールドの開始を示す“Field-Start”、フィールドの終了を示す“Field-End”、ブロック（LBA）の開始を示す“Block-Start”、グループIDを示す“Group-ID”を含む。“bit0”および“bit1”には、通常“1（FCCまたはBCCを生成する）”が設定される。
【００９０】
実施例では、“Group-ID”がディスクリプタに新規に追加されることによって、ホストコンピュータ２０からプロトコル・DMAチップ４２へ書き込みデータの分割単位が連続して送信されてこなくとも、FCCおよびBCCを書き込みデータごとに計算しつつ該分割単位を受信後直ちにキャッシュメモリ５０へ転送することが可能となる。
【００９１】
次に、実施例の複数CCWによるデータ転送処理について説明する。図８は、実施例の複数CCWによるデータ転送処理を示すシーケンス図である。ここでは、データ（１）〜（３）をグループIDが“4”である同一の書き込みデータとし、データ（３）が一つのフィールドの終了であるとする。また、データ（４）〜（６）をグループID（GID）が“5”であるとし、データ（６）が一つのフィールドの終了であるとする。なお、書き込みデータには512byteごとにBCCが付与されるが、この処理についての説明は、ここでは省略する。
【００９２】
同図に示すように、先ず、ホストコンピュータ２０は、プロトコル・DMAチップ４２へ、データ（１）を送信する（ステップＳ１０１）。続いて、データ（１）を受信したプロトコル・DMAチップ４２は、CRC転送情報格納バッファ１０５に格納されるGID=4のFCCおよびBCCを初期化する（ステップＳ１０２）。続いて、プロトコル・DMAチップ４２のFCC生成回路１０２およびBCC生成回路１０３は、データ（１）に基づいて、GID=4のFCCおよびBCCを計算し、その計算途中結果をCRC転送情報格納バッファ１０５に記憶する（ステップＳ１０３）。続いて、プロトコル・DMAチップ４２は、データ（１）をキャッシュメモリ５０へ転送する（ステップＳ１０４）。
【００９３】
続いて、ホストコンピュータ２０は、プロトコル・DMAチップ４２へ、データ（２）を送信する（ステップＳ１０５）。続いて、データ（２）を受信したプロトコル・DMAチップ４２は、CRC転送情報格納バッファ１０５に格納されるGID=4のFCCおよびBCCの途中計算結果を呼び出す（ステップＳ１０６）。続いて、プロトコル・DMAチップ４２のFCC生成回路１０２およびBCC生成回路１０３は、データ（２）および呼び出したFCCおよびBCCの途中計算結果に基づいて、GID=4のFCCおよびBCCを計算し、その計算途中結果をCRC転送情報格納バッファ１０５に記憶する（ステップＳ１０７）。続いて、プロトコル・DMAチップ４２は、データ（２）をキャッシュメモリ５０へ転送する（ステップＳ１０８）。
【００９４】
続いて、ホストコンピュータ２０は、プロトコル・DMAチップ４２へ、データ（４）を送信する（ステップＳ１０９）。続いて、データ（４）を受信したプロトコル・DMAチップ４２は、CRC転送情報格納バッファ１０５に格納されるGID=5のFCCおよびBCCを初期化する（ステップＳ１１０）。続いて、プロトコル・DMAチップ４２のFCC生成回路１０２およびBCC生成回路１０３は、データ（４）に基づいて、GID=5のFCCおよびBCCを計算し、その計算途中結果をCRC転送情報格納バッファ１０５に記憶する（ステップＳ１１１）。続いて、プロトコル・DMAチップ４２は、データ（４）をキャッシュメモリ５０へ転送する（ステップＳ１１２）。
【００９５】
続いて、ホストコンピュータ２０は、プロトコル・DMAチップ４２へ、データ（５）を送信する（ステップＳ１１３）。続いて、データ（５）を受信したプロトコル・DMAチップ４２は、CRC転送情報格納バッファ１０５に格納されるGID=5のFCCおよびBCCの途中計算結果を呼び出す（ステップＳ１１４）。続いて、プロトコル・DMAチップ４２のFCC生成回路１０２およびBCC生成回路１０３は、データ（５）および呼び出したFCCおよびBCCの途中計算結果に基づいて、GID=5のFCCおよびBCCを計算し、その計算途中結果をCRC転送情報格納バッファ１０５に記憶する（ステップＳ１１５）。続いて、プロトコル・DMAチップ４２は、データ（５）をキャッシュメモリ５０へ転送する（ステップＳ１１６）。
【００９６】
続いて、ホストコンピュータ２０は、プロトコル・DMAチップ４２へ、データ（３）を送信する（ステップＳ１１７）。続いて、データ（３）を受信したプロトコル・DMAチップ４２は、CRC転送情報格納バッファ１０５に格納されるGID=4のFCCおよびBCCの途中計算結果を呼び出す（ステップＳ１１８）。続いて、プロトコル・DMAチップ４２のFCC生成回路１０２およびBCC生成回路１０３は、データ（３）および呼び出したFCCおよびBCCの途中計算結果に基づいて、GID=4のFCCおよびBCCを計算し、その計算途中結果であるBCCをCRC転送情報格納バッファ１０５に記憶するとともに、FCCをデータ（３）に付与する（ステップＳ１１９）。続いて、プロトコル・DMAチップ４２は、データ（３）をキャッシュメモリ５０へ転送する（ステップＳ１２０）。
【００９７】
続いて、ホストコンピュータ２０は、プロトコル・DMAチップ４２へ、データ（６）を送信する（ステップＳ１２１）。続いて、データ（６）を受信したプロトコル・DMAチップ４２は、CRC転送情報格納バッファ１０５に格納されるGID=5のFCCおよびBCCの途中計算結果を呼び出す（ステップＳ１２２）。続いて、プロトコル・DMAチップ４２のFCC生成回路１０２およびBCC生成回路１０３は、データ（６）および呼び出したFCCおよびBCCの途中計算結果に基づいて、GID=5のFCCおよびBCCを計算し、その計算途中結果であるBCCをCRC転送情報格納バッファ１０５に記憶するとともに、FCCをデータ（６）に付与する（ステップＳ１２３）。続いて、プロトコル・DMAチップ４２は、データ（６）をキャッシュメモリ５０へ転送する（ステップＳ１２４）。
【００９８】
このように、GIDごとにFCCおよびBCCを計算可能としたため異なる書き込みデータの分割単位が交互に送信されてきた場合であっても同時に複数のFCCおよびBCCを計算可能であり、さらにホストコンピュータ２０からプロトコル・DMAチップ４２へ到着した書き込みデータは、到着後ただちにキャッシュメモリ５０へ転送されることとなるので、従来技術に比べて、ホストコンピュータからバッファへの書き込みデータ送信と、バッファからキャッシュメモリでのSNEによる書き込みデータ送信を並列に処理可能とし、バッファからキャッシュメモリへの書き込みデータの送信に関し、性能向上を実現することを可能とした。
【００９９】
なお、従来技術の複数のCCWによるデータ転送処理は次に示すとおりである。図１１は、従来技術の複数CCWによるデータ転送処理を示すシーケンス図である。ここでは、ホストコンピュータから送信されてくるデータは、GIDで識別可能であるとし、ここでは、データ（１）〜（３）をグループIDが“4”である同一の書き込みデータとし、データ（３）が一つのフィールドの終了であるとする。また、データ（４）〜（６）をグループID（GID）が“5”であるとし、データ（６）が一つのフィールドの終了であるとする。なお、書き込みデータには512byteごとにBCCが付与されるが、この処理についての説明は、ここでは省略する。
【０１００】
同図に示すように、先ず、ホストコンピュータからプロトコル・DMAチップへデータ（１）が送信される（ステップＳ２０１）。データ（１）を受信したプロトコル・DMAチップは、所定の格納領域のFCCおよびBCCの値を初期化する（ステップＳ２０２）。
【０１０１】
続いて、ストコンピュータからプロトコル・DMAチップへデータ（２）、データ（４）、データ（５）、データ（３）が送信される（ステップＳ２０３、ステップＳ２０４、ステップＳ２０５、ステップＳ２０６）。ステップＳ２０６が終了した時点で、プロトコル・DMAチップにおいてデータ（１）〜（３）が揃ったこととなるので、プロトコル・DMAチップは、GID=4のFCCを計算してデータ（３）の末尾に付与する（ステップＳ２０７）。そして、プロトコル・DMAチップは、所定の格納領域のFCCおよびBCCの値を初期化する（ステップＳ２０８）。そして、データ（１）〜（３）を、この順序でキャッシュメモリへ送信する（ステップＳ２０９）。
【０１０２】
続いて、ホストコンピュータからプロトコル・DMAチップへデータ（６）が送信される（ステップＳ２１０）。ステップＳ２１０が終了した時点で、プロトコル・DMAチップにおいてデータ（４）〜（６）が揃ったこととなるので、プロトコル・DMAチップは、GID=5のFCCを計算してデータ（６）の末尾に付与する（ステップＳ２１１）。そして、プロトコル・DMAチップは、データ（４）〜（６）を、この順序でキャッシュメモリへ送信する（ステップＳ２１２）。
【０１０３】
このように、従来技術では、一の書き込みデータのFCCおよびBCCのみしか一度に計算できないため、同一の書き込みデータのすべての分割単位であるデータが揃わないとFCC（またはBCC）を生成して付与することができない。また、一の書き込みデータの分割単位のすべてがプロトコル・DMAチップのデータバッファに揃った段階ではじめて、該一の書き込みデータをキャッシュメモリへ送信するSNE（Send Engine）を起動するため、送信効率が悪かった。また、このために、プロトコル・DMAチップからキャッシュメモリへの書き込みデータの転送が遅延するなど、効率性が低い。
【０１０４】
以上、本発明の実施例を説明したが、本発明は、これに限られるものではなく、特許請求の範囲に記載した技術的思想の範囲内で、更に種々の異なる実施例で実施されてもよいものである。また、実施例に記載した効果は、これに限定されるものではない。
【０１０５】
また、上記実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記実施例で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１０６】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０１０７】
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵ（Central Processing Unit）（またはＭＰＵ（Micro Processing Unit）、ＭＣＵ（Micro Controller Unit）などのマイクロ・コンピュータ）および当該ＣＰＵ（またはＭＰＵ、ＭＣＵなどのマイクロ・コンピュータ）にて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現されてもよい。
【０１０８】
（付記１）コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継装置内において、前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積して該書き込みデータに付加されている第１の検証用データに基づいて検証し、前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与し、該データ中継装置の制御装置からの送信処理指示に基づいて該書き込みデータを前記一時記憶部へ送信する処理を実行する送信部を有するデータ中継集積回路であって、
前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とするデータ中継集積回路。
【０１０９】
（付記２）前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータのすべての前記所定単位を前記一時記憶部へ送信したのちに、前記蓄積領域において前記第１の検証用データに基づいて該書き込みデータを検証することを特徴とする付記１に記載のデータ中継集積回路。
【０１１０】
（付記３）前記送信部は、
前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータの該所定単位を、該書き込みデータに一対一に対応する識別子に基づいて管理し、
前記第２の検証用データを、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに算出する算出部と、
前記算出部によって算出された前記第２の検証用データを前記識別子ごとに記憶する記憶部と
をさらに有し、
一の前記識別子に対応する前記書き込みデータの前記所定単位に対して前記第２の検証用データを付与するタイミングであるとされるときに、前記記憶部に記憶される該識別子に対応する該第２の検証用データを該所定単位へ付加することを特徴とする付記１または２に記載のデータ中継集積回路。
【０１１１】
（付記４）前記送信部が、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記第２の検証用データを算出するとともに、書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信する処理を一の前記送信処理指示に基づいて実行することを特徴とする付記３に記載のデータ中継集積回路。
【０１１２】
（付記５）前記第２の検証用データには、少なくとも一つの前記所定単位からなるフィールドに対して付与されるＦＣＣ（Field Check Code）と、所定個の該フィールドからなる所定データ長のブロックに対して付与されるＢＣＣ（Block Check Code）とがあり、
前記算出部は、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記ＦＣＣおよび前記ＢＣＣを算出することを特徴とする付記３または４に記載のデータ中継集積回路。
【０１１３】
（付記６）コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継装置であって、
前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積する蓄積部と、
前記蓄積部に蓄積される前記書き込みデータを該書き込みデータに付加されている第１の検証用データに基づいて検証する第１の検証部と、
前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与する付与部と、
当該データ中継装置の制御装置からの送信処理指示に基づいて前記書き込みデータを前記一時記憶部へ送信する送信部と
を有し、
前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とするデータ中継装置。
【０１１４】
（付記７）前記送信部は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータのすべての前記所定単位を前記一時記憶部へ送信したのちに、前記蓄積部において前記第１の検証用データに基づいて該書き込みデータを検証することを特徴とする付記６に記載のデータ中継装置。
【０１１５】
（付記８）前記送信部は、
前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータの該所定単位を、該書き込みデータに一対一に対応する識別子に基づいて管理し、
前記第２の検証用データを、前記書き込みデータが前記所定単位ごとに前記蓄積部に蓄積される都度、前記識別子ごとに算出する算出部と、
前記算出部によって算出された前記第２の検証用データを前記識別子ごとに記憶する記憶部と
をさらに有し、
一の前記識別子に対応する前記書き込みデータの前記所定単位に対して前記第２の検証用データを付与するタイミングであるとされるときに、前記記憶部に記憶される該識別子に対応する該第２の検証用データを該所定単位へ付加することを特徴とする付記６または７に記載のデータ中継装置。
【０１１６】
（付記９）前記送信部が、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記第２の検証用データを算出するとともに、書き込みデータを、前記蓄積部における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信する処理を一の前記送信処理指示に基づいて実行することを特徴とする付記８に記載のデータ中継装置。
【０１１７】
（付記１０）前記第２の検証用データには、少なくとも一つの前記所定単位からなるフィールドに対して付与されるＦＣＣ（Field Check Code）と、所定個の該フィールドからなる所定データ長のブロックに対して付与されるＢＣＣ（Block Check Code）とがあり、
前記算出部は、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに前記ＦＣＣおよび前記ＢＣＣを算出することを特徴とする付記８または９に記載のデータ中継装置。
【０１１８】
（付記１１）コンピュータ装置と記憶装置との間で送受されるデータを一時記憶部を介して中継するデータ中継方法であって、
前記コンピュータ装置から前記記憶装置へ所定単位に分割して順次送信されてきた書き込みデータを一時的に蓄積領域へ蓄積して該書き込みデータに付加されている第１の検証用データに基づいて検証し、前記書き込みデータに基づいて第２の検証データを算出して該書き込みデータに付与し、該データ中継装置の制御装置からの送信処理指示に基づいて該書き込みデータを前記一時記憶部へ送信する処理を実行する送信工程を含み、
前記送信工程は、前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータを、前記蓄積領域における前記第１の検証用データに基づく検証以前に該所定単位で前記一時記憶部へ順次送信することを特徴とするデータ中継方法。
【０１１９】
（付記１２）前記送信工程は、
前記コンピュータ装置から前記記憶装置へ前記所定単位に分割して順次送信されてきた書き込みデータの該所定単位を、該書き込みデータに一対一に対応する識別子に基づいて管理し、
前記第２の検証用データを、前記書き込みデータが前記所定単位ごとに前記蓄積領域に蓄積される都度、前記識別子ごとに算出する算出工程と、
前記算出工程によって算出された前記第２の検証用データを前記識別子ごとに記憶する記憶工程と
をさらに含み、
一の前記識別子に対応する前記書き込みデータの前記所定単位に対して前記第２の検証用データを付与するタイミングであるとされるときに、前記記憶部に記憶される該識別子に対応する該第２の検証用データを該所定単位へ付加することを特徴とする付記１１に記載のデータ中継方法。
【産業上の利用可能性】
【０１２０】
本発明は、ホストコンピュータからチャネルアダプタへ転送されるライトデータが分散するデータバッファ領域に格納された場合であっても、ホストコンピュータからキャッシュメモリへのライトデータの転送を効率的におこない、処理時間のロスを抑制したい場合に有用である。
【図面の簡単な説明】
【０１２１】
【図１】本発明の特徴を説明する図である。
【図２】実施例にかかるディスクアレイ装置の概略構成を示すブロック図である。
【図３】キャッシュメモリへ転送するデータフォーマットを示す図である。
【図４】実施例にかかるチャネルアダプタの内部構成を示すブロック図である。
【図５】実施例にかかるプロトコル・DMAチップの構成を示すブロック図である。
【図６】実施例のディスクリプタ設定例を示す図である。
【図７】実施例のディスクリプタフォーマット例を示す図である。
【図８】実施例の複数CCWによるデータ転送処理を示すシーケンス図である。
【図９】従来技術のディスクリプタ設定例を示す図である。
【図１０】従来技術のCCWの例を示す図である。
【図１１】従来技術の複数CCWによるデータ転送処理を示すシーケンス図である。
【符号の説明】
【０１２２】
１０      ディスクアレイ装置
２０、２０Ａ、２０Ｂ    ホストコンピュータ
４０、４０Ａ、４０Ｂ    チャネルアダプタ
４１    データバッファ
４２    プロトコル・DMAチップ
４２ａ    PCI I/F
４２ｂ    ホストI/F
４２ｃ    CM I/F
４２ｄ    プロトコル制御回路
４３    CPU
４４    メモリ
４５    プロトコルコントローラ
４６    光モジュール
５０、５０Ａ、５０Ｂ    キャッシュメモリ
６０、６０Ａ、６０Ｂ    キャッシュコントローラ
７０、７０Ａ、７０Ｂ    ディスクアダプタ
８０、８０Ａ、８０Ｂ    スイッチ
９０、９０Ａ、９０Ｂ    磁気ディスク装置
１００    SNE
１０１    ホストデータ制御回路
１０２    FCC生成回路
１０３    BCC生成回路
１０４    ライト制御回路
１０５    CRC転送情報格納バッファ
１０６    ディスクリプタ制御回路
【図１】
2008225558.tif 000003
【図２】
2008225558.tif 000004
【図３】
2008225558.tif 000005
【図４】
2008225558.tif 000006
【図５】
2008225558.tif 000007
【図６】
2008225558.tif 000008
【図７】
2008225558.tif 000009
【図８】
2008225558.tif 000010
【図９】
2008225558.tif 000011
【図１０】
2008225558.tif 000012
【図１１】
2008225558.tif 000013