(57)【要約】  ストレージシステムは、プロセッサと、メモリと、記憶ドライブと、インタフェースデバイスとを備える。記憶ドライブは、インタフェースデバイスへ転送する転送データのメモリにおける格納領域の先頭と、その格納領域の先頭が属するメモリにおける区画の先頭と、の間の大きさに関する値であるオフセット値に基づいて、その転送データのサイズを決定し、その決定したサイズの転送データをインタフェースデバイスへ転送する。インタフェースデバイスは、転送データをパケットに分割してプロセッサへ転送する。プロセッサは、インタフェースデバイスから転送されたパケットを、区画の単位でメモリに格納する。
2016181464.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
所定サイズの区画の単位でアクセスされるメモリと、
記憶ドライブと、
前記プロセッサと前記記憶ドライブの間のデータ通信を仲介するインタフェースデバイスと
を備え、
前記記憶ドライブは、
前記インタフェースデバイスへ転送する転送データの前記メモリにおける格納領域と、その格納領域の少なくとも一部が属する前記メモリにおける区画の所定位置と、の間の大きさに関する値であるオフセット値に基づいて、前記転送データのサイズを決定し、
その決定したサイズの転送データを前記インタフェースデバイスへ転送し、
前記インタフェースデバイスは、前記転送データをパケットに分割して前記プロセッサへ転送し、
前記プロセッサは、前記インタフェースデバイスから転送されたパケットを、前記区画の単位で前記メモリに格納する
ストレージシステム。
【請求項２】
前記オフセット値は、前記転送データの前記メモリにおける格納領域の先頭と、その格納領域の先頭が属する前記メモリにおける区画の先頭と、の間の大きさに関する値である
請求項１に記載のストレージシステム。
【請求項３】
前記オフセット値は、前記インタフェースデバイスから前記記憶ドライブへ発行されるリードコマンドに含まれる
請求項１に記載のストレージシステム。
【請求項４】
前記転送データのサイズは、前記転送データの取り得る最大サイズから前記オフセット値を減算したサイズである
請求項２に記載のストレージシステム。
【請求項５】
前記記憶ドライブは、前記インタフェースデバイスへ転送済みの転送データの量に基づいて、次の転送データに関するオフセット値を算出し、その算出したオフセット値に基づいて、次の転送データのサイズを決定する
請求項２に記載のストレージシステム。
【請求項６】
前記記憶ドライブは、
前記インタフェースデバイスへ転送待ちのデータの量が前記転送データの取り得る最大サイズ未満の場合、その転送待ちのデータを全て前記インタフェースデバイスへ転送し、
前記インタフェースデバイスへ転送待ちのデータの量が前記転送データの取り得る最大サイズ以上の場合、前記オフセット値が「０」か否かを判定し、
前記オフセット値が「０」である場合、その転送待ちのデータの内、前記転送データの取り得る最大サイズの分を、前記インタフェースデバイスへ転送し、
前記オフセット値が「０」でない場合、その転送待ちのデータの内、前記転送データの取り得る最大サイズから前記オフセット値を減算したサイズの分を、前記インタフェースデバイスへ転送する
請求項４に記載のストレージシステム。
【請求項７】
前記インタフェースデバイスと前記プロセッサとの間のデータ通信は、ＰＣＩ−Ｅｘｐｒｅｓｓの仕様に基づいており、
前記インタフェースデバイスと前記記憶ドライブとの間のデータ通信は、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）の仕様に基づいており、
前記転送データの取り得る最大サイズは、ＳＡＳの仕様に基づいて決まる値である
請求項４に記載のストレージシステム。
【請求項８】
前記メモリには、前記インタフェースデバイスが前記記憶ドライブに対して発行したリードコマンドと、当該リードコマンドによってリードされるデータのメモリ内における格納領域と、を対応付けるコマンド管理情報が格納されており、
前記インタフェースデバイスは、前記コマンド管理情報から、前記記憶ドライブに対して発行したリードコマンドの内の未完了のリードコマンドに関する情報が抽出されて生成された、実行中コマンド管理情報を保持し、
前記インタフェースデバイスは、前記実行中コマンド管理情報に基づいて、前記転送データの前記メモリ内における格納領域を特定する
請求項１に記載のストレージシステム。
【請求項９】
前記インタフェースデバイスは、前記記憶ドライブから前記転送データの転送のためのコネクション要求を受領したタイミングで、前記実行中コマンド管理情報を生成する
請求項８に記載のストレージシステム。
【請求項１０】
前記インタフェースデバイスは、前記コネクション要求の送信元の記憶ドライブに対して発行したリードコマンドの内の未完了のリードコマンドに関連する情報を、前記コマンド管理情報から抽出して、前記実行中コマンド管理情報を生成する
請求項９に記載のストレージシステム。
【請求項１１】
前記インタフェースデバイスは、前記未完了のリードコマンドが複数存在する場合、最古に発行された未完了のリードコマンドに関連する情報を抽出して、前記実行中コマンド管理情報を生成する
請求項１０に記載のストレージシステム。
【請求項１２】
前記リードコマンドには、当該リードコマンドと他のリードコマンドを区別するための区別情報が含まれており、
前記コマンド管理情報は、前記リードコマンドと前記区別情報とを更に対応付け、
前記記憶ドライブは、前記転送データに係るリードコマンドの前記区別情報を含むコネクション要求を、前記インタフェースデバイスへ送信し、
前記インタフェースデバイスは、前記区別情報に対応付けられている未完了のリードコマンドに関連する情報を抽出して、前記実行中コマンド管理情報を生成する
請求項１０に記載のストレージシステム。
【請求項１３】
記憶ドライブは、
記憶領域からリードデータを取得し、
所定サイズの区画の単位でアクセスされるメモリであって、当該メモリにおける前記リードデータの格納領域と、その格納位置の少なくとも一部が属する前記メモリにおける区画の所定位置と、の間の大きさに関する値であるオフセット値に基づいて、転送データのサイズを決定し、
前記決定したサイズの転送データをインタフェースデバイスへ転送し、
前記インタフェースデバイスは、
前記記憶ドライブから前記転送データを受領すると、当該転送データをパケットに分割してプロセッサへ転送し、
前記プロセッサは、前記インタフェースデバイスから前記パケットを受領すると、当該パケットを、前記区画の単位で前記メモリに格納する
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御に関し、例えばストレージシステム及び記憶制御方法の技術に関する。
【背景技術】
【０００２】
ＰＣＩｅ（ＰＣＩ−Ｅｘｐｒｅｓｓ）プロトコルとＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）プロトコルを相互変換するＳＡＳアダプタが知られている（特許文献１）。ＳＡＳアダプタは、プロセッサと記憶ドライブ（例えばＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ））との間に存在し、記憶ドライブからＳＡＳプロトコルに基づいて転送されたデータをＰＣＩｅプロトコルに変換して、プロセッサへ転送する。プロセッサは、ＳＡＳアダプタから転送されたデータを、所定サイズの単位に分割してメモリ（例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））にライトする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１３３４０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
プロセッサは、メモリの領域を所定サイズの区画に分割して管理し、その区画の単位でデータをライトする。したがって、新規データの格納先のメモリの区画の一部に既存データが存在する場合、プロセッサは、その区画から区画サイズ分のデータ（既存データを含む）を一旦リードし、そのリードしたデータを更新し（例えば、そのリードしたデータに新規データを追加又は上書きし）、その更新後のデータ（区画サイズ分のデータ）をその区画にライトする、という処理を行う必要がある。この処理を「リード・モディファイ・ライト」という。この処理は、その区画にデータをライトするだけの処理と比べて、時間がかかる。これは、ストレージシステムのスループットの低下を招く。同様の課題は、ＰＣＩｅとＳＡＳに限らず存在し得る。そこで本発明の目的は、ストレージシステムのスループットを向上させることにある。
【課題を解決するための手段】
【０００５】
一実施例に係るストレージシステムは、プロセッサと、所定サイズの区画の単位でアクセスされるメモリと、記憶ドライブと、プロセッサと記憶ドライブの間のデータ通信を仲介するインタフェースデバイスと、を備える。
記憶ドライブは、インタフェースデバイスへ転送する転送データのメモリにおける格納領域と、その格納領域の少なくとも一部が属するメモリにおける区画の所定位置と、の間の大きさに関する値であるオフセット値に基づいて、転送データのサイズを決定し、その決定したサイズの転送データをインタフェースデバイスへ転送する。
インタフェースデバイスは、転送データをパケットに分割してプロセッサへ転送する。
プロセッサは、インタフェースデバイスから転送されたパケットを、区画の単位でメモリに格納する。
【発明の効果】
【０００６】
本発明によれば、ストレージシステムのスループットを向上させることができる。
【図面の簡単な説明】
【０００７】
【図１】ストレージシステムの構成例を示す。
【図２】メモリにおけるデータの格納例を示す。
【図３】キャッシュラインのサイズをドライブに通知する処理例を示すシーケンスチャートである。
【図４】ドライブに対してリードを要求する処理例を示すシーケンスチャートである。
【図５】ドライブの処理例を示すフローチャートである。
【図６】ドライブからリードされたデータがメモリに格納される処理例を示す。
【図７】コマンド管理リストの構成例を示す。
【図８】ＳＧＬ（Ｓｃａｔｔｅｒ  Ｇａｔｈｅｒ  Ｌｉｓｔ）の構成例を示す。
【図９】実行中コマンド管理リスト及びＳＧＬキャッシュの構成例を示す。
【図１０】ＳＡＳアダプタの処理例を示すフローチャートである。
【図１１】ドライブからリードされたデータがＳＡＳアダプタを介してメモリに格納される処理例を示すシーケンスチャートである。
【図１２】ドライブの処理例を示すフローチャートである。
【図１３】ＳＡＳアダプタの処理例を示すフローチャートである。
【図１４】ドライブからリードされたデータがＳＡＳアダプタを介してメモリに格納される処理例を示すシーケンスチャートである。
【発明を実施するための形態】
【０００８】
以下、図面を参照しながら、幾つかの実施例を説明する。以下の説明では、「ｘｘｘテーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。また、以下の説明では、要素の識別情報として、ＩＤが使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用することがある。例えば、要素を特に区別しないで説明する場合には、「ｘｘｘ２１２」と記載し、個々の要素を区別して説明する場合には、「ｘｘｘ２１２ａ」のように記載することがある。また、以下の説明では、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求は、ライト要求又はリード要求であり、アクセス要求と呼ばれてもよい。
【実施例１】
【０００９】
実施例１は、ドライブ３が、転送データが格納されるメモリ５の区画の状況を考慮して、転送データのサイズを決定する例である。【００１０】
図１は、実施例１に係るストレージシステム１の構成例を示す。【００１１】
ストレージシステム１は、ホスト計算機９から、ネットワーク２４（又はケーブル）を介してアクセスされる。ネットワーク２４の例は、ＦＣ―ＳＡＮ（ＦｉｂｒｅＣｈａｎｎｅｌ  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）である。ストレージシステム１は、プロセッサ２、メモリ５、ＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）１２、ＳＡＳアダプタ４、ＳＡＳエクスパンダ１１、ドライブ３を備えてよい。プロセッサ２、メモリ５、ＨＢＡ１２、ＳＡＳアダプタ４は、双方向通信可能な内部バス２１で接続されてよい。内部バス２１に接続されている各要素は、ＰＣＩｅプロトコルによって通信可能であってよい。【００１２】
ＨＢＡ１２は、ネットワーク２４に接続されてよい。ＨＢＡ１２は、ネットワーク２４に係るＦＣプロトコルと内部バス２１に係るＰＣＩｅプロトコルとを、相互変換する機能を有してよい。【００１３】
プロセッサ２は、ホスト計算機９とドライブ３との間のデータのやり取りを制御する。プロセッサ２は、ホスト計算機９からＨＢＡ１２を介してリード要求を受領すると、そのリード要求に対応するデータをドライブ３からリードして、ホスト計算機９に返す。このとき、プロセッサ２は、ドライブ３からリードしたデータを、メモリ５に一時的に格納（キャッシュ）してよい。メモリ５は、ドライブ３よりもＩ／Ｏ性能の高い記憶デバイスであってよい。メモリ３の例は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。【００１４】
ドライブ３は、不揮発性の記憶媒体を有し、その記憶媒体にデータを保持する。ドライブ３は、リードコマンドを受領すると、そのリードコマンドに対応するデータを記憶媒体からリードして返す。ドライブ３は、ＳＡＳプロトコルによって制御されてよい。ドライブ３の例は、ＨＤＤ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、フラッシュデバイスである。ドライブ３は、１以上の物理的なドライブによって構成された論理的なドライブであってもよい。また、ドライブ３は、論理的な記憶ボリュームであってもよい。ドライブ３は、複数のドライブで構成されたＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループであってもよい。なお、実施例におけるドライブ３の処理は、ドライブ３が備えるコントローラによって実行されてよい。また、ドライブ３は、内部にメモリを備えてよい。【００１５】
ＳＡＳアダプタ４は、インタフェースデバイスの例である。ＳＡＳアダプタ４には、双方向通信可能なケーブル２８（又はネットワーク）を介して、ドライブ３が接続される。ＳＡＳアダプタ４には、ＳＡＳエクスパンダ１１を介して、複数のドライブ３が接続されてもよい。ＳＡＳアダプタ４とドライブ３との間は、ＳＡＳプロトコルによって通信可能であってよい。また、ＳＡＳアダプタ４には、上述のとおり、内部バス２１を介して、プロセッサ２が接続される。ＳＡＳアダプタ４とプロセッサ２との間は、ＰＣＩｅプロトコルによって通信可能であってよい。ＳＡＳアダプタ４は、ＰＣＩｅプロトコルとＳＡＳプロトコルを相互変換する機能を有してよい。なお、実施例におけるＳＡＳアダプタ４の処理は、ＳＡＳアダプタ４が備えるＬＳＩによって実行されてよい。また、ＳＡＳアダプタ４は、内部にメモリを備えてよい。【００１６】
ＳＡＳアダプタ４は、プロセッサ２からＰＣＩｅプロトコルに基づいて発行されたリードコマンドを、ＳＡＳプロトコルに変換してドライブ３へ転送してよい。また、ＳＡＳアダプタ４は、ドライブ３からＳＡＳプロトコルに基づいて転送されたリードデータを、ＰＣＩｅプロトコルに変換してプロセッサ２へ転送してよい。プロセッサ２は、この転送されたリードデータをメモリ５に格納してよい。【００１７】
図２は、メモリ５に対するデータのライト処理の例を示す。【００１８】
ドライブ３には、セクタの単位でアクセス可能である。本実施例では、５１２バイトのユーザデータに８バイトのＤＩＦ（Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  Ｆｉｅｌｄ）データが付加された５２０バイトが、１セクタである場合について説明する。ＤＩＦデータの例は、ユーザデータの誤りを検出するためのＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）、ユーザデータの取り違えを防ぐためのアドレス情報である。以下、１セクタに格納されているデータを「セクタデータ」という。【００１９】
メモリ５の領域は、所定サイズの区画に分割して管理される。この所定サイズの区画をキャッシュライン２００という。プロセッサ２は、このキャッシュライン２００の単位でアクセスする。１つのキャッシュライン２００のサイズは、２のべき乗（例えば、６４バイト、１２８バイト）である。本実施例では、１つのキャッシュライン２００のサイズが６４バイトの場合について説明する。【００２０】
次に、複数のセクタデータがメモリ５にライトされる場合について、図２を用いて説明する。１個目のセクタデータ２１０ａは、メモリ５において、１〜８段目のキャッシュライン２００と、９段目のキャッシュライン２００ａの内の８バイト分（２１２ａ）とにライトされる（図２の斜線部分）。２個目のセクタデータ２１０ｂは、９段目のキャッシュライン２００ａの内の残り５６バイト分と、１０〜１７段目のキャッシュライン２００と、１８段目のキャッシュライン２００ｂの１６バイト分（２１２ｂ）とにライトされる。【００２１】
９段目のキャッシュライン２００ａの内の残り５６バイト分にデータをライトする際、プロセッサ２は、９段目のキャッシュライン２００ａに格納されている全データをリードし、そのリードした全データの内の後半５７バイト分を、２個目のセクタデータ２１０ｂの先頭から５６バイト分のデータに置き換え、その置き換えた全データを９段目のキャッシュライン２００ａにオーバーライトする、という処理を行う必要がある。すなわち、この場合、プロセッサ２は、キャッシュライン２００の単位で、いわゆるリード・モディファイ・ライトを行う必要がある。【００２２】
したがって、セクタのサイズがキャッシュライン２００のサイズの倍数ではない場合、一部のみにデータの格納されたキャッシュライン２００が生成される。そして、この一部のみにデータの格納されたキャシュライン２００に追加データを格納するためには、プロセッサ２は、リード・モディファイ・ライトを行う必要がある。リード・モディファイ・ライトは、ストレージシステム１のスループットの低下を招くので、できるだけ少ないことが望ましい。本実施例に係るストレージシステム１は、メモリ５におけるこのリード・モディファイ・ライトの発生数を減らすことにより、スループットの向上を図る。【００２３】
図３は、キャッシュライン２００のサイズをドライブ３に通知する処理例を示すシーケンスチャートである。【００２４】
キャッシュラインサイズ設定コマンド４１は、キャッシュライン２００のサイズを、ドライブ３へ通知するためのコマンドである。キャッシュラインサイズ設定コマンド４１には、オペレーションコード４１１と、キャッシュラインサイズ４１２とが含まれてよい。オペレーションコード４１１は、当該コマンドが「キャッシュラインサイズ設定コマンド」であることを識別するためのコードである。キャッシュラインサイズ４１２は、キャッシュライン２００のサイズを示す値である。図３に示すキャッシュラインサイズ設定コマンド４１は、キャッシュラインサイズ４１２が「４０ｈ（６４バイト）」であることを示す。【００２５】
プロセッサ２は、キャッシュラインサイズ設定情報を、ＳＡＳアダプタ４へ送信する（ステップＳ１１）。このキャッシュラインサイズ設定情報に、キャッシュライン２００のサイズが含まれてよい。ＳＡＳアダプタ４は、プロセッサ３からキャッシュラインサイズ設定情報を受領すると、その情報に対応するキャッシュラインサイズ設定コマンド４１を、ドライブ３へ送信する（ステップＳ１２）。【００２６】
以上の処理により、ドライブ３は、メモリ５のキャッシュライン２００のサイズを知ることができる。図３に示す処理は、ストレージシステム１の起動時に実行される初期化処理に含まれてもよい。又は、この処理は、ドライブ３がストレージシステム１に増設された時に実行される所定の処理に含まれてもよい。【００２７】
なお、ＳＡＳアダプタ４がキャッシュライン２００のサイズを知っている場合、プロセッサ２からＳＡＳアダプタ４へ送信されるキャッシュラインサイズ設定情報には、キャッシュライン２００のサイズが含まれなくてもよい。【００２８】
図４は、ドライブ３に対してリードデータを要求する処理例を示すシーケンスチャートである。【００２９】
リードコマンド４２は、ドライブ３に対して、リードデータの転送を指示するコマンドである。リードコマンド４２には、オペレーションコード４２１と、ドライブ番号４２２と、ＬＢＡ４２３と、データ長４２４と、オフセット値４２５とが含まれてよい。オペレーションコード４２１は、当該コマンドが「リードコマンド」であることを識別するためのコードである。ドライブ番号４２２は、リード対象のドライブ３の番号である。ＬＢＡ４２３は、リードデータのセクタの先頭アドレスである。セクタ数４２４は、リードデータのセクタ数である。すなわち、ＬＢＡ４２３からセクタ数４２４分のセクタデータが、リードデータである。【００３０】
オフセット値４２５は、ドライブ３から転送される転送データのメモリ５における格納領域（例えば、バッファ領域）と、その格納領域の少なくとも一部（例えば、バッファ領域の先頭部分）が属する、メモリ５における区画（例えば、キャッシュライン２００）の所定位置（例えば、キャッシュライン２００の境界）と、の間の大きさに関する値である。オフセット値４２５は、メモリ５に確保されたバッファ領域の先頭アドレスが、キャッシュライン２００の境界（先頭アドレス）からどれだけずれているかを示す値であってよい。図４に示すオフセット値４２５「０８ｈ（８バイト）」の例は、バッファ領域の先頭アドレスが、キャッシュライン２００の境界（先頭アドレス）から８バイトずれていることを示す。言い換えると、バッファ領域の先頭アドレスが、「キャッシュラインサイズ（６４バイト）×Ｎ段目（Ｎは正の整数）＋８バイト」であることを示す。【００３１】
プロセッサ２は、メモリ５に、リードデータを格納するためのバッファ領域を確保する（ステップＳ２１）。そして、プロセッサ２は、リードコマンド情報をＳＡＳアダプタ４へ送信する（ステップＳ２２）。ＳＡＳアダプタ４は、プロセッサ２からリードコマンド情報を受領すると、その情報に対応するリードコマンド４２をドライブ３へ送信する（ステップＳ２３）。このリードコマンド４２は、ドライブ番号４２２に対応するドライブ３へ送信される。このリードコマンド４２を受領したドライブ３は、次の図５に示す処理を行う。【００３２】
図５は、ドライブ３が、リードデータをＳＡＳアダプタ４へ転送する処理例を示すフローチャートである。【００３３】
ドライブ３は、ＳＡＳアダプタ４からリードコマンド４２を受領すると、そのリードコマンド４２に基づいて、ＬＢＡ４２３からセクタ数４２４分のデータをリードし、ドライブ３内の所定のバッファメモリに格納する。ドライブ３は、転送待ちの状態となったタイミングで（例えば、バッファメモリに所定量以上のデータが格納されたタイミングで）、ＳＡＳアダプタ４に対してコネクション要求を送信してよい。これにより、ドライブ３とＳＡＳアダプタ４との間に、ＳＡＳフレームを送信するためのコネクションが形成される。そして、ドライブ３は、次のように、データの送信処理を行ってよい。【００３４】
ドライブ３は、転送待ちのデータ量（例えば、バッファメモリに格納済みのデータ量）が、ＳＡＳフレームが取り得る最大長（以下「最大ＳＡＳフレーム長」という）よりも小さいか否かを判定する（ステップＳ３００）。最大ＳＡＳフレーム長の例は、１０２４バイトである。【００３５】
転送待ちのデータ量が最大ＳＡＳフレーム長よりも小さい場合（ステップＳ３００：ＹＥＳ）、ドライブ３は、転送待ちのデータを全てＳＡＳアダプタ４へ転送し（ステップＳ３０１）、処理を終了する。【００３６】
転送待ちのデータ量が最大ＳＡＳフレーム長以上の場合（ステップＳ３００：ＮＯ）、ドライブ３は、次の処理（ステップＳ３０２）を行う。すなわち、ドライブ３は、アライメントずれが発生しているか否かを判定する（ステップＳ３０２）。例えば、ドライブ３は、オフセット値４２５とこれまでに転送済みのデータ量の合計値を算出する。そして、ドライブ３は、その合計値をキャッシュラインサイズ４１２で除算したときの余りを算出する。ドライブ３は、この余りが「０」の場合、アライメントずれが発生していないと判定し、この余りが「０以外」の場合、アライメントずれが発生していると判定してよい。【００３７】
アライメントずれが発生していない場合（ステップＳ３０２：ＮＯ）、ドライブ３は、最大ＳＡＳフレーム長に相当するデータをバッファメモリから抽出し、その抽出したデータを格納したＳＡＳフレームを生成する。そして、ドライブ３は、その生成したＳＡＳフレームを、ＳＡＳアダプタ４へ送信し（ステップＳ３０３）、ステップＳ３００に戻る。【００３８】
アライメントずれが発生している場合（ステップＳ３０２：ＹＥＳ）、ドライブ３は、最大ＳＡＳフレーム長からアライメントずれの分（すなわち、上記で算出した余り）を減算した値に相当するデータを、バッファメモリから抽出し、その抽出したデータを格納したＳＡＳフレームを生成する。そして、ドライブ３は、その生成したＳＡＳフレームを、ＳＡＳアダプタ４へ転送し（ステップＳ３０４）、ステップＳ３００に戻る。【００３９】
このように、ドライブ３は、最大ＳＡＳフレーム長の分のデータを転送可能であっても、必ずしもその全てのデータをＳＡＳアダプタ４に転送するのではなく、アライメントずれを考慮して転送するデータ量を決定する。これにより、メモリ５におけるリード・モディファイ・ライトの発生回数を低減させることができる。以下、図６を用いて、この処理の典型例を述べる。【００４０】
図６は、ドライブ３からリードされたデータがメモリ３に格納される処理の典型例を示す。【００４１】
プロセッサ２は、メモリ５に、リードデータを格納するためのバッファ領域を確保する。この確保したバッファ領域の先頭が、キャッシュライン２００の境界から８バイトずれているとする。そこで、プロセッサ２は、オフセット値「８バイト」を含むリード情報を、ＳＡＳアダプタ４へ送信する。ＳＡＳアダプタ４は、このリード情報を受領すると、オフセット値４２５に「８バイト」をセットしたリードコマンド４２を、ドライブ３へ送信する。【００４２】
ドライブ３は、このリードコマンド４２を受領すると、セクタからデータをリードし、ドライブ３内のバッファメモリに格納する。そして、ドライブ３は、例えば、バッファメモリに２６００バイト（＝５２０バイト×５セクタ）のデータが格納されたタイミングで、ＳＡＳアダプタ４に対してコネクション要求を送信する。【００４３】
ドライブ３は、図５に示す処理に基づいて、バッファメモリからデータを抽出し、ＳＡＳフレームを生成する。リードコマンド４２のオフセット値４２５が「８バイト」なので（つまり、アライメントずれが発生しているので）、ドライブ３は、最大ＳＡＳフレーム長（１０２４バイト）から８バイト分を減算した「１０１６バイト」分のデータをバッファメモリから抽出し、１個目のＳＡＳフレームを生成する。そして、ドライブ３は、その生成した１個目のＳＡＳフレームを、ＳＡＳアダプタ４へ転送する。【００４４】
１個目のＳＡＳフレームを受領したＳＡＳアダプタ４は、そのＳＡＳフレームのデータ（１０１６バイト）を、メモリ５のキャッシュライン２００のサイズ（６４バイト）に適合するパケットに分割する。このとき、メモリ５のバッファ領域の１段目のキャッシュライン２００には、先頭から８バイト分のデータが格納済みである。そこで、ＳＡＳアダプタ４は、１０１６バイトのデータの先頭から５６バイト（＝６４バイト−８バイト）のデータを含む１個のパケットを生成する。また、ＳＡＳアダプタ４は、残りの９６０バイトのデータを、１個当たり２５６バイトの３個のパケットに分割する。そして、ＳＡＳアダプタ４は、各パケットをプロセッサ２へ渡す。プロセッサ２は、５６バイトを含むパケットを、バッファ領域の１段目のキャッシュライン２００にリード・モディファイ・ライトし、２５６バイトの各パケットをバッファ領域の２〜１６段目のキャッシュライン２００にライトする。【００４５】
また、ドライブ３は、バッファメモリから最大ＳＡＳフレーム長の分のデータ（１０２４バイト）を抽出し、２個目のＳＡＳフレームを生成する。なぜなら、２個目のＳＡＳフレームのデータは、メモリ５のキャシュライン２００の先頭からライト可能だから（つまり、オフセットが発生しないから）である。そして、ドライブ３は、その生成した２個目のＳＡＳフレームを、ＳＡＳアダプタ４へ送信する。【００４６】
２個目のＳＡＳフレームを受領したＳＡＳアダプタ４は、ＳＡＳフレーム内のデータ（１０２４バイト）を、１個当たり２５６バイトの４個のパケットに分割する。そして、ＳＡＳアダプタ４は、各パケットをプロセッサ２へ渡す。プロセッサ２は、各パケットを、バッファ領域の１７〜３２段目のキャッシュラインにライトする。【００４７】
次に、ドライブ３は、バッファメモリから残りのデータ（５６０バイト）を抽出し、３個目のＳＡＳフレームを生成する。そして、ドライブ３は、その生成した３個目のＳＡＳフレームを、ＳＡＳアダプタ４へ転送する。【００４８】
３個目のＳＡＳフレームを受領したＳＡＳアダプタ４は、ＳＡＳフレームのデータ（５６０バイト）を、１個当たり２５６バイトの２個のパケットと、残りの４８バイトのデータを含む１個のパケットとに分割する。そして、ＳＡＳアダプタ４は、各パケットをプロセッサ２へ渡す。プロセッサ２は、２５６バイトの各パケットを、バッファ領域の３３〜４０段目のキャッシュライン２００にライトし、４８バイトのデータを含むパケットを、バッファ領域の４１段目のキャッシュラインにリード・モディファイ・ライトする。【００４９】
上述の処理によれば、メモリ５のキャッシュライン２００に対してリード・モディファイ・ライトが発生する回数は２回である。【００５０】
その後、ドライブ３のバッファメモリに、５７２０バイト（＝５２０バイト×１１セクタ）のデータが格納されたとする。この場合、バッファ領域の４１段目のキャッシュラインには「４８バイト」のアライメントずれが発生しているため、ドライブ３は、「９７６バイト（＝１０２４バイト−４８バイト）」分のデータをバッファメモリから抽出し、１個目のＳＡＳフレームを生成する。そして、ドライブ３は、その生成した１個目のＳＡＳフレームを、ＳＡＳアダプタ４へ転送する。【００５１】
また、ドライブ３は、１０２４バイトの２〜５個目のＳＡＳフレームを、ＳＡＳアダプタ４へ送信する。最後に、ドライブ３は、６４８バイトの６個目のＳＡＳフレームを、ＳＡＳアダプタ４へ転送する。これらのＳＡＳフレームを受領したＳＡＳアダプタ４は、上述同様に分割したパケットをプロセッサ２へ渡す。すなわち、１個目のＳＡＳフレームの１個目のパケットサイズは１６バイト、６個目のＳＡＳフレームの最後のパケットサイズは８バイト、それ以外のパケットサイズは２５６バイトである。よって、メモリ５のキャッシュラインに対してリード・モディファイ・ライトが発生する回数は、上述同様、２回となる。【００５２】
仮に、ドライブが、上述のような考慮を行わず、最大ＳＡＳフレーム長をＳＡＳアダプタ４へ送信する場合、次のような処理となってしまう。ドライブ内のバッファメモリに格納された２６００バイトのデータについて、ドライブは、１個目及び２個目のＳＡＳフレームを１０２４バイト、３個目のＳＡＳフレームを５５２バイトとする。１個目のＳＡＳフレームを受領したＳＡＳアダプタは、上述同様、パケットに分割してプロセッサ２へ渡す。この場合、プロセッサ２は、最初及び最後のパケットのキャッシュライン２００への格納において、リード・モディファイ・ライトを行う必要がある。２個目、３個目のＳＡＳフレームについても同様に、プロセッサ２は、最初及び最後のパケットのキャッシュライン２００への格納において、リード・モディファイ・ライトを行う必要がある。すなわち、メモリ５のキャッシュライン２００に対してリード・モディファイ・ライトが発生する回数が、６回となる。また、ドライブのバッファメモリに格納された５７２０バイトのデータについて、ドライブは、１〜５個目のＳＡＳフレームを１０２４バイト、６個目のＳＡＳフレームを６００バイトとする。この場合、メモリ５のキャッシュラインに対してリード・モディファイ・ライトが発生する回数は、１２回となる。【００５３】
すなわち、図６の例において、従来であれば合計１８回（＝６回＋１２回）も発生していたリード・モディファイ・ライトを、本実施例によれば合計４回にまで減らすことができる。本実施例によれば、ドライブ３が、メモリ５におけるキャッシュライン２００の境界からのずれを考慮し、１個目のＳＡＳフレームのサイズを調整することによって、メモリ５においてリード・モディファイ・ライトが発生する回数を減らすことができる。よって、本実施例によれば、メモリ５のスループットを向上させることができる。
【実施例２】
【００５４】
実施例２は、ＳＡＳアダプタ４が、ドライブ３から転送されたＳＡＳフレームのデータの、メモリ５におけるライト先をより高速に特定する例である。なお、実施例１と同様の内容については説明を省略する。【００５５】
図７は、コマンド管理リスト５１の構成例を示す。【００５６】
コマンド管理リスト５１は、ＳＡＳアダプタ４がドライブ３に送信したコマンドを管理するためのリストである。コマンド管理リスト５１は、プロセッサ２上で動作するソフトウェアによって生成され、メモリ５に格納されてよい。コマンド管理リスト５１は、ＳＡＳアダプタ４から参照されてよい。コマンド管理リスト５１は、フィールド値として、ドライブ番号５１１、タグ番号５１２、コマンド５１３、ＬＢＡ５１４、セクタ数５１５、ＳＧＬアドレス５１６を有してよい。【００５７】
ドライブ番号５１１は、ドライブ３を識別するための番号である。タグ番号５１２は、１つのドライブ３に複数のコマンドが送信されたときに、各コマンドを識別するための番号である。コマンド５１３は、ドライブ３へ送信されたコマンドの種別を示す。コマンド５１３の例は、「リードコマンド」、「ライトコマンド」ある。ＬＢＡ５１４は、コマンド５１３が対象とするセクタの先頭アドレスである。セクタ数５１５は、コマンド５１３が対象とするセクタの数である。ＳＧＬアドレス５１６は、ＳＧＬの格納先のアドレス（ＳＧＬへのポインタに相当）である。ＳＧＬの詳細については後述する（図８参照）。【００５８】
図７に示すコマンド管理リスト５１におけるドライブ番号５１１「０」及びタグ番号５１２「０」のレコードは、このドライブ番号５１１「０」のドライブ３に対して、ＬＢＡ５１４「１２３４００００ｈ」から「１０２４セクタ」（５１５）の分の領域を対象とする「リードコマンド」（５１３）が発行されており、そのリードデータの格納先に関する情報を有するＳＧＬは、メモリ５上のアドレス「１０００００ｈ」（５１６）に格納されていることを示す。【００５９】
図８は、ＳＧＬ５２の構成例を示す。【００６０】
ＳＧＬ５２には、メモリ５上のアドレスが格納される。ＳＧＬ５２は、プロセッサ２上で動作するソフトウェアによって生成され、メモリ５に格納されてよい。ＳＧＬ５２は、ＳＡＳアダプタ４から参照されてよい。図７に示すように、コマンド管理リスト５１のレコードのＳＧＬアドレス５１６が、そのレコードに対応するＳＧＬ５２の格納先を示す。【００６１】
ＳＧＬ５２は、フィールド値として、サイズ５２１、メモリアドレス５２２を有してよい。サイズ５２１は、メモリ５上の領域のサイズである。メモリアドレス５２２は、メモリ５上の格納先／格納元のアドレスである。【００６２】
図８に示すＳＧＬ５２は、コマンド５１３が「リードコマンド」の場合、リードデータの先頭から「６６５６０バイト」（５２１）分の格納先がメモリアドレス５２２「１２３４００００ｈ」の領域であり、次の「６６５６０バイト」分の格納先がメモリアドレス５２２「２３４５００００ｈ」の領域であることを示す。【００６３】
図８に示すＳＧＬ５２は、コマンド５１３が「ライトコマンド」の場合、ライトデータの先頭から「６６５６０バイト」（５２１）分の格納元がメモリアドレス５２２「１２３４００００ｈ」の領域であり、次の「６６５６０バイト」分の格納元がメモリアドレス５２２「２３４５００００ｈ」の領域であることを示す。【００６４】
図９は、実行中コマンド管理リスト４５、及び、ＳＧＬキャッシュ４６の構成例を示す。【００６５】
ＳＡＳアダプタ４は、メモリ５上に格納されている複数のＳＧＬ５２の内の幾つかを、ＳＧＬキャッシュ４６として、内部の所定のメモリに保持してよい。ＳＧＬキャッシュ４６は、フィールド値として、サイズ４６１、メモリアドレス４６２を有する。サイズ４６１、メモリアドレス４６２は、それぞれ、図８のサイズ５２１、メモリアドレス５２２と同様である。【００６６】
また、ＳＡＳアダプタ４は、ドライブ３に対して送信済み、且つ、未完了のコマンドに関する情報を、実行中コマンド管理リスト４５として、内部の所定のメモリに保持してよい。【００６７】
実行中コマンド管理リスト４５は、フィールド値として、ドライブ番号４５１、タグ番号４５２、ＳＧＬアドレス４５３、ＳＧＬキャッシュフラグ４５４を有する。ドライブ番号４５１、タグ番号４５２、ＳＧＬアドレス４５３は、それぞれ、図７のドライブ番号５１１、タグ番号５１２、ＳＧＬアドレス５１６と同様である。【００６８】
ＳＧＬキャッシュＩＤ４５４は、ＳＡＳアダプタ４内において保持されているＳＧＬキャッシュ４６の識別子である。ＳＧＬキャッシュ４６が保持されていない場合、ＳＧＬキャッシュＩＤ４５４は「ＮＵＬＬ」であってよい。【００６９】
図９に示す実行中コマンドリスト４５におけるドライブ番号４５１「０」及びタグ番号４５２「１」のレコードは、このドライブ番号４５１「０」のドライブ３に対して送信されたタグ番号４５２「１」のコマンドが、未完了であることを示す。さらに、このコマンドに対応するＳＧＬキャッシュ４６は、ＳＧＬアダプタ４の内部において、ＳＧＬキャッシュＩＤ４５４「０」として保持されていることを示す。【００７０】
図１０は、ドライブ３からコネクション要求を受領したＳＡＳアダプタ４の処理例を示すフローチャートである。【００７１】
ＳＡＳアダプタ４は、ドライブ３からコネクション要求を受領すると、そのコネクション要求からドライブ番号を抽出する（ステップＳ７００）。【００７２】
そして、ＳＡＳアダプタ４は、実行中コマンド管理リスト４５の中から、その抽出したドライブ番号に適合するレコード（未完了コマンド）を検索する。複数のレコードが発見された場合、ＳＡＳアダプタ４は、最古に登録されたレコード（最古の未完了コマンド）を選択する（ステップＳ７０１）。【００７３】
ＳＡＳアダプタ４は、その選択したレコードに含まれるＳＧＬキャッシュＩＤ４５４を参照し、ＳＧＬキャッシュ４６が保持されているか否かを判定する（ステップＳ７０２）。ＳＧＬキャッシュ４６が保持されている場合（ステップＳ７０２：ＹＥＳ）、ＳＡＳアダプタ４は、本処理を終了する。【００７４】
ＳＧＬキャッシュ４６が保持されていない場合（ステップＳ７０２：ＮＯ）、ＳＡＳアダプタ４は、その選択したレコードに対応するＳＧＬ５２をメモリ５から取得し、ＳＧＬキャッシュ４６として内部に保持する（ステップＳ７０３）。そして、ＳＡＳアダプタ４は、本処理を終了する。【００７５】
これにより、ドライブ３からコネクション要求を受領したタイミングで、最古の未完了コマンドに対応するＳＧＬ５２が、ＳＧＬキャッシュ４６としてＳＡＳアダプタ４の内部に保持される。【００７６】
図１１は、ドライブ３からリードされたデータがＳＡＳアダプタ４を介してメモリ５に格納される処理例を示すシーケンスチャートである。【００７７】
図６を用いて説明したように、ドライブ３は、リードコマンド４２を受領すると（ステップＳ３３）、記憶媒体からデータをリードし、ドライブ３内のバッファメモリに格納する。【００７８】
そして、ドライブ３は、ＳＡＳフレームの転送待ちの状態となったタイミングで、ＳＡＳアダプタ４に対してコネクション要求を送信する（ステップＳ３４）。このコネクション要求には、このドライブ３のドライブ番号が含まれてよい。【００７９】
ＳＡＳアダプタ４は、このコネクション要求を受領すると、このコネクション要求に対する受諾応答を、ドライブ３へ返す（ステップＳ３５）。これにより、ドライブ３とＳＡＳアダプタ４との間にコネクションが形成される。【００８０】
また、ＳＡＳアダプタ４は、このコネクション要求の受領をトリガーとして、次の処理を行ってよい。すなわち、ＳＡＳアダプタ４は、図１０に示すように、実行中コマンド管理リスト４５の中から、このコネクション要求に含まれるドライブ番号に適合する最古の未完了コマンドを検索し、発見した最古の未完了コマンドに対応するＳＧＬ５２を、ＳＧＬキャッシュ４６として内部に保持する（ステップＳ３６、Ｓ３７、Ｓ３８）。【００８１】
これにより、ＳＡＳアダプタ４は、その後にドライブ３から転送されるデータのメモリ４への格納先を、ＳＧＬキャッシュ４６から知り得る。また、最古の未完了コマンドに対応するＳＧＬキャッシュ４６を保持することにより、少ないＳＧＬキャッシュ４６で高いキャッシュヒット率を実現できる。よって、データを受信したタイミングでメモリ５からＳＧＬ５２を取得する場合と比較して、より高速にデータをメモリ５に格納することができる。すなわち、ストレージシステム１のスループットを向上させることができる。
【実施例３】
【００８２】
実施例３は、実施例２の変形例である。実施例２との差分について説明する。なお、実施例１又は２と同様の内容については説明を省略する。【００８３】
図１２は、ドライブ３が、ＳＡＳアダプタ４に対してコネクション要求を送信する処理例を示すフローチャートである。【００８４】
ドライブ３は、ＳＡＳフレームの転送待ちの状態となったタイミングで、その転送待ちのＳＡＳフレームのタグ番号を特定する（ステップＳ７１１）。そして、ドライブ３は、その特定したタグ番号及びドライブ３のドライブ番号を含むコネクション要求を生成し、ＳＡＳアダプタ４へ送信する（ステップＳ７１２）。このコネクション要求に含まれるタグ番号は、その後に転送されるデータをＳＡＳアダプタ４に知らせるためのヒント情報の例である。【００８５】
図１３は、ドライブ３からコネクション要求を受領したＳＡＳアダプタ４の処理例を示すフローチャートである。【００８６】
ＳＡＳアダプタ４は、ドライブ３からコネクション要求を受領すると、そのコネクション要求からドライブ番号及びタグ番号を抽出する（ステップＳ７２０）。【００８７】
そして、ＳＡＳアダプタ４は、実行中コマンド管理リスト４５の中から、その抽出したドライブ番号及びタグ番号に適合するレコード（未完了コマンド）を検索する（ステップＳ７２１）。【００８８】
ＳＡＳアダプタ４は、その検索によって発見したレコードに含まれるＳＧＬキャッシュＩＤ４５４を参照し、ＳＧＬキャッシュ４６が保持されているか否かを判定する（ステップＳ７２２）。【００８９】
ＳＧＬキャッシュ４６が保持されている場合（ステップＳ７２２：ＹＥＳ）、ＳＡＳアダプタ４は、本処理を終了する。【００９０】
ＳＧＬキャッシュ４６が保持されていない場合（ステップＳ７２２：ＮＯ）、ＳＡＳアダプタ４は、その発見したレコードに対応するＳＧＬ５２をメモリ５から取得し、ＳＧＬキャッシュ４６として内部に保持する（ステップＳ７２３）。そして、ＳＡＳアダプタ４は、本処理を終了する。【００９１】
図１４は、ドライブ３からリードされたデータがＳＡＳアダプタ４を介してメモリ５に格納される処理例を示すシーケンスチャートである。【００９２】
図６を用いて説明したように、ドライブ３は、リードコマンド４２を受領すると（ステップＳ４３）、記憶媒体からデータをリードし、ドライブ３内のバッファメモリに格納する。【００９３】
そして、ドライブ３は、ＳＡＳフレームの転送待ちの状態となったタイミングで、ＳＡＳアダプタ４に対してコネクション要求を送信する（ステップＳ４４）。このコネクション要求には、このドライブ３のドライブ番号、及び、この転送可能となったＳＡＳフレームに関するタグ番号が含まれてよい。【００９４】
ＳＡＳアダプタ４は、このコネクション要求の受領をトリガーとして、次の処理を行う。すなわち、ＳＡＳアダプタ４は、図１３に示すように、実行中コマンド管理リスト４５の中から、このコネクション要求に含まれるドライブ番号及びタグ番号に適合する未完了コマンドを検索し、発見した未完了コマンドに対応するＳＧＬ５２を、ＳＧＬキャッシュ４６として内部に保持する（ステップＳ４６、Ｓ４７、Ｓ４８）。【００９５】
これにより、ＳＡＳアダプタ４は、その後にドライブ３から転送されるデータのメモリ４への格納先を、ＳＧＬキャッシュ４６から知ることができる。よって、データを受信したタイミングでメモリ５からＳＧＬ５２を取得する場合と比較して、より高速にデータをメモリ５に格納することができる。すなわち、メモリ５のスループットを向上させることができる。【００９６】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、実施例１の内容に、実施例２又は３の内容を組み合わせても良い。また、ＳＡＳアダプタと記憶ドライブとの間のプロトコルは、ＳＡＳプロトコル以外であってよい。また、ＳＡＳアダプタとプロセッサとの間のプロトコルは、ＰＣＩｅプロトコル以外であってよい。【００９７】
また、実施例に関する内容は、以下の様に表現することもできる。
（表現１）
プロセッサと、
所定サイズのメモリ区画の単位でアクセスされるメモリと、
記憶ドライブと、
前記プロセッサと前記記憶ドライブの間のデータ通信を仲介するインタフェースデバイスと
を備え、
前記記憶ドライブは、
前記インタフェースデバイスへ転送する転送データの前記メモリにおける格納領域と、その格納領域の少なくとも一部が属する前記メモリにおける区画の所定位置と、の間の大きさに関する値であるオフセット値に基づいて、前記転送データのサイズを決定し、
その決定したサイズの転送データを前記インタフェースデバイスへ転送し、
前記インタフェースデバイスは、前記転送データをパケットに分割して前記プロセッサへ転送し、
前記プロセッサは、前記インタフェースデバイスから転送されたパケットを、前記区画の単位で前記メモリに格納する
ストレージシステム。
（表現２）
前記オフセット値は、前記転送データの前記メモリにおける格納領域の先頭と、その格納領域の先頭が属する前記メモリにおける区画の先頭と、の間の大きさに関する値である
表現１に記載のストレージシステム。
（表現３）
前記オフセット値は、前記インタフェースデバイスから前記記憶ドライブへ発行されるリードコマンドに含まれる
表現１又は２に記載のストレージシステム。
（表現４）
前記転送データのサイズは、前記転送データの取り得る最大サイズから前記オフセット値を減算したサイズである
表現１乃至３の何れか一つに記載のストレージシステム。
（表現５）
前記記憶ドライブは、前記インタフェースデバイスへ転送済みの転送データの量に基づいて、次の転送データに関するオフセット値を算出し、その算出したオフセット値に基づいて、次の転送データのサイズを決定する
表現１乃至４の何れか一つに記載のストレージシステム。
（表現６）
前記記憶ドライブは、
前記インタフェースデバイスへ転送待ちのデータの量が前記転送データの取り得る最大サイズ未満の場合、その転送待ちのデータを全て前記インタフェースデバイスへ転送し、
前記インタフェースデバイスへ転送待ちのデータの量が前記転送データの取り得る最大サイズ以上の場合、前記オフセット値が「０」か否かを判定し、
前記オフセット値が「０」である場合、その転送待ちのデータの内、前記転送データの取り得る最大サイズの分を、前記インタフェースデバイスへ転送し、
前記オフセット値が「０」でない場合、その転送待ちのデータの内、前記転送データの取り得る最大サイズから前記オフセット値を減算したサイズの分を、前記インタフェースデバイスへ転送する
表現１乃至５の何れか一つに記載のストレージシステム。
（表現７）
前記インタフェースデバイスと前記プロセッサとの間のデータ通信は、ＰＣＩ−Ｅｘｐｒｅｓｓの仕様に基づいており、
前記インタフェースデバイスと前記記憶ドライブとの間のデータ通信は、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）の仕様に基づいており、
前記転送データの取り得る最大サイズは、ＳＡＳの仕様に基づいて決まる値である
表現１乃至６の何れか一つに記載のストレージシステム。
（表現８）
プロセッサと、
メモリと、
記憶ドライブと、
前記プロセッサと前記記憶ドライブの間のデータ通信を仲介するインタフェースデバイスと
を備え、
前記メモリには、前記インタフェースデバイスが前記記憶ドライブに対して発行したリードコマンドと、当該リードコマンドによってリードされるデータのメモリ内における格納領域と、を対応付けるコマンド管理情報が格納されており、
前記インタフェースデバイスは、前記コマンド管理情報から、前記記憶ドライブに対して発行したリードコマンドの内の未完了のリードコマンドに関する情報が抽出されて生成された、実行中コマンド管理情報を保持し、
前記インタフェースデバイスは、前記実行中コマンド管理情報に基づいて、前記転送データの前記メモリ内における格納領域を特定する
ストレージシステム。
（表現９）
前記インタフェースデバイスは、前記記憶ドライブから前記転送データの転送のためのコネクション要求を受領したタイミングで、前記実行中コマンド管理情報を生成する
表現８に記載のストレージシステム。
（表現１０）
前記インタフェースデバイスは、前記コネクション要求の送信元の記憶ドライブに対して発行したリードコマンドの内の未完了のリードコマンドに関連する情報を、前記コマンド管理情報から抽出して、前記実行中コマンド管理情報を生成する
表現８又は９に記載のストレージシステム。
（表現１１）
前記インタフェースデバイスは、前記未完了のリードコマンドが複数存在する場合、最古に発行された未完了のリードコマンドに関連する情報を抽出して、前記実行中コマンド管理情報を生成する
表現１０に記載のストレージシステム。
（表現１２）
前記リードコマンドには、当該リードコマンドと他のリードコマンドを区別するための区別情報が含まれており、
前記コマンド管理情報は、前記リードコマンドと前記区別情報とを更に対応付け、
前記記憶ドライブは、前記転送データに係るリードコマンドの前記区別情報を含むコネクション要求を、前記インタフェースデバイスへ送信し、
前記インタフェースデバイスは、前記区別情報に対応付けられている未完了のリードコマンドに関連する情報を抽出して、前記実行中コマンド管理情報を生成する
表現８又は９に記載のストレージシステム。
（表現１３）
記憶ドライブは、
記憶領域からリードデータを取得し、
所定サイズの区画の単位でアクセスされるメモリであって、当該メモリにおける前記リードデータの格納領域と、その格納位置の少なくとも一部が属する前記メモリにおける区画の所定位置と、の間の大きさに関する値であるオフセット値に基づいて、転送データのサイズを決定し、
前記決定したサイズの転送データをインタフェースデバイスへ転送し、
前記インタフェースデバイスは、
前記記憶ドライブから前記転送データを受領すると、当該転送データをパケットに分割してプロセッサへ転送し、
前記プロセッサは、前記インタフェースデバイスから前記パケットを受領すると、当該パケットを、前記区画の単位で前記メモリに格納する
記憶制御方法。
（表現１４）
プロセッサと記憶ドライブの間のデータ通信を仲介するインタフェースデバイスは、
メモリに格納されているコマンド管理情報であって、前記インタフェースデバイスが前記記憶ドライブに対して発行したリードコマンドと、当該リードコマンドによってリードされるデータのメモリ内における格納領域と、を対応付けるコマンド管理情報から、前記記憶ドライブに対して発行したリードコマンドの内の未完了のリードコマンドに関する情報を抽出して実行中コマンド管理情報を生成し、その生成した実行中コマンド管理情報を保持し、
前記実行中コマンド管理情報に基づいて、前記転送データの前記メモリ内における格納領域を特定する
記憶制御方法。
【符号の説明】
【００９８】
１：ストレージシステム  ２：プロセッサ  ３：ドライブ  ４：ＳＡＳアダプタ  ５：メモリ
【図１】
2016181464.tif 000003
【図２】
2016181464.tif 000004
【図３】
2016181464.tif 000005
【図４】
2016181464.tif 000006
【図５】
2016181464.tif 000007
【図６】
2016181464.tif 000008
【図７】
2016181464.tif 000009
【図８】
2016181464.tif 000010
【図９】
2016181464.tif 000011
【図１０】
2016181464.tif 000012
【図１１】
2016181464.tif 000013
【図１２】
2016181464.tif 000014
【図１３】
2016181464.tif 000015
【図１４】
2016181464.tif 000016
【国際調査報告】
2016181464.tif 000017
2016181464.tif 000018