(57)【要約】【課題】書き込みデータの送達確認のための処理負荷を低減する。【解決手段】記憶部１３は、記憶部２０へのデータの送達状況を確認するための確認用データ２ｂを記憶部２０上のあらかじめ決められた位置から読み出すための命令セット１ｃを記憶する。プロセッサ１１は、書き込みデータ２ａを記憶部２０へ書き込む書き込み命令と、記憶部１３における命令セット１ｃの位置を含む命令セット１ｂとを作成して出力する。転送制御部１２は、書き込み命令に応じて記憶部２０への書き込みデータ２ａの書き込みを実行した後、命令セット１ｂに基づいて記憶部１３から命令セット１ｃを読み出し、命令セット１ｃに基づいて記憶部２０からの確認用データ２ｂの読み出しを実行し、その実行の成否を判定する。【選択図】図１
2017130002.tif 000002
【特許請求の範囲】
【請求項１】
第２の記憶部へのデータの送達状況を確認するための確認用データを前記第２の記憶部上のあらかじめ決められた位置から読み出すための第１の命令セットを記憶する第１の記憶部と、
書き込みデータを前記第２の記憶部へ書き込む書き込み命令と、前記第１の記憶部における前記第１の命令セットの位置を含む第２の命令セットとを作成して出力するプロセッサと、
前記書き込み命令に応じて前記第２の記憶部への前記書き込みデータの書き込みを実行した後、前記第２の命令セットに基づいて前記第１の記憶部から前記第１の命令セットを読み出し、前記第１の命令セットに基づいて前記第２の記憶部からの前記確認用データの読み出しを実行し、その実行の成否を判定する転送制御部と、
を有するストレージ制御装置。
【請求項２】
前記第１の命令セットは、アドレス情報として、前記第２の記憶部における前記確認用データの位置を示す転送元アドレスと、前記確認用データの転送先アドレスとを含み、
前記第２の命令セットは、アドレス情報として、前記第１の記憶部における前記第１の命令セットの位置を示す単独のアドレスを含む、
請求項１記載のストレージ制御装置。
【請求項３】
前記第１の記憶部は、前記プロセッサから出力された命令セットを一時的に記憶する一時記憶領域を有し、
前記プロセッサは、前記書き込みデータを前記第２の記憶部へ書き込むための第３の命令セットと、前記第２の命令セットとを作成して前記一時記憶領域に格納し、
前記転送制御部は、前記一時記憶領域から前記第３の命令セットを読み出し、前記第３の命令セットに基づいて前記第２の記憶部への前記書き込みデータの書き込みを実行し、次に前記一時記憶領域から前記第２の命令セットを読み出し、前記第２の命令セットに基づいて前記第１の記憶部から前記第１の命令セットを読み出す、
請求項１または２記載のストレージ制御装置。
【請求項４】
前記第１の記憶部は、ホスト装置からの書き込み要求に応じた、前記ストレージ制御装置に接続された記憶装置に対する前記書き込みデータの書き込み処理を実行する際にキャッシュとして利用されるキャッシュ領域を含み、
前記第２の記憶部は、他のストレージ制御装置に搭載され、前記キャッシュ領域のデータのミラーデータを格納するためのミラーキャッシュ領域を含み、
前記プロセッサは、前記ホスト装置から前記書き込み要求と前記書き込みデータとを受信すると、前記書き込みデータを前記キャッシュ領域に書き込むとともに、前記ミラーキャッシュ領域を書き込み先とする前記書き込み命令と前記第２の命令セットとを出力し、前記キャッシュ領域への前記書き込みデータの書き込みに成功し、かつ、前記転送制御部により前記確認用データの読み出しに成功したと判定されると、前記書き込み要求に対する完了応答を前記ホスト装置に出力する、
請求項１乃至３のいずれか１項に記載のストレージ制御装置。
【請求項５】
第２の記憶部へのデータの送達状況を確認するための確認用データについての前記第２の記憶部における位置を示す転送元アドレスと、転送先アドレスと、読み出し命令とを含む第１の命令セットを記憶する第１の記憶部と、
第２の命令セットを作成して出力するプロセッサであって、前記第２の命令セットは、転送元アドレスと、前記第２の記憶部における位置を示す転送先アドレスと、書き込み命令とを含む情報群、または、前記第１の記憶部における前記第１の命令セットの位置を示す参照先アドレスと、参照命令とを含む情報群を含む、前記プロセッサと、
前記プロセッサから出力された前記第２の命令セットが前記書き込み命令を含む場合には、前記第２の命令セットに含まれる転送元アドレスと転送先アドレスとに基づいて前記第２の記憶部へのデータの書き込みを実行し、前記プロセッサから出力された前記第２の命令セットが前記参照命令を含む場合には、前記第２の命令セットに含まれる参照先アドレスに基づいて前記第１の記憶部から前記第１の命令セットを読み出し、前記第１の命令セットに基づいて前記第２の記憶部から前記確認用データを読み出し、その成否を判定する転送制御部と、
を有するストレージ制御装置。
【請求項６】
コンピュータに、
第２の記憶部へのデータの送達状況を確認するための確認用データを前記第２の記憶部上のあらかじめ決められた位置から読み出すための第１の命令セットを第１の記憶部に格納し、
書き込みデータを前記第２の記憶部へ書き込む書き込み命令と、前記第１の記憶部における前記第１の命令セットの位置を示す位置情報、および前記位置情報に基づく前記第１の命令セットの読み出し命令を含む第２の命令セットとを作成し、前記第２の記憶部へのアクセス動作を実行する転送制御部に対して前記書き込み命令と前記第２の命令セットとを出力することで、前記第２の記憶部からの前記確認用データの読み出しを前記転送制御部に指示する、
処理を実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置および制御プログラムに関する。
【背景技術】
【０００２】
コンピュータシステム内でのデータ転送方式の１つとして、ＤＭＡ（Direct Memory Access）がある。ＤＭＡを用いたシステムでは、ＣＰＵ（Central Processing Unit）がＤＭＡコントローラにデータ転送を指示すると、ＤＭＡコントローラは、ＣＰＵとは独立に記憶装置間で直接データを転送する。これにより、ＣＰＵの処理負荷が低減され、システム全体での処理効率が向上する。
【０００３】
ＤＭＡを用いたシステムの例として、ＣＰＵがディスクリプタ情報を生成してディスクリプタ記憶部に格納すると、ＨＤＤ（Hard Disk Drive）内のコントローラがディスクリプタ記憶部からディスクリプタ情報を読み出し、そのディスクリプタ情報にしたがってメモリとＨＤＤとの間でＤＭＡ転送するものが提案されている。
【０００４】
また、データのバックアップを確実に実行するための技術として、次のようなシステムが提案されている。このシステムにおいては、第１の装置は、データを格納するとともにそのデータを第２の装置へ送信し、第２の装置は、第１の装置から受信したデータを格納するとともにそのデータを第１の装置へ送信する。第１の装置は、第２の装置へ送信したデータと第２の装置から受信したデータとを照合し、それらが不一致である場合にはデータを再度送信する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２４１５８８号公報
【特許文献２】特開２００５−１８２２５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、ＤＭＡコントローラが、ＣＰＵによって作成されたディスクリプタに基づいて、第１の記憶装置内のデータを第２の記憶装置に書き込む処理を想定する。この場合に、第２の記憶装置にデータが送達されたかを確認する方法として、第２の記憶装置へのデータの書き込み後に、そのデータを読み出して照合する方法が考えられる。
【０００７】
このようにデータの書き込み後に照合用データを読み出すためには、ＣＰＵは、データの書き込みのためのディスクリプタと、照合用データの読み出しのためのディスクリプタとを作成する。データの書き込みのたびに照合用データの読み出しも実行する場合は、このような２つのディスクリプタが繰り返し生成される。
【０００８】
しかし、データの書き込みのたびに、データの送達確認のためのディスクリプタを繰り返し生成することは、ＣＰＵの処理効率を悪化させるという問題がある。また、データの書き込みのたびにそのデータと同じサイズの照合用データを読み出すので、照合用データの読み出しにかかる時間が長くなる場合があり、そのことがデータの送達確認全体の処理効率を悪化させる原因になる。
【０００９】
１つの側面では、本発明は、書き込みデータの送達確認のための処理負荷を低減可能なストレージ制御装置および制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、第１の記憶部、プロセッサおよび転送制御部を有するストレージ制御装置が提供される。このストレージ制御装置において、第１の記憶部は、第２の記憶部へのデータの送達状況を確認するための確認用データを第２の記憶部上のあらかじめ決められた位置から読み出すための第１の命令セットを記憶する。プロセッサは、書き込みデータを第２の記憶部へ書き込む書き込み命令と、第１の記憶部における第１の命令セットの位置を含む第２の命令セットとを作成して出力する。転送制御部は、書き込み命令に応じて第２の記憶部への書き込みデータの書き込みを実行した後、第２の命令セットに基づいて第１の記憶部から第１の命令セットを読み出し、第１の命令セットに基づいて第２の記憶部からの確認用データの読み出しを実行し、その実行の成否を判定する。
【００１１】
また、１つの案では、第１の記憶部、プロセッサおよび転送制御部を有するストレージ制御装置が提供される。このストレージ制御装置において、第１の記憶部は、第２の記憶部へのデータの送達状況を確認するための確認用データについての第２の記憶部における位置を示す転送元アドレスと、転送先アドレスと、読み出し命令とを含む第１の命令セットを記憶する。プロセッサは、第２の命令セットを作成して出力する。この第２の命令セットは、転送元アドレスと、第２の記憶部における位置を示す転送先アドレスと、書き込み命令とを含む情報群、または、第１の記憶部における第１の命令セットの位置を示す参照先アドレスと、参照命令とを含む情報群を含む。転送制御部は、プロセッサから出力された第２の命令セットが書き込み命令を含む場合には、第２の命令セットに含まれる転送元アドレスと転送先アドレスとに基づいて第２の記憶部へのデータの書き込みを実行し、プロセッサから出力された第２の命令セットが参照命令を含む場合には、第２の命令セットに含まれる参照先アドレスに基づいて第１の記憶部から第１の命令セットを読み出し、第１の命令セットに基づいて第２の記憶部から確認用データを読み出し、その成否を判定する。
【００１２】
また、１つの案では、上記のストレージ制御装置のプロセッサと同様の処理をコンピュータに実行させる制御プログラムが提供される。
【発明の効果】
【００１３】
１つの側面では、書き込みデータの送達確認のための処理負荷を低減できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ＣＭおよびＦＲＴのハードウェア構成例を示す図である。
【図４】ＤＭＡコントローラの内部構成例を示す図である。
【図５】ディスクリプタについて説明するための図である。
【図６】ＤＭＡコントローラによる基本的なデータ転送処理手順の例を示すシーケンス図である。
【図７】ダミーリードを伴うライト処理手順の比較例を示すシーケンス図（その１）である。
【図８】ダミーリードを伴うライト処理手順の比較例を示すシーケンス図（その２）である。
【図９】ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。
【図１０】第２の実施の形態におけるダミーリード実行の仕組みを説明するための図である。
【図１１】第２の実施の形態において、ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。
【図１２】ホストライトが要求された場合の処理手順の例を示すシーケンス図（その１）である。
【図１３】ホストライトが要求された場合の処理手順の例を示すシーケンス図（その２）である。
【図１４】ＤＭＡコントローラの初期化処理の例を示すフローチャートである。
【図１５】ホストライトが要求された場合のＣＰＵの処理の例を示すフローチャートである。
【図１６】ＤＭＡコントローラの処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。図１に示すストレージ制御装置１０は、プロセッサ１１、転送制御部１２および記憶部１３を有する。
【００１６】
プロセッサ１１は、記憶部２０へのデータの書き込みや、記憶部２０からのデータの読み出しを転送制御部１２に指示する。転送制御部１２は、例えば、プロセッサ１１とは別の制御回路や演算回路として実現される。転送制御部１２は、プロセッサ１１からの指示に基づいて、記憶部２０へのデータの書き込みや、記憶部２０からのデータの読み出しを実行する。転送制御部１２の動作により、記憶部２０へのデータの書き込みや、記憶部２０からのデータの読み出しは、プロセッサ１１を介在せずに実行される。
【００１７】
なお、図１では例として、転送制御部１２による読み書き制御の対象となる記憶部２０が、ストレージ制御装置１０の外部に配置されているが、記憶部２０はストレージ制御装置１０の内部に搭載されていてもよい。また、図１では例として、転送制御部１２は、記憶部２０と、ストレージ制御装置１０が有する記憶部１３との間のデータ転送を制御するものとする。記憶部１３，２０は、例えば、ＲＡＭ（Random Access Memory）などの記憶装置として実現される。
【００１８】
記憶部１３には、命令セット１ｃがあらかじめ格納される。後述するように、命令セット１ｃには、確認用データ２ｂの読み出し処理を転送制御部１２に実行させるための情報が含まれる。
【００１９】
ところで、プロセッサ１１は、記憶部２０へのデータの書き込みを転送制御部１２に実行させた後、そのデータが記憶部２０に送達されたかを確認するための読み出し処理を転送制御部１２に実行させる。この確認用の読み出し処理では、記憶部２０に記憶された確認用データ２ｂが読み出される。確認用データ２ｂは、記憶部２０への書き込みが行われた書き込みデータとは別のデータであり、記憶部２０内のあらかじめ決められた位置に記憶される。
【００２０】
転送制御部１２によって書き込みデータが記憶部２０に書き込まれた後、その書き込みデータの書き込み先の位置に関係なく、同一の確認用データ２ｂが転送制御部１２によって読み出される。確認用データ２ｂの読み出しが成功した場合、少なくとも、転送制御部１２から記憶部２０までの経路上の回路は正常に動作している。このため、その直前に実行された記憶部２０へのデータ書き込みは、正常に実行された可能性が高いと判断される。
【００２１】
このように確認用データ２ｂを読み出すことでデータ送達を確認する方法によれば、記憶部２０に書き込みデータを書き込んだ直後にその書き込みデータを読み出すベリファイリード処理と比較して、読み出されるデータのサイズを一定量以下に留めることができる。このため、送達確認のための処理負荷を低減し、かつその処理時間を短縮できる。
【００２２】
以下、記憶部２０へのデータ書き込みとそのデータの送達確認とを含む処理について具体的に説明する。
まず、プロセッサ１１は、書き込みデータ２ａを記憶部１３から記憶部２０に書き込むように転送制御部１２に指示する（ステップＳ１ａ）。この書き込み指示は、例えば、プロセッサ１１が命令セット１ａを作成して出力することで行われる。命令セット１ａには、書き込みを指示する書き込み命令と、記憶部１３における書き込みデータ２ａの位置を示す転送元アドレスと、記憶部２０における書き込みデータ２ａの書き込み先を示す転送先アドレスとが含まれる。なお、書き込みデータ２ａの転送元および転送先の位置は任意であるので、命令セット１ａに含まれる転送元アドレスおよび転送先アドレスは可変である。
【００２３】
転送制御部１２は、出力された命令セット１ａを参照し、転送元アドレスに基づいて記憶部１３から書き込みデータ２ａを読み出し、転送先アドレスに基づいて書き込みデータ２ａを記憶部２０へ書き込む（ステップＳ１ｂ）。
【００２４】
次に、プロセッサ１１は、確認用データ２ｂを読み出すように転送制御部１２に指示する。この読み出し指示は、プロセッサ１１が命令セット１ｂを作成して出力することで行われる（ステップＳ２ａ）。なお、命令セット１ａの出力後に、書き込みデータ２ａの書き込みの実行開始や実行完了を待たずに命令セット１ｂがプロセッサ１１から出力されてもよい。
【００２５】
命令セット１ｂには、例えば図１に示すように、記憶部１３における命令セット１ｃの位置を示す参照先アドレスと、参照先アドレスからの読み出しを指示する読み出し命令とが含まれる。ここで、命令セット１ｃは、複数回の書き込み命令後の成否確認用に共通に用いられるので、命令セット１ｂに含まれる参照先アドレスは、固定値とされる。
【００２６】
転送制御部１２は、出力された命令セット１ｂに基づいて、記憶部１３から命令セット１ｃを読み出す（ステップＳ２ｂ）。図１の例では、転送制御部１２は、命令セット１ｂに含まれる参照先アドレスに基づいて、命令セット１ｃを記憶部１３から読み出す。
【００２７】
命令セット１ｃには、確認用データ２ｂを記憶部２０のあらかじめ決められた位置から読み出すための情報が含まれる。例えば、命令セット１ｃには、読み出しを指示する読み出し命令と、記憶部２０における確認用データ２ｂの位置を示す転送元アドレスと、記憶部１３における確認用データ２ｂの書き込み先を示す転送先アドレスとが含まれる。ここで、命令セット１ｃに含まれる転送元アドレスと転送先アドレスは、固定値とされる。
【００２８】
転送制御部１２は、読み出した命令セット１ｃに基づいて、確認用データ２ｂを記憶部２０から読み出す（ステップＳ２ｃ）。図１の例では、転送制御部１２は、命令セット１ｃに含まれる転送元アドレスに基づいて確認用データ２ｂを記憶部２０から読み出し、転送先アドレスに基づいて確認用データ２ｂを記憶部１３へ書き込む。
【００２９】
転送制御部１２は、確認用データ２ｂの読み出しの成否を判定してプロセッサ１１に通知する（ステップＳ２ｄ）。プロセッサ１１は、確認用データ２ｂの読み出しに成功したことが通知された場合に、書き込みデータ２ａの書き込みに成功したと判定する。
【００３０】
ここで、転送制御部１２に確認用データ２ｂの読み出しを実行させる方法としては、例えば、プロセッサ１１がその読み出し用の命令セット１ｃを作成して転送制御部１２に出力する方法が考えられる。しかし、確認用データ２ｂの読み出し元は常に同一であり、その読み出し先も同一でよいため、作成される命令セット１ｃの内容も常に同一でよい。このような同一内容の命令セット１ｃを、記憶部２０への書き込みデータの書き込みを指示するたびに作成することは、無駄な処理であり、プロセッサ１１の処理効率を悪化させる。
【００３１】
これに対して、本実施の形態に係るストレージ制御装置１０においては、このような同一内容の命令セット１ｃがあらかじめ作成され、記憶部１３に記憶される。そして、プロセッサ１１は、この命令セット１ｃの読み出しを指示する命令セット１ｂを作成して出力することで、確認用データ２ｂの読み出しを転送制御部１２に指示する。転送制御部１２は、出力された命令セット１ｂに基づいて命令セット１ｃを読み出し、命令セット１ｃに基づいて確認用データ２ｂを記憶部２０から読み出す。
【００３２】
プロセッサ１１が作成する命令セット１ｂは、記憶部１３上の固定位置に記憶された命令セット１ｃを読み出すための内容だけを含めばよいので、記憶部間のデータ転送を指示するための命令セット１ｃより簡易な内容とすることができる。このため、命令セット１ｂのデータサイズを、命令セット１ｃより小さくすることができる。例えば、命令セット１ｃが転送元と転送先という２つのアドレスを含むのに対し、命令セット１ｂは参照先を示すただ１つのアドレスのみを含めばよい。また、図１の例のように確認用データ２ｂが装置外部の記憶部２０に格納されている場合、命令セット１ｃにおける転送元アドレスとしては実アドレスが設定される。これに対して、命令セット１ｃは装置内部のローカルな記憶部内の固定位置に記憶されているので、その位置を指定するための命令セット１ｂ内の参照先アドレスのビット数を、様々な方法で減少させることができる。
【００３３】
このように、本実施の形態に係るストレージ制御装置１０によれば、確認用データ２ｂの読み出しを指示するためにプロセッサ１１が作成する命令セット１ｂのサイズを小さくすることができる。このため、確認用データ２ｂの読み出しを指示するために要するプロセッサ１１の処理時間を短縮でき、その処理負荷を低減できる。
【００３４】
以上説明したように、本実施の形態に係るストレージ制御装置１０によれば、書き込みデータの送達確認のために読み出されるデータのサイズを安定的に小さくすることができる。さらに、確認用データ２ｂの読み出しを指示するための命令セット１ｂのサイズも小さくすることができる。これにより、書き込みデータの送達確認のための処理負荷を低減でき、かつ処理時間を短縮できる。
【００３５】
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すストレージシステム５０は、ＣＭ（Controller Module）１００，２００、ＦＲＴ（Frontend RouTer）３１０およびＤＥ（Drive Enclosure）３２０を有する。また、ＣＭ１００，２００には、ＳＡＮ（Storage Area Network）４３０を介してホスト装置４１０，４２０が接続されている。
【００３６】
ＣＭ１００，２００は、ホスト装置４１０またはホスト装置４２０からの要求に応じて、ＤＥ３２０に搭載された記憶装置に対するアクセスを制御するストレージ制御装置である。ＣＭ１００は、ＣＭ１００の内部のキャッシュを用いて、ＤＥ３２０内の記憶装置に対するアクセスを制御する。ＣＭ２００も同様に、ＣＭ２００の内部のキャッシュを用いて、ＤＥ３２０内の記憶装置に対するアクセスを制御する。
【００３７】
また、ＣＭ１００とＣＭ２００は、ＦＲＴ３１０を介して互いに接続され、データを互いに送受信することができる。特に、後述するように、ＣＭ１００とＣＭ２００との間では、それぞれが備えるＤＭＡコントローラにより、一方が備えるＲＡＭから他方が備えるＲＡＭへのデータの転送が可能になっている。
【００３８】
このようなＦＲＴ３１０を介したＲＡＭ間のデータ転送は、例えば、キャッシュのミラーリングに利用される。例えば、ＣＭ１００，２００のうち、一方が運用状態に設定され、他方がスタンバイ状態に設定される。運用状態のＣＭは、その内部のキャッシュのデータを、ＦＲＴ３１０を介して他方のＣＭ内のミラーリング領域に書き込むことで、キャッシュのデータを二重化する。これにより、運用状態のＣＭが異常停止した場合に、他方のＣＭが運用状態に遷移し、ＤＥ３２０内の記憶装置へのアクセス制御を引き継ぐことができる。
【００３９】
なお、以下の説明では、ホスト装置４１０またはホスト装置４２０から、ＣＭ１００またはＣＭ２００を介してＤＥ３２０にデータを書き込む処理を、「ホストライト」と記載する場合がある。また、ＣＭ１００のＲＡＭからＣＭ２００のＲＡＭへのデータの書き込み、またはその逆方向のデータの書き込みを、「ホストライト」とは区別して「ＣＭ間ライト」と記載する場合がある。
【００４０】
ＤＥ３２０には、ホスト装置４１０，４２０からのアクセス対象となる複数台の記憶装置が搭載されている。本実施の形態では例として、ＤＥ３２０は、このような記憶装置としてＨＤＤ３２１，３２２，３２３，・・・が搭載されたディスクアレイ装置であるものとする。なお、ホスト装置４１０，４２０からのアクセス対象となる記憶装置は、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置であってもよい。
【００４１】
図３は、ＣＭおよびＦＲＴのハードウェア構成例を示す図である。
ＣＭ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＳＳＤ１０３、ＰＣＩｅ（PCI express，PCI：Peripheral Component Interconnect）スイッチ（ＳＷ）１０４、ＣＡ（Channel Adapter）１０５、ＤＩ（Drive Interface）１０６およびＤＭＡコントローラ１１０を有する。
【００４２】
ＣＰＵ１０１は、ＣＭ１００全体を統括的に制御する。ＣＰＵ１０１は、例えば、１または複数のプロセッサを備える。また、図示しないが、ＣＰＵ１０１は、メモリコントローラを備えている。メモリコントローラにより、ＤＭＡコントローラ１１０からＲＡＭ１０２に対するデータの読み書きが、ＣＰＵ１０１のプロセッサを介さずに実行可能となる。
【００４３】
ＲＡＭ１０２は、ＣＭ１００の主記憶装置として使用される。ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。例えば、ＲＡＭ１０２には、ホスト装置４１０，４２０からの要求に応じたＤＥ３２０内の記憶装置へのアクセス制御の際に用いられるキャッシュの領域が確保される。
【００４４】
ＳＳＤ１０３は、ＣＭ１００の補助記憶装置として使用される。ＳＳＤ１０３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＨＤＤなどの他の種類の不揮発性記憶装置が用いられてもよい。また、ＳＳＤ１０３は、バスコントローラが搭載されたチップセットなどを介してＣＰＵ１０１と接続されていてもよい。
【００４５】
ＣＰＵ１０１とＣＡ１０５、ＤＩ１０６、ＤＭＡコントローラ１１０との間は、ＰＣＩｅスイッチ１０４を介してＰＣＩｅバスによって接続されている。ＰＣＩｅスイッチ１０４は、ＣＰＵ１０１とＣＡ１０５、ＤＩ１０６、ＤＭＡコントローラ１１０との間のデータ送受信を制御する。
【００４６】
ＣＡ１０５は、ＳＡＮ４３０を介してホスト装置４１０，４２０と通信するためのインタフェースである。ＣＡ１０５は、例えば、ＦＣ（Fibre Channel）インタフェースである。ＤＩ１０６は、ＤＥ３２０内の記憶装置と通信するためのインタフェースである。ＤＩ１０６は、例えば、ＳＡＳ（Serial Attached SCSI，SCSI：Small Computer System Interface）インタフェースである。
【００４７】
ＤＭＡコントローラ１１０は、ＲＡＭ１０２と、他方のＣＭ２００のＲＡＭ２０２との間のデータ転送を制御する。後述するように、ＤＭＡコントローラ１１０は、ＣＰＵ１０１によって作成されたディスクリプタの内容にしたがって、ＲＡＭ１０２とＲＡＭ２０２との間のデータ転送を制御する。
【００４８】
ＣＭ２００は、ＣＭ１００と同様のハードウェア構成を有する。ＣＭ２００は、ＣＰＵ２０１、ＲＡＭ２０２、ＳＳＤ２０３、ＰＣＩｅスイッチ（ＳＷ）２０４、ＣＡ２０５、ＤＩ２０６およびＤＭＡコントローラ２１０を有する。ＣＰＵ２０１、ＲＡＭ２０２、ＳＳＤ２０３、ＰＣＩｅスイッチ２０４、ＣＡ２０５、ＤＩ２０６およびＤＭＡコントローラ２１０は、ＣＰＵ１０１、ＲＡＭ１０２、ＳＳＤ１０３、ＰＣＩｅスイッチ１０４、ＣＡ１０５、ＤＩ１０６およびＤＭＡコントローラ１１０にそれぞれ対応する構成要素であるので、ここでは説明を省略する。
【００４９】
ＦＲＴ３１０は、ＰＣＩｅスイッチ（ＳＷ）３３１を有する。ＰＣＩｅスイッチ３３１は、ＣＭ１００のＤＭＡコントローラ１１０およびＣＭ２００のＤＭＡコントローラ２１０に接続されている。ＤＭＡコントローラ１１０、ＰＣＩｅスイッチ３３１およびＤＭＡコントローラ２１０を介することで、ＣＭ１００のＲＡＭ１０２とＣＭ２００のＲＡＭ２０２との間のデータ転送が、ＣＰＵ１０１，２０１を介さずに実行される。
【００５０】
なお、以上の構成において、ＣＭ１００，２００は、図１のストレージ制御装置１０の一例である。ＣＭ１００をストレージ制御装置１０の一例とした場合、ＣＰＵ１０１は図１のプロセッサ１１の一例であり、ＲＡＭ１０２，２０２はそれぞれ図１の記憶部１３，２０の一例であり、ＤＭＡコントローラ１１０は図１の転送制御部１２の一例である。
【００５１】
図４は、ＤＭＡコントローラの内部構成例を示す図である。なお、図４では、ＣＭ１００のＤＭＡコントローラ１１０の内部構成について示すが、ＣＭ２００のＤＭＡコントローラ２１０も同様の内部構成を有する。また、図４では、ＤＭＡコントローラ１１０によって参照されるＲＡＭ１０２上の記憶領域についても例示している。
【００５２】
ＤＭＡコントローラ１１０は、ディスクリプタ読み出し部１１１、転送制御部１１２、開始ポインタレジスタ１１３、終了ポインタレジスタ１１４、ベースアドレス記憶部１１５およびエラーレジスタ１１６を有する。また、ＲＡＭ１０２には、ディスクリプタ領域１２０および共用ディスクリプタ領域１３０が確保される。
【００５３】
ディスクリプタ領域１２０には、複数のディスクリプタがＦＩＦＯ（First In First Out）方式で格納される。ディスクリプタ領域１２０は、例えば、リングバッファとして実現される。ディスクリプタには、ＤＭＡコントローラ１１０に実行させるＲＡＭ間のデータ転送処理の内容を示す命令セットが記述される。ディスクリプタは、ＣＰＵ１０１によって作成されてディスクリプタ領域１２０に格納される。
【００５４】
共用ディスクリプタ領域１３０には、あらかじめ決められた同一のデータ転送処理（後述するダミーリード）の内容が記述された共用ディスクリプタが格納される。共用ディスクリプタは、ＣＰＵ１０１によって書き替え可能である。
【００５５】
また、ＣＭ１００は、ホストアクセス制御部１０１ａを有する。ホストアクセス制御部１０１ａの処理は、ＳＳＤ１０３などの記憶装置に記憶された所定のプログラムをＣＰＵ１０１が実行することによって実現される。ホストアクセス制御部１０１ａは、ホスト装置４１０またはホスト装置４２０からの要求に応じたＤＥ３２０へのアクセス処理を制御する。この制御において、ホストアクセス制御部１０１ａは、ＲＡＭ１０２に確保されたキャッシュ領域（図示せず）を使用する。
【００５６】
具体的には、ホストアクセス制御部１０１ａは、例えばホスト装置４１０からホストリードが要求されたとき、要求されたデータがキャッシュ領域に格納されている場合には、そのデータをキャッシュ領域から読み出してホスト装置４１０に送信する。一方、要求されたデータがキャッシュ領域に格納されていない場合、ホストアクセス制御部１０１ａは、要求されたデータをＤＥ３２０内のＨＤＤから読み出してキャッシュ領域に格納し、そのデータをホスト装置４１０に送信する。
【００５７】
また、ホストアクセス制御部１０１ａは、ホスト装置４１０またはホスト装置４２０からＤＥ３２０へのデータの書き込みをライトバック方式で制御する。例えば、ホスト装置４１０からホストライトが要求された場合、ホストアクセス制御部１０１ａは、ホスト装置４１０から受信したライトデータをＲＡＭ１０２のキャッシュ領域に書き込む。また、ホストアクセス制御部１０１ａは、そのライトデータをＣＭ２００のＲＡＭ２０２にも書き込む。ライトデータのＲＡＭ２０２への書き込みは、ＤＭＡコントローラ１１０にＲＡＭ間のデータ転送を依頼することで実行される。ホストアクセス制御部１０１ａは、ライトデータをＲＡＭ２０２に書き込んだ後、ホスト装置４１０にホストライトの完了応答を送信する。ホストアクセス制御部１０１ａは、その後のタイミングで、ＲＡＭ１０２のキャッシュ領域に書き込まれたライトデータを、ＤＥ３２０内の対応するＨＤＤに書き込む。
【００５８】
なお、ホストアクセス制御部１０１ａは、ＣＰＵ１０１によって実現され、かつ、ＲＡＭ間のデータ転送をＤＭＡコントローラ１１０に依頼する処理機能の中のあくまで一例である。ＣＰＵ１０１は、ホスト装置４１０またはホスト装置４２０からＤＥ３２０へのアクセス処理以外の処理過程において、ＲＡＭ１０２からＲＡＭ２０２へのデータ転送をＤＭＡコントローラ１１０に依頼してもよい。また、キャッシュ領域は、ＤＭＡコントローラ１１０によって実行されるＲＡＭ間のデータ転送における転送元の一例である。ＲＡＭ１０２の記憶領域のうち、ディスクリプタ領域１２０、共用ディスクリプタ領域１３０およびキャッシュ領域以外の領域が、ＲＡＭ間のデータ転送における転送元として指定されてもよい。
【００５９】
ディスクリプタ読み出し部１１１および転送制御部１１２は、例えば、それぞれ専用の電子回路として実現される。また、ディスクリプタ読み出し部１１１および転送制御部１１２の処理の一部は、ＤＭＡコントローラ１１０が備えるプロセッサが所定のファームウェアを実行することで実現されてもよい。
【００６０】
ディスクリプタ読み出し部１１１は、開始ポインタレジスタ１１３、終了ポインタレジスタ１１４およびベースアドレス記憶部１１５を参照しながら、ディスクリプタ領域１２０から順次ディスクリプタを読み出す。開始ポインタレジスタ１１３には、ディスクリプタ領域１２０のディスクリプタのうち、読み出しが未実行のディスクリプタの記憶領域の先頭位置を指し示す開始ポインタが記憶される。終了ポインタレジスタ１１４には、ディスクリプタ領域１２０のディスクリプタのうち、読み出しが終了したディスクリプタの記憶領域の終端位置を指し示す終了ポインタが記憶される。ベースアドレス記憶部１１５には、ベースアドレスが記憶される。開始ポインタおよび終了ポインタは、ベースアドレスを基準とした相対アドレスとして表され、ベースアドレスに開始ポインタおよび終了ポインタを加算することで、ディスクリプタ領域１２０における実際のアドレスが算出される。
【００６１】
ディスクリプタ読み出し部１１１は、読み出したディスクリプタに基づくデータ転送処理を、転送制御部１１２に依頼する。ディスクリプタ読み出し部１１１は、転送制御部１１２によるデータ転送処理の結果を示す情報を、エラーレジスタ１１６に記録する。
【００６２】
なお、ディスクリプタ読み出し部１１１は、後述するダミーリードを転送制御部１１２に実行させる場合には、ディスクリプタ領域１２０から読み出したディスクリプタに基づいて共用ディスクリプタ領域１３０から共用ディスクリプタを読み出す。そして、ディスクリプタ読み出し部１１１は、読み出した共用ディスクリプタに基づいてダミーリードを転送制御部１１２に依頼する。
【００６３】
転送制御部１１２は、ディスクリプタ読み出し部１１１から依頼されたデータ転送処理を実行する。実行するデータ転送処理は、ＣＭ１００のＲＡＭ１０２から読み出したデータをＣＭ２００のＲＡＭ２０２に書き込む「ＣＭ間ライト」と、ＣＭ２００のＲＡＭ２０２から読み出したデータをＣＭ１００のＲＡＭ１０２に書き込む「ＣＭ間リード」とに大別される。転送制御部１１２は、ＣＭ２００のＲＡＭ２０２へのデータの書き込みや、ＣＭ２００のＲＡＭ２０２からのデータの読み出しを、ＣＭ２００のＤＭＡコントローラ２１０に対してＦＲＴ３１０のＰＣＩｅスイッチ３３１を介して依頼する。これにより、ＲＡＭ１０２とＲＡＭ２０２との間のデータ転送は、ＣＭ１０１，２０１を介在させずに実行可能となる。
【００６４】
なお、転送制御部１１２は、ＣＭ２００のＤＭＡコントローラ２１０からの依頼に応じて、ＲＡＭ１０２へのデータの書き込みやＲＡＭ１０２からのデータの読み出しを実行することもできる。
【００６５】
図５は、ディスクリプタについて説明するための図である。図５に示すように、ディスクリプタには、例えば、モード、データ長、ソースアドレスおよび宛先アドレスが記述される。
【００６６】
モードは、処理の種別を示す。例えば、モードとしては、ＣＭ間ライトを示すライトモードや、ＣＭ間リードを示すリードモードがある。データ長は、ライトデータまたはリードデータのサイズを示す。ソースアドレスは、データの転送元アドレスを示す。ソースアドレスは、ライトモードではＲＡＭ１０２のアドレスを示し、リードモードではＲＡＭ２０２のアドレスを示す。宛先アドレスは、データの転送先アドレスを示す。宛先アドレスは、ライトモードではＲＡＭ２０２のアドレスを示し、リードモードではＲＡＭ１０２のアドレスを示す。本実施の形態では、ディスクリプタのサイズは１６バイトであり、モード、データ長、ソースアドレスおよび宛先アドレスの各領域のサイズは４バイトであるものとする。
【００６７】
前述のように、ＲＡＭ１０２には、複数のディスクリプタがＦＩＦＯ方式で格納されるディスクリプタ領域１２０が確保される。図５の例では、ディスクリプタ領域１２０は、ディスクリプタ＃１からディスクリプタ＃ＮまでのＮ個のディスクリプタを保持可能になっている。ディスクリプタは、ＣＰＵ１０１によって作成されてディスクリプタ領域１２０に格納される。ディスクリプタ領域１２０に格納されたディスクリプタは、ＤＭＡコントローラ１１０のディスクリプタ読み出し部１１１によって読み出され、その内容が参照される。
【００６８】
開始ポインタレジスタ１１３が記憶する開始ポインタは、ディスクリプタ領域１２０のディスクリプタのうち、読み出しが未実行のディスクリプタの記憶領域の先頭位置を指し示す。終了ポインタレジスタ１１４が記憶する終了ポインタは、ディスクリプタ領域１２０のディスクリプタのうち、読み出しが終了したディスクリプタの記憶領域の終端位置を指し示す。
【００６９】
ＣＰＵ１０１は、ディスクリプタを作成してディスクリプタ領域１２０に格納すると、格納したディスクリプタの記憶領域の終端位置を指し示すように終了ポインタを更新する。これにより、開始ポインタと終了ポインタとに差分が生じる状態となる。ＤＭＡコントローラ１１０のディスクリプタ読み出し部１１１は、開始ポインタが指し示す位置から終了ポインタが指し示す位置までディスクリプタを順次読み出し、読み出したディスクリプタに基づくデータ転送処理を実行する。
【００７０】
図５の例では、開始ポインタおよび終了ポインタがディスクリプタ＃３の終端位置を指し示す状態から、ＣＰＵ１０１によってディスクリプタ＃４〜＃６がディスクリプタ領域１２０に格納される。そして、終了ポインタはディスクリプタ＃６の終端位置を示すようにＣＰＵ１０１によって更新される。ディスクリプタ読み出し部１１１は、まず、開始ポインタに基づいてディスクリプタ＃４を読み出し、ディスクリプタ＃４に基づくデータ転送処理を転送制御部１１２に依頼する。このデータ転送処理が完了すると、ディスクリプタ読み出し部１１１は、開始ポインタをディスクリプタ１つ分だけ増加させる。以後、ディスクリプタ読み出し部１１１は、開始ポインタと終了ポインタとが一致するまで上記の処理を繰り返す。これにより、ディスクリプタ＃５，＃６が順次読み出され、ディスクリプタ＃５，＃６に基づくデータ転送処理が実行される。
【００７１】
なお、開始ポインタおよび終了ポインタの最大値は、ディスクリプタ領域１２０における最終のディスクリプタ（ディスクリプタ＃Ｎ）の先頭位置を示す値となる。この位置からディスクリプタ１つ分だけ開始ポインタおよび終了ポインタをさらに増加させる場合には、開始ポインタおよび終了ポインタの値はディスクリプタ領域１２０の先頭位置（ディスクリプタ＃１の先頭位置）を示す値に戻る。
【００７２】
図６は、ＤＭＡコントローラによる基本的なデータ転送処理手順の例を示すシーケンス図である。この図６では例として、ＣＭ２００のＲＡＭ２０２に対するライト処理（ＣＭ間ライト）の手順を示す。なお、図６に示す「ＳＰ」は、開始ポインタによって示されるディスクリプタ領域１２０の位置を示し、「ＥＰ」は、終了ポインタによって示されるディスクリプタ領域１２０の位置を示す。
【００７３】
［ステップＳ１１］ＣＰＵ１０１は、ＣＭ間ライトの処理内容を記述したディスクリプタ１２１を作成し、作成したディスクリプタ１２１をディスクリプタ領域１２０に書き込む。
【００７４】
［ステップＳ１２］ＣＰＵ１０１は、終了ポインタレジスタ１１４内の終了ポインタを、ディスクリプタ１つ分だけ増加させる。これにより、図６の左上に示すように、開始ポインタと終了ポインタとの間にディスクリプタ１つ分の差分が生じる状態となる。
【００７５】
［ステップＳ１３］ＤＭＡコントローラ１１０のディスクリプタ読み出し部１１１は、開始ポインタと終了ポインタとの間に差分が生じたことを検知すると、開始ポインタが指し示す位置からディスクリプタ１２１を読み出す。
【００７６】
［ステップＳ１４］ディスクリプタ読み出し部１１１は、ディスクリプタ１２１に基づくＣＭ間ライトを転送制御部１１２に依頼する。転送制御部１１２は、依頼されたＣＭ間ライトを実行する。具体的には、転送制御部１１２は、ＲＡＭ１０２からデータを読み出し、読み出したデータをＰＣＩｅスイッチ３３１を介してＣＭ２００のＤＭＡコントローラ２１０に送信して、ＣＭ２００のＲＡＭ２０２に対する書き込みを依頼する。これにより、データがＲＡＭ２０２に書き込まれる。
【００７７】
［ステップＳ１５］ディスクリプタ読み出し部１１１は、転送制御部１１２によるＣＭ間ライトが完了すると、開始ポインタレジスタ１１３内の開始ポインタを、ディスクリプタ１つ分だけ増加させる。これにより、図６の左下に示すように、開始ポインタと終了ポインタが同じ位置を示すようになる。
【００７８】
［ステップＳ１６］ディスクリプタ読み出し部１１１は、ディスクリプタ１２１に基づくデータ転送処理が完了したことをＣＰＵ１０１に通知する。
以上の手順により、ＣＰＵ１０１は、ディスクリプタ１２１の作成および格納と終了ポインタの更新によって、ＲＡＭ１０２とＲＡＭ２０２との間のデータ転送処理をＤＭＡコントローラ１１０に実行させることができる。ＤＭＡコントローラ１１０によってデータ転送処理が実行されている間、ＣＰＵ１０１は他の処理を並行して実行することができる。
【００７９】
ところで、ＤＭＡコントローラ１１０は、上記のステップＳ１４でＣＭ間ライトを実行した後、データがＣＭ２００に届いたかを確認せずに、処理が終了したことをＣＰＵ１０１に応答する。このため、ＣＰＵ１０１は、データがＣＭ２００のＲＡＭ２０２に正しく書き込まれたかを判別できない。
【００８０】
例えば、ＣＭ間ライトは、ホストライトが要求された場合に、ＲＡＭ１０２のキャッシュ領域に書き込んだライトデータをＣＭ２００のＲＡＭ２０２にミラーリングするために実行される。この場合、ＣＰＵ１０１は、ライトデータのＣＭ間ライトが終了したことをＤＭＡコントローラ１１０から通知されると、実際にはライトデータの書き込みに失敗したとしても、ホスト装置４１０に対してホストライトが正常に完了したと応答してしまう。このため、もしＣＭ１００の動作が故障により停止すると、キャッシュ領域内のデータの一部が失われてしまう。
【００８１】
そこで、ライトデータの送達確認のために、ＣＭ間ライトに続けてダミーリードを実行する方法が考えられる。ダミーリードは、ＣＭ２００のＲＡＭ２０２上のあらかじめ決められた同じ領域からデータを読み出す処理である。ここで、比較例として、ＣＭ間ライトの直後にダミーリードを実行する場合の処理手順の例について、図７，図８を用いて説明する。
【００８２】
図７，図８は、ダミーリードを伴うライト処理手順の比較例を示すシーケンス図である。
［ステップＳ２１］ＣＰＵ１０１のホストアクセス制御部１０１ａは、例えばホスト装置４１０から、ホストライト要求を受信する。また、ホストアクセス制御部１０１ａは、ホスト装置４１０からライトデータを受信し、ＲＡＭ１０２のバッファ領域に格納する。
【００８３】
［ステップＳ２２］ホストアクセス制御部１０１ａは、バッファ領域に格納したライトデータを、ＲＡＭ１０２内のキャッシュ領域に書き込む。
［ステップＳ２３］ホストアクセス制御部１０１ａは、ＣＭ間ライトの処理内容を記述したディスクリプタ１２２ａと、ダミーリードの処理内容を記述したディスクリプタ１２２ｂを作成する。前者のＣＭ間ライトとは、受信したライトデータをＲＡＭ１０２から読み出し、ＣＭ２００のＲＡＭ２０２に書き込む処理である。ホストアクセス制御部１０１ａは、作成したディスクリプタ１２２ａ，１２２ｂを、順にディスクリプタ領域１２０に書き込む。
【００８４】
［ステップＳ２４］ホストアクセス制御部１０１ａは、終了ポインタレジスタ１１４内の終了ポインタを、ディスクリプタ２つ分だけ増加させる。これにより、図７の左側に示すように、開始ポインタと終了ポインタとの間にディスクリプタ２つ分の差分が生じる状態となる。
【００８５】
［ステップＳ２５］ＤＭＡコントローラ１１０のディスクリプタ読み出し部１１１は、開始ポインタと終了ポインタとの間に差分が生じたことを検知すると、開始ポインタが指し示す位置からディスクリプタ１２２ａを読み出す。
【００８６】
［ステップＳ２６］ディスクリプタ読み出し部１１１は、ディスクリプタ１２２ａに基づくＣＭ間ライトを転送制御部１１２に依頼する。転送制御部１１２は、依頼されたＣＭ間ライトを実行する。これにより、受信したライトデータがＲＡＭ２０２に書き込まれる。
【００８７】
［ステップＳ２７］ディスクリプタ読み出し部１１１は、転送制御部１１２によるＣＭ間ライトが完了すると、開始ポインタレジスタ１１３内の開始ポインタを、ディスクリプタ１つ分だけ増加させる。これにより、開始ポインタはダミーリードのためのディスクリプタ１２２ｂの先頭位置を指し示すようになる。
【００８８】
［ステップＳ２８］ディスクリプタ読み出し部１１１は、ディスクリプタ１２２ａに基づくデータ転送処理が完了したことをＣＰＵ１０１に通知する。
続いて、図８の処理が実行される。
【００８９】
［ステップＳ３１］ディスクリプタ読み出し部１１１は、開始ポインタが指し示す位置からディスクリプタ１２２ｂを読み出す。
［ステップＳ３２］ディスクリプタ読み出し部１１１は、ディスクリプタ１２２ｂに基づくダミーリードを転送制御部１１２に依頼する。転送制御部１１２は、依頼されたダミーリードを実行する。これにより、ＣＭ２００のＲＡＭ２０２の所定領域からダミーデータが読み出され、ＲＡＭ１０２の所定領域に書き込まれる。
【００９０】
［ステップＳ３３］ディスクリプタ読み出し部１１１は、転送制御部１１２によるダミーリードが完了すると、開始ポインタレジスタ１１３内の開始ポインタを、ディスクリプタ１つ分だけ増加させる。これにより、図８の左側に示すように、開始ポインタと終了ポインタが同じ位置を示すようになる。
【００９１】
［ステップＳ３４］ディスクリプタ読み出し部１１１は、ディスクリプタ１２２ｂに基づくデータ転送処理が完了したことをＣＰＵ１０１に通知する。
［ステップＳ３５］ＣＰＵ１０１のホストアクセス制御部１０１ａは、ステップＳ３４の通知によりダミーリードが正常に実行されたことを認識し、ホスト装置４１０に対してホストライトが正常に完了したことを応答する。
【００９２】
以上の処理においては、ダミーリードを実行したときに、もしＣＭ２００内のダミーデータの経路上の回路（例えばＤＭＡコントローラ２１０）に異常がある場合には、ＤＭＡコントローラ１１０はダミーデータを受信できない。このため、ＤＭＡコントローラ１１０は、ダミーデータの受信可否に基づいて、少なくとも、直前のＣＭ間ライトの実行時にＣＭ２００内のライトデータの経路上の回路に異常があったか否かを推定できる。そして、ダミーデータを受信できた場合、ＤＭＡコントローラ１１０は、直前のＣＭ間ライトが正常に実行された可能性が高いと推定できる。このように、ダミーリードの成否から、直前のＣＭ間ライトでのライトデータ送達の成否を高い確率で暫定的に判定できる。
【００９３】
また、ダミーリードでは、上記のようにＲＡＭ２０２上のあらかじめ決められた領域から、あらかじめ決められたデータが読み出される。このため、例えば、ＣＭ間ライトで転送されたライトデータを、その直後にＲＡＭ２０２から読み出すベリファイリード処理と比較して、読み出されるデータのサイズを安定的に小さくできる。したがって、送達確認のための処理負荷を低減でき、かつ処理時間も短縮でき、その結果、ホストライト要求に対する応答時間を短縮することができる。
【００９４】
図９は、ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。図７，図８に示した比較例の処理が実行される場合、ＣＰＵ１０１は、ホストライトが要求されるたびに、ＣＭ間ライトのためのディスクリプタとダミーリードのためのディスクリプタの両方を作成する。このため、ホストライトが連続して要求された場合には、その都度、このような２種類のディスクリプタが生成され、ディスクリプタ領域１２０に順に格納される。
【００９５】
図９は、ホストライトが３回連続して要求された場合に作成されるディスクリプタの例を示している。この例では、１回目のホストライトに対応するＣＭ間ライト用のディスクリプタ１２３ａおよびダミーリード用のディスクリプタ１２３ｂと、２回目のホストライトに対応するＣＭ間ライト用のディスクリプタ１２３ｃおよびダミーリード用のディスクリプタ１２３ｄと、３回目のホストライトに対応するＣＭ間ライト用のディスクリプタ１２３ｅおよびダミーリード用のディスクリプタ１２３ｆとが作成されている。
【００９６】
ここで、前述のように、ダミーリードは、ＲＡＭ２０２内の同一のアドレスから同一のデータを読み出すものである。このため、ダミーリード用のディスクリプタはすべて同じ内容である。このような同じ内容のディスクリプタを、ホストライト要求を受けるたびに繰り返し作成することは、ＣＰＵ１０１の処理効率を悪化させるという問題がある。
【００９７】
そこで、本実施の形態では、ダミーリードの実行のための専用のディスクリプタ（共用ディスクリプタ）を、ＲＡＭ１０２の共用ディスクリプタ領域１３０にあらかじめ格納しておく。そして、ＣＰＵ１０１は、上記の比較例のようなダミーリード用のディスクリプタを作成するのではなく、共用ディスクリプタの読み出しを実行させるための専用のディスクリプタを作成する。この共用ディスクリプタの読み出し用のディスクリプタのサイズを、比較例のようなダミーリード用のディスクリプタより小さくすることで、ＣＰＵ１０１によるディスクリプタ作成時間を短縮し、ＣＰＵ１０１の処理効率を向上させる。
【００９８】
図１０は、第２の実施の形態におけるダミーリード実行の仕組みを説明するための図である。上記のように、ＲＡＭ１０２には、ディスクリプタ領域１２０とは別に共用ディスクリプタ領域１３０が確保される。共用ディスクリプタ領域１３０には、ダミーリード実行用の共用ディスクリプタ１３１があらかじめ格納される。
【００９９】
共用ディスクリプタ１３１のデータ構造やサイズは、ＣＭ間ライトやＣＭ間リードのためのディスクリプタと同様である。すなわち、共用ディスクリプタ１３１には、モード、データ長、ソースアドレスおよび宛先アドレスが、それぞれ４バイトのデータとして記述されている。ただし、共用ディスクリプタ１３１に記述される各データは、あらかじめ決められた固定値である。モードには、ＣＭ間リードを示すリードモードが設定される。データ長は、ダミーデータのサイズを示し、ソースアドレスには、ＣＭ２００のＲＡＭ２０２におけるダミーデータの記憶領域のアドレスが設定される。宛先アドレスには、ＣＭ１００のＲＡＭ１０２の所定領域のアドレスが設定される。
【０１００】
ダミーリードを実行させる場合、ＣＰＵ１０１は、モードとしてポインタモードが設定されたディスクリプタを作成する。ポインタモードとは、ディスクリプタに基づいてＣＭ間ライトやＣＭ間リードを行うのではなく、ディスクリプタに設定されたポインタに基づいて共用ディスクリプタ１３１を読み出す動作モードである。図１０の例では、ディスクリプタ領域１２０に格納されたディスクリプタ＃３に、ポインタモードが設定されている。以下、ポインタモードが設定されたディスクリプタを、単に「ポインタモードのディスクリプタ」と記載する。
【０１０１】
ポインタモードのディスクリプタにおいては、モードの領域が、１バイトのサブモード領域１４１と、３バイトのポインタ領域１４２とに分割されている。サブモード領域１４１のうちの１つのビットには、ポインタモードに設定されていることを示すビット値が設定される。したがって、ＤＭＡコントローラ１１０のディスクリプタ読み出し部１１１は、サブモード領域１４１を参照することで、読み出したディスクリプタにポインタモードが設定されていることを判別できる。
【０１０２】
ポインタ領域１４２には、ＲＡＭ１０２における共用ディスクリプタ１３１の記憶領域の先頭位置を指し示すポインタが設定される。このポインタは、３バイトのポインタ領域１４２に収まるような数値として設定される。本実施の形態では、ポインタがベースアドレスに対する加算値として設定されることで、ポインタのビット数がＲＡＭ１０２上の実アドレスより小さく設定される。なお、他の方法の例として、共用ディスクリプタ１３１をＲＡＭ１０２上の先頭に近い記憶領域に格納し、その記憶領域の実アドレスにおける上位ビットを省略した値をポインタとして設定してもよい。すなわち、装置外部にあるＲＡＭ２０２とは違い、ＲＡＭ１０２は装置内部にあるローカルな記憶装置であるので、ＲＡＭ１０２内の固定的な記憶領域を示す位置情報のビット数を実アドレスより減らすための様々な手法が容易に考えられる。
【０１０３】
ポインタモードのディスクリプタにおけるモード以外の領域（データ長、ソースアドレスおよび宛先アドレスに対応する領域）には、データが何も記憶されない。すなわち、ポインタモードのディスクリプタのサイズは、ライトモードやリードモードのディスクリプタや共用ディスクリプタ１３１のサイズより小さい。このため、ＣＰＵ１０１は、ポインタモードのディスクリプタを、ライトモードやリードモードのディスクリプタや共用ディスクリプタ１３１より短時間で作成することができる。
【０１０４】
なお、ポインタモードのディスクリプタには、例えば、ポインタの代わりに共用ディスクリプタ１３１の実アドレスが設定されてもよい。この場合でも、ソースアドレスと宛先アドレスという２つの実アドレスが設定される他のディスクリプタと比較して、ポインタモードのディスクリプタのサイズを小さくすることができる。
【０１０５】
ＤＭＡコントローラ１１０のディスクリプタ読み出し部１１１は、開始ポインタに基づいてＲＡＭ１０２から読み出したディスクリプタにポインタモードが設定されていることを認識すると、ポインタ領域１４２に設定されているポインタが指し示す記憶領域から共用ディスクリプタ１３１を読み出す。そして、ディスクリプタ読み出し部１１１は、読み出した共用ディスクリプタ１３１に基づいてダミーリードを実行する。
【０１０６】
このように、本実施の形態では、ダミーリードの実行のための共用ディスクリプタ１３１を、ポインタモードのディスクリプタに基づいて読み出す仕組みが設けられる。そして、ポインタモードのディスクリプタには、記憶領域を指し示す情報としてあらかじめ決められた１つの領域を指し示す情報だけが設定されればよいので、ポインタモードのディスクリプタのサイズを小さくすることができる。これにより、ダミーリードの実行を依頼するためのＣＰＵ１０１の処理時間が短縮される。その結果、ＣＰＵ１０１の処理負荷が低減され、その処理効率が向上する。
【０１０７】
図１１は、第２の実施の形態において、ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。この図１１では、図９の例と同様にホストライトが３回連続して要求された場合に作成されるディスクリプタの例を示している。
【０１０８】
図１１では、１回目のホストライトに対応するＣＭ間ライト用のディスクリプタ１２４ａに続いて、ポインタモードのディスクリプタ１２４ｂが作成されている。また、２回目のホストライトに対応するＣＭ間ライト用のディスクリプタ１２４ｃに続いて、ポインタモードのディスクリプタ１２４ｄが作成されている。さらに、３回目のホストライトに対応するＣＭ間ライト用のディスクリプタ１２４ｅに続いて、ポインタモードのディスクリプタ１２４ｆが作成されている。ディスクリプタ１２４ｂ，１２４ｄ，１２４ｆにそれぞれ設定されるポインタは、いずれもダミーリード用の共用ディスクリプタ１３１を指し示す。
【０１０９】
この図１１におけるディスクリプタ１２４ｂ，１２４ｄ，１２４ｆのサイズは、図９におけるダミーリード用のディスクリプタ１２３ｂ，１２３ｄ，１２３ｆより小さい。このため、ＣＰＵ１０１によるディスクリプタ１２４ｂ，１２４ｄ，１２４ｆの作成時間が短縮される。したがって、図１１のようにホストライトが連続して要求されるほど、ＣＰＵ１０１の処理負荷についての大きな低減効果が得られる。
【０１１０】
図１２，図１３は、ホストライトが要求された場合の処理手順の例を示すシーケンス図である。
［ステップＳ５１］ＣＰＵ１０１のホストアクセス制御部１０１ａは、例えばホスト装置４１０から、ホストライト要求を受信する。また、ホストアクセス制御部１０１ａは、ホスト装置４１０からライトデータを受信し、ＲＡＭ１０２のバッファ領域に格納する。
【０１１１】
［ステップＳ５２］ホストアクセス制御部１０１ａは、バッファ領域に格納したライトデータを、ＲＡＭ１０２内のキャッシュ領域に書き込む。
［ステップＳ５３］ホストアクセス制御部１０１ａは、ＣＭ間ライトの処理内容を記述したディスクリプタ１２５ａと、ポインタモードのディスクリプタ１２５ｂを作成する。ホストアクセス制御部１０１ａは、作成したディスクリプタ１２５ａ，１２５ｂを、順にディスクリプタ領域１２０に書き込む。
【０１１２】
［ステップＳ５４］ホストアクセス制御部１０１ａは、終了ポインタレジスタ１１４内の終了ポインタを、ディスクリプタ２つ分だけ増加させる。これにより、図１２の左側に示すように、開始ポインタと終了ポインタとの間にディスクリプタ２つ分の差分が生じる状態となる。
【０１１３】
［ステップＳ５５］ＤＭＡコントローラ１１０のディスクリプタ読み出し部１１１は、開始ポインタと終了ポインタとの間に差分が生じたことを検知すると、開始ポインタが指し示す位置からディスクリプタ１２５ａを読み出す。
【０１１４】
［ステップＳ５６］ディスクリプタ読み出し部１１１は、ディスクリプタ１２５ａに基づくＣＭ間ライトを転送制御部１１２に依頼する。転送制御部１１２は、依頼されたＣＭ間ライトを実行する。これにより、受信したライトデータがＲＡＭ２０２に書き込まれる。
【０１１５】
［ステップＳ５７］ディスクリプタ読み出し部１１１は、転送制御部１１２によるＣＭ間ライトが完了すると、開始ポインタレジスタ１１３内の開始ポインタを、ディスクリプタ１つ分だけ増加させる。これにより、開始ポインタはポインタモードのディスクリプタ１２５ｂの先頭位置を指し示すようになる。
【０１１６】
［ステップＳ５８］ディスクリプタ読み出し部１１１は、ディスクリプタ１２５ａに基づくデータ転送処理が完了したことをＣＰＵ１０１に通知する。
続いて、図１３の処理が実行される。
【０１１７】
［ステップＳ６１］ディスクリプタ読み出し部１１１は、開始ポインタが指し示す位置からディスクリプタ１２５ｂを読み出す。
［ステップＳ６２］ディスクリプタ読み出し部１１１は、ディスクリプタ１２５ｂに設定されたポインタが指し示すＲＡＭ１０２内の記憶領域から、共用ディスクリプタ１３１を読み出す。
【０１１８】
［ステップＳ６３］ディスクリプタ読み出し部１１１は、共用ディスクリプタ１３１に基づくダミーリードを転送制御部１１２に依頼する。転送制御部１１２は、依頼されたダミーリードを実行する。これにより、ＣＭ２００のＲＡＭ２０２の所定領域からダミーデータが読み出され、ＲＡＭ１０２の所定領域に書き込まれる。
【０１１９】
ディスクリプタ読み出し部１１１は、ステップＳ６３でＲＡＭ２０２からのダミーデータの読み出しに成功した場合、次のステップＳ６４の処理を実行する。
［ステップＳ６４］ディスクリプタ読み出し部１１１は、転送制御部１１２によるダミーリードが完了すると、開始ポインタレジスタ１１３内の開始ポインタを、ディスクリプタ１つ分だけ増加させる。これにより、図１３の左側に示すように、開始ポインタと終了ポインタが同じ位置を示すようになる。
【０１２０】
［ステップＳ６５］ディスクリプタ読み出し部１１１は、ディスクリプタ１２５ｂに基づくデータ転送処理が完了したことをＣＰＵ１０１に通知する。
［ステップＳ６６］ＣＰＵ１０１のホストアクセス制御部１０１ａは、ステップＳ６５の通知によりダミーリードが正常に実行されたことを認識し、ホスト装置４１０に対してホストライトが正常に完了したことを応答する。
【０１２１】
次に、ＣＭ１００の処理についてフローチャートを用いて説明する。
図１４は、ＤＭＡコントローラの初期化処理の例を示すフローチャートである。図１４の処理は、例えば、電源投入によってＣＭ１００が起動した際に実行される。
【０１２２】
［ステップＳ１０１］ＣＰＵ１０１は、ＤＭＡコントローラ１１０を初期化する。
［ステップＳ１０２］ＣＰＵ１０１は、ダミーリード実行のための共用ディスクリプタ１３１を作成し、ＲＡＭ１０２内のあらかじめ決められた記憶領域に格納する。
【０１２３】
図１５は、ホストライトが要求された場合のＣＰＵの処理の例を示すフローチャートである。なお、この図１５では例として、ホスト装置４１０からホストライトが要求されるものとする。
【０１２４】
［ステップＳ１１１］ホストアクセス制御部１０１ａは、ホスト装置４１０からホストライト要求を受信する。また、ホストアクセス制御部１０１ａは、ホスト装置４１０からライトデータを受信し、ＲＡＭ１０２のバッファ領域に格納する。
【０１２５】
［ステップＳ１１２］ホストアクセス制御部１０１ａは、バッファ領域に格納したライトデータを、ＲＡＭ１０２のキャッシュ領域に書き込む。
［ステップＳ１１３］ホストアクセス制御部１０１ａは、ＣＭ間ライトの処理内容を記述したディスクリプタを作成し、ディスクリプタ領域１２０に格納する。作成されるディスクリプタには、バッファ領域に格納したライトデータを読み出し、ＣＭ２００のＲＡＭ２０２に書き込むという処理内容が記述される。
【０１２６】
［ステップＳ１１４］ホストアクセス制御部１０１ａは、ポインタモードのディスクリプタを作成し、ディスクリプタ領域１２０に格納する。
［ステップＳ１１５］ホストアクセス制御部１０１ａは、終了ポインタレジスタ１１４内の終了ポインタを、ディスクリプタ２つ分だけ増加させる。
【０１２７】
［ステップＳ１１６］ホストアクセス制御部１０１ａは、ＤＭＡコントローラ１１０からＣＭ間ライトの終了通知を受信したかを判定する。この終了通知は、例えば、割り込みによってＤＭＡコントローラ１１０から通知される。ステップＳ１１６の判定は一定時間ごとに行われ、ホストアクセス制御部１０１ａが終了通知を受信すると、処理がステップＳ１１７に進められる。
【０１２８】
［ステップＳ１１７］ホストアクセス制御部１０１ａは、エラーレジスタ１１６の内容を読み込み、エラーが発生していないかを確認する。なお、図示しないが、実際には、エラーが発生していない場合に処理がステップＳ１１８に進み、エラーが発生している場合には、ホストアクセス制御部１０１ａは、ホストライトの実行に失敗したことをホスト装置４１０に通知して、処理を終了する。
【０１２９】
［ステップＳ１１８］ホストアクセス制御部１０１ａは、ＤＭＡコントローラ１１０からダミーリードの終了通知を受信したかを判定する。この終了通知は、例えば、割り込みによってＤＭＡコントローラ１１０から通知される。ステップＳ１１８の判定は一定時間ごとに行われ、ホストアクセス制御部１０１ａが終了通知を受信すると、処理がステップＳ１１９に進められる。
【０１３０】
［ステップＳ１１９］ホストアクセス制御部１０１ａは、エラーレジスタ１１６の内容を読み込み、エラーが発生していないかを確認する。
［ステップＳ１２０］ホストアクセス制御部１０１ａは、ホスト装置４１０に応答する。エラーが発生していない場合、ホストアクセス制御部１０１ａは、ホストライトが正常に完了したことをホスト装置４１０に通知する。一方、エラーが発生した場合、ホストアクセス制御部１０１ａは、ホストライトが正常に完了しなかったことをホスト装置４１０に通知する。
【０１３１】
図１６は、ＤＭＡコントローラの処理の例を示すフローチャートである。
［ステップＳ１３１］ディスクリプタ読み出し部１１１は、開始ポインタレジスタ１１３および終了ポインタレジスタ１１４から、それぞれ開始ポインタおよび終了ポインタを読み出す。
【０１３２】
［ステップＳ１３２］ディスクリプタ読み出し部１１１は、ステップＳ１３１で読み出した開始ポインタと終了ポインタとを比較する。開始ポインタの値と終了ポインタの値とが異なる場合、ディスクリプタ読み出し部１１１は、ステップＳ１３３の処理を実行する。一方、開始ポインタの値と終了ポインタの値とが等しい場合、ディスクリプタ読み出し部１１１は、一定時間後にステップＳ１３１の処理を実行する。
【０１３３】
［ステップＳ１３３］ディスクリプタ読み出し部１１１は、ディスクリプタ領域１２０における開始ポインタが指し示す位置からディスクリプタを読み出す。
［ステップＳ１３４］ディスクリプタ読み出し部１１１は、読み出したディスクリプタのモードの領域に、ポインタモードが設定されているかを判定する。ポインタモードが設定されている場合、ディスクリプタ読み出し部１１１は、ステップＳ１３５の処理を実行する。ポインタモードが設定されていない場合、ディスクリプタ読み出し部１１１は、ステップＳ１３６の処理を実行する。
【０１３４】
［ステップＳ１３５］ディスクリプタ読み出し部１１１は、読み出したディスクリプタに設定されたポインタが指し示す、共用ディスクリプタ領域１３０の位置から、共用ディスクリプタ１３１を読み出す。
【０１３５】
［ステップＳ１３６］ディスクリプタ読み出し部１１１は、ディスクリプタに基づくデータ転送処理を転送制御部１１２に依頼する。このとき参照されるディスクリプタは、ステップＳ１３４で「Ｙｅｓ」の場合はステップＳ１３５で読み出された共用ディスクリプタ１３１であり、ステップＳ１３４で「Ｎｏ」の場合はステップＳ１３３で読み出されたディスクリプタである。転送制御部１１２は、依頼されたデータ転送処理を実行する。
【０１３６】
［ステップＳ１３７］転送制御部１１２は、データ転送処理の実行結果をディスクリプタ読み出し部１１１に通知する。ディスクリプタ読み出し部１１１は、通知された内容に基づいて、データ転送処理の成否をエラーレジスタ１１６に書き込む。
【０１３７】
［ステップＳ１３８］ディスクリプタ読み出し部１１１は、開始ポインタレジスタ１１３内の開始ポインタを、ディスクリプタ１つ分だけ増加させる。
［ステップＳ１３９］ディスクリプタ読み出し部１１１は、データ転送処理の終了通知をＣＰＵ１０１に出力する。この出力は、例えば割り込みによって行われる。
【０１３８】
この後、ステップＳ１３１に戻る。
以上説明した第２の実施の形態では、ダミーリードの実行を指示するためにＣＰＵ１０１が作成するディスクリプタのサイズを小さくすることができる。このため、ダミーリードの実行を指示するたびに共用ディスクリプタ１３１を作成する場合と比較して、ダミーリードの実行を指示するためのＣＰＵ１０１の処理時間を短縮でき、その処理負荷を低減できる。
【０１３９】
なお、上記の各実施の形態に示した装置（ストレージ制御装置１０、ＣＭ１００，２００）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１４０】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１４１】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【符号の説明】
【０１４２】
１ａ〜１ｃ  命令セット
２ａ  書き込みデータ
２ｂ  確認用データ
１０  ストレージ制御装置
１１  プロセッサ
１２  転送制御部
１３，２０  記憶部
Ｓ１ａ，Ｓ１ｂ，Ｓ２ａ〜Ｓ２ｄ  ステップ
【図１】
2017130002.tif 000003
【図２】
2017130002.tif 000004
【図３】
2017130002.tif 000005
【図４】
2017130002.tif 000006
【図５】
2017130002.tif 000007
【図６】
2017130002.tif 000008
【図７】
2017130002.tif 000009
【図８】
2017130002.tif 000010
【図９】
2017130002.tif 000011
【図１０】
2017130002.tif 000012
【図１１】
2017130002.tif 000013
【図１２】
2017130002.tif 000014
【図１３】
2017130002.tif 000015
【図１４】
2017130002.tif 000016
【図１５】
2017130002.tif 000017
【図１６】
2017130002.tif 000018