(57)【特許請求の範囲】
【請求項１】
書込みが完了した旨が応答されないバスを介して、プロセッサから与えられる指示に応じてメモリにデータ転送を行うデータ転送装置であって、
メモリ間でデータ転送を行うメモリ間データ転送制御部を備え、
前記メモリ間データ転送制御部は、
前記プロセッサから動作開始契機を受けるための動作開始契機受信部と、
前記プロセッサが作成する、データ転送指示に関する情報を含む転送指示パラメータを取得するパラメータ取得部と、
前記転送指示パラメータで指定されたメモリからデータを読み出す読み出し部と、
前記転送指示パラメータで指定されたメモリへ、前記読み出し部が読み出したデータを書き込む書き込み部とを備え、
前記書き込み部は、
書き込み先のメモリが第１のメモリから第２のメモリに切り替わることを検出すると、前記第１のメモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段を用いて前記第１のメモリに対して書き込み完了確認を行い、
前記転送指示パラメータで指定されたデータ転送が終了すると、データ転送終了時点での書き込み先メモリに対し、前記メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段を用いてデータ転送終了時点での書き込み先メモリに対し書き込み完了確認を行い、
前記メモリ間データ転送制御部は、
前記書き込み完了確認を以て、メモリ間データ転送終了を前記プロセッサに通知する
データ転送装置。
【請求項２】
請求項１に記載のデータ転送装置であって、
前記メモリ間データ転送制御部の前記書き込み部が、
メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段として、前記メモリからの読み出し動作を、前記メモリへの書き込みに用いた同一のバスを用いて行う
データ転送装置。
【請求項３】
請求項１に記載のデータ転送装置であって、
前記メモリ間データ転送制御部の前記書き込み部が、
メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段として、メモリコントローラのレジスタへのアクセス動作を、前記メモリへの書き込みに用いた同一のバスを用いて行う
データ転送装置。
【請求項４】
請求項３に記載のデータ転送装置であって、
前記メモリコントローラが備える少なくとも１つのレジスタから、少なくとも書き込み回数を参照することが可能である
データ転送装置。
【請求項５】
請求項４に記載のデータ転送装置であって、
前記メモリ間データ転送制御部は、
メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段として、前記メモリコントローラの書き込み回数が参照可能なレジスタからの読み出し動作を、前記メモリへの書き込みに用いた同一のバスを用いて行い、
前記レジスタから読み出した値と前記メモリ間データ転送制御部が書き込んだ回数とを比較し、データ転送が正常に行われたかを確認する
データ転送装置。
【請求項６】
請求項１に記載のデータ転送装置であって、
前記メモリ間データ転送制御部は、
メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段として、
ライト確定要求専用の確認リクエストと前記確認リクエストへの書き込み確認応答とを正常に処理できるリクエスト処理部を備え、
前記確認リクエストの送信と前記書き込み確認応答の受信とによって書き込み完了を確認するデータ転送装置。
【請求項７】
請求項１に記載のデータ転送装置であって、
メモリコントローラとの間に書き込み確定要求および応答用の信号線を備え、
前記メモリ間データ転送制御部は、
メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段として、
該当メモリコントローラへ書き込み確定要求信号を送信し、
前記確定要求信号を受信したメモリコントローラが、要求された書き込みが完了したのを検知したときに、前記要求の応答として要求元へ送信する確定完了信号を受信し、
前記確定完了信号の受信を以て書き込み完了を確認する
データ転送装置。
【請求項８】
請求項１に記載のデータ転送装置であって、
前記メモリ間データ転送制御部は、
書き込み先メモリが第１のメモリから第２のメモリに切り替わる点を
アクセス先メモリコントローラの切り替わりによって検出する
データ転送装置。
【請求項９】
請求項１に記載のデータ転送装置であって、
前記メモリ間データ転送制御部は、
書き込み先メモリが第１のメモリから第２のメモリに切り替わる点を
メモリのアクセス先アドレスを参照して判別する
データ転送装置。
【請求項１０】
請求項９に記載のデータ転送装置であって、
前記メモリ間データ転送制御部が、第１のメモリから第２のメモリに切り替わる点を
メモリコントローラ単位で判別する
データ転送装置。
【請求項１１】
請求項９に記載のデータ転送装置であって、
前記メモリ間データ転送制御部が、第１のメモリから第２のメモリに切り替わる点を
前記メモリのＤＩＭＭ単位で判別する
データ転送装置。
【請求項１２】
請求項９に記載のデータ転送装置であって、
前記メモリ間データ転送制御部が、第１のメモリから第２のメモリに切り替わる点を
前記メモリのバンク単位で判別する
データ転送装置。
【請求項１３】
請求項１に記載のデータ転送装置であって、
前記転送指示パラメータは、少なくとも
転送元メモリの開始アドレスと、
１以上の転送先メモリの開始アドレスと、
前記各転送先メモリへの書き込み完了チェック要否情報と、
転送データ長と
を前記データ転送指示に関する情報として含み、
前記書き込み部は、
書き込み先のメモリが第１のメモリから第２のメモリに切り替わることを検出すると、第１のメモリへの書き込みが完了したことを確認するか否かを前記転送指示パラメータの書き込み完了チェック要否情報に基づいて決定し、
完了チェック要の場合には、メモリへの書き込みとは異なる手段を用いて第１のメモリに対して完了確認を行い、
前記転送指示パラメータで指定されたデータ転送が終了すると、データ転送終了時点での書き込み先メモリに対し、前記メモリへの書き込みが完了したことを確認するか否かを前記転送指示パラメータの書き込み完了チェック要否情報に基づいて決定し、
完了チェック要の場合には、メモリへの書き込みとは異なる手段を用いてデータ転送終了時点での書き込み先メモリに対し完了確認を行う、
データ転送装置。
【請求項１４】
請求項１に記載のデータ転送装置であって、
前記メモリ間データ転送制御部は、
前記プロセッサから動作開始契機を受けるための動作開始契機受信部を２種備え、
前記メモリ間データ転送制御部は、
前記２種の動作開始契機受信部のうちの一方から契機を受けて起動された場合には、
書き込み先のメモリが第１のメモリから第２のメモリに切り替わることを検出すると、第１のメモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段を用いて第１のメモリに対して完了確認を行い、
前記転送指示パラメータで指定されたデータ転送が終了すると、データ転送終了時点での書き込み先メモリに対し、前記メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段を用いてデータ転送終了時点での書き込み先メモリに対し完了確認を行い、
前記書き込み完了確認を以て、メモリ間データ転送終了をプロセッサに通知し、
前記２種の動作開始契機受信部のうちの他方から契機を受けて起動された場合には、
前記書き込み先メモリへの書き込みが完了したことを確認する動作を省略して、メモリ間データ転送終了をプロセッサに通知する
データ転送装置。
【請求項１５】
プロセッサから与えられる指示に応じてメモリ間データ転送を行うメモリ間データ転送制御部を用いて、書込みが完了した旨が応答されないバスを介して、メモリにデータ転送を行うデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記プロセッサから動作開始契機を受けると、
前記プロセッサが作成するデータ転送指示に関する情報を含む転送指示パラメータを取得し、
前記転送指示パラメータで指定されたメモリから前記転送指示パラメータで指定された転送長に達するまで繰り返しデータを読み出し、
前記転送指示パラメータで指定されたメモリへ、前記読み出したデータを前記転送指示パラメータで指定された転送長に達するまで書き込み、
前記書き込みの際、
書き込み先のメモリが第１のメモリから第２のメモリに切り替わることを検出すると、第１のメモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段を用いて第１のメモリに対して完了確認を行い、
前記転送指示パラメータで指定された転送が終了すると、データ転送終了時点での書き込み先メモリに対し、前記メモリへの書き込みが完了したことを確認するために、メモリへの書き込みとは異なる手段を用いてデータ転送終了時点での書き込み先メモリに対し完了確認を行い、
前記書き込み完了確認を以て、メモリ間データ転送終了をプロセッサに通知する
データ転送方法。
【請求項１６】
請求項１５に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記メモリへの書き込みが完了したことを確認するために、前記メモリへの書き込みとは異なる手段として、前記メモリからの読み出し動作を、前記メモリへの書き込みに用いた同一のバスを用いて行う
データ転送方法。
【請求項１７】
請求項１５に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記メモリへの書き込みが完了したことを確認するために、前記メモリへの書き込みとは異なる手段として、メモリコントローラのレジスタからの読み出し動作を、前記メモリへの書き込みに用いた同一のバスを用いて行う
データ転送方法。
【請求項１８】
請求項１７に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記メモリへの書き込みが完了したことを確認するために、前記メモリへの書き込みとは異なる手段として、前記メモリコントローラの書き込み回数が参照可能なレジスタからの読み出し動作を、前記メモリへの書き込みに用いた同一のバスを用いて行い、
前記レジスタから読み出した値と前記メモリ間データ転送制御部が書き込んだ回数とを比較し、データ転送が正常に行われたかを確認する
データ転送方法。
【請求項１９】
請求項１５に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記メモリへの書き込みが完了したことを確認するために、前記メモリへの書き込みとは異なる手段として、ライト確定要求専用の確認リクエストを送信し、前記確認リクエストへの書き込み確認応答を正常に受信することによって書き込み完了を確認するデータ転送方法。
【請求項２０】
請求項１５に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記書き込み先メモリが前記第１のメモリから前記第２のメモリに切り替わる点を
アクセス先メモリコントローラの切り替わりによって検出する
データ転送方法。
【請求項２１】
請求項１５に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記書き込み先メモリが前記第１のメモリから前記第２のメモリに切り替わる点を
前記メモリのアクセス先アドレスから判別する
データ転送方法。
【請求項２２】
請求項２１に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記書き込み先メモリが前記第１のメモリから前記第２のメモリに切り替わる点をメモリコントローラ単位で管理するデータ転送方法。
【請求項２３】
請求項２１に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記書き込み先メモリが前記第１のメモリから前記第２のメモリに切り替わる点を前記メモリのＤＩＭＭ単位で管理するデータ転送方法。
【請求項２４】
請求項２１に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記書き込み先メモリが前記第１のメモリから前記第２のメモリに切り替わる点を前記メモリのバンク単位で管理するデータ転送方法。
【請求項２５】
請求項１５に記載のデータ転送方法であって、
前記メモリ間データ転送制御部は、
前記書き込みの際、
前記書き込み先のメモリが前記第１のメモリから前記第２のメモリに切り替わることを検出すると、前記第１のメモリへの書き込みが完了したことを確認するか否かを前記転送指示パラメータに含まれる転送先メモリへの書き込み完了チェック要否情報に基づいて決定し、
完了チェック要の場合には、前記メモリへの書き込みとは異なる手段を用いて前記第１のメモリに対して完了確認を行い、
前記転送指示パラメータで指定されたデータ転送が終了すると、データ転送終了時点での前記書き込み先メモリに対し、前記メモリへの書き込みが完了したことを確認するか否かを前記転送指示パラメータの前記書き込み完了チェック要否情報に基づいて決定し、
完了チェック要の場合には、前記メモリへの書き込みとは異なる手段を用いてデータ転送終了時点での前記書き込み先メモリに対し完了確認を行う、
データ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置およびその制御方法に関する。
【背景技術】
【０００２】
近年のストレージ装置（ディスクアレイシステムおよびそれに類する記憶装置）は、データを読み書きする速度を速くするために、ストレージコントローラにキャッシュメモリを搭載している。キャッシュメモリは、ハードディスクドライブ（Hard Disk Drive。以下「ＨＤＤ」）やソリッドステートディスク（Solid State Disk。以下「ＳＳＤ」）などの最終記憶メディアへ書き込むデータや頻繁に読み出されるデータの一部を保持することで、メディアのアクセスレイテンシを隠蔽し、ホストへの高速な応答を実現する。
【０００３】
例えば、ホストがデータをストレージ装置に書き込む場合、当該ホストからのデータを処理する、ストレージ装置内のストレージコントローラは、データをキャッシュメモリに格納した段階でホストに書込みの完了応答を返す。最終記憶メディアに比べてキャッシュメモリは非常に高速であるから、ホストはすぐに次のＩ／Ｏリクエストを発行することができる。一方ストレージコントローラはホストの動作とは非同期に、あるタイミングで最終記憶メディアにキャッシュメモリ内のデータを書き込むように動作している。
【０００４】
ストレージコントローラは、耐障害性を向上させるために複数の単位コントローラで構成されることが多い。このためキャッシュメモリ（以下、単にメモリと記述する。）も複数の箇所に分散配置される。処理上の効率化や複製による冗長化のために、しばしばメモリ間でのデータ転送が実施されるため、単位コントローラ間には内部バス技術を用いたネットワークパスが構成される。バスには例えばPCI Express（登録商標）などが用いられる。また、キャッシュメモリ間の転送はストレージ制御ソフトウェアが動作するプロセッサの指示によって、ＤＭＡ（Direct Memory Access）と呼ばれるデータ転送コントローラを用いて行われる。
【０００５】
PCI Expressの場合、メモリへのライトリクエストは、ターゲットからの完了応答（Completion）がない、いわゆるポステッドアクセス（Posted Access）となる。ストレージコントローラのメモリコントローラ内部には、ハードウェアのデータ処理上の理由から、ネットワークパスからメモリコントローラまでの経路上にバッファが設けられることがある。従い、ライトリクエスト元は、果たしてデータが経路上にあるバッファをすべて通り抜けてメモリに書き込まれたか否かを確認することができない。このため、ネットワークパス等を経由してメモリに書込みする場合、ストレージ装置などでは、途中のバッファをフラッシュさせてメモリへの書込みを確定させるために、同一経路でダミーのメモリリードリクエストを発行する。PCI Expressでは、メモリリードリクエストはノンポステッドアクセス（Non-Posted Access）と呼ばれる。同一経路上におけるノンポステッドアクセスは、先に発行されたメモリライトリクエストなどのポステッドアクセスを追い抜いてメモリに到達することがないため、このリードリクエストへの応答が返ってくれば、先に発行したメモリライトリクエストに係る書込みデータはバッファを通り抜けて最終的なメモリに書き込まれていることが保証できる。
【０００６】
ところで、１本のパスで実現できる転送帯域は限られるので、帯域を確保するために複数のネットワークパスを張ることがある。複数のメモリ間データ転送を効率良く行うためには、このネットワークパスを偏りなく利用することが必要である。偏りをなくし均一的にパスを利用する方法としては、従来からネットワークパス上で負荷分散する技術が議論されてきた。
【０００７】
例えば、特許文献１には、転送するパケットのハッシュ値を計算し、そのハッシュ値に応じて経路を選択する方法が開示されている。この方法に依れば、複数のパスに負荷分散してパケットを送ることができるので、効率的にネットワーク転送することが可能となる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−２６３４３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、この方法をPCI Express等のバスで接続した単位コントローラ間でメモリ間データ転送を行うストレージ装置およびこれに類するデータ転送システムに適用する場合にはいくつかの課題が生じる。
【００１０】
第１の課題は、先に述べたダミーリードの問題である。PCI Express等のバスでは、同一経路においてノンポステッドアクセスはポステッドアクセスを追い抜かないことが保証されているものの、異なる経路を通った場合には、先に送信されたポステッドアクセスよりも先に、ノンポステッドアクセスが最終的なメモリに到達することがあり得る。ダミーリードは先のライトリクエストを追い抜かないことを利用して書込み確定を確認することが目的であるから、ライトリクエストと同一経路を通じて発行する必要がある。しかしながら、特許文献１に記載の方法は、パケットのハッシュ値によってパスを振り分けてしまうため、両者のリクエストパケットは同じ経路を通るとは限らないという問題がある。両者のパケットは明らかにそのフォーマットが異なるから同一ハッシュ値になる可能性は極めて低い。そもそもライトリクエストが発行された場合に、ダミーリードを発行するという仕組み自体が存在しない。また、特許文献１は、変形例として、ハッシュ値ではなく、あらかじめ定めた他の識別子を用いても良いとしているが、どのライトパケットに対するダミーリードパケットなのか、当該ライトパケットがどの経路を通ったのか記憶テーブルを設けて記憶しなければならない。メモリ間データ転送で流れるパケットは秒間数十万〜数百万個と膨大であり、そもそも探索するだけでも時間がかかってしまう。また、このような処理は、そもそも特許文献１が解決しようとする負荷分散とは、目的を異にするものである。
【００１１】
第２の課題は、宛先メモリのアクセスの集中度合いによって転送時間が大きく左右されてしまう点である。特許文献１は、複数のパス（経路）で負荷分散するものの宛先は単一の装置であり、データ転送はネットワークを通じてなされることのみを想定していると考えられる。このことは、経路そのものの混み具合（データバッファの利用状況）を管理することで負荷分散する方法を開示していることからも明らかである。一方、本ストレージ装置の場合、あるメモリへのアクセスは必ずしもネットワークパスを通過したものばかりでなく、当該メモリと同一のストレージコントローラ内ＤＭＡによるアクセスも競合する。従い、パス（経路）の混み具合のみを管理しても必ずしも有意に負荷分散できない。
【００１２】
第３の課題は、メモリアクセスの混み具合は制御ソフトウェアのメモリの割り当て方（メモリ利用レイアウト）にも起因することである。例えば、メモリチャネル１は比較的アクセスの少ない制御情報エリアを割当て、メモリチャネル２はアクセスが頻繁にくるキャッシュエリアを多く割当てていた場合、パケットを、均等な比率でネットワークパスを通過させたのではメモリチャネル２のアクセスが詰まり、その結果、ネットワークパス通過中の後続するメモリチャネル１のパケットも滞留してしまう。特許文献１に示すような従来のネットワークの負荷分散技術だけでは、この問題は解決できない。
【００１３】
本発明は以上の課題に鑑みて成されたものである。
すなわち、本発明の目的は、複数パスで接続されていても、経路情報を記憶することなく、また、制御ソフトウェアの新たな介在を必要とせずにメモリへの書込みの確定を行うデータ転送装置およびその制御方法を提供することである。
【００１４】
また本発明の他の目的は、ストレージコントローラ内外からの特定メモリへのアクセス集中があっても、パスに偏りを生じさせずに効率良く転送するデータ転送装置およびその制御方法を提供することである。
【００１５】
また、本発明の他の目的は、上位の制御ソフトウェアのメモリ利用情報を踏まえた効率的な転送を行うデータ転送装置およびその制御方法を提供することである。
【課題を解決するための手段】
【００１６】
本発明では、上記課題の少なくとも１つを解決するために、データの書き込み中にデータの書込み先のメモリチャネル（以下、メモリ面という。）が切り替わる時点を検出してその切り替わりの際に、もしくは同一メモリチャネル内であっても一連の転送が終了するごとにその間の書込みを確定させる動作を行うＤＭＡを備えたデータ転送装置およびその制御方法を提供する。
【００１７】
また、本発明では、上記課題の少なくとも１つを解決するために、各ＤＭＡおよびパスアービタが互いの転送状態の情報を参照するための状態管理機構と、その情報に基づいて効率的な転送を行うための判定部を備えたデータ転送装置およびその制御方法を提供する。
【００１８】
また、本発明では、上記課題の少なくとも１つを解決するために、制御ソフトウェアから通知されるメモリレイアウト情報やＩ／Ｏ別の優先度情報を活用して転送量調整やパス選択を行うデータ転送装置およびその制御方法を提供する。
【発明の効果】
【００１９】
本発明によれば、ハードウェアがライトリクエスト発行経路をパケットごとに記憶しなくとも、あるいは制御ソフトウェアが書込み確定のための新たな制御を行わずとも、ライト応答が行われない内部バス技術を用いたネットワークパス上でメモリへの書込み確定を行うことができる。
【００２０】
また、本発明によれば、ネットワークパスを複数有している場合、宛先メモリの混雑状況も踏まえてパス選択することができ、効率的な転送が可能となる。
【００２１】
また、本発明によれば、同じハードウェアでも、その上で動作する制御ソフトウェアの特性に応じて効率的なデータ転送を行うことができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施形態におけるストレージ装置の構成を示すブロック図である。
【図２】本発明の実施形態におけるストレージ装置の構成を示す外観図である。
【図３】本発明の実施形態におけるストレージ装置のストレージコントローラの構成を示すブロック図である。
【図４】本発明の実施形態におけるストレージコントローラに搭載されるＡＳＩＣの内部構成の一例を示すブロック図である。
【図５】本発明の実施形態におけるＤＭＡコントローラの起動方法を模式的に描いた図である。
【図６】本発明の実施形態におけるＤＭＡコントローラへの転送指示パラメータのフォーマットの一例を示した図である。
【図７】本発明の実施形態におけるＤＭＡの動作手順を示すフローチャートである。
【図８】本発明の実施形態におけるメモリアドレスマップの一例を示す図である。
【図９】本発明の実施形態におけるメモリ間データ転送制御の全体動作を説明するラダーチャートである。
【図１０】本発明の実施形態の変形例における書込み確認要求の構成例を示す図である。
【図１１】本発明の実施形態の変形例における書込み確認応答の構成例を示す図である。
【図１２】本発明の実施形態の変形例におけるメモリ間データ転送制御のＤＭＡの動作手順を示すフローチャートである。
【図１３】本発明の実施形態の変形例におけるＡＳＩＣの内部構成を示すブロック図である。
【図１４】本発明の実施例２におけるＡＳＩＣの内部構成を示すブロック図である。
【図１５】本発明の実施例２におけるＡＳＩＣ内のテーブルの構成例を示す図である。
【図１６】本発明の実施例２におけるＤＭＡの動作を説明するフローチャートである。
【図１７】本発明の実施例２の変形例におけるステータスブロック４００が備えるテーブルの構成例を示す図である。
【図１８】本発明の実施例３におけるＤＭＡコントローラへの転送指示パラメータのフォーマットの一例を示した図である。
【図１９】本発明の実施例３におけるメモリレイアウト情報設定テーブルの構成例を示す図である。
【図２０】本発明の実施例３におけるＤＭＡと内部データ転送パスアービタとのデータのやり取りを模式的に示した図である。
【図２１】本発明の実施例３における内部データ転送パスアービタの動作を示したフローチャートである。
【発明を実施するための形態】
【００２３】
本発明を実施するための形態を実施例１、２、および３を用いて説明する。なお、当該実施例からの部分的変更によって実施できる形態は、各実施例内で変形例として記述する。
【００２４】
＜実施例１＞
本実施形態を図１〜図９を参照して説明する。
図１は本実施形態におけるストレージシステムの構成を示すブロック図である。ストレージ装置１０は、複数のドライブ筐体５１、５２、…とストレージコントローラ筐体５０とを含んで構成されている。ストレージ装置１０は管理用ＬＡＮ３０を通じて管理端末３１に接続されており、装置の設定等はこの管理端末３１を通じて実行することが可能である。管理端末３１はストレージ装置１０の中に含んでいても良い。
【００２５】
また、ストレージ装置１０はストレージネットワーク４０を通じてホスト計算機２０Ａ〜２０Ｃと接続されている。ホスト計算機２０Ａ〜２０Ｃには、オペレーティングシステムおよびその上で動作するアプリケーション、または仮想マシンが搭載され、ストレージ装置１０に対してＩ／Ｏを発行する。
【００２６】
ドライブ筐体５１、５２、…には複数のディスクドライブＤ００〜Ｄ０Ｎ、Ｄ１０〜Ｄ１Ｎが搭載されている。ディスクドライブＤ００〜Ｄ１ＮはＨＤＤやＳＳＤ、またはこれらに類する最終記憶媒体である。
【００２７】
ディスクドライブＤ００〜Ｄ１Ｎは、ドライブ筐体５１、５２に設けられたバックエンド相互接続機構５００、バックエンド接続ケーブル５１０、およびストレージコントローラ筐体５０内に設けられたＩ／Ｆカード９０Ａ，９１Ｂを通じてディスクアレイコントローラ主パッケージ６０Ａ，６０Ｂと接続される。バックエンド相互接続機構５００は、例えばＳＡＳ（Serial Attached SCSI）エクスパンダであり、バックエンド接続ケーブル５１０は、例えばＳＡＳケーブルなどである。また、Ｉ／Ｆカード９０Ａ，９１Ｂは、例えばＳＡＳプロトコルチップを搭載したＨＢＡ（Host Bus Adapter）等である。この接続によって、ストレージコントローラはディスクとの間でデータの送受信を行うことができる。
【００２８】
ストレージコントローラ筐体５０には、ディスクアレイコントローラの主パッケージ６０Ａ，６０Ｂとこれらを制御するプロセッサを搭載したＭＰ（Micro Processor）パッケージ７０Ａ，７０Ｂ、先述したドライブ接続９０Ａ，９０Ｂ、およびホスト計算機２０Ａ〜２０Ｃと接続するためのＩ／Ｆカードが設けられている。
【００２９】
ＭＰパッケージ７０Ａ，７０Ｂではストレージ制御プログラムが動作しており、ディスクアレイコントローラ主パッケージ６０Ａ，６０Ｂに指示を送るために制御線７１Ａ〜７２Ｂで接続されている。一方、ディスクアレイ主パッケージ６０Ａ，６０Ｂは互いにデータを転送するために複数の内部データ転送パス１０１，１０２で接続されている。
【００３０】
なお、本実施形態では各パッケージはＡ系、Ｂ系の２つだけを示したが、３以上のパッケージが設けられ、互いに接続されていても構わないし、あるいは、Ｉ／Ｆカードを通じてストレージコントローラ筐体５０同士が結合されていても良い。例えば、Ｉ／Ｆカード８０Ａ〜９１Ｂの一部を、PCI Expressストレージコントローラ筐体間接続Ｉ／Ｆカードと交換できるようにしてもよい。また、これらの相互接続が内部データ転送パス１０１，１０２のように利用できるようにしても良い。
【００３１】
図２は、本実施形態におけるストレージ装置の理解を助けるために示した外観図である。ストレージコントローラ筐体５０は最下段に搭載され、その上にドライブ筐体５１〜５８が示されている。図に表れていないが、背面には先に示したバックエンド接続ケーブルやストレージネットワーク４０を構成するためのケーブルが配線される。
【００３２】
図３は、本実施形態におけるディスクアレイコントローラ主パッケージ６０Ａ，６０Ｂ、およびこれを制御するＭＰパッケージ７０Ａ，７０Ｂの内部の構成と、これらに接続するＩ／Ｆカード８０Ａ〜９１Ｂの構成を示したブロック図である。
Ａ系、Ｂ系は互いに対象な構造であるから、以降では代表してＡ系を用いて説明する。
【００３３】
ディスクアレイコントローラ主パッケージ６０Ａには、ＡＳＩＣ（Application Specific Integrated Circuit）２００Ａ、メモリＭ０、Ｍ１、Ｍ２、Ｍ３が搭載される。ＡＳＩＣ２００Ａには様々な機能が搭載され、例えばメモリ間のデータ転送を行うＤＭＡ（Direct Memory Access）２１０Ａ〜２１２Ａが設けられている。メモリＭ０〜Ｍ３はストレージコントローラ５０のキャッシュメモリであり、バッテリ等で不揮発化されたＤＲＡＭ（Dynamic Random Access Memory）等が用いられる。ＤＲＡＭは、ＤＩＭＭ（Dual Inline Memory Module）として設けられることが多い。またディスクアレイコントローラ主パッケージ６０ＡはＡＳＩＣ２００Ａを通じてＩ／Ｆカード群と接続される。ＦＥ（Front-End）Ｉ／Ｆカード８０Ａ，８１Ａはストレージネットワーク４０を通じてホストと接続するためのものであり、例えばファイバーチャネルプロトコルチップ等が搭載され、複数のホスト接続ポートを備えている。
一方ＢＥ（Back-End）Ｉ／Ｆカード９０Ａ，９１Ａはバックエンド接続ケーブル５１０を通じてドライブ筐体５１，５２・・・の各ディスクと接続される。
ＭＰパッケージ７０Ａには、プロセッサのチップセット７５およびプロセッサ７６０，７６１、これらプロセッサ上で動くプログラム等が格納されるローカルメモリ７７０，７７１が設けられている。プロセッサの種類や世代によっては、ローカルメモリ７７０，７７１はチップセット７５に接続される形態もあれば、プロセッサ７６０，７６１に直接接続される形態もある。また、チップセット７５はプロセッサ７６０，７６１に内包されても良い。プロセッサ７６０，７６１は制御線７１Ａ，７１Ｂを通じ主パッケージ６０Ａ，６０ＢのＡＳＩＣ２００Ａ，２００Ｂに接続され、ハードウェアの制御を行う。制御線７１Ａ，７１Ｂに用いられる技術としては例えばPCI Expressなどがある。
【００３４】
図４は、先に述べたＡＳＩＣ２００Ａおよび２００Ｂの内部の機能ブロックの構成を示したものである。ＡＳＩＣ２００Ａ，２００Ｂ内には先に述べたＤＭＡ２１０，２１１，２１２、内部データ転送パス（I-Path: Internal Path）として使われるPCI Expressを制御するPCI Expressコア２２１，２２３、および内部データ転送パス１０１，１０２用の内部データ転送パスアービタ２２０，２２２、メモリコントローラ２３０，２３１，２３２，２３３、Ｉ／Ｆ制御ブロック２４０，２４１，２４２，２４３、プロセッサポート２７１，２７２、ルーティングプロセッサ（RP: Routing Processor）２６０，２６１、これらを相互接続するスイッチブロック２５０が存在する。
【００３５】
ＤＭＡ２１０〜２１２（メモリ間データ転送制御部）は、プロセッサから指示を受け、あるメモリアドレスから指定された転送長分だけのデータを他のメモリアドレスにコピーする機能を持った転送制御ブロックである。ＤＭＡ２１０〜２１２は、転送元メモリからデータをリードする読出し部（ＲＸ）２１０１、転送先メモリへデータを書き込む書込み部（ＴＸ）２１０２、および転送パラメータをフェッチし解析するパラメータフェッチ部（ＰＦ）２１０３を含んで構成される。データ転送に係る指示方法および転送処理の起動方法等については後述する。また本実施例ではＤＭＡを３個設けているが、ＤＭＡの数は２個以下でも４個以上でも良い。
【００３６】
内部データ転送パス１０１，１０２はパッケージを跨いだメモリ間のデータ転送を行うためのネットワークであり、先に述べたようにPCI Expressが用いられる。PCI Expressコア２２１，２２３はPCI Expressの基本的な送受信動作を行う制御ブロックであり、PCI Expressバスのハードウェア制御やデータリンク制御、トランザクションプロトコル制御などを行う。内部データ転送パスアービタ２２０，２２２は複数の制御ブロックからのPCI Expressネットワークパス利用要求を調停し、所定のルールで使用権限を与えて利用させる仲介制御ブロックである。例えばＤＭＡ２１０とＤＭＡ２１１が同時にデータ転送しようとした場合、最初ＤＭＡ２１０に利用権を与えて転送を行わせ、続いてＤＭＡ２１１に利用権を与えて転送を行わせるといった調停処理をする。
【００３７】
メモリコントローラ２３０〜２３３はメモリＭ０〜Ｍ３またはＭ４〜Ｍ７が接続され、ＤＭＡ２１０〜２１２や他の制御ブロックからの要求に基づいて、メモリＭ０，Ｍ１，Ｍ２，Ｍ３およびメモリＭ４，Ｍ５，Ｍ６，Ｍ７への読み書きを行い、データパケットを送受信する制御ブロックである。また、メモリコントローラ２３０〜２３３は、複数の制御ブロックから同時にアクセスされた場合、そのアクセス順序を調停するためのアービタ（ＡＲＢ）を備える。メモリコントローラ２３０〜２３３はメモリチャネルとも呼ばれる。各メモリコントローラ２３０〜２３３に接続されるメモリＭ０〜Ｍ７には、固有のメモリアドレス空間が割り当てられる。
【００３８】
Ｉ／Ｆ制御ブロック２４０〜２４３は、先のＩ／Ｆカード８０Ａ〜８１Ｂ、９０Ａ〜９１Ｂが接続され、これらとデータ転送を行うためのブロックである。プロセッサポート２７１，２７２は制御線７１Ａ，７２Ａ等が接続され、プロセッサ７６０，７６１およびＡＳＩＣ２００が制御上の情報データの授受を行うほか、プロセッサ７６０Ａ、７６１Ａ、７６０Ｂ、７６１Ｂが相互に通信するための制御を行うブロックである。
【００３９】
ルーティングプロセッサ２６０，２６１は、Ｉ／Ｆ制御ブロック２４０〜２４３を通じてプロトコルチップから受けたコマンドを制御担当するプロセッサ７６０Ａ〜７６１Ｂに振り分け処理を行う制御ブロックである。
【００４０】
ＡＳＩＣ２００には、このほかにも様々な制御ブロックが存在してもよい。例えばデータ圧縮やデータ暗号化などハードウェア演算制御ブロックやプロセッサからのメモリアクセス専用コントローラなどが考えられる。
【００４１】
図５は、本実施形態におけるＡＳＩＣ２００内のＤＭＡ２１０〜２１３に対し、プロセッサ７６０，７６１が転送指示するための仕組みを模式的に示した図である。なお、以降の説明では、いずれのプロセッサからいずれのＤＭＡを起動する場合でも手順は同じであるため、代表してＤＭＡ２１０、およびプロセッサ７６０のケースについて説明する。
【００４２】
プロセッサ７６０は、ＤＭＡ２１０を用いて、あるメモリアドレスにあるデータを別のメモリアドレスに転送させたい場合、ＤＭＡ２１０に転送指示するためのパラメータ３００（転送指示パラメータ）をローカルメモリ７７０上に構築する。パラメータ３００は転送元のメモリアドレス、転送先のメモリアドレス、転送長、その他、から構成されるが詳細は後述する。なお、複数のパラメータ３００は連続してローカルメモリ７７０に書き込まれるものとする。
【００４３】
プロセッサ７６０は、目的とするデータ転送に必要な数だけパラメータ３００を連続してローカルメモリ７７０に書き込み、ＤＭＡ２１０の起動トリガレジスタ２に、先頭のパラメータ３００が記憶されたローカルメモリ７７０の開始アドレスを値としてセットする。例えば図５では、ローカルメモリ７７０のアドレス１０００ｈ番地（１６進数）から４つのパラメータ、パラメータ０〜パラメータ３が構築されているので、プロセッサ７６０はＤＭＡ２１０の起動トリガレジスタ２に値１０００ｈをセットする。
【００４４】
ＤＭＡ２１０は当該レジスタ２に値がセットされると、その値に示されたローカルメモリ７７０のアドレスからパラメータ３００を読み出して解析し、パラメータ３００に指示されたデータ転送を行う。例えば図５では、起動トリガレジスタ２に値１０００ｈ（１６進数）がセットされたので、ＤＭＡ２１０はローカルメモリ７７０のアドレス１０００ｈ番地からパラメータ３００を読み出すように動作する。ＤＭＡ２１０の動作の詳細については、後述する。
【００４５】
図６は、本実施形態においてプロセッサ７６０がＤＭＡ２１０へのデータ転送指示を行うために用いるパラメータ３００のフォーマット例を示した図である。パラメータＩＤフィールド３００１には各パラメータ３００に設定される固有の番号が指定される。転送元アドレスフィールド３００２には転送元となるメモリの開始アドレスが指定される。転送先アドレスフィールド３００３には転送先となるメモリの開始アドレスが指定される。転送長フィールド３００４には転送するデータのデータ長が指定される。チェイン番号フィールド３００５はパラメータ３００のグルーピングを指定するフィールドである。チェイン番号フィールド３００５は、グルーピングする他のパラメータ３００がある場合、１から順に指定され、グルーピングの最後のパラメータ３００に０が指定される。すなわち、チェイン番号３００５は１から順に増加し、チェイン番号３００５が０までのパラメータ群が１つの転送グループと見なされる（チェインがない場合はチェイン番号３００５は０である）。ＤＭＡ２１０は、チェイン番号３００５が０以外の場合、当該パラメータ３００の処理で終了せずに、連続して後続パラメータ３００群に指示されたデータ転送を実施するチェイン動作を行う。パス番号フィールド３００６には複数ある内部データ転送パス１０１，１０２のうち何番目のパスを利用するかが指定される。図６では、パス番号フィールド３００６は１つとしたが、データ読み込み時、データ書き込み時など、個別に内部データ転送パス１０１，１０２を指定できるように複数設けてもよい。なお、図６に示すパラメータ３００の構成は一例であり、他の制御に必要な別のフィールドがあっても構わない。
【００４６】
図７は、本実施形態におけるＤＭＡ２１０のデータ転送動作を示すフローチャートである。本図を用いて書込み先メモリ面が切り替わる毎、および一連のデータ転送が終了するごとにその間の書込みを自動的に確定させる本実施形態のＤＭＡの転送動作を説明する。
【００４７】
ＤＭＡ２１０はプロセッサ７６０からの起動指示により動作を開始する。本実施形態ではプロセッサ７６０からトリガレジスタ２に値が設定されると動作を開始するが、信号線を介した信号送信やメッセージ送信等を契機としてＤＭＡ２１０が起動するようにしてもよい。ＤＭＡ２１０のパラメータフェッチ部２１０３は起動トリガレジスタ２に値が設定されると、設定された値が示すローカルメモリ７７０のアドレスを参照し、パラメータ３００の１つをフェッチして設定内容を解析する（Ｓ８０００）。例えば転送元アドレスフィールド３００２から転送元メモリの開始アドレスを、転送先アドレスフィールド３００３から転送先メモリの開始アドレスを、転送長フィールド３００４から転送長（総データ転送量）を取得する。なお、ＤＭＡ２１０が一旦起動すると、次のパラメータ３００のフェッチはバックグラウンドで先読み（プリフェッチ）される（Ｓ８００５）。
【００４８】
ＤＭＡ２１０の読出し部２１０１はパラメータフェッチ部２１０３の解析結果に基づいて、転送元アドレスからどのメモリコントローラにアクセスすべきか特定する（Ｓ８０１０）。例えば、図８のようにメモリアドレスが割り振られているとする。転送元アドレスが２３０００番地だった場合、当該アドレスはメモリＭ１が持つ２００００ｈ〜２ＦＦＦＦｈ番地の間にあるので、読出し部２１０１はメモリＭ１が接続されたメモリコントローラ２３１にアクセスすれば良いと判断する。続いて読出し部２１０１は該当メモリコントローラ２３１に対して、アクセスするアドレスと読み出すデータ長とを指定したメモリリードリクエストを発行する（Ｓ８０２０）。メモリリードリクエストは、対象メモリコントローラが同一ＡＳＩＣ２００内の場合にはメモリコントローラへ直接発行され、対象メモリコントローラが別のＡＳＩＣ２００の場合には、内部データ転送パス１０１，１０２を通じて発行される。ＤＭＡ２１０が１回に転送できる転送長は比較的小さい。このため、パラメータ３００で指定された転送長のデータを複数回に分けて転送することがある。パラメータ３００で指定された転送長が、ＤＭＡ２１０が１回に転送できる転送長よりも大きい場合には、ＤＭＡ２１０により転送可能な最大転送長がデータ長として指定される。パラメータ３００に指定された転送長が、ＤＭＡ２１０が１回に転送できる転送長以下の場合には、パラメータ３００で指定された転送長がデータ長としてリードリクエストに指定される。例えばＤＭＡ２１０が１回に転送できる転送長が２０４８バイトの場合、パラメータに指定された転送長が４０９６バイトであれば２０４８バイト、５１２バイトであれば５１２バイトが、読み出すデータ長としてリードリクエストに指定されることになる。
【００４９】
メモリコントローラ２３０〜２３３はリードリクエストに指定されたアドレスが指定する、リードリクエストに指定された転送長のデータをメモリＭ０〜Ｍ７から読み出し、読み出したデータとともにリードレスポンス（Completion）を読出し部２１０１に返す。リードレスポンスは同一ＡＳＩＣ２００内部のＤＭＡ２１０であれば直接送信され、別ＡＳＩＣ２００の場合には内部データ転送パス１０１，１０２を通じて送信される。ＤＭＡ２１０の読出し部２１０１は、メモリコントローラ２３０〜２３３から読み出されたデータと共にリードレスポンスを受領し（Ｓ８０３０）、受領したデータをＤＭＡ２１０内部のバッファに格納する。
【００５０】
ＤＭＡ２１０の書込み部２１０２は、ＤＭＡ２１０内部のバッファにデータが格納されると、パラメータフェッチ部２１０３の解析結果に基づいて転送先アドレスからどのメモリコントローラ２３０〜２３３にアクセスすべきか特定する（Ｓ８０４０）。例えば、図８のようにメモリアドレスが割り振られており、転送先アドレスが５１０００ｈ番地だった場合、書込み部２１０２はメモリＭ４が接続されたメモリコントローラ２３０にアクセスすれば良いと判断する。
【００５１】
書込み部２１０２は、２つ目以後のパラメータ３００について、上記アクセス先として特定したメモリコントローラと前回のＳ８０４０において特定したメモリコントローラとが異なった場合（Ｓ８０５０：Ｙｅｓ）は、前回特定したメモリコントローラに対してダミーのリードリクエストを発行する（Ｓ８０６０）。ダミーのリードリクエストは、例えば転送長が０のメモリリードリクエストなど、先に発行されたメモリライトリクエストを追い抜かないもの（すなわち、先に発行された全てのメモリライトリクエストによるメモリへの書込みが終了した後に処理されるリクエスト）であればよい。ダミーリードリクエストは、ダミーリードリクエストを送信する対象のメモリコントローラが同一ＡＳＩＣ２００内の場合にはメモリコントローラへ直接発行され、対象のメモリコントローラが別のＡＳＩＣ２００の場合には、内部データ転送パス１０１，１０２を通じて転送される。なお、同一ＡＳＩＣ２００内でＤＭＡ２１０からメモリコントローラ２３０〜２３３までの経路上にデータが滞留する部分（バッファ等）がない場合には、今回のＳ８０４０で特定したメモリコントローラが、前回のＳ８０４０で特定したメモリコントローラと異なる場合（Ｓ８０５０：Ｙｅｓ）であっても、前回のメモリコントローラが同一ＡＳＩＣ２００内であれば、ダミーリードリクエストの発行を省略するよう実装しても構わない。書込み部２１０２は、ダミーリードリクエストに対するリードレスポンスが返ってくるとエラーがあるかどうか判定する（Ｓ８０７０）。エラーがない場合には（Ｓ８０７０：Ｎｏ）、書込み部２１０２は、ＤＭＡ２１０内部のバッファに格納されたデータと共に新たなアクセス先のメモリコントローラへメモリライトリクエストを発行する（Ｓ８０８０）。
【００５２】
なお、Ｓ８０５０において、アクセス先のメモリコントローラが前回と同じ場合（Ｓ８０５０：Ｎｏ）およびＳ８０００で読み出したパラメータ３００が最初のものである場合には、Ｓ８０６０〜Ｓ８０７０の処理を行う必要はなく、Ｓ８０８０のみが実行される。
また、Ｓ８０７０において、メモリリードレスポンスにエラーがあった場合（Ｓ８０７０：Ｙｅｓ）、書込み部２１０２、読出し部２１０１、パラメータフェッチ部２１０３は当該パラメータ３００および当該パラメータ３００にチェインされている後続パラメータ（すなわち、チェイン番号欄３００５に設定されている値が当該パラメータ３００から連続してインクリメントされている一連のパラメータ３００）についてデータ転送処理を全て中断し（Ｓ８３００）、エラーに起因した終了のステータスをプロセッサ７６０，７６１へ通知する。
【００５３】
先に述べたとおりＤＭＡ２１０が１回に転送できる転送長は小さいことが多いため、書込み部２１０２は転送が終わると、前回までの転送量と今回の転送量を累計し、パラメータに指定された転送長に達成しているか判断する（Ｓ８０９０）。指定された転送長に達している場合（Ｓ８０９０：Ｙｅｓ）、書込み部２１０２は、最後にＳ８０４０において特定したメモリコントローラに対してダミーリードリクエストを送信して、これまでのデータのメモリへの書込みを確定する（Ｓ８１００）。書込み部２１０２は、ダミーリードリクエストに対するメモリコントローラからのリードレスポンスを受信してエラーの有無を判定し（Ｓ８１１０）、エラーがあればＳ８３００に進んで上述のように転送を中断する。読出し部２１０１、書込み部２１０２はパラメータフェッチ部２１０３へ指定された転送長に達したことを通知し次の指示を待つ。パラメータフェッチ部２１０３は次のパラメータがチェインされているか判定する（Ｓ８１２０）。次のパラメータがチェインされていない場合（Ｓ８１２０：Ｎｏ）、パラメータフェッチ部２１０３は転送終了ステータスをプロセッサ７６０，７６１に通知し（Ｓ８１３０）、データ転送処理を終了する。
【００５４】
なお、Ｓ８０９０において、累計転送量がパラメータ３００に指定された転送長に達していない場合（Ｓ８０９０：Ｎｏ）、書込み部２１０２および読出し部２１０１は残転送長を今回転送分減じ（Ｓ８２００）、また転送元アドレスおよび転送先アドレスを今回転送長分ずらして（Ｓ８２１０）、パラメータ３００に指定された転送長に達するまで繰り返す（処理はＳ８０１０に戻る）。
【００５５】
また、Ｓ８１００において、パラメータ３００がチェインされていた場合（Ｓ８１００：Ｙｅｓ）は、引き続いて次のパラメータ３００によるデータ転送処理を行う（Ｓ８０００に戻る）。
以上のようにして、本実施形態のＤＭＡ２１０はデータ転送処理を行う。
【００５６】
なお、実際の制御実装では、パラメータフェッチ部２１０３、読出し部２１０１、書込み部２１０２は同時並行動作しうるので、各処理（Ｓ８０００〜Ｓ８１３０）は時間的に並行して行われることがある。また本実施形態ではパラメータフェッチ部２１０３、読出し部２１０１、書込み部２１０２の３つを設け上記のように役割を分担したが、ＤＭＡとして同様の機能を果たせば他の構成でも良い。
【００５７】
図９は、先の図７のＤＭＡ転送制御を含め、本実施形態におけるメモリ間データ転送制御の全体像を示すラダーチャートである。図の縦方向は時間の経過を示し、図の横方向は各資源間の制御およびデータの流れを示す。各資源はローカルメモリ７７０，７７１、プロセッサ７６０，７６１、メモリＭ０〜Ｍ７、ＤＭＡ２１０〜２１３であるが、同一資源であれば動作は同じ為、番号は省略する。なお、メモリ＃ｘは転送元のメモリを、メモリ＃０およびメモリ＃１は転送先のメモリを示しており、それぞれはＭ０〜Ｍ７が接続されたメモリコントローラ２３０〜２３３の中の任意の１つであり、転送元と転送先が重複しても良い。本図を用いて、データ転送制御の全体像を説明する。
【００５８】
プロセッサ７６０，７６１は図６に示したパラメータフォーマットに基づき、図５に示した方法でローカルメモリ上にパラメータ３００群を作成する（Ｒ７０００）。プロセッサ７６０，７６１は引き続いてＤＭＡのパラメータ３００を作成したローカルメモリのアドレスをトリガレジスタ２に設定することにより、ＤＭＡを起動するトリガをかける（Ｒ７１００）。ＤＭＡはトリガレジスタ２を参照してローカルメモリからパラメータ３００群の最初のパラメータ３００をフェッチする（Ｒ７２００）する。また、バックグラウンドタスクとして適切なタイミングにて次のパラメータ３００をプリフェッチする（Ｒ７２１０）。ＤＭＡはパラメータ３００を解析し、その結果に基づいて、メモリ＃ｎからデータを読み出すと共に（Ｒ７３００〜Ｒ７３ｘｘ）、並行してメモリ＃１にデータを書き込む（Ｒ７４００〜Ｒ７４ｘｘ）。書込み先メモリ面がメモリ＃０からメモリ＃１に切り替わる場合、ＤＭＡはそれまでの書込みを確定させるためのダミーのリードリクエストを発行する（Ｒ７５００）。そして引き続きデータリードを行いながら（Ｒ７６００〜Ｒ７６ｘｘ）、メモリ＃１へのデータの書込みを継続する（Ｒ７７００〜Ｒ７７ｘｘ）。パラメータ３００に指定された転送長分のデータ転送が終了すると、最終メモリ面にダミーのリードリクエストを発行して書込みの確定処理を行う（Ｒ７８００）。後続するパラメータ３００がチェインされていない（次のパラメータ３００のチェイン番号３００５が０である）場合には、転送ステータスを、ローカルメモリを通じてプロセッサ７６０，７６１に返送する（Ｒ７９００）。
【００５９】
（本実施例１の効果）
本実施例１によれば、同じメモリコントローラ２３０〜２３３へのライトリクエストについては、書込みを確定させずに連続して送信し、書込み先が異なるメモリコントローラ２３０〜２３３にライトリクエストを送信する場合には、先のメモリコントローラ２３０〜２３３に対してダミーリードリクエストを送信することができる。同一のメモリコントローラ２３０〜２３３に対するリクエストは同一の経路を通って送信されるので、ポステッドアクセスによるライトリクエストの後に、ノンポステッドアクセスによるダミーリードリクエストを送信することにより、先に発行されたライトリクエストに係るデータの書込みを確定することができる。したがって、内部データ転送パス１０１，１０２において、書き込みの完了応答がなされないプロトコルを用いている場合にも、ライトリクエストの発行経路をパケットごとに記憶することなく、メモリへの書込みを確定することができる。加えて、パケット毎の経路記憶領域が不要となり実装の小型化を図ることができる。また、本実施形態ではＤＭＡ２１０〜２１２が、書込み先のメモリＭ０〜Ｍ７が切り替わるタイミングおよび書込みが終了するタイミングにおいて自動的にダミーリードリクエストを送信することができるので、管理端末３１やホスト計算機２０において実行される制御ソフトウェアなどによりダミーリードリクエストを発行する等の追加の処理を行う必要がないため、システム全体として性能の高速化を図る事ができる。
【００６０】
（本実施例１の変形例１）
本実施形態では書込みの確定を行うため、メモリＭ０〜Ｍ７に対するダミーのリードリクエストを発行したが、代わりにメモリコントローラ２３０〜２３３のレジスタに対するリードリクエストを発行するように変形しても良い。なお、レジスタに対するリードリクエストもノンポステッドアクセスであるものとする。本変形例の場合、書込みを確定するためにメモリＭ０〜Ｍ７にアクセスしないため、より高速に書込みの確定を行うことが可能となり、メモリ利用効率を向上させるという追加の効果がある。また、上記メモリコントローラ２３０〜２３３のレジスタには、ライトリクエストの個数を記録する機能を持たせてもよい。この場合、ＤＭＡ２１０〜２１２はレジスタからリードした値と発行したライトリクエストの数との差を比較することによって転送の正常/異常を判定することができる。したがって、より書込み確定の信頼性を高めることができるという追加の効果がある。前記レジスタはＤＭＡやその他のメモリへアクセスを行う資源ごとに設けても良いし、アクセスエリアごとに設けても良い。また、メモリコントローラ２３０〜２３３がライトリクエスト以外にもリードリクエストの数やその他の統計情報を保持するレジスタを備えていても良い。
【００６１】
（本実施例１の変形例２）
本実施形態ではメモリへの書込みの確定を行うため、ダミーリードリクエスト（ノンポステッドアクセス）を発行したが、この代わりに、先行するライトリクエストを追い抜かないポステッドアクセスの専用命令（書込み確認要求）を定義して発行するように変形しても良い。例えば、図１０のようなフォーマットのＴＬＰ（Transaction Layer Packet）を書込み確認要求として定義し、この書込み確認要求を送信すると、メモリコントローラ２３０〜２３３はバッファ中のデータをメモリへフラッシュし、非同期で図１１のようなポステッドアクセスによる応答（書込み確認応答）を返すようにする。この場合のシーケンスは図１２のようになる。本変形例の場合、ノンポステッドアクセスと異なりＤＭＡ２１０〜２１２は、応答データ（リードレスポンス）受信用のバッファを確保して待つ必要がなくなる。これにより、動作の並列性が高まり性能改善する事ができるという追加の効果がある。なお、通常のPCI Expressでは未定義のリクエスト（ＴＬＰ）は破棄されてしまうため、上記のリクエストや応答を受理するようにＰＣＩコア２２１，２２３に前記定義を実装する。
【００６２】
（本実施例１の変形例３）
本実施形態ではメモリへの書込みの確定を行うため、メモリへダミーのリードリクエストを発行したが、ＡＳＩＣ２００内の実装および内部データ転送パス１０１，１０２の経路上に、書込み確定要求のための専用信号線を設けてもよい。図１３はこの実装例を示したものである。ＤＭＡ２１０〜２１２は、書込みの確定が必要になると、信号コントローラ２８０に、書込み確定の必要なメモリコントローラ２３０〜２３３に信号を送るよう指示する。信号は例えば、ＤＭＡ２１０〜２１２からの書込み転送数等の情報を含むものであり、メモリコントローラ２３０〜２３３は要求された転送数が到着すると、確定完了信号を返すようにする。ＤＭＡ２１０〜２１２は信号コントローラ２８０を通じて書込みが確定したことを確認することができる。本変形例の場合、書込み確定用のリクエストおよび応答がデータ転送経路を通らないので、データ転送への影響がなくなり転送効率が改善するという追加の効果がある。
【００６３】
（本実施例１の変形例４）
本実施形態では書込みの確定をメモリコントローラ２３０〜２３３が切り替わる点を契機として実行したが、メモリコントローラ２３０〜２３３ではなく、その先に実装されるＤＩＭＭ単位としても良い。この場合、メモリコントローラ２３０〜２３３ごとのアドレス範囲の代わりにＤＩＭＭごとのアドレス範囲を管理し、図７のＳ８０５０にてアクセス先のＤＩＭＭが前回と異なるか否かを判定するように変更すれば実現可能である。また通常ＤＩＭＭは、複数のメモリチップで構成され、バンクという単位で管理される。従い、同様にして、ＤＩＭＭ内のバンクが切り替わる点を書き込み確定の契機としても良い。この場合、バンクごとのアドレス範囲を管理することとなる。
【００６４】
（本実施例１の変形例５）
本実施形態では、メモリ面が切り替わるのを契機に書込みの確定処理を行うようにしたが、メモリ面が切り替わる前にも一定転送回数毎に定期的に行うようにしてもよい。本変形例の場合、非常に大きな転送長のデータを書き込む際、定期的に書込みを確定させることができるので、データの書込みの確実性を向上させることができるほか、細かく書込み確定処理を行うので、エラー発生時のリカバリ処理が容易になるといった追加の効果がある。また、転送パラメータ３００にてプロセッサ７６０，７６１が明示的に書込み確定処理の必要性の有無や頻度を指定できるようにしても良い。あるいは、ＤＭＡ２１０〜２１２の起動トリガレジスタを２種設け、一方のトリガレジスタによって起動された場合には書込み確定処理付きで動作し、他方のトリガレジスタによって起動された場合には書込み確定処理を行わないようにしてもよい。この場合、不要な書込み確定動作を削減させることができるので処理性能を向上させるといった追加の効果がある。
【００６５】
（本実施例１の変形例６）
本実施形態では、ＤＭＡ２１０〜２１２はパラメータ３００をリードし、その指示によってメモリ間のデータ転送を実行するが、バッファまたはレジスタに書かれた小データを、ライト確定処理を実行しつつメモリに転送するための別のＤＭＡを設けても良い。また、レジスタのサイズおよびアドレスからデータの転送長および転送元アドレスを知ることができるので、パラメータ３００の構築を省略し、転送先アドレスをトリガレジスタにセットするように変形しても良い。更に、データ転送が正常終了の場合には、転送終了通知の送信を省略してもよい。本変形例の場合、データ転送におけるパラメータ作成や転送ステータスチェックのオーバーヘッドを削減できるので、小データ単位でのデータ転送においても処理性能を向上させる追加の効果がある。
なお上記の変形例１〜６は、必要に応じて組み合わせても構わない。
【００６６】
＜実施例２＞
実施例２を図１４〜図１５を参照して説明する。
実施例２における装置の基本構成は図１に示すストレージ装置であり、ストレージコントローラの構成も図３と同じだが、ＡＳＩＣ２００が備える機能が異なる。以降の説明では主に実施例１と異なる部分を説明し、同様の部分については説明を割愛する。なお、ＡＳＩＣ２００Ａ，ＡＳＩＣ２００Ｂとも構成は同一であるため、以降の説明では末尾のアルファベット符号は省略する。
【００６７】
図１４は、実施例２のストレージコントローラにおけるＡＳＩＣ２００の機能ブロックを示したものである。ＡＳＩＣ２００には、ＤＭＡ２１０〜２１２の状態管理を行うＤＭＡステータスブロック４００が設けられている。ＤＭＡ２１０〜２１２には自己の状態管理と他のＤＭＡ２１０〜２１２の情報を取得するための状態管理部（ＳＭ）２１０４が設けられる。
【００６８】
ＤＭＡステータスブロック４００は各ＤＭＡ２１０〜２１２の転送状態を示すテーブル４０１を持つ。テーブル４０１の詳細は図１５を用いて後述する。各ＤＭＡ２１０〜２１２の状態管理部２１０４は、スイッチブロック２５０を通じて、このＤＭＡステータスブロック４００にアクセスし、自己の情報の記録や、他のＤＭＡ２１０〜２１２の情報を取得して、パス選択の判断に利用する。
【００６９】
図１５は、実施例２のＡＳＩＣ２００内のテーブル４０１の一例を示したものである。テーブル４０１には、各ＤＭＡ２１０〜２１２の番号（ＤＭＡ番号）４０１０、現在の状態４０２０、転送元のメモリコントローラ番号４０３０、転送先のメモリコントローラ番号４０４０、使用中の内部データ転送パス番号４０５０、リクエスト種別４０６０などのフィールドがある。
【００７０】
ＤＭＡ番号４０１０はＡＳＩＣ２００Ａ，２００Ｂ内のＤＭＡ２１０〜２１２を識別する番号が格納されるフィールドである。現在の状態４０２０は、各ＤＭＡがデータ転送中（ＢＵＳＹ）なのか、停止中（ＩＤＬＥ）なのかを示すフィールドである。転送元メモリコントローラ番号４０３０は、ＤＭＡ２１０〜２１２内のパラメータ解析により特定された転送元メモリコントローラ２３０〜２３３を識別する番号である。同様に転送先メモリコントローラ番号４０４０は、ＤＭＡ２１０〜２１２内のパラメータ解析によって特定された転送先メモリコントローラ２３０〜２３３を識別する番号である。内部データ転送パス番号４０５０は、内部データ転送パス１０１，１０２を介してデータを転送している場合に使用している内部データ転送パス１０１，１０２を識別する番号である。リクエスト種別４０６０は、読み出し（ＲＸ）に使用しているのか、書き込み（ＴＸ）に使用しているのか、あるいは両方（ＴＸ／ＲＸ）に使用しているのかを示す。なお、本実施例では転送先メモリコントローラ番号４０４０を示すフィールドは１つとしたが、ＤＭＡが１つの転送元から同時に複数の転送先に転送する機能を持つ場合、テーブル４０１はその数に応じた複数の転送先メモリコントローラ番号フィールドを備える。
【００７１】
図１６は、本実施形態におけるＤＭＡ２１０がデータ転送動作する際のフローチャート例である。なお、ＤＭＡ２１１，２１２もＤＭＡ２１０と同様の動作を行う。ＤＭＡ２１０のパラメータフェッチ部２１０３は図７に示したのと同様の方法によってパラメータ３００を解析し、転送元および転送先メモリコントローラ２３０〜２３３を特定する（Ｓ８０１０，Ｓ８０４０）。その結果、もし転送元あるいは転送先のメモリコントローラ２３０〜２３３に内部データ転送パス１０１，１０２を使ってアクセスする必要がある場合（すなわち、別パッケージのメモリＭ４〜Ｍ７へアクセスする場合）、ＤＭＡ２１０の状態管理部２１０４はＤＭＡステータスブロック４００にアクセスし、どの内部データ転送パス１０１，１０２を使うべきかを決定する。具体的には、状態管理部２１０４はテーブル４０１を参照して、各内部データ転送パス１０１，１０２について、リクエスト種別４０６０ごとのレコードの数を集計する。内部データ転送パス１０１，１０２を使ったアクセスが読出しだった場合（すなわち転送元メモリコントローラ２３０〜２３３のみが別パッケージのメモリＭ４〜Ｍ７に対応する場合）（Ｓ９０２０：Ｙｅｓ）、状態管理部２１０４はリクエスト種別４０６０に「ＲＸ」が含まれているレコードの数を内部データ転送パス１０１，１０２ごとにカウントする（Ｓ９０３０）。一方、内部データ転送パス１０１，１０２を使ったアクセスが書込みだった場合（すなわち転送先メモリコントローラ２３０〜２３３のみが別パッケージのメモリＭ４〜Ｍ７に対応する場合）（Ｓ９０４０：Ｙｅｓ）、状態管理部２１０４は、リクエスト種別４０６０に「ＴＸ」が含まれているレコードの数を内部データ転送パス１０１，１０２ごとにカウントする（Ｓ９０５０）。内部データ転送パス１０１，１０２を使ったアクセスが読出しと書込みの両方だった場合（すなわち転送元および転送先のメモリコントローラ２３０〜２３３の両方が別パッケージのメモリＭ４〜Ｍ７に対応する場合）、状態管理部２１０４は、レコードの数を内部データ転送パス１０１，１０２ごとにカウントする（Ｓ９０６０）。状態管理部２１０４は、リクエスト種別４０６０についてカウントしたレコード数が最も小さい内部データ転送パス１０１，１０２を選択する（Ｓ９０７０）。そして、状態管理部２１０４は、利用するメモリコントローラ２３０〜２３３や利用する内部データ転送パス番号など自ＤＭＡ２１０に対応するレコードの情報を更新する。例えば、自ＤＭＡ２１０の番号は「０」で、ＤＭＡ２１０と同じパッケージのメモリコントローラ０から別パッケージのメモリコントローラ５へ、内部データ転送パス０（１０１）を使用してデータ転送する場合、状態管理部２１０４は、ＤＭＡ番号４０１０が「０」のレコードについて、状態４０２０に「ＢＵＳＹ」、転送元メモリコントローラ番号４０３０に「０」、転送先メモリコントローラ番号４０４０に「５」、内部データパス番号４０５０に「０」、リクエスト種別４０６０に「ＴＸ」をそれぞれ設定する。
【００７２】
パラメータ３００に応じたデータの転送が終了すると（図７のＳ８０２０〜Ｓ８０３０またはＳ８０５０〜Ｓ８１１０）、ＤＭＡ２１０の状態管理部２１０４はテーブル４０１の状態を再び更新する（Ｓ９０９０）。すなわち自ＤＭＡ２１０に対応する状態４０２０を「ＩＤＬＥ」とし、転送元メモリコントローラ番号４０３０、転送先メモリコントローラ番号４０４０、内部データ転送パス番号４０５０、リクエスト種別４０６０をクリアする。
【００７３】
（実施例２の効果）
本実施例２によれば、内部データ転送パス１０１，１０２が複数ある場合、他の資源（ＤＭＡ）による内部データ転送パス１０１，１０２の利用状況を踏まえて、データの転送に用いる内部データ転送パス１０１，１０２を選択することができるようになり、効率的な転送が可能となる。従来よく使われる手法としてネットワークパスの転送バッファ空き状況を見て選択する方法があるが、複数のＤＭＡ２１０〜２１２がわずかな時間差で空き状況を見た場合、全てのＤＭＡ２１０〜２１２が同じパスを選択する可能性があり効率的な転送が行えない。本実施例２では、テーブル４０１を参照したＤＭＡ２１０〜２１２は選択結果をテーブル４０１に反映する。次のＤＭＡ２１０〜２１２は前のＤＭＡ２１０〜２１２の選択結果も踏まえてデータの転送に用いる内部データ転送パス１０１，１０２を決定することができるので、全てのＤＭＡ２１０〜２１２が同じ内部データ転送パス１０１，１０２を選択してしまう可能性が減り、より効率的なパス選択が可能となる。
【００７４】
（実施例２における変形例１）
本実施例２では個々のＤＭＡ２１０〜２１２が他のＤＭＡ２１０〜２１２の情報を見てパス選択につき判定していたが、ステータスブロック４００に判定論理を設け、ＤＭＡ２１０〜２１２がステータスブロック４００に問い合わせるようにしても良い。この場合、ステータスブロック４００にはパス選択部を設け、ＤＭＡ２１０〜２１２が転送元および転送先のメモリコントローラ２３０〜２３３を含むリクエストをパス選択部に送信し、パス選択部は、このリクエストに応じて、図１６のＳ９０００〜Ｓ９０７０の処理を行い、選択した内部データ転送パス１０１，１０２を応答する。本変形例１の場合、パス選択論理を一箇所に集約できるので実装効率が向上する可能性があるほか、テーブル４０１のレコードの更新タイミングをステータスブロック４００で調整できるので、データ読取り中の書込みなどによる情報不正合を防止しやすくなるという追加の効果がある。
【００７５】
（実施例２における変形例２）
本実施例２では各ＤＭＡ２１０〜２１２による内部データ転送パス１０１，１０２の選択状況を見てパス選択につき判断するようにしたが、これに加え内部データ転送パス１０１，１０２のバッファの空き状況やPCI Expressの転送クレジット残数などを加味して判断するようにしても良い。例えば内部データ転送パス０（１０１）の利用は少ないが対応バッファに空きがない場合、内部データ転送パス１（１０２）を選択するといった判断が可能になる。一例としては、内部データ転送パスアービタ２２０，２２２に、内部データ転送パス１０１，１０２で使用されているバッファ量をモニタする機能や、PCI Expressコア２２１，２２３に転送クレジット残数をモニタする機能を加えることで実現が可能となる。本変形例２では、ステータスブロック４００には、転送クレジット残数などを記憶する図１７に示すようなテーブル４０２を記憶しておくようにする。図１７の例では、ヘッダやデータなどのより詳細なバッファのクレジット、すなわちポステッドヘッダバッファのクレジット（ＰＨ＿ＣＲＥＤＩＴＳ; Posted Header buffer CREDITS）や、ポステッドデータバッファのクレジット（ＰＤ＿ＣＲＥＤＩＴＳ; Posted Data buffer CREDITS）、ノンポステッドヘッダバッファのクレジット（ＮＰＨ＿ＣＲＥＤＩＴＳ: Non-Posted Header buffer CREDITS）、ノンポステッドデータバッファのクレジット（ＮＰＤ＿ＣＲＥＤＩＴＳ; Non-Posted Data buffer CREDITS）、完了応答ヘッダバッファのクレジット（ＣＰＬＨ＿ＣＲＥＤＩＴＳ; ComPLetion Header buffer CREDITS）、および完了応答データバッファのクレジット（ＣＰＬＤ＿ＣＲＥＤＩＴＳ; ComPLetion Data buffer CREDITS）を記憶するようにしている。メモリライトリクエストのようなポステッドアクセスの場合には、ＰＨ＿ＣＲＥＤＩＴＳやＰＤ＿ＣＲＥＤＩＴＳの残数を、メモリリードリクエストのようなノンポステッドアクセスの場合には、ＮＰＨ＿ＣＲＥＤＩＴＳやＮＰＤ＿ＣＲＥＤＩＴＳの残数を比較することで参照すればよい。本変形例の場合、内部データ転送パス１０１，１０２の混雑状況を加味できるのでより精度の高いパス選択が可能となる追加の効果がある。
【００７６】
（実施例２における変形例３）
本実施例２では各ＤＭＡ２１０〜２１２による内部データ転送パス１０１，１０２の選択状況を見て判断するようにしたが、これに加えテーブル４０１の転送元/転送先メモリコントローラ番号４０３０，４０４０の利用状況を加味して判断するようにしても良い。内部データ転送パス１０１，１０２を通じてメモリコントローラ２３１にアクセスすることを想定する。例えば、内部データ転送パス０（１０１）の方がＤＭＡの数が少ないが、アクセス先がみな同じメモリコントローラ２３０だった場合、当該メモリコントローラ２３０のバッファがあふれ、内部データ転送パス０上にある後続のパケットが滞留している可能性がある。そこで選択しているＤＭＡの数が多くても内部データ転送パス１（１０２）を選択する、といったケースが考えられる。本変形例３では、状態管理部２１０４は、各内部データ転送パス１０１，１０２について、例えば宛先メモリコントローラを２３１とするＤＭＡに限定し、Ｓ９０３０，Ｓ９０５０，Ｓ９０６０に示すカウントを行うことで実現できる。本変形例３の場合、内部データ転送パス１０１，１０２の混雑状況に加え、アクセス先のメモリコントローラ２３０〜２３３の混雑状況を加味できるのでより精度の高いパス選択が可能となる追加の効果がある。
【００７７】
（実施例２における変形例４）
本実施例２では各ＤＭＡ２１０〜２１２による内部データ転送パス１０１，１０２の選択状況を見て判断するようにしたが、これに加え、転送長や、転送ブロック数、あるいは、残転送ブロック数などのより詳細な情報をテーブル４０１に加え、判断に利用しても良い。本変形例の場合、パス選択する上での精度を高めることができ、より効率的な判断が可能となる追加の効果がある。
【００７８】
なお上記の実施例２の変形例１〜４は、必要に応じて組み合わせても構わない。
【００７９】
＜実施例３＞
実施例３を図１８〜図２０を参照して説明する。
実施例３における装置の基本構成は図１に示すストレージ装置であり、ストレージコントローラの構成も図３に同じであるが、プロセッサ７６０，７６１がＤＭＡ２１０〜２１２の転送指示に使うパラメータ３００のフォーマット、およびプロセッサ７６０，７６１がＡＳＩＣ２００にメモリＭ０〜Ｍ７の利用レイアウト情報を通知/設定できる点が異なる。以降の説明では主に先の実施例１、２と異なる部分のみ説明し、同様の部分については説明を割愛する。
図１８は実施例３におけるプロセッサ７６０，７６１がＤＭＡ２１０〜２１２への転送指示を行うために作成するパラメータ３００のフォーマットの一例である。本実施例３のパラメータ３００には、先の実施例のパラメータ３００が備えるフィールド３００１〜３００６に加え、当該転送のＩ／Ｏの種別や処理の優先度を指定するフィールド（Ｉ／Ｏ種別）３００７がある。Ｉ／Ｏ種別フィールド３００７は８ビットのフィールドで、上位４ビットがＩ／Ｏの種別、下位４ビットが優先度を示す。例えばＩ／Ｏの種別としては、ホストからのランダムなＩ／Ｏは１０００ｂ（２進数）、ホストからのシーケンシャルなＩ／Ｏは０１００ｂ、ストレージが備えるボリューム間の同期機能などの転送は０１１０ｂないし０１１１ｂなど種別毎に設定するものとする。一方、優先度は、最優先の転送は１０００ｂ、最低で良いものは０００１ｂなどであり、プロセッサ７６０，７６１はパラメータ３００を作成する際、これらの組合せによって値を指定する。
【００８０】
図１９は本実施例３におけるメモリレイアウト情報設定テーブル８００である。このテーブルはＡＳＩＣ２００内の内部データ転送パスアービタ２２０，２２２用の設定レジスタに設けられる。なお、このメモリレイアウト情報設定テーブル８００の情報は、内部データ転送パスアービタ２２０，２２２が利用できれば良く、同等の効果が得られるのであれば別の場所に配してもよい。例えばローカルメモリ７７０，７７１やメモリＭ０〜Ｍ７などにメモリレイアウト情報設定テーブル８００を配置することもできる。
【００８１】
メモリレイアウト情報設定テーブル８００には、ＤＭＡ２１０〜２１２がメモリ転送に利用するメモリ範囲を指定する。一般にメモリＭ０〜Ｍ７の全領域がストレージのキャシュメモリ領域として利用できるわけではなく、メモリＭ０〜Ｍ７の一部はプロトコルチップの制御情報格納エリアや、プロセッサ７６０，７６１のキャッシュ管理情報格納エリア等して利用される。そこで、それ以外の領域をこのテーブル８００で指定することで、ＡＳＩＣ２００、特に内部データ転送パス１０１，１０２のデータ通過を制御する内部データ転送パスアービタ２２０，２２２にどのメモリコントローラ２３０〜２３３へのアクセスが多く発生するか知らせることができる。
【００８２】
メモリレイアウト情報テーブル８００の構成について説明する。メモリ番号フィールド８０１０には、メモリ面の番号が記録される。本実施例３では、メモリ番号８０１０はメモリＭ０〜Ｍ７である。開始アドレスフィールド８０２０はＤＭＡ２１０〜２１２によるアクセス有効範囲の開始アドレスである。終了アドレスフィールド８０３０はＤＭＡ２１０〜２１２によるアクセス有効範囲の終了アドレスである。比率フィールド８０４０は、ＡＳＩＣ２００が各メモリコントローラ２３０〜２３３にアクセスする回数比率を設定するフィールドである。比率は、プロセッサ７６０，７６１から指定されたアドレス範囲の広さに応じた値となる。本実施例３では、あるアドレス空間を単位に、その空間がいくつ存在するかで示している。図１９の例では、アドレス空間１０００ｈ（００００ｈ番地〜０ＦＦＦｈ番地）を単位としており、メモリＭ２およびメモリＭ３がともに１００００ｈの空間を提供しているので（１６）、メモリＭ０が５０００ｈの空間を提供していることから５となっている。カウンタフィールド８０５０はアービタが調停比率の変更を管理するために用いる動作カウンタであり、初期値は比率フィールド８０４０と同じ値が設定される。
【００８３】
図２０は、本実施形態におけるＤＭＡ２１０と内部データ転送パスアービタ２２０とのデータのやり取りを模式的に示した図である。ＤＭＡ２１０〜２１３および内部データ転送パスアービタ２２０，２２１間のデータのやり取りはいずれも同じであるから、ここではＤＭＡ２１０と内部データ転送パスアービタ２２０とを用いて説明する。ＤＭＡ２１０と内部データ転送パスアービタ２２０との間には、ＤＭＡ２１０から内部データ転送パスアービタ２２０へパス利用権を要求するＲＥＱ信号線６０１、要求時にアクセス先メモリコントローラ番号を伝えるＲＥＱ＿ＭＥＭ＿ＮＯ信号線６０２、内部データ転送パスアービタ２２０からＤＭＡ２１０へパス利用権の許可を伝えるＡＣＴ信号線６０３、および両者のデータの送受信や同期のための信号、エラーステータス信号等を通信するための各種信号線６０ｎが設けられている。内部データ転送パスアービタ２２０はこれらの信号線群を用いて、スイッチブロック２５０を介してパスを利用する同コントローラ内ＡＳＩＣ２００の全てのＤＭＡ２１０〜２１３やその他資源と通信することができる。
【００８４】
図２１は本実施形態における内部データ転送パスアービタ２２０，２２２の動作を示したフローチャートである。以降では内部データ転送パスアービタは単にアービタと称する。また、アービタ２２０とアービタ２２２とは同じ動作を行うので、ここではアービタ２２０についてのみ説明する。
【００８５】
ＤＭＡ２１０〜２１２は先の図５と同様の手順によって起動されると、図７の手順と同様にしてパラメータ３００の解析を行いアクセス先メモリコントローラ２３０〜２３３を特定する。アクセス先メモリコントローラ２３０〜２３３に内部データ転送パス１０１，１０２を通じてアクセスする場合、ＤＭＡ２１０〜２１２はアクセス先メモリコントローラ番号を示す信号と共にパス利用権を取得するための要求信号をＲＥＱ信号線６０１およびＲＥＱ＿ＭＥＭ＿ＮＯ信号線６０２を通じてアービタ２２０に発行する。
【００８６】
アービタ２２０はＤＭＡ２１０〜２２０から要求信号を受領すると（Ｓ９０００）、順に利用権の調停動作を開始する。
受領した要求信号が１つの場合（Ｓ９０１０：Ｙｅｓ）、アービタ２２０は当該要求信号に利用権を与え（Ｓ９１００）、ＡＣＴ信号６０３を通じてＡＣＴ信号を返す。当該ＤＭＡはＡＣＴ信号を受領するとメモリコントローラ２３０〜２３３との間でデータの転送を行い、終了するとＲＥＱ信号線６０１のＲＥＱ信号を取り下げて（信号をネゲートして）、利用権を解放する。アービタ２２０は利用権が解放されるのを待ち（Ｓ９１１０）、再び要求信号待ちに入る。
【００８７】
もし、同時に複数の要求信号を受けていた場合、もしくは待たせている要求が複数ある場合（Ｓ９０１０：Ｎｏ）、アービタ２２０はＲＥＱ信号と共にＲＥＱ＿ＭＥＭ＿ＮＯ信号線６０２を通じて受領しているアクセス先メモリコントローラ番号をチェックする（Ｓ９０２０）。そして、メモリレイアウト情報設定テーブル８００を参照して各メモリコントローラ番号に対応するカウンタフィールド８０５０の値を比較する（Ｓ９０３０）。そして、アクセス先として要求されているメモリコントローラ２３０〜２３３の中でカウンタフィールド８０５０の値が最も大きいメモリコントローラ番号を選択し、その番号を指定しているＤＭＡ２１０〜２１２にパス利用権を与える（Ｓ９０４０）。なお、複数のＤＭＡ２１０〜２１２が該当する場合には、アービタ２２０は、ラウンドロビンで利用権を調停するものとする。そして、当該メモリコントローラ番号に対応するカウンタ値を１減じて、優先度を１つ落とす処理を行う（Ｓ９０５０）。全てのカウンタ値が０となった場合（Ｓ９０６０：Ｙｅｓ）、アービタ２２０は比率フィールド８０４０を参照して各メモリのカウンタ値を比率フィールド８０４０の値と一致するようリセットする（Ｓ９０７０）。そして与えたパス利用権が解放されるのを待って（Ｓ９０８０）、再び信号待ちに入る。
【００８８】
（実施例３の効果）
本実施例３によれば、プロセッサ７６０，７６１、すなわち制御ソフトウェアから設定されるメモリ資源利用情報を活用することにより、単にハードウェアのみで調停するよりも効率良く内部データ転送パス１０１，１０２の利用調停を行うことができ、内部データ転送パス１０１，１０２のデータ転送を効率化することができる。
【００８９】
以上３つの実施例、およびそれに付随する変形例について説明したが、本実施例は本発明で挙げる課題の少なくとも１つ解決するための手段の一例を説明するためのものであり、その構成についてはこれを限定するものではない。また、上記実施例は個別に適用することも、また組み合わせて適用することも可能である。
【００９０】
本発明は、上記実施例１ないし３に記載した１または複数のストレージ装置に適用できるのはもちろんのこと、PCI Expressに限らず、書込みが完了した旨の応答のない１または複数のネットワークを用いて接続されたデータ転送装置であれば広く適用することが可能である。
【００９１】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【図１】
0005546635.tif 000002
【図２】
0005546635.tif 000003
【図３】
0005546635.tif 000004
【図４】
0005546635.tif 000005
【図５】
0005546635.tif 000006
【図６】
0005546635.tif 000007
【図７】
0005546635.tif 000008
【図８】
0005546635.tif 000009
【図９】
0005546635.tif 000010
【図１０】
0005546635.tif 000011
【図１１】
0005546635.tif 000012
【図１２】
0005546635.tif 000013
【図１３】
0005546635.tif 000014
【図１４】
0005546635.tif 000015
【図１５】
0005546635.tif 000016
【図１６】
0005546635.tif 000017
【図１７】
0005546635.tif 000018
【図１８】
0005546635.tif 000019
【図１９】
0005546635.tif 000020
【図２０】
0005546635.tif 000021
【図２１】
0005546635.tif 000022