(57)【特許請求の範囲】
【請求項１】
複数の二次ストレージユニットに対するアクセス要求を制御するストレージコントローラであって、
バッファと、
(i)第１の二次ストレージユニットから読み取られてメインメモリに転送される第１のデータ列を指定する第１の読取り要求と、(ii)第２の二次ストレージユニットから読み取られて前記メインメモリに転送される第２のデータ列を指定する第２の読取り要求とを受け取る、制御ユニットと
を備え、
前記制御ユニットが、前記第１の読取り要求と前記第２の読取り要求にそれぞれ応じて、前記第１の二次ストレージユニットからの前記第１のデータ列と、前記第２の二次ストレージユニットからの前記第２のデータ列とを取り出し、
前記バッファは、前記第１のデータ列と前記第２のデータ列とがそれぞれ前記メインメモリに転送される前に、前記第１のデータ列と前記第２のデータ列の両方を共に記憶し、
前記制御ユニットは、さらに前記第１のデータ列と前記第２のデータ列とが記憶されるべき、前記メインメモリのロケーションを指し示すデータを記憶し、
前記第１の要求が、前記メインメモリと、前記第１のデータ列の第１のサブセットが前記メインメモリ内で記憶されるべきロケーションとを指し示す第１のロケーションデスクリプタをさらに指定し、
前記制御ユニットが、前記第１のサブセットの取出しの完了の前に前記第１のロケーションデスクリプタをプリフェッチする、
ストレージコントローラ。
【請求項２】
前記第１のデータ列と前記第２のデータ列を前記メインメモリに対して転送するマスタユニットをさらに備える、請求項１に記載のストレージコントローラ。
【請求項３】
前記バッファが、制御バッファと、データバッファとを備え、
前記制御ユニットが、前記第１のデータ列と、前記第２のデータ列とを前記データバッファに記憶する、請求項２に記載のストレージコントローラ。
【請求項４】
前記制御ユニットが、前記第１のサブセットが前記第１の二次ストレージユニットから受け取られている間に、第２のロケーションデスクリプタをプリフェッチし、前記第２のロケーションデスクリプタが、前記第１のサブセットに続くデータの第２のサブセットを識別する、請求項１に記載のストレージコントローラ。
【請求項５】
メモリと、
前記メモリに結合されており第１の二次ストレージユニットと第２の二次ストレージユニットとを含む複数の二次ストレージユニットと、
前記複数の二次ストレージユニットに結合された処理装置であって、(i)前記第１の二次ストレージユニットから読み取られて前記メモリに転送される第１のデータ列を指定する第１の読取り要求と、(ii)前記第２の二次ストレージユニットから読み取られて前記メモリに転送される第２のデータ列を指定する第２の読取り要求とを発行する、処理装置と、
前記複数の二次ストレージユニットに結合されており前記第１の読取り要求と前記第２の読取り要求とを処理する、ストレージコントローラであって、
バッファと、
前記第１の読取り要求と前記第２の読取り要求とを受け取る制御ユニットであって、前記第１の読取り要求と前記第２の読取り要求にそれぞれに応じて、前記第１の二次ストレージユニットからの前記第１のデータ列と、前記第２の二次ストレージユニットからの前記第２のデータ列とを取り出す、前記制御ユニットと、
を備える前記ストレージコントローラと、
を備え、
前記バッファが、前記第１のデータ列と前記第２のデータ列とがそれぞれ前記メモリに転送される前に、前記第１のデータ列と前記第２のデータ列の両方を共に記憶し、
前記制御ユニットが、さらに前記第１のデータ列と前記第２のデータ列とが記憶されるべき、前記メモリのロケーションを指し示すデータを記憶し、
前記第１の要求が、前記メモリと、前記第１のデータ列の第１のサブセットが前記メモリ内で記憶されるべきロケーションとを示す第１のロケーションデスクリプタをさらに指し示し、
前記制御ユニットが、前記第１のサブセットの取出しの完了の前に前記第１のロケーションデスクリプタをプリフェッチする、
システム。
【請求項６】
前記第１のデータ列と前記第２のデータ列とを前記メモリに対して転送するマスタユニットをさらに備える、請求項５に記載のシステム。
【請求項７】
前記バッファが、制御バッファと、データバッファとを備え、
前記制御ユニットが、前記第１のデータ列と、前記第２のデータ列とを前記データバッファに記憶する、請求項６に記載のシステム。
【請求項８】
前記制御ユニットが、前記第１のサブセットが前記第１の二次ストレージユニットから受け取られている間に、第２のロケーションデスクリプタをプリフェッチし、前記第２のロケーションデスクリプタが、前記第１のサブセットに続くデータの第２のサブセットを識別する、請求項５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
[003]本開示は、一般にストレージ技術に関し、より具体的には、取り出されたデータをメモリに直接に書き込むストレージコントローラによるバッファスペースの最適な使用に関する。
【背景技術】
【０００２】
[005]ストレージコントローラは、不揮発性ストレージ媒体に対する読取り要求及び書込み要求を制御するコンポーネント（又はユニット）のことを意味する。それらの要求は、多くの場合に中央プロセッサ（例えば、中央演算処理装置、ＣＰＵ）から受け取られ、ストレージコントローラは、各要求を処理するために不揮発性ストレージ媒体にインターフェースで接続する。読取り要求の場合には、ストレージコントローラは、不揮発性ストレージ媒体からデータを取り出す。
【０００３】
[006]ストレージコントローラは、多くの場合に取り出されたデータをメモリに書き込むために必要とされる。例えば、ＣＰＵは、ファイルに含まれるデータが、（以下で指摘されるコントローラメモリから区別するために）メインメモリとして動作するランダムアクセスメモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）（ＲＡＭ）に取り出され、記憶されることを指し示すことができる。
【０００４】
[007]ストレージコントローラは、さらにメモリに直接に書き込むように要求することができる。「直接に（ｄｉｒｅｃｔｌｙ）」とは、一般にストレージコントローラが、ストレージオペレーションごとにＣＰＵに割込みをかけることなしに、ＲＡＭにデータを記憶することを意味する。一例証として、ダイレクトメモリアクセス（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）（ＤＭＡ）オペレーションにおいては、ストレージコントローラは、全体データを記憶することの完了の後だけにＣＰＵに割込みをかける。
【０００５】
[008]バッファスペースは、一般的に様々な読取り／書込み要求をサポートするためにストレージコントローラに設けられる（又は関連づけられ）。バッファスペースは、一時ストレージを提供し、ターゲットメインメモリにデータを記憶するために、速度ミスマッチ及びリソース（例えば、バス）の使用不可能の場合においてさえも、データの順序正しい転送を可能にする。バッファスペースは、一般的にＲＡＭとして実装され、コントローラメモリと称される。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
[009]バッファスペースは、様々なオペレーションが、より小さなバッファ／メモリサイズを用いてさえ、（よりよいスループット、低減されたレイテンシーなどのうちの１つ又は複数で）効率的にサポートすることができるように、最適に使用されることが一般に望ましい。
【課題を解決するための手段】
【０００７】
[0021]１．概要
[0022]本発明の一態様に従って提供されるストレージコントローラは、単一バッファを使用して、複数の二次ストレージユニットから取り出されるデータを記憶する。一実施形態において、ストレージコントローラの中に提供される制御ユニットは、バッファにおける１組の（１つ又は複数の）メモリロケーションのおのおのにおける二次ストレージユニットのうちのどれかから取り出されるデータ要素を記憶する柔軟性を伴って、設計される。バッファスペースは、最適に使用することができ、そしてバッファサイズ要件は、結果として低減させることができる。
【０００８】
[0023]本発明の一態様は、対応する情報を要求することができる前に、プリフェッチするロケーションデスクリプタ（これは、取り出されたデータ要素が、最終的にターゲットメモリに記憶されることになるターゲットメモリのロケーションを指し示す）によるさらなる最適な使用を提供する。一実施形態においては、ストレージコントローラは、読取り要求において要求されるデータ要素を供給するために不揮発性メモリに対してコマンドを発行し、ロケーションデスクリプタのサブセットだけを取り出す。サブセットにおける要素の数は、対応するデータ要素が、記憶するために使用可能になった直後に、ロケーションデスクリプタの使用可能性を保証するように選択される。取り出されたロケーションデスクリプタは、バッファに記憶することもできる。
【０００９】
[0024]ロケーションデスクリプタのサブセットだけを取り出して記憶することに起因して、バッファサイズ要件は、低減させることができる。そのような要件は、その技術（例えば、ＮＣＱ）により、二次ストレージユニットが、以前の要求に関連したデータ要素を送る前に、後の要求に関連したデータ要素を送ることができるようになるときに、重要になる可能性があり、ストレージコントローラは、すべての待ち状態の要求についてのロケーションデスクリプタを取り出すことが望ましい。
【００１０】
[0025]先行したロケーションデスクリプタの取出しに起因して、データがストレージコントローラにバッファされる存続時間は、低減させることができ、それによってストレージデスクリプタが直ちに使用不可能になることによって妨害されることなしに、より低いレイテンシーを伴うデータ転送を完了することに加えてさらにバッファサイズ要件を低減させている。ロケーションデスクリプタのそのようなタイムリーな使用可能性は、共用されるバッファが、より小さなサイズになるように設計することができ、他の要求に関連したデータを記憶するためにロケーションを解放することが必要である可能性があるので、単一のバッファが、異なる二次ストレージユニットから取り出されるデータを記憶するために使用されるときに、重要になる可能性がある。
【発明を実施するための最良の形態】
【００１１】
[0011]実施形態例は、以下に簡単に説明される以下の添付の図面を参照して説明されることになる。
【００１２】
[0019]図面中において、同様な参照番号は、一般に同一の要素、機能的に類似した要素、及び／又は構造的に類似した要素を指し示す。要素が最初に現れる図面は、対応する参照番号における最も左の（１つ又は複数の）数字によって指し示される。
【００１３】
[0026]本発明のいくつかの態様は、例証のための例を参照して以下で説明される。非常に多くの特定の詳細、関係、及び方法が、本発明の完全な理解を提供するために述べられることを理解すべきである。しかしながら、当業者なら、本発明は、１つ又は複数の特定の詳細なしに、或いは他の方法などを用いて実行することができることを容易に理解するであろう。他の例においては、よく知られている構造又はオペレーションは、本発明の特徴をあいまいにすることを回避するために詳細には示されていない。さらに、説明される特徴／態様は、様々な組合せの形で実行することができるが、それらの組合せのうちの一部だけが、簡潔にするために本明細書中において説明される。
【００１４】
[0027]２．システム例
[0028]図１は、本発明のいくつかの特徴を実施することができる一例のシステムを示す図である。図は、中央演算処理装置（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）（ＣＰＵ１１０）と、ストレージコントローラ１２０と、メインメモリ１３０と、二次ストレージユニット１４０Ａ〜１４０Ｎとを含めて示されている。典型的な環境は、（タイプにおいても数においても）様々な他のコンポーネントを含むことができ、これらのコンポーネントは、説明される特徴の理解に関連していないとして示されてはいないことを理解しなければならない。同様に、一部の他のシステムは、より少ないコンポーネントを含むこともできる。図１の各コンポーネントについては、以下で詳細に説明される。
【００１５】
[0029]メインメモリ１３０は、ランダムアクセスメモリ（ＲＡＭ、例えば、ダイナミックＲＡＭ−ＤＲＡＭ）として実施することができ、様々な命令及びデータを記憶する。ＣＰＵ１１０によって実行される（例えば、ユーザアプリケーションを表す）命令のうちの一部は、本発明のいくつかの態様に従って、データが二次ストレージユニットから取り出されるようにする。オペレーティングシステムを表す一部の他の命令は、メインメモリ１３０における特定のロケーションを割り付けて、取り出されたデータを記憶することができる。一部の他の命令の実行は、以下に説明される他の特徴が提供されるようにする。同様に、メインメモリ１３０は、以下の節で説明されるように、取り出されたデータ要素を記憶するのはもちろん、（以下の節で説明される）ロケーションデスクリプタを記憶することができる。
【００１６】
[0030]二次ストレージユニット１４０Ａ〜１４０Ｎのおのおのは、不揮発性ストレージ媒体を含み、例えば、ハードディスク、ＣＤ−ＲＯＭなどとして実施することができる。二次ストレージユニット１４０Ａ〜１４０Ｎは、一般にそれらの内部にコントローラユニットを含んで、（読取り、書込み、ストレージコントローラ１２０へのデータ転送などの）データに関与する様々なオペレーションを協調させ、関連技術においてよく知られているＳＡＴＡ（シリアルアドバンスドテクノロジアタッチメント（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ））などの対応するプロトコル／規格と整合するように実施することができる。
【００１７】
[0031]シリアル技術の場合には、バイト列についての要求は、パス１２４Ａ上で送ることができ、要求されたバイト（データ要素）は、その要求のために順に受け取ることができる。一実施形態においては、ただ１つの要求を各二次ストレージに対して待ち状態にすることができる。しかしながら、各二次ストレージに対して待ち状態であるべき複数の要求についてのサポートが存在する場合には、（例えば、ＮＣＱ、ネイティブコマンドキューイング（ｎａｔｉｖｅ  ｃｏｍｍａｎｄ  ｑｕｅｕｉｎｇ）を使用して）複数の要求に関連したデータは、（受け取る間に）再順序づけすることができるが、各要求に関連したデータは、データが二次ストレージに（論理的に）記憶される順序と同じ順序で受け取り続けることができる。
【００１８】
[0032]ＣＰＵ１１０は、（例えば、メインメモリ１３０から取り出される）ソフトウェア命令を実行する、１つ又は複数のプロセッサユニットを表すことができる。一部の命令は、二次ストレージユニットからデータを取り出す要求を発行することができる。一実施形態においては、ＣＰＵ１１０は、データ要素列を転送する要求をただ発行するにすぎず、ストレージコントローラ１２０は、要求されたデータの転送の完了を信号で伝える割込みを生成する。いくつかの要求は、要求のうちの多くがストレージコントローラ１２０によって処理されるように、短い存続時間内に発行することができることを理解すべきである。処理されている要求は、待ち状態の要求と称することができる。
【００１９】
[0033]ストレージコントローラ１２０は、（パス１１２を経由して）ＣＰＵ１１０からの要求を受け取って、二次ストレージユニット１４０Ａ〜１４０Ｎからのデータ要素列を読み取り、要求されたデータ要素を供給するために、対応するコマンドを二次ストレージユニット１４０Ａ〜１４０Ｎに対して発行する。ひとたび、データが二次ストレージユニットから取り出された後に、ストレージコントローラ１２０は、ＣＰＵから受け取られる要求によって指定されるそれぞれのターゲットメモリに対して、データを転送する。
【００２０】
[0034]二次ストレージユニットからのデータの受け取りと、その後のメモリ１３０に対する転送との間に、ストレージコントローラ１２０は、データを一時的に記憶する必要がある。
【００２１】
[0035]従来の一実施形態においては、ストレージコントローラ１２０は、物理インターフェース（リンク）１２４Ａ〜１２４Ｎのおのおのの上で受け取られるデータについて、おのおの１つのバッファを含んでいる。そのようなアプローチは、（すべてのバッファが一緒になった）より高い集約オンチップメモリをもたらし、この集約オンチップメモリは、より高いコスト要件及びダイ面積要件などの理由に起因して、望ましくない可能性がある。
【００２２】
[0036]本発明の一態様に従って提供されるストレージコントローラは、以下でさらに詳細に説明されるように、そのような短所の一部を克服する。
【００２３】
[0037]３．ストレージコントローラ
[0038]図２は、本発明の一実施形態におけるストレージコントローラの詳細を示すブロック図である。ストレージコントローラ１２０は、バッファ２１０と、制御ユニット２２０と、ＦＩＦＯ２４０Ａ〜２４０Ｎと、バスマスタ２５０とを含んで示されている。ストレージコントローラ１２０は、以下の説明に関連のないものとして図に示されていない様々な他のコンポーネント／ブロックを含むことができる。以下の説明では、データ要素が、二次ストレージユニット１４０Ａから取り出されるべきであり、取り出されたデータ要素が、メインメモリ１３０に記憶されるべきであることを指し示す読取り要求が受け取られることを仮定する。しかしながら、異なるストレージユニットとターゲットメモリは、本発明の様々な態様の範囲及び趣旨を逸脱することなく指定することができる。図２の各コンポーネントについては、以下で詳細に説明される。
【００２４】
[0039]ＦＩＦＯ２４０Ａ〜２４０Ｎのおのおのは、制御ユニット２２０が、（対応するＦＩＦＯからパス２２４Ａ〜２２４Ｎを経由して）バッファ２１０に対してデータを移動させる前に、対応する二次ストレージユニット１４０Ａ〜１４０Ｎからパス１２４Ａ〜１２４Ｎを経由して受け取られるデータについての一時ストレージを提供する。さらに、各ＦＩＦＯは、二次ストレージユニットから受け取られるステータス／制御情報を記憶し、この同じものを制御ユニット２２０に対して供給することができる。関連技術においてよく知られているＳＡＴＡプロトコルの場合に実施される一実施形態においては、各ＦＩＦＯは、プロトコル仕様を満たすためにフロー制御の目的のために使用される。例えば、ＳＡＴＡは、ストレージコントローラが、受け取りフロー制御がパス１２４Ａ上でそれによって開始された後に、少なくとも２１個のＤｗｏｒｄを受け取ることができることを必要とする。これは、任意のポート上のデータが、共用されるバッファ２１０を獲得する際に、起こりうる調停レイテンシーに起因して決して脱落させられないことを保証する。
【００２５】
[0040]制御ユニット２２０は、パス１１２とパス１２４Ａ／１２４Ｎとの間のデータ転送を協調させるために様々なオペレーションを実行する。とりわけ、制御ユニット２２０は、パス１１２上で要求を受け取って、パス１２４Ａ〜１２４Ｎのうちのどれかに接続されたストレージユニット上に記憶されるバイト列を取り出すことができる。バイト列は、あらかじめ指定された任意の表記法に従って（例えば、関連技術においてよく知られているアドバンスドホストコントローラインターフェース（Ａｄｖａｎｃｅｄ  Ｈｏｓｔ  Ｃｏｎｔｒｏｌｌｅｒ  Ｉｎｔｅｒｆａｃｅ）（ＡＨＣＩ）規格に従って）指定することができ、一般にＣＰＵ１１０によって実行されるデバイスドライバソフトウェアによって提供される。要求はまた、例えば、以下の節で説明されるようなデータが記憶されるべきターゲットメモリと、ターゲットメモリにおけるロケーション（単数又は複数）を指定する。
【００２６】
[0041]制御ユニット２２０は、パス１２４Ａ〜１２４Ｎ上で（例えば、ＳＡＴＡ規格に従って）対応するコマンドをストレージユニットに対して発行して、対応するＦＩＦＯの中に要求されたデータを取り出す。次いで、制御ユニット２２０は、各ＦＩＦＯの中のデータをバッファ２１０へと転送する。制御ユニット２２０は、例を用いて以下の節において説明されるように、データが、ターゲットメモリ／ロケーションに記憶されることを容易にするように、データと一緒に制御情報を記憶することができる。
【００２７】
[0042]バッファ２１０は、パス１２４Ａ〜１２４Ｎから受け取られるデータが、メインメモリ１３０に記憶される前に一時的に記憶される、ランダムにアクセス可能なメモリを表す。一実施形態において、ＳＲＡＭとして実施される（メモリセルのマトリックスと、アクセス回路とを有する）単一メモリユニットが、すべてのパス１２４Ａ〜１２４Ｎ上で受け取られるデータを記憶するために使用される。ＳＲＡＭは、単一の集積回路としてストレージコントローラの他のコンポーネントと一緒に実施され、バッファ２１０は、それ故にそのようなシナリオにおいて「オンチップ」であると言われる。しかしながら、代替実施形態は、単一バッファをサポートする複数のメモリユニットを使用することができる。
【００２８】
[0043]本発明の一態様によれば、メモリスペースは、少なくとも一部のメモリロケーションを使用して、パス１２４Ａ〜１２４Ｎのどれかの上で取り出されるデータを記憶することができるように共用される。バッファスペースは、そのような共用によって、効率的に利用することができる。バッファスペースの効率的な使用によって、そのような共用を、性能ボトルネックとデータ脱落（オーバーフロー）を回避しながら、可能にすることができる。
【００２９】
[0044]バスマスタ２５０は、バッファ２１０の中のデータをメインメモリ１３０へと転送する。一実施形態においては、バスマスタ２５０は、バス１１２に対するアクセスのために調停し、次いでＤＭＡ技法を使用して、バッファ２１０のデータをメモリ１３０に記憶する。最後のデータ要素が記憶されるときに、バスマスタ２５０は、まずＣＰＵ１１０に対して（データ転送が完了していることを指し示す）割込みを送り、バス１１２の制御を明け渡すことができる。
【００３０】
[0045]一実施形態においては、二次ストレージユニットから取り出されるデータは、ＣＰＵ１１０から受け取られるコマンドに関連するロケーションデスクリプタによって指定されるようなターゲットメモリ／ロケーションに記憶される。従って、説明は、ロケーションデスクリプタに関して継続される。
【００３１】
４．ロケーションデスクリプタ
[0046]図３の（Ａ）及び図３の（Ｂ）は、それぞれメインメモリと、制御ユニット２２０の中のレジスタの一部分を表し、ロケーションデスクリプタ上の情報が、一実施形態においてＣＰＵ１１０によって制御ユニット２２０に対して供給される方法を示すために、図１及び２と組み合わせて使用される。上述したように、各ロケーションデスクリプタは、データ要素の対応するブロックが書き込まれるべきターゲットメモリとその中におけるロケーションを指し示す。
【００３２】
[0047]一実施形態において、ＣＰＵ１１０は、制御ユニット２２０の中のレジスタ３１０に対してコマンドを書き込む。ＡＨＣＩ規格において、ロケーションデスクリプタは、物理領域デスクリプタ（ｐｈｙｓｉｃａｌ  ｒｅｇｉｏｎ  ｄｅｓｃｒｉｐｔｏｒ）（ＰＲＤ）と称され、それ故に、メモリ１３０は、ＰＲＤテーブル３５０を用いて示される。ＰＲＤテーブルにおける各エントリは、読み取られるべきファイルにおけるデータの対応する一部分（ファイル内容を形成するデータ要素列）が記憶される場所を指定するメインメモリ１３０内のロケーション情報（すなわち、個々のメモリロケーションアドレス）を含む。ターゲットメモリを１つよりも多くのメモリユニットとすることができる場合には、ロケーションデスクリプタは、（指定される表記法に従って）同様にメモリユニットのうちの特定の１つを指定することができる。
【００３３】
[0048]ＰＲＤ３５０Ａ〜３５０Ｎは、ＰＲＤテーブル３５０内の連続したロケーションに配置することができる。代わりに、ＰＲＤテーブルそれ自体はリンクされたリストとして実施することもでき、各ＰＲＤは、（最後を除いて）リンクされたリストにおける次のＰＲＤのアドレスを含むことができる。
【００３４】
[0049]一実施形態においては、ＰＲＤ（３５０Ａ〜３５０Ｎ）のおのおのは、メモリユニット１３０におけるメモリのブロックのサイズ（メモリロケーションの数）はもちろん、ブロックの開始アドレスを含むように設計されており、上記ブロックは、読み取られるバイト列の対応するサブセットが記憶される、メモリにおけるロケーションである。そのようなブロックのおのおのは、デバイスドライバがストレージコントローラ１２０に対して読取り要求を送る前に図１のシステムにおいて実行するオペレーティングシステムによって割り付けることができる。
【００３５】
[0050]ＣＰＵ１１０は、さらに、要求が行われていることを指し示しており制御ユニット２２０に含まれるフラグ（図示されず）を設定することができる。それに応じて、制御ユニット２２０は、フィールド３１０の内容を読み取り、対応するコマンドヘッダ（フィールド３２０）をメインメモリ１３０へと取り出す。ＮＣＱ技術をサポートする一実施形態においては、３２個までのコマンドヘッダが、可能性のある３２個の待ち状態のコマンドのおのおの１つに対応して存在することができる（図示されず）。次には、コマンドヘッダ３２０が、コマンドテーブル３３０のアドレスを含んでいる。次には、コマンドテーブル３３０が、ＰＲＤテーブル（この例におけるＰＲＤテーブル３５０）のアドレスを含んでいる。
【００３６】
[0051]したがって、すべてのＰＲＤは、一緒にターゲットメモリとメモリロケーションを指定して、二次ストレージユニットから取り出されることが求められるデータ要素を記憶する。ロケーションデスクリプタのタイムリーな使用可能性は、データ要素がストレージコントローラ内でバッファされる存続時間を最小にし、それによってバッファスペース要件を低減させるために重要となりえることを理解すべきである。
【００３７】
[0052]一実施形態においては、制御ユニットは、すべての待ち状態の読取り要求のすべてのロケーションデスクリプタを取り出すことができる。しかしながら、そのようなアプローチは、かなりの量のバッファスペースを必要とする可能性がある。バッファスペース要件は、上述したＮＣＱなどの技術の場合には複雑になる。
【００３８】
[0053]本発明の一態様は、以下でさらに詳細に説明されるように、必要とされるバッファサイズを低減させながら、ロケーションデスクリプタのタイムリーな使用可能性を保証する。
【００３９】
[0054]５．ロケーションデスクリプタの取り出し
[0055]図４は、ロケーションデスクリプタが、本発明の一態様に従って、取り出され、使用される方法を示すフローチャートである。フローチャートは、単なる例証のために、図１に関して、そしてストレージコントローラ１２０に関連して説明される。しかしながら、様々な特徴は、（例えば、図３に関して上記した共用されたバッファを有する又は有さない）他の環境、及び他のコンポーネントの形で実施することができる。
【００４０】
[0056]さらに、複数のステップは、単なる例証のために特定の順序の中で説明される。他のコンポーネント、及び異なる順序のステップを使用した、他の環境における代替実施形態は、本明細書中において提供される開示を読むことにより当業者にとって明らかになるように、本発明のいくつかの態様の範囲及び趣旨から逸脱することなく実施することもできる。フローチャートはステップ４０１において開始され、このステップにおいて、制御はステップ４１０へと進む。
【００４１】
[0057]ステップ４１０において、ストレージコントローラ１２０は、ロケーションデスクリプタが配置される場所を指定しておりストレージデバイスからメインメモリへと所望のデータ要素列を転送する要求を受け取る。上述したように、ロケーションデスクリプタは、データが記憶されるべき場所（特定のメモリユニット（単数又は複数）及びその中のロケーション）を識別する。一例を用いて示すと、ストレージコントローラ１２０は、二次ストレージユニット１４０Ａに記憶されるファイルをメインメモリ１３０へと転送する要求を受け取ることができる。
【００４２】
[0058]任意のあらかじめ指定された表記法（pre-specifiedconvention）は、ロケーションデスクリプタのロケーションを指定するためのみならず、（特定の二次ストレージユニット、そこでのデータ要素列のロケーション／識別子を識別することを含めて）要求のフォーマットのためにも同様に使用することができる。そのような表記法(conventions)についてのいくつかのアプローチは、本明細書中に提供される開示を読むことにより当業者には明らかになるであろう。しかしながら、一実施形態においては、取り出されることが求められるデータ要素は、上述したＡＨＣＩ規格に従って指定され、ロケーションデスクリプタは、図３の（Ａ）及び図３の（Ｂ）に関して上記されるように指定される。次いで、制御はステップ４２０へと進む。
【００４３】
[0059]ステップ４２０において、ストレージコントローラ１２０は、データ要素列を供給する（すなわち、返送する）ためにストレージデバイスに対してコマンドを発行する。上述した例において、ストレージコントローラ１２０は、例えば、関連技術においてよく知られているＳＡＴＡプロトコルに従って、特定のロケーションにおいてデータを提供するために二次ストレージユニット１４０Ａに対してコマンドを発行する。コマンドは、対応するプロトコル／規格と整合するように発行することができる。次いで、制御はステップ４４０へと進む。
【００４４】
[0060]ステップ４４０において、ストレージコントローラ１２０は、デスクリプタのサブセットを、サブセットにおけるデスクリプタのうちの第１のデスクリプタを使用して記憶されるべきデータ要素の受け取りの完了の前に取り出す。上述したシリアル技術の場合には、ロケーションデスクリプタに対応するデータ要素を取り出すのにもっと長い時間がかかることを仮定すると、単一のロケーションデスクリプタだけが必要とされる可能性がある。より多くのロケーションデスクリプタを取り出すことができるが、（その要求についての）すべてのロケーションデスクリプタを取り出すことは、上述した理由のために望ましくないこともある。
【００４５】
[0061]デスクリプタのサブセットを取り出すアクションは、ステップ４２０のコマンドの発行に先行することができる。しかしながら、バッファ要件を減少させるために、ロケーションデスクリプタを取り出すアクションは、ステップ４２０のコマンドを発行した後であって、そのサブセットにおける第１のデスクリプタに対応するデータの受け取りの完了の前に開始することができる。特定のアクションは、デスクリプタが取り出されることになるユニットに依存する。
【００４６】
[0062]例えば、特定のロケーションデスクリプタが、バイト番号１０２４〜２０４７がメインメモリ１３０のメモリロケーション４０４８から５０７１に記憶される予定であることを指し示すことを仮定すると、ストレージコントローラ１２０は、ロケーションデスクリプタが、少なくともバイト５０７１（最後のバイト）が二次ストレージユニットから受け取られる前に、制御ユニット２２０にとって使用可能であることを保証することができる。追加のロケーションデスクリプタは、バス１１２が、ロケーションデスクリプタをメインメモリ１３０から取り出す目的のためにアクセスされる必要がある回数を減少させることができる。次いで、制御はステップ４４５へと進む。
【００４７】
[0063]ステップ４４５において、ストレージコントローラ１２０は、取り出されたデスクリプタをバッファ（例えば、２１０）に記憶する。ロケーションデスクリプタのサブセットだけが、ステップ４４０において取り出されるので、バッファサイズ要件は、低減させることができる。次いで、制御はステップ４５０へと進む。
【００４８】
[0064]ステップ４５０において、ストレージコントローラ１２０は、デスクリプタのうちの第１のデスクリプタによって指し示されるメモリロケーションに、受け取られたデータを記憶する。次いで、制御はステップ４６０へと進む。
【００４９】
[0065]ステップ４６０において、ストレージコントローラ１２０は、サブセットに続く次のデスクリプタをフェッチし、次のデスクリプタをサブセットに追加する。例えば、ステップ４４０において取り出されるデスクリプタのサブセットが、２つのデスクリプタを含むことを仮定すると、ストレージコントローラ１２０は、第１のデスクリプタに対応するデータを受け取る（そして、ステップ４５０におけるメインメモリの中の対応するロケーションにそれに続いて記憶する）とすぐに第３のデスクリプタを取り出し、それ故に第２及び第３のデスクリプタに対応するデータを記憶するロケーション情報を有する。次いで、制御はステップ４８０へと進む。
【００５０】
[0066]ステップ４８０において、ストレージコントローラ１２０が、ファイルからより多くのデータが受け取られていることを決定する場合、制御はステップ４５０へと進み、そうでなければ制御はステップ４９９へと進み、このステップにおいてフローチャートは、終了する。
【００５１】
[0067]ロケーションデスクリプタのサブセットだけを取り出すことにより、バッファサイズ要件を低減することができる。さらに、必要とされるロケーション記述の素早い使用可能性により、（二次ストレージユニットから受け取られる）データがバッファリングされるのに要する時間も低減することができ、それによってバッファサイズ要件を低減させている。
【００５２】
[0068]バッファ２１０は、上記される望ましい特徴をサポートしながら様々なアプローチを使用して実施することができる。その説明は、一実施形態におけるバッファ２１０の詳細に関して提供される。
【００５３】
[0069]６．バッファ
[0070]図５Ａは、一実施形態におけるバッファ２１０の詳細を示すブロック図である。バッファ２１０は、データバッファ５１０と制御バッファ５２０を含めて示され、これらは、同様に図５Ｂを参照して以下でさらに詳細に説明される。図５Ｂは、一実施形態における、制御バッファ５２０に記憶されるデータの性質を示している。
【００５４】
[0071]制御ユニット２２０は、データバッファ５１０における各ロケーションデスクリプタに対応するデータブロック（ＣＰＵ１１０からの単一の読取り要求によって取り出されるように求められるデータ要素列のサブセット）を記憶する。図５Ｂは、本発明の一実施形態におけるデータの対応するブロックのステータス情報を含む様々なフィールドを示している。
【００５５】
[0072]典型的なシナリオにおいては、いくつかのファイル要求は、未処理である（まだ完了されていない、又は待ち状態である）とすることもでき、制御ユニット２２０は、二次ストレージユニット１４０Ａ〜１４０Ｎのおのおのから受け取られるファイル部分をデータバッファ５１０に記憶することができる。単一のバッファ２１０は、異なるリンクに対応するデータ（異なる二次ストレージユニットから受け取られるデータ）で、そしてメインメモリにおける異なるターゲットアドレスを有するデータを記憶するために使用される。そのため、データの各ブロックは、一例を用いて以下で説明されるように、対応するステータス情報と共に記憶される必要があることもある。
【００５６】
[0073]ステータスエントリ５９０は、フィールド５５０、５６０、５７０及び５８０を含めて示される。本例においては、ステータスエントリ５９０は、二次ストレージユニット１４０Ａから受け取られ、図３Ａに示されるように、メインメモリロケーション３６０に書き込まれるべきデータ、すなわちＰＲＤ３５０Ａに対応するデータに対応することを仮定する。
【００５７】
[0074]フィールド５５０は、データが受け取られた元のポート（二次ストレージユニットに対応するリンク）を指定する。本例においては、エントリは、データが、二次ストレージユニット１４０Ａから受け取られたことを指定する番号に対応することになる。
【００５８】
[0075]フィールド５６０は、ステータスエントリ５９０に対応する（データバッファ５１０における）データのブロックの長さ／サイズを指定する。
【００５９】
[0076]フィールド５７０及び５８０は、データバッファ５１０の中のデータのブロックがそこから開始されて書き込まれるべきメインメモリ１３０におけるアドレスを一緒に指定する。メインメモリ１３０におけるアドレスは、フィールド５７０（上位ＰＲＤアドレス（例えば、上位の３２ビット））と、フィールド５８０（下位ＰＲＤアドレス（例えば、下位の３２ビット））とによって指定されるアドレスのＰＲＤの内容によって指定される。２つのフィールド５７０及び５８０に示される上位及び下位のＰＲＤアドレスは、メインメモリにおけるアドレススペースが、６４−ビットのアドレスによって指定され、それらのフィールドのおのおのは、一実施形態においては３２ビットを含むにすぎないことを反映する。フィールド５７０及び５８０についての値は、説明のために挙げた例においてはＰＲＤ３５０Ａから取り出される。
【００６０】
[0077]したがって、ロケーションデスクリプタの関連情報は、バッファ２１０の中のデータの各ブロック（各ロケーションデスクリプタによって指定されるデータに対応するデータ列における境界）に関連づけられて記憶することができ、バスマスタ２５０は、その情報を使用して、各データ要素を記憶するターゲットロケーション／メモリを決定することができる。
【００６１】
[0078]本説明は、一実施形態におけるデータ要素列の読取りオペレーションに関与するオペレーションのシーケンスを示す一例のシーケンス図の説明図を用いて継続される。
【００６２】
[0079]７．シーケンス図
[0080]図６は、本発明の一実施形態における、ファイル読取りオペレーション中に関与するＣＰＵ１１０と、ストレージコントローラ１２０と、二次ストレージユニット１４０Ａのおのおのにおけるオペレーションのシーケンスを示すために使用される一例のシーケンス図である。
【００６３】
[0081]イベント６１０は、二次ストレージユニット１４０Ａからメインメモリ１３０へと（ファイルに対応する）データ要素列を転送する、ストレージコントローラ１２０に対するＣＰＵ１１０による要求を表す。イベント６１５は、ストレージコントローラ１２０が、ＣＰＵ１１０によって発行される要求６１０を読み取るオペレーションを表す。
【００６４】
[0082]イベント６２０は、ファイル内のデータを供給する、二次ストレージユニット１４０Ａに対してストレージコントローラ１２０によって発行されるコマンドを表す。同じイベントにおいて、ストレージコントローラ１２０は、上記したように、（メインメモリ１３０に対して発行される適切なアクセスコマンドにより）ロケーションデスクリプタのサブセットの取出しを開始することができる。
【００６５】
[0083]本例においては、たとえ単一のロケーションデスクリプタが、（二次ストレージユニットからのデータブロックの取出しが、メインメモリからのロケーションデスクリプタを取り出すことよりも時間がかかることを仮定する）ほとんどの場合に、対応する情報のタイムリーな使用可能性を保証するのに十分である可能性があったとしても、ストレージコントローラ１２０は、イベント６２０中に２つのロケーションデスクリプタを取り出すことを仮定する。しかしながら、小さなブロック（とりわけ最後のブロック）の場合には、その余分なロケーションデスクリプタを取り出すことは、ロケーションデスクリプタを待つ必要なしに必要な情報のタイムリーな使用可能性を保証する。
【００６６】
[0084]時刻（ｔｉｍｅ  ｉｎｓｔａｎｃｅ）ｔ１において、二次ストレージユニット１４０Ａは、ファイルの中のデータをストレージコントローラ１２０に対して供給することを開始する。データは、バッファ２１０に記憶することができる（図２）。ｔ２まで、第１のロケーションデスクリプタによって指定されるデータは、バッファ２１０において使用可能であるように見なされる。ファイルデスクリプタは、ｔ２に先行して取り出され／受け取られ、そしてまた（制御ユニット２２０によって）バッファ２１０に記憶されているようにも見なされる。ファイルデスクリプタの組（上述したイベント６２０の場合では２つ）のうちのすべての残りのデスクリプタもまた、受け取られるように見なされる。
【００６７】
[0085]したがって、イベント６４０は、データバッファ５１０からメインメモリ１３０へのデータ６９０Ａの転送を表す。それ故に、バスマスタ２５０は、それらの部分（又はＤＭＡ転送において送ることができる少なくとも最小限の一部分）が使用可能になるとすぐに、メインメモリ１３０に対する対応する部分のＤＭＡ転送を開始することができる。一実施形態においては、ＤＭＡ転送は、最小限の６４バイトを転送する。それ故に、ファイルの対応する部分の少なくとも６４バイトが、受け取られ、バッファ２１０に記憶されているときに、バスマスタ２５０は、メインメモリ１３０に対する転送を開始することができる。
【００６８】
[0086]データの受け取りは、第２のロケーションデスクリプタに対応するデータ６９０Ｂの受け取りの開始によって表されるように、継続される。
【００６９】
[0087]時刻ｔ３において、ストレージコントローラ１２０は、第２のデスクリプタに対応するデータが時刻ｔ４において完全に受け取られる前に、次のデスクリプタ（本例における第３のロケーションデスクリプタ）を取り出すことができる。ｔ４の直後に開始されることが示されるイベント６６０は、メインメモリ１３０に対するデータ６９０Ｂの転送を表す。時刻ｔ４から、（時刻ｔ３において取り出される）第３のデスクリプタに対応するデータ６９０Ｃの受け取りが開始される。
【００７０】
[0088]後続のロケーションデスクリプタの取出しと、メインメモリ１３０に対するデータ部分の書込みと、二次ストレージユニット１４０Ａからのデータの受け取りは、読取り要求の形で要求されるすべてのデータ要素が、メインメモリ１３０に対して転送されるまで、同様にして継続される。
【００７１】
[0089]以上の説明は、単なる例証のために単一の読取り要求に関して提供されるが、複数の読取り要求が、以上の説明と整合するように並列に処理されることになることを理解すべきである。
【００７２】
[0090]８．結論
[0091]本発明の様々な実施形態が上記されたが、それらは例にすぎず、そして限定ではないものとして表されていることを理解すべきである。したがって、本発明の幅と範囲は、上記の例示の実施形態のうちのどれによっても限定されるべきではなく、添付の特許請求の範囲とそれらの均等物に従ってのみ定義されるべきである。
【図面の簡単な説明】
【００７３】
【図１】本発明のいくつかの特徴を実施することができる一例のシステムを示す図である。
【図２】一実施形態におけるストレージコントローラの詳細を示すブロック図である。
【図３】（Ａ）一実施形態における、ロケーションデスクリプタが、データを要求するプロセッサによって指定される方法を示す図である。（Ｂ）一実施形態における、ロケーションデスクリプタが、データを要求するプロセッサによって指定される方法を示す図である。
【図４】本発明の一実施形態における、ストレージコントローラによって使用されるバッファのサイズを低減することができる方法を示すフローチャートである。
【図５Ａ】一実施形態における、ストレージコントローラの中のバッファの詳細を示す図である。
【図５Ｂ】一実施形態における、ストレージコントローラの中のバッファにおけるデータについての制御情報が指定される方法を示す図である。
【図６】一実施形態における、二次ストレージからターゲットメモリへのデータの転送中におけるイベントのシーケンスを示すために使用されるシーケンス図である。
【符号の説明】
【００７４】
１１０…ＣＰＵ、１１２…パス、１２０…ストレージコントローラ、１２４Ａ〜１２４Ｎ…物理インターフェース（リンク），パス、１３０…メインメモリ、１４０Ａ〜１４０Ｎ…二次ストレージユニット、２１０…バッファ、２２０…制御ユニット、２２４Ａ〜２２４Ｎ…パス、２４０Ａ〜２４０Ｎ…ＦＩＦＯ、２５０…バスマスタ、３１０…レジスタ，フィールド、３２０…コマンドヘッダ，フィールド、３３０…コマンドテーブル、３５０…ＰＲＤテーブル、３５０Ａ〜３５０Ｎ…ＰＲＤ、３６０…メインメモリロケーション、５１０…データバッファ、５２０…制御バッファ、５５０，５６０，５７０，５８０…フィールド、５９０…ステータスエントリ、６１０，６１５，６２０，６４０，６６０…イベント、６９０Ａ，６９０Ｂ，６９０Ｃ…データ。
【図１】
0004748610.tif 000002
【図２】
0004748610.tif 000003
【図３】
0004748610.tif 000004
【図４】
0004748610.tif 000005
【図５Ａ】
0004748610.tif 000006
【図５Ｂ】
0004748610.tif 000007
【図６】
0004748610.tif 000008