(57)【要約】【課題】  ＩＰネットワークを介してデータの一部を再送信でき、部分データのデータ保証を行えるようにすること。【解決手段】  ＣＨＡ２０は、データＲＤをホストコンピュータ１に送信する。ＣＨＡ２０は、データＲＤをキャッシュメモリ５０からローカルメモリ２４０に記憶させる際に入力保証コードＧＤ１を算出する。ＣＨＡ２０は、ローカルメモリ２４０からデータＲＤを読み出してポート部２１０に転送する際に出力保証コードＧＤ３を生成する。データＲＤの送信後に、部分データＲＤｐの再送信を要求された場合、ＣＨＡ２０は、部分データＲＤｐをホストコンピュータ１に送信する。この後で、ＣＨＡ２０は、データＲＤの出力保証コードＧＤ３を再度算出し、先に算出された入力保証コードＧＤ１と比較する。両コードＧＤ１，ＧＤ３が一致する場合、正常にデータ送信が行われたことが保証される。【選択図】        図２
2005157624.tif 000002
【特許請求の範囲】
【請求項１】
ディスクアレイ装置に用いられ、上位装置との間のデータ授受を制御するチャネルアダプタであって、
外部メモリからのデータを記憶する内部メモリと、
前記内部メモリに入力される前記データについて入力保証コードを算出し、前記内部メモリから読み出される前記データについて出力保証コードを算出してそれぞれ保持可能な保証コード演算部と、
前記内部メモリから読み出された前記データを前記上位装置に送信する通信部と、
前記データの部分データを前記上位装置に再送信する場合は、前記通信部によって前記部分データを前記上位装置に送信させ、前記出力保証コード演算部により前記データについて再計算された前記出力保証コードと前記入力保証コードとを比較し、これら両保証コードが適合する場合に前記部分データの送信が正常に行われたと判定する制御部と、を備えたチャネルアダプタ。
【請求項２】
前記保証コード演算部は、前記内部メモリに入出力されるデータの全体について、前記入力側保証コードまたは前記出力側保証コードを算出するものである請求項１に記載のチャネルアダプタ。
【請求項３】
前記制御部は、前記部分データを前記上位装置に再送信する場合に、
（１）前記通信部により前記部分データを前記上位装置に送信させ、
（２）前記データを前記内部メモリから読み出して前記通信部にダミー転送し、
（３）前記ダミー転送される前記データについての前記出力保証コードを前記保証コード演算部により再計算させ、
（４）前記再計算された出力保証コードと前記データを前記内部メモリに記憶させる際に算出された前記入力保証コードとを比較し、
（５）前記再計算された出力保証コードと前記入力保証コードとが一致する場合は、前記部分データの送信が正常に行われた旨を前記上位装置に通知し、前記再計算された出力保証コードと前記入力保証コードとが不一致の場合は、前記部分データの送信が正常に行われなかった旨を前記上位装置に通知する、
ものである請求項１に記載のチャネルアダプタ。
【請求項４】
前記制御部は、前記部分データを前記上位装置に再送信する場合に、
（１）部分データを前記内部メモリから読み出して前記通信部に転送することにより、前記部分データを前記上位装置に送信させ、
（２）前記保証コード演算部により、前記内部メモリから読み出された前記部分データについて部分出力保証コードを算出させ、
（３）前記部分出力保証コードと前記データを前記内部メモリに記憶させる際に算出された前記入力保証コードとが不一致であることを確認し、
（４）前記データを前記内部メモリから読み出して前記通信部にダミー転送し、
（５）前記ダミー転送される前記データについての前記出力保証コードを前記保証コード演算部により再計算させ、
（６）前記再計算された出力保証コードと前記データを前記内部メモリに記憶させる際に算出された前記入力保証コードとを比較し、
（７）前記再計算された出力保証コードと前記入力保証コードとが一致する場合は、前記部分データの送信が正常に行われた旨を前記上位装置に通知し、前記再計算された出力保証コードと前記入力保証コードとが不一致の場合は、前記部分データの送信が正常に行われなかった旨を前記上位装置に通知する、
ものである請求項１に記載のチャネルアダプタ。
【請求項５】
前記制御部により前記通信部にダミー転送されたデータは、前記上位装置に送信されることなく破棄される請求項２または請求項３のいずれかに記載のチャネルアダプタ。
【請求項６】
前記チャネルアダプタと前記上位装置との間のデータ授受はTCP/IPプロトコルに従って行われ、前記チャネルアダプタと前記外部メモリとの間のデータ授受はファイバチャネルプロトコルに従って行われる、請求項１に記載のチャネルアダプタ。
【請求項７】
ディスクアレイ装置に用いられ、上位装置との間のデータ授受を制御するチャネルアダプタの制御方法であって、
前記上位装置への送信済データの部分データを前記上位装置に再送信する場合は、
内部メモリから前記部分データを読み出して前記上位装置に送信させ、
前記データの全体について算出された出力保証コードと前記内部メモリに前記データを入力する際に算出された入力保証コードとを比較し、
これら両保証コードが適合する場合に前記部分データの送信が正常に行われたと判定させるチャネルアダプタの制御方法。
【請求項８】
ディスクアレイ装置に用いられ、上位装置との間のデータ授受を制御するチャネルアダプタの制御方法であって、
外部メモリからのデータを内部メモリに記憶させる第１ステップと、
前記内部メモリに前記データを入力する際に、前記データの全体について入力保証コードを算出し保持する第２ステップと、
前記内部メモリから前記データを読み出す第３ステップと、
前記読み出されたデータの全体について出力保証コードを算出し保持する第４ステップと、
前記読み出されたデータを前記上位装置に送信させる第５ステップと、
前記入力保証コードと前記出力保証コードとを比較することにより、正常に送信が行われたか否かを判定し、前記上位装置に通知する第６ステップと、
前記上位装置に送信された前記データの部分データについて、前記上位装置から再送信要求があったか否かを判定する第７ステップと、
前記部分データの再送信要求があった場合は、前記内部メモリから前記部分データを読み出して、前記上位装置に送信させる第８ステップと、
前記内部メモリに記憶されたデータを再度読み出す第９ステップと、
前記再度読み出されたデータの全体について改めて出力保証コードを算出する第１０ステップと、
前記改めて算出された出力保証コードと前記第２ステップで算出された入力保証コードとを比較することにより、正常に送信が行われた否かを判定し、前記上位装置に通知する第１１ステップと、
を含んだチャネルアダプタの制御方法。
【請求項９】
上位装置に通信ネットワークを介して接続され、前記上位装置との間のデータ授受を制御するチャネルアダプタと、
データを記憶する記憶デバイスと、
前記記憶デバイスとの間のデータ授受を制御するディスクアダプタと、
前記記憶デバイスから読出したデータまたは前記上位装置から受信したデータを記憶するキャッシュメモリとを備え、
前記チャネルアダプタは、
前記キャッシュメモリからのデータを記憶する内部メモリと、
前記内部メモリに前記データを記憶させる場合に、前記データについて入力保証コードを算出して保持する入力保証コード演算部と、
前記内部メモリから前記データを読み出す場合に、前記データについて出力保証コードを算出して保持する出力保証コード演算部と、
前記内部メモリから読み出された前記データを前記上位装置に送信する通信部と、
制御部とを備え、
前記制御部は、前記データの部分データを前記上位装置に再送信する場合に、
（１）前記通信部によって前記部分データを前記上位装置に送信させ、
（２）前記出力保証コード演算部により前記データについて前記出力保証コードを再計算させ、
（３）前記再計算された出力保証コードと前記入力保証コードとを比較し、これら両保証コードが適合する場合に前記部分データの送信が正常に行われたと判定する、ものであるディスクアレイ装置。
【請求項１０】
データ転送制御部を介して内部メモリに接続され、前記内部メモリから読み出したデータを上位装置に送信させる通信部であって、
前記内部メモリに記憶されているデータの部分データを読み出して前記上位装置に送信した後、前記内部メモリから前記データの全体を読み出して、前記上位装置に送信することなく、読み出した前記データを破棄する通信部。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクアレイ装置及びチャネルアダプタに関する。
【背景技術】
【０００２】
ディスクアレイ装置は、多数の記憶デバイスをアレイ状に配設し、例えば、RAID（Redundant Array of Independent Inexpensive Disks）に基づいて構築された大容量の記憶制御装置である。記憶デバイスとしては、例えば、ハードディスク装置や半導体メモリ装置等が用いられる。各記憶デバイスが提供する物理的な記憶領域上には、論理ボリュームが形成される。業務用サーバ等のホストコンピュータは、所定のコマンドを発行することにより、論理ボリュームからデータを読み出したり、論理ボリュームにデータを書き込むことができる。
【０００３】
ＳＡＮ（Storage Area Network）の一部を構成するディスクアレイ装置は、ファイバチャネルプロトコルに従って、ブロック単位でのデータ転送を行う。ファイバチャネルに従うＳＡＮは、ＦＣ−ＳＡＮ等と呼ばれる。ＦＣ−ＳＡＮでは、光ファイバケーブルまたはメタルケーブルを用いて、高速なデータ転送を行うことができる。また、ファイバチャネルスイッチ等を用いることにより、ファブリック構造を得ることができ、多数のディスクアレイ装置と多数のホストコンピュータとを相互に接続することもできる。
【０００４】
ところで、ディスクアレイ装置の信頼性を図る１つの観点は、正確にデータの送受信が行えたか否かである。このため、ディスクアレイ装置では、例えば、ＬＲＣ（Longitudinal Redundancy Check：水平冗長検査）やＣＲＣ（Cyclic Redundancy Check：巡回冗長検査）、ＥＣＣ（Error-Correcting Code）等の技術を採用する。
【０００５】
ホストコンピュータとの間のデータ通信を行うチャネルユニットと、磁気ディスクとの間のデータ通信を行うディスクインターフェース制御基板等とのデータ授受が正確に行われたかを検査する技術も知られている（特許文献１）。この技術では、ディスクインターフェース制御基板と、チャネルインターフェース制御基板と、チャネルユニットとの３つの制御基板に、それぞれデータバッファ及びパリティチェック回路を設ける。そして、制御基板間でデータを転送する際には、送り手と受け手の各制御基板でそれぞれパリティチェックを行うと共に、送り手側のデータバッファの記憶内容と受け手側のデータバッファの記憶内容とを比較し、データが正しく転送されたか否かを判定している。
【特許文献１】米国特許第５５６１６７２号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ＦＣ（Fibre Channel）−ＳＡＮにおいて、ディスクアレイ装置からホストコンピュータにデータを送信する場合、例えば２KB程度のブロックデータを含むフレームとして、ホストコンピュータに送信される。ファイバチャネルのフレームは、フレームのスタートを示す情報（SOF）と、フレームヘッダ情報と、データフィールドと、ＣＲＣと、フレームの終了を示す情報（EOF）とを備えている。データフィールドには、０〜２１１２バイトのデータを格納することができる。ホストコンピュータからの要求に応じて１つまたは複数のフレームが、ディスクアレイ装置からホストコンピュータに送られる。
【０００７】
ＦＣ−ＳＡＮは、高速なデータ転送が可能であり、ＩＰネットワークに比べて安定したネットワークである。従って、送信データが途中で消失したり、ホストコンピュータに受信されたデータに回復不能なエラー等が生じる可能性は少ない。これらの事情等から、ＦＣ−ＳＡＮでは、例えば、送信データの一部に障害等が発生した場合は、送信データの全体を送り直すようになっている。
【０００８】
ところで、近年では、インターネットやイントラネット等のようなTCP/IP（Transmission Control Protocol/Internet Protocol）等をベースにした広域ネットワークシステムが広く普及しており、ＩＰ（Internet Protocol）ネットワークとストレージシステム（ディスクアレイ装置）との融合を図る技術が提案されている。ＩＰベースのＳＡＮは、ＩＰ−ＳＡＮ等と呼ばれる。ＩＰ−ＳＡＮの一つの形態としては、例えば、SCSI（Small Computer System Interface）のコマンドセットをTCP／IPのパケットとしてシリアル化し、ディスクアレイ装置をＩＰネットワークに直接接続させる技術が知られている。この技術は、iSCSI（Internet SCSI）あるいはSCSI over IPとして知られている。
【０００９】
ＩＰネットワークは、多数のサーバ、ルータ、スイッチ等から構成された複雑なネットワークであり、帯域幅や混雑度も時々刻々と変化する。送り手から相手先に送信されたパケットは、送信順通りに到着する保証はなく、パケットの全部または一部が途中で消失する場合もある。そこで、TCP／IPネットワークでは、一連のデータの一部が消失したり、あるいはエラーが発生しているような場合に、この消失等したデータのみの部分的な再送信を要求できるようになっている。
【００１０】
ＩＰネットワークにディスクアレイ装置を直結させる場合、ディスクアレイ装置の外部で使用されるプロトコル（TCP／IP）と、ディスクアレイ装置の内部で使用されるプロトコル（ＦＣ）との技術的性質の相違が問題となる。即ち、フレーム内のデータの一部についてホストコンピュータから再送信が要求された場合に、要求されたデータそのものは送信することができるが、その部分的なデータが正しいデータであることを保証することができない。ファイバチャネルでは、フレーム全体について１つのＣＲＣを設けるため、フレーム内の一部のデータを再送信する場合、このデータについてデータ保証を行うことができない。
【００１１】
本発明は、上記の問題点に鑑みてなされたもので、目的の１つは、上位装置にデータの一部分を送信した場合に、この部分的なデータの保証を行うことができるディスクアレイ装置及びチャネルアダプタを提供することにある。本発明の目的の１つは、保証コードが関連付けられる単位よりも小さい量のデータを送信した場合でも、データ保証を行うことができるディスクアレイ装置及びチャネルアダプタを提供することにある。本発明の更なる目的は、後述する実施の形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１２】
上記課題を解決すべく、本発明に従うチャネルアダプタは、ディスクアレイ装置に用いられ、上位装置との間のデータ授受を制御するものであって、内部メモリと、保証コード演算部と、通信部と、制御部とを備えている。内部メモリは、外部メモリからのデータを記憶する。保証コード演算部は、内部メモリに入力されるデータについて入力保証コードを算出し、内部メモリから読み出されるデータについて出力保証コードを算出してそれぞれ保持可能なものである。通信部は、内部メモリから読み出されたデータを上位装置に送信する。制御部は、データの部分データを上位装置に再送信する場合は、通信部によって部分データを上位装置に送信させ、出力保証コード演算部によりデータについて再計算された出力保証コードと入力保証コードとを比較し、これら両保証コードが適合する場合に部分データの送信が正常に行われたと判定する。
【００１３】
上位装置は、例えば、ディスクアレイ装置を通信ネットワークを介して利用するコンピュータ装置であり、パーソナルコンピュータ、ワークステーション、サーバマシン、メインフレーム、携帯情報端末等として構成される。内部メモリは、チャネルアダプタの内部に設けられるもので、例えば、読み書き可能な半導体メモリ（ＲＡＭ：Random Access Memory）である。内部メモリは、揮発性メモリでも不揮発性メモリでもよい。外部メモリは、チャネルアダプタの外部に設けられたメモリであり、例えば、キャッシュメモリ等が該当する。上位装置からの要求に応じて、外部メモリから読み出されたデータは、内部メモリに格納され、内部メモリから通信部を介して上位装置に送信される。保証コード演算部は、内部メモリにデータが入力される場合（データ書込み）と内部メモリからデータが出力される場合（データ読出し）の両方で、それぞれ保証コードを演算し保持する。
【００１４】
上位装置にデータを送信する場合、制御部は、内部メモリにデータを格納するときに算出される入力保証コードと、内部メモリからデータを読み出すときに算出される出力保証コードとを比較することにより、正常なデータ送信が行われたか否かを判定することができる。
【００１５】
上位装置に送信したデータの一部に障害（パケット未着、データ破壊等）が生じた場合は、送信済データのうち障害の生じた一部分のデータ（部分データ）が再び上位装置に送信される。この場合、制御部は、所望された部分データを通信部を介して上位装置に先に送信した後、内部メモリに格納されているデータ全体の出力保証コードを再計算し、この改めて算出された出力保証コードと入力保証コードとを比較する。両保証コードが適合する場合、制御部は、正常な部分データが送信されたものと判定する。ここで、両保証コードが適合するとは、両保証コードの比較によってデータが正常であることを示す状態を意味し、例えば、両保証コードが一致する場合を含む。
【００１６】
このように、要求された部分データを先に送信した後で、この部分データを含むデータ全体について出力保証コードを改めて算出し、この出力保証コードと算出済の入力保証コードとを比較することにより、制御部は、間接的に部分データのデータ保証を行うことができる。これにより、１つのフレームに格納されるデータの全体について入力保証コード及び出力保証コードを算出する保証コード演算部を用いた場合でも、部分データのデータ保証を行うことができる。従って、例えば、チャネルアダプタと上位装置との間のデータ授受をTCP/IPプロトコルに従って行い、チャネルアダプタと外部メモリとの間のデータ授受をファイバチャネルプロトコルに従って行うような場合に有効である。
なお、チャネルアダプタと外部メモリとの間のプロトコルは、ファイバチャネルプロトコルに限定されない。また、チャネルアダプタと上位装置との間のプロトコルは、TCP／IPに限定されない。
【００１７】
制御部は、部分データを上位装置に再送信する場合に、（１）通信部により部分データを上位装置に送信させ、（２）データを内部メモリから読み出して通信部にダミー転送し、（３）ダミー転送されるデータについての出力保証コードを保証コード演算部により再計算させ、（４）再計算された出力保証コードとデータを内部メモリに記憶させる際に算出された入力保証コードとを比較し、（５）再計算された出力保証コードと入力保証コードとが一致する場合は、部分データの送信が正常に行われた旨を上位装置に通知し、再計算された出力保証コードと入力保証コードとが不一致の場合は、部分データの送信が正常に行われなかった旨を上位装置に通知する、ことができる。
【００１８】
部分データを再送信する場合、この部分データを含むデータの全体を内部メモリから読み出して通信部にダミー転送する。ここで、ダミー転送とは、出力保証コードを算出するために、内部メモリのデータを形式的に通信部に転送することを意味し、通信部に入力されたデータは上位装置に送信されることなく破棄される。
【００１９】
あるいは、制御部は、部分データを上位装置に再送信する場合に、（１）部分データを内部メモリから読み出して通信部に転送することにより、部分データを上位装置に送信させ、（２）保証コード演算部により、内部メモリから読み出された部分データについて部分出力保証コードを算出させ、（３）部分出力保証コードとデータを内部メモリに記憶させる際に算出された入力保証コードとが不一致であることを確認し、（４）データを内部メモリから読み出して通信部にダミー転送し、（５）ダミー転送されるデータについての出力保証コードを保証コード演算部により再計算させ、（６）再計算された出力保証コードとデータを内部メモリに記憶させる際に算出された入力保証コードとを比較し、（７）再計算された出力保証コードと入力保証コードとが一致する場合は、部分データの送信が正常に行われた旨を上位装置に通知し、再計算された出力保証コードと入力保証コードとが不一致の場合は、部分データの送信が正常に行われなかった旨を上位装置に通知する、ことができる。
【００２０】
正常なデータ処理が行われている場合、部分データに基づく部分出力保証コードと、データ全体に基づく入力保証コードとは、一致しない。従って、部分出力保証コードと入力保証コードとを比較することにより、保証コード演算部が正常に稼働していることを確認する。
【発明を実施するための最良の形態】
【００２１】
以下、図１〜図７に基づき、本発明の実施の形態を説明する。
【００２２】
本実施の形態には、ディスクアレイ装置に用いられ、上位装置との間のデータ授受を制御するチャネルアダプタの制御方法が開示されている。この制御方法は、上位装置への送信済データの部分データを上位装置に再送信する場合は、内部メモリから部分データを読み出して上位装置に送信させ、データの全体について算出された出力保証コードと内部メモリにデータを入力する際に算出された入力保証コードとを比較し、これら両保証コードが適合する場合に部分データの送信が正常に行われたと判定させる。
【００２３】
また、本実施の形態には、チャネルアダプタの別の制御方法も開示される。この制御方法は、外部メモリからのデータを内部メモリに記憶させる第１ステップと、内部メモリにデータを入力する際に、データの全体について入力保証コードを算出し保持する第２ステップと、内部メモリからデータを読み出す第３ステップと、読み出されたデータの全体について出力保証コードを算出し保持する第４ステップと、読み出されたデータを上位装置に送信させる第５ステップと、入力保証コードと出力保証コードとを比較することにより、正常に送信が行われたか否かを判定し、上位装置に通知する第６ステップと、上位装置に送信されたデータの部分データについて、上位装置から再送信要求があったか否かを判定する第７ステップと、部分データの再送信要求があった場合は、内部メモリから部分データを読み出して、上位装置に送信させる第８ステップと、内部メモリに記憶されたデータを再度読み出す第９ステップと、再度読み出されたデータの全体について改めて出力保証コードを算出する第１０ステップと、改めて算出された出力保証コードと第２ステップで算出された入力保証コードとを比較することにより、正常に送信が行われた否かを判定し、上位装置に通知する第１１ステップと、を含む。
【００２４】
本実施の形態では、ディスクアレイ装置が開示されている。このディスクアレイ装置は、上位装置に通信ネットワークを介して接続され、上位装置との間のデータ授受を制御するチャネルアダプタと、データを記憶する記憶デバイスと、記憶デバイスとの間のデータ授受を制御するディスクアダプタと、記憶デバイスから読出したデータまたは上位装置から受信したデータを記憶するキャッシュメモリとを備え、チャネルアダプタは、キャッシュメモリからのデータを記憶する内部メモリと、内部メモリにデータを記憶させる場合に、データについて入力保証コードを算出して保持する入力保証コード演算部と、内部メモリからデータを読み出す場合に、データについて出力保証コードを算出して保持する出力保証コード演算部と、内部メモリから読み出されたデータを上位装置に送信する通信部と、制御部とを備え、制御部は、データの部分データを上位装置に再送信する場合に、（１）通信部によって部分データを上位装置に送信させ、（２）出力保証コード演算部によりデータについて出力保証コードを再計算させ、（３）再計算された出力保証コードと入力保証コードとを比較し、これら両保証コードが適合する場合に部分データの送信が正常に行われたと判定する。
【実施例１】
【００２５】
図１〜図６に基づいて、本発明の第１の実施の形態を説明する。図１は、ディスクアレイ装置１０の全体概要を示すブロック図である。ディスクアレイ装置１０は、それぞれ後述するように、各チャネルアダプタ（以下、ＣＨＡと略記）２０と、各ディスクアダプタ（以下、ＤＫＡと略記）３０と、共有メモリ４０と、キャッシュメモリ５０と、スイッチ部６０と、各ディスクドライブ７０とを備えて構成されている。ＣＨＡ２０及びＤＫＡ３０は、例えば、プロセッサやメモリ等が実装されたプリント基板と、制御プログラムとの協働により実現される。
【００２６】
ディスクアレイ装置１０は、通信ネットワークＣＮ１を介して、複数のホストコンピュータ１と双方向通信可能に接続されている。ここで、通信ネットワークＣＮ１は、例えば、ＬＡＮ（Local Area Network）やインターネット等のようなTCP/IPプロトコルに従って双方向のデータ通信を行うネットワークである。なお、複数のＣＨＡ２０の全てがTCP／IPに基づいてデータ転送を行う必要はない。一部のＣＨＡ２０は、例えば、ＳＡＮ、FICON（Fibre Connection：登録商標）、ESCON（Enterprise System Connection：登録商標）、ACONARC（Advanced Connection Architecture：登録商標）、FIBARC（Fibre Connection Architecture：登録商標）等の通信プロトコルに従ってデータ転送を行ってもよい。
【００２７】
各ホストコンピュータ１は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、メインフレーム、携帯情報端末等として実現されるものである。例えば、各ホストコンピュータ１は、図外に位置する複数のクライアント端末と別の通信ネットワークを介して接続されている。各ホストコンピュータ１は、例えば、各クライアント端末からの要求に応じて、ディスクアレイ装置１０にデータの読み書きを行うことにより、各クライアント端末へのサービスを提供する。
【００２８】
ＣＨＡ２０は、ホストコンピュータ１との間のデータ転送を制御するものである。ディスクアレイ装置１０には、例えば、４個や８個等のように、複数のＣＨＡ２０が設けられている。ＣＨＡ２０は、例えば、オープン系用ＣＨＡ、メインフレーム系用ＣＨＡ等のように、ホストコンピュータ１の種類に応じて、用意される。本実施例では、各ＣＨＡ２０のうち少なくとも１台は、TCP／IPに基づいてデータ転送を行う。各ＣＨＡ２０は、図２と共に後述するように、ポート部２１０と、データ転送制御部２２０と、プロセッサ部２３０と、ローカルメモリ２４０とを備えている。
【００２９】
各ＣＨＡ２０は、それぞれに接続されたホストコンピュータ１から、データの読み書きを要求するコマンドやデータを受信し、ホストコンピュータ１から受信したコマンドに従って動作する。例えば、ＣＨＡ２０は、ホストコンピュータ１からデータの読出し要求を受信すると、読出しコマンドを共有メモリ４０に記憶させる。ＤＫＡ３０は、共有メモリ４０を随時参照しており、未処理の読出しコマンドを発見すると、ディスクドライブ７０からデータを読み出して、キャッシュメモリ５０に記憶させる。ＣＨＡ２０は、キャッシュメモリ５０に移されたデータを読み出し、ローカルメモリ２４０等を経由して、コマンド発行元のホストコンピュータ１に送信する。また例えば、ＣＨＡ２０は、ホストコンピュータ１からデータの書込み要求を受信すると、書込みコマンドを共有メモリ４０に記憶させると共に、受信データをキャッシュメモリ５０に記憶させる。ＤＫＡ３０は、共有メモリ４０に記憶されたコマンドに従って、キャッシュメモリ５０に記憶されたデータを所定のディスクドライブ７０に記憶させる。
【００３０】
ＤＫＡ３０は、各ディスクドライブ７０との間のデータ通信を制御するものである。ディスクアレイ装置１０内には、例えば４個や８個等のように複数個のＤＫＡ３０を設けることができる。各ＤＫＡ３０は、各ディスクドライブ７０との間のデータ通信を制御するもので、それぞれプロセッサ部と、データ通信部と、ローカルメモリ等を備えている（いずれも不図示）。各ＤＫＡ３０と各ディスクドライブ７０とは、例えば、ＳＡＮ等の通信ネットワークＣＮ２を介して接続されており、ファイバチャネルプロトコルに従ってブロック単位のデータ転送を行う。各ＤＫＡ３０は、ディスクドライブ７０の状態を随時監視しており、この監視結果は内部ネットワークＣＮ３を介してＳＶＰ２に送信される。
【００３１】
ディスクドライブ７０は、例えば、ハードディスクドライブ（ＨＤＤ）や半導体メモリ装置等として実現される。ここで、例えば、４個のディスクドライブ７０によって１つのＲＡＩＤグループ８０を構成することができる。ＲＡＩＤグループ８０とは、例えば、ＲＡＩＤ５（ＲＡＩＤ５に限定されない）に従って、データの冗長記憶を実現するディスクグループである。各ＲＡＩＤグループ８０により提供される物理的な記憶領域の上には、論理的な記憶領域である論理ボリューム８１（ＬＵ）を少なくとも１つ以上設定することができる。このＬＵ８１には、ホストコンピュータ１からアクセスされるユーザ領域や、制御情報の格納に使用されるシステム領域等が設定される。
【００３２】
共有メモリ４０は、例えば、不揮発メモリによって構成されており、制御情報や管理情報等を記憶する。キャッシュメモリ５０は、「外部メモリ」の一例であって、主としてデータを記憶する。
【００３３】
ＳＶＰ（Service Processor）２は、ディスクアレイ装置１０の管理及び監視を行うためのコンピュータ装置である。ＳＶＰ２は、ディスクアレイ装置１０内に設けられた通信ネットワークＣＮ３を介して、各ＣＨＡ２０及び各ＤＫＡ３０等から各種の環境情報や性能情報等を収集する。ＳＶＰ２が収集する情報としては、例えば、装置構成、電源アラーム、温度アラーム、入出力速度（IOPS）等が挙げられる。通信ネットワークＣＮ３は、例えば、ＬＡＮとして構成される。システム管理者は、ＳＶＰ２の提供するユーザインターフェースを介して、ＲＡＩＤ構成の設定、各種パッケージ（ＣＨＡ、ＤＫＡ、ディスクドライブ等）の閉塞処理等を行うことができる。
【００３４】
図２は、ＣＨＡ２０の概略構成を示すブロック図である。ＣＨＡ２０は、ポート部２１０と、データ転送制御部２２０と、プロセッサ２３０と、ローカルメモリ２４０とを備えている。
【００３５】
「通信部」の一例であるポート部２１０は、トランシーバ２１１と、プロトコル制御部２１２とを備えている。トランシーバ２１１は、プロトコル制御部２１２からの制御命令に従い、通信ネットワークＣＮ１を介して、ホストコンピュータ１との間のデータ通信を行う。プロトコル制御部２１２は、プロセッサ２３０からの制御命令に応じてトランシーバ２１１の動作を制御することにより、ホストコンピュータ１との間のデータ転送動作を制御する。
【００３６】
データ転送制御部２２０は、キャッシュメモリ５０とローカルメモリ２４０との間のデータ転送と、ローカルメモリ２４０とポート部２１０との間のデータ転送とを、それぞれ制御する。データ転送制御部２２０は、キャッシュメモリ５０−ローカルメモリ２４０間のデータ転送と、ポート部２１０−ローカルメモリ２４０間のデータ転送とを、プロセッサ２３０を介さずに、ＤＭＡ（Direct Memory Access）転送する。
【００３７】
データ転送制御部２２０は、入力保証コード演算部２２１と、出力保証コード演算部２２２とを備えている。入力保証コード演算部２２１及び出力保証コード演算部２２２は、「保証コード演算部」の一例である。入力保証コード演算部２２１は、キャッシュメモリ５０からローカルメモリ２４０に入力されるデータについて、保証コード（例えば、ＣＲＣ等）を生成し、保持するものである。出力保証コード演算部２２２は、ローカルメモリ２４０からポート部２１０に出力されるデータについて、保証コードを生成し、保持するものである。各保証コード演算部２２１．２２２は、それぞれハードウェア回路として構成されているが、これに限らず、保証コード演算機能の全部または一部をコンピュータプログラムによって実現してもよい。
【００３８】
入力保証コード演算部２２１の算出する入力保証コードＧＤ１は、ローカルメモリ２４０にデータを入力されるときに生成されるものである。出力保証コード演算部２２２の算出する出力保証コードＧＤ２，ＧＤ３は、ローカルメモリ２４０からデータを出力するときに生成されるものである。従って、入力保証コードを入力側保証コードやデータ読み込み時保証コード等と、出力保証コードを出力側保証コードやデータ読出し時保証コード等と表現することもできる。
【００３９】
プロセッサ２３０は、ＣＨＡ２０の全体動作を制御するもので、ポート部２１０及びデータ転送制御部２２０に適宜制御命令を出力する。プロセッサ２３０は、ポート部２１０及びデータ転送制御部２２０と協働して、後述する処理を実行する。
【００４０】
ローカルメモリ２４０は、ＣＨＡ２０内に設けられるもので、データバッファとしての機能を果たすものである。ホストコンピュータ１へデータを送信する場合、キャッシュメモリ５０から所定のデータが読み出されて、ローカルメモリ２４０に格納される。
【００４１】
図２に示すように、ホストコンピュータ１がデータＲＤを要求すると、ＤＫＡ３０は、要求されたデータＲＤをディスクドライブ７０から読み出して、キャッシュメモリ５０に格納させる。データ転送制御部２２０は、キャッシュメモリ５０に格納されたデータＲＤを読み出して、ローカルメモリ２４０に転送する。また、このとき入力保証コード演算部２２１により、データＲＤについて入力保証コードが算出される。
【００４２】
ローカルメモリ２４０に格納されたデータＲＤは、データ転送制御部２２０により、ローカルメモリ２４０から読み出されて、ポート部２１０に転送される。このとき出力保証コード演算部２２２により、データＲＤについて出力保証コードが算出される。
【００４３】
ポート部２１０に転送されたＲＤは、TCP／IPプロトコルに従ったパケットに分割され、トランシーバ２１１からホストコンピュータ１に送信される。入力保証コードと出力保証コードとを比較し、両保証コードが一致する場合は、ホストコンピュータ１に送信されたデータが、要求されたデータＲＤであることを保証することができる。
【００４４】
ホストコンピュータ１に送信したデータＲＤの一部に何らかの障害が発生した場合、ホストコンピュータ１は、障害で正常に受信できなかった部分データＲＤｐの再送信を要求する。この場合、ローカルメモリ２４０に格納されているデータＲＤから、要求された部分データＲＤｐが読み出され、ポート部２１０を介して再送信される。
【００４５】
その後、ローカルメモリ２４０に格納されているデータＲＤの全体がポート部２１０にダミー転送され、このダミー転送によって、データＲＤの出力保証コードが改めて算出される。ポート部２１０にダミー転送されたデータＲＤは、外部に送信されることなく破棄される。改めて算出された出力保証コードと、ローカルメモリ２４０にデータを格納したときに算出された入力保証コードとを比較することにより、先に送信された部分データＲＤｐが正常なデータであるか否かを（間接的に）保証することができる。
【００４６】
図３は、ＣＨＡ２０からホストコンピュータ１に送信されるデータ構造等を示す説明図である。まず、図３（ａ）に示すように、iSCSIのフレームは、MAC（Media Access Control Address）アドレス等を含むヘッダ３００と、IPパケット３１０と、TCPパケット３２０と、iSCSIPDU（Protocol Data Unit)３３０とを備え、PDU３３０内にSCSIコマンド、データ、SCSIレスポンスが格納されている。即ち、SCSIコマンドやデータ等をTCPパケットにカプセル化することにより、SCSIデータ等をIPネットワークを経由して送受信できるようになっている。
【００４７】
図３（ｂ）は、iSCSIプロトコルの階層構造を示す説明図である。階層の下から順番に、データリンク層／物理層、IP層、TCP層、iSCSI層、SCSI層、アプリケーション層が重ねられている。アプリケーション層（ホストコンピュータ上のファイルシステムやCHA）では、ブロック単位でのデータ転送を行う。SCSI層では、SCSIコマンドを用いてデータの送受信を行う。SCSI層では、ターゲットID、ＬＵ番号、ＬＢＡ（Logical Block Adress）によりアドレスを特定する。iSCSI層では、iSCSIネームによりアドレスを特定する。TCP層ではポート番号を使用し、IP層ではIPアドレスを用いる。iSCSI層は、SCSI層とTCP層の中間に位置し、SCSI層から受け取ったデータ等をカプセル化してiSCSIPDU３３０を生成し、TCP層に渡す。また、iSCSI層は、TCP層から受け取ったiSCSIPDU３３０からSCSIコマンドやデータを抽出し、SCSI層に引き渡す。
【００４８】
図４は、ディスクアレイ装置の全体動作の概略を示すフローチャートである。まず、ホストコンピュータ１はＣＨＡ２０にログインし、ログイン認証等を行う（Ｓ１）。次に、ホストコンピュータ１は、リードコマンドを送信することにより、ＣＨＡ２０に対してデータの送信を要求する（Ｓ２）。ＣＨＡ２０は、ホストコンピュータ１からの要求を受け付けると、共有メモリ４０にリードコマンドを記憶させることにより、ＤＫＡ３０に対してデータの読み出しを要求する（Ｓ３）。
【００４９】
ＤＫＡ３０は、ディスクドライブ７０からデータを読み出し、キャッシュメモリ５０に記憶させる（Ｓ５）。ＣＨＡ２０は、キャッシュメモリ５０に記憶されたデータを読み出し（Ｓ６）、ホストコンピュータ１に送信する（Ｓ７）。ホストコンピュータ１へのデータ送信が完了すると、ＣＨＡ２０は、データ送信が正常に行われたことを示す正常ステータスをホストコンピュータ１に通知する（Ｓ８）。
【００５０】
なお、要求されたデータが既にキャッシュメモリ５０に記憶されている場合は、キャッシュメモリ５０内のデータがＣＨＡ２０に読み込まれる。より詳しくは、ポート部２１０がデータ読み出しを要求するiSCSIコマンドフレームを受信すると、このコマンドはプロセッサ２３０に入力され、プロセッサ２３０によってコマンド内容が解釈される。プロセッサ２３０は、データ送信に必要なキャッシュ領域をキャッシュメモリ５０に確保し、データ転送制御部２２０にデータの読み込みを指示する。
【００５１】
ＣＨＡ２０からのデータ送信が正常に行われた場合であっても、ホストコンピュータ１では一部のデータを読み出せない場合がある。例えば、ネットワークが混雑していたり、ホストコンピュータ１の処理負荷が大きかったりした場合は、一部のパケットが途中で消失したり、あるいはデータ化けを起こすことがある。そこで、ホストコンピュータ１は、正常に読み込むことができなかった一部のデータについて、ＣＨＡ２０に再送信を要求する（Ｓ９）。
【００５２】
ＣＨＡ２０は、部分データの再送信要求を受信すると、キャッシュメモリ５０に残されているデータを読み出し（Ｓ１０）、要求された部分データのみをホストコンピュータ１に再送信する（Ｓ１１）。なお、ローカルメモリ２４０内にデータが残されている場合は、ローカルメモリ２４０から部分データを読み出して、ホストコンピュータ１に再送信することもできる。ＣＨＡ２０は、部分データの再送信を完了すると、正常にデータ送信が行われたか否かを判定し、正常ステータスまたは異常ステータスをホストコンピュータ１に送信する（Ｓ１２）。
【００５３】
図５は、ＣＨＡ２０によるデータ転送処理の具体例を示すフローチャートである。図５のフローチャートは、図４中のＳ７，Ｓ８に示す処理に相当する。また、図５に示すフローチャートは、ＣＨＡ２０によって実行されるもので、より詳しくは、プロセッサ２３０，ポート部２１０，データ転送制御部２２０の協働作業により実行される。
【００５４】
データ転送制御部２２０は、プロセッサ２３０からの指示に基づいて、キャッシュメモリ５０に記憶されているデータＲＤをローカルメモリ２４０に転送する（Ｓ２１）。このとき、入力保証コード演算部２２１は、ローカルメモリ２４０に格納されるデータＲＤについて入力保証コードＧＤ１を算出し保持する（Ｓ２２）。
【００５５】
データ転送制御部２２０は、プロセッサ２３０からの指示に基づいて、ローカルメモリ２４０に格納されているデータＲＤを読み出し、このデータＲＤをポート部２１０に転送する（Ｓ２３）。このとき、出力保証コード演算部２２２は、ローカルメモリ２４０から読み出されたデータについて出力保証コードＧＤ３を算出し保持する（Ｓ２４）。
【００５６】
ポート部２１０に転送されたデータＲＤは、プロトコル制御部２１２によりカプセル化処理され、トランシーバ２１１から通信ネットワークＣＮ１を介してホストコンピュータ１に送信される（Ｓ２５）。
【００５７】
次に、ＣＨＡ２０は、データＲＤの送信に際して障害が発生したか否かを判定する（Ｓ２６）。障害とは、例えば、パケットの消失や未着、データエラー等である。障害が発生していない場合、即ちデータＲＤを全て正常に送信できた場合は（S26：NO）、ＣＨＡ２０は、入力保証コードＧＤ１と出力保証コードＧＤ３とが一致するか否かを比較する（Ｓ２７）。両保証コードＧＤ１，ＧＤ３が一致する場合（S27：YES）、ＣＨＡ２０は、ホストコンピュータ１に正常ステータスを送信する（Ｓ２８）。両保証コードＧＤ１，ＧＤ３が不一致の場合（S27：NO）、ＣＨＡ２０は、ホストコンピュータ１に異常ステータスを送信する（Ｓ２９）。
【００５８】
一方、データＲＤを送信したときに障害発生が検知された場合は（S26：YES）、再送信処理が行われる（Ｓ３０）。この再送信処理の具体例を図６のフローチャートと共に説明する。再送信処理は、ＣＨＡ２０により実行される。
【００５９】
ＣＨＡ２０は、ホストコンピュータ１からの再送信要求を受信すると（Ｓ３０１）、再送信を要求されたデータが、データＲＤの一部分であるかを判定する（Ｓ３０２）。データＲＤの一部分の再送信要求ではない場合は（S302：NO）、データＲＤの全体が要求されている場合である。そこで、図５中のＳ２３に戻り、データＲＤを再送信する。
【００６０】
一方、ホストコンピュータ１からデータＲＤの一部について再送信を要求された場合（S302：YES）、ＣＨＡ２０は、要求された部分データＲＤｐをローカルメモリ２４０からポート部２１０のプロトコル制御部２１２に転送させる（Ｓ３０３）。部分データＲＤｐは、カプセル化処理されてトランシーバ２１１からホストコンピュータ１に送信される（Ｓ３０４）。このとき、出力保証コード演算部２２２は、部分データＲＤｐについて出力保証コードＧＤ２を算出し保持する（Ｓ３０５）。
【００６１】
ＣＨＡ２０は、部分データＲＤｐについて得られた出力保証コード（部分出力保証コード）ＧＤ２と入力保証コードＧＤ１とが一致するか否かを判定する（Ｓ３０６）。入力保証コードＧＤ１は、データＲＤをローカルメモリ２４０に格納したときに生成されたものであるから、ＣＨＡ内部のデータ転送等が正常な場合は、入力保証コードＧＤ１と部分出力保証コードＧＤ２とは一致しない。入力保証コードＧＤ１と部分出力保証コードＧＤ２とが一致した場合（S306：NO）、エラー処理が行われる（Ｓ３０７）。このエラー処理では、例えば、異常ステータスがホストコンピュータ１に送信される。
【００６２】
入力保証コードＧＤ１と部分出力保証コードＧＤ２とが一致しない場合（S306：YES）、ＣＨＡ内部のデータ転送が正常に行われており、また、データＲＤの一部分をＳ３０４で送信したことが推定される。次に、ＣＨＡ２０は、ローカルメモリ２４０に格納されているデータＲＤの全体を、ポート部２１０のプロトコル制御部２１２にダミー転送させる（Ｓ３０８）。プロトコル制御部２１２は、ダミー転送されたデータＲＤを受信するものの、カプセル化処理等は行わずに直ちに破棄する。ローカルメモリ２４０からポート部２１０へのダミー転送によって、出力保証コード演算部２２２は、データＲＤに関する出力保証コードＧＤ３を改めて算出し保持する（Ｓ３０９）。
【００６３】
ＣＨＡ２０は、再度算出された出力保証コードＧＤ３と既に作成済みの入力保証コードＧＤ１とが一致するか否かを判定する（Ｓ３１０）。両保証コードＧＤ１，ＧＤ３が一致する場合（S310：YES）、ＣＨＡ２０は、Ｓ３０４で送信した部分データＲＤｐが正常なデータであると判定し、正常な再送信が行われたことを示す正常ステータスをホストコンピュータ１に送信する（Ｓ３１１）。両保証コードＧＤ１，ＧＤ３が不一致の場合（S310：NO）、ＣＨＡ２０は、部分データＲＤｐが異常データであることを示す異常ステータスを送信する。
【００６４】
本実施例によれば、データＲＤの一部を構成する部分データＲＤｐについて再送信がホストコンピュータ１から要求された場合でも、部分データＲＤｐが正常なデータであることを間接的に証明してデータ保証を行うことができる。従って、ファイバチャネルプロトコルのように、基本的に、送信済データの一部分についてはデータ保証を行えない環境下であっても、部分データのデータ保証を行うことができる。これにより、ファイバチャネルプロトコル用に開発されたＣＨＡ２０をIPネットワークに対応させながら、データ保証を行うことができる。また、本実施例では、ポート部２１０にデータバッファを備えない構成においても、部分データＲＤｐの再送信及びデータ保証を行うことができる。
【実施例２】
【００６５】
図７は、第１実施例の変形例に相当するＣＨＡ２０の概略構成を示す。本実施例の特徴は、入力保証コード及び出力保証コードの両方を１つの保証コード演算部２２３によって算出し保持するようにした点にある。
【００６６】
なお、本発明は、上述した各実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、保証コードとしてはＣＲＣを例示したが、これに限らず、種々の保証コードを採用することができる。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施形態に係わるディスクアレイ装置の全体構成を示すブロック図である。
【図２】ＣＨＡの概略構成を示すブロック図である。
【図３】（ａ）はiSCSIのフレーム構造を、（ｂ）はiSCSIの階層構造をそれぞれ示す説明図である。
【図４】ディスクアレイ装置の全体動作の概要を示すフローチャートである。
【図５】ＣＨＡによるデータ転送処理の概要を示すフローチャートである。
【図６】データを再送信する場合の処理概要を示すフローチャートである。
【図７】変形例に係わるＣＨＡの概略構成を示すブロック図である。
【符号の説明】
【００６８】
１…ホストコンピュータ、２…ＳＶＰ、１０…ディスクアレイ装置、２０…ＣＨＡ、３０…ＤＫＡ、４０…共有メモリ、５０…キャッシュメモリ、６０…スイッチ部、７０…ディスクドライブ、８０…RAIDグループ、８１…論理ボリューム、２１０…ポート部、２１１…トランシーバ、２１２…プロトコル制御部、２２０…データ転送制御部、２２１…入力保証コード演算部、２２２…出力保証コード演算部、２２３…保証コード演算部、２３０…プロセッサ、２４０…ローカルメモリ、ＣＮ１〜ＣＮ３…通信ネットワーク、ＧＤ１…入力保証コード、ＧＤ２…部分出力保証コード、ＧＤ３…出力保証コード、ＲＤ…データ、ＲＤｐ…部分データ
【図１】
2005157624.tif 000003
【図２】
2005157624.tif 000004
【図３】
2005157624.tif 000005
【図４】
2005157624.tif 000006
【図５】
2005157624.tif 000007
【図６】
2005157624.tif 000008
【図７】
2005157624.tif 000009