(57)【特許請求の範囲】
【請求項１】
ストレージへのデータの書き込みまたはストレージからのデータの読み出しを、ストレージへのアクセスの指示に従って行うコントローラに接続され、
前記ストレージがＲＡＩＤ５またはＲＡＩＤ６に構成され、
当該ストレージへのデータの書き込みを指示する一連のコマンド及びデータ、または前記ストレージからのデータの読み出しを指示する一連のコマンドを、複数のチャネルに振り分けて得られた指示を、当該複数のチャネルのそれぞれを介して受け入れる受入手段と、
前記受入手段が前記複数のチャネルのそれぞれを介して受け入れた指示に基づいて、前記一連のコマンド及びデータまたは一連のコマンドを再構成する再構成手段と、
前記再構成手段により再構成された前記一連のコマンド及びデータまたは一連のコマンドを、前記コントローラへ出力する手段と、を有するストレージ制御装置。
【請求項２】
請求項１記載のストレージ制御装置であって、
前記再構成手段は、前記複数のチャネルに振り分けて得られた指示を、所定の順序に並び替え統合することにより、前記一連のコマンド及びデータまたは一連のコマンドを再構成するストレージ制御装置。
【請求項３】
請求項１または２に記載のストレージ制御装置であって、
ホストから前記一連のコマンド及びデータまたは一連のコマンドを受け入れて前記複数のチャネルに振り分けて得られる指示を生成する分割処理手段をさらに有するストレージ制御装置。
【請求項４】
請求項１から３のいずれか一項に記載のストレージ制御装置であって、
前記コントローラは、ＲＡＩＤ５またはＲＡＩＤ６に構成した複数のディスクドライブを有するストレージを制御するＲＡＩＤコントローラであるストレージ制御装置。
【請求項５】
請求項４記載のストレージ制御装置であって、
書き込みデータを格納する記憶手段をさらに有し、
前記再構成手段は、書き込み指示である前記一連のコマンド及びデータを複数のチャネルに振り分けて得られた指示から、前記一連のコマンド及びデータを再構成する際に、前記複数のチャネルに振り分けて得られた指示に含まれる書き込みデータに基づいて、前記一連のコマンド及びデータに含まれる書き込みデータを再構成して前記記憶手段に格納し、
前記コントローラは、前記記憶手段からデータを読み出してストレージへの書き込みを実行するストレージ制御装置。
【請求項６】
請求項１から５のいずれか一項に記載のストレージ制御装置であって、
前記再構成手段は、前記一連のコマンド及びデータを再構成した後の所定の時点で、前記複数のチャネルに対して前記複数のチャネルに振り分けて得られた指示に係る処理の終了を指示するストレージ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを格納するストレージ制御装置に関する。
【背景技術】
【０００２】
ホストに対して比較的高速なインタフェースであるＵＳＢ（Universal Serial Bus）3.1経由で接続されるシステムであって、これより比較的低速な複数のＳＡＴＡ（Serial ATA）インタフェースを介してそれぞれ接続される複数のＳＳＤ（Solid State Drive）を用いてＲＡＩＤ０を構成し、ホストから格納するよう要求されたデータをブロックに分割し、二つの独立したＳＳＤに対してストライピング処理を行って書き込むことで、内部的には比較的低速なインタフェースを用いつつ、比較的高速なインタフェースの動作速度を活かすことのできるシステムが考案されている（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第2014/0351509号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来のシステムでは、冗長性の確保のために各ＳＳＤをＲＡＩＤ５，６に構成する場合など、さらにシステムを拡張しようとすると、個々のＳＳＤの代わりにそれぞれＲＡＩＤ５，６に構成したストレージが必要となり、装置規模が過度に増大してしまう。このように従来のシステムでは、冗長性の確保などのためにシステムを拡張しようとするときに、装置規模が過度に増大する。
【０００５】
本発明は上記実情に鑑みて為されたもので、動作速度を維持しつつ、システム拡張時の装置規模の増大を抑制できるストレージ制御装置を提供することを、その目的の一つとする。
【課題を解決するための手段】
【０００６】
上記従来例の問題点を解決する本発明は、ストレージ制御装置であって、ストレージへのデータの書き込みまたはストレージからのデータの読み出しを、ストレージへのアクセスの指示に従って行うコントローラに接続され、前記ストレージへのデータの書き込みまたは前記ストレージからのデータの読み出しを指示する第１のアクセス指示に基づいて生成された複数系列への第２のアクセス指示を、複数のチャネルを介して受け入れる受入手段と、前記受入手段が受け入れた前記第２のアクセス指示に基づいて、前記第１のアクセス指示を再構成する再構成手段と、前記再構成手段により再構成された第１のアクセス指示を、前記コントローラへ出力する手段と、を有することとしたものである。
【０００７】
このように複数系列に分割されたアクセス指示に基づき、ホストから入力されたアクセス指示を再構成してから処理することで、動作速度を維持しつつ、装置規模の増大を抑制できる。
【０００８】
ここで再構成手段は、前記第２のアクセス指示を、所定の順序に並び替え統合することにより、前記第１のアクセス指示を再構成することとしてもよい。またホストから前記第１のアクセス指示を受け入れて前記第２のアクセス指示を生成する分割処理手段をさらに有してもよい。
【０００９】
さらに、前記ストレージは、ＲＡＩＤに構成した複数のディスクドライブを有し、前記コントローラは、当該ＲＡＩＤに構成した複数のディスクドライブを有するストレージを制御するＲＡＩＤコントローラであることとしてもよい。
【００１０】
この場合、書き込みデータを格納する記憶手段をさらに有し、前記再構成手段は、書き込み指示である前記第２のアクセス指示から前記第１のアクセス指示を再構成する際に、前記第２のアクセス指示に含まれる書き込みデータに基づいて、前記第１のアクセス指示に含まれる書き込みデータを再構成して前記記憶手段に格納し、前記コントローラは、前記記憶手段からデータを読み出してストレージへの書き込みを実行することとしてもよい。
【００１１】
また再構成手段は、前記第１のアクセス指示を再構成した後の所定の時点で、前記複数のチャネルに対して前記第２のアクセス指示に係る処理の終了を指示することとしてもよい。
【発明の効果】
【００１２】
本発明によると、動作速度を維持しつつ、装置規模の増大を抑制できる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態に係るストレージ制御装置の構成例を表すブロック図である。
【図２】本発明の実施の形態に係るストレージ制御装置の第２の制御部の例を表す機能ブロック図である。
【図３】本発明の実施の形態に係るストレージ制御装置のアクセス指示の受入動作の例を表すフローチャート図である。
【図４】本発明の実施の形態に係るストレージ制御装置のアクセス指示の再構成、アクセス処理の例を表すフローチャート図である。
【図５】本発明の実施の形態に係るストレージ制御装置の書き込み動作の例を表すタイミングチャート図である。
【図６】本発明の実施の形態に係るストレージ制御装置の別の構成例を表すブロック図である。
【発明を実施するための形態】
【００１４】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係るストレージ制御装置１は、図１に例示するように、ホスト２に接続されて用いられ、第１の制御部１１と、第１のインタフェース部１２と、第２のインタフェース部１３と、第２の制御部１４と、記憶部１５と、第３のインタフェース部１６と、ストレージシステム１７とを備えている。
【００１５】
第１の制御部１１は、マイクロプロセッサ等のプログラム制御デバイスであり、プログラムを保持したメモリデバイスを有し、当該メモリデバイスに保持されたプログラムに従って動作する。本実施の形態においてこの第１の制御部１１は、第１のインタフェース部１２を介してホスト２側から受け入れたコマンドやデータを、第２のインタフェース部１３を介して出力する。また、この第１の制御部１１は、第２のインタフェース部１３を介して受け入れたデータを、第１のインタフェース部１２を介してホスト２へ送出する。この第１の制御部１１の詳しい動作は後に述べる。
【００１６】
第１のインタフェース部１２は、ホスト２と、ストレージ制御装置１とを接続するインタフェースであり、具体的にはＵＳＢ3.1インタフェース等である。第２のインタフェース部１３は、複数のインタフェース（チャネル）を有し、各チャネルを介して第１の制御部１１と第２の制御部１４との間でのコマンドやデータの授受を行う。具体的にこの第２のインタフェース部１３が有する各チャネルは、第１のインタフェース部１２よりも比較的低速な接続機構であり、チャネルは例えば、ＳＡＴＡ３等のインタフェースである。すなわち、ここでの例では、ＵＳＢ3.1インタフェースを介して行われるデータの伝送速度は最大１０Ｇｂｐｓであり、第２のインタフェース部１３が有する各チャネルは、これより低速な６Ｇｂｐｓの伝送速度を有するＳＡＴＡ３を用いている。
【００１７】
ここで第１の制御部１１の動作について説明する。本実施の形態の第１の制御部１１は、比較的高速な第１のインタフェース部１２を介して受け入れたコマンドやデータ（第１のアクセス指示）を、比較的低速な第２のインタフェース部１３が有しているＮ個のチャネル（Ｎは２以上の整数）に振り分けて出力する。
【００１８】
具体的に、この第１の制御部１１は、ＲＡＩＤ０（いわゆるストライピング）コントローラとして動作し、ホスト２から受け入れた一連のコマンド及びデータ（アクセス指示）を、第２のインタフェース部１３が有しているＮ個のチャネル（Ｎは２以上の整数）に振り分けて、複数系列のアクセス指示（第２のアクセス指示）として出力する。
【００１９】
例えば、Ｎ＝２であり、第２のインタフェース部１３がチャネル０（ＣＨ０）と、チャネル１（ＣＨ１）とを有しているときには、この第１の制御部１１は次のように動作する。
【００２０】
以下では説明のため、第１の制御部１１は、ホスト２からＲＡＩＤ０の論理ボリュームのブロック０からブロック１５までにデータを書き込むべき旨のコマンドと、当該コマンドにより書き込まれるデータ（６４ＫＢ分のデータとする）とを受け入れたものとする。このとき第１の制御部１１は、このうちデータ部分をブロックのサイズ（ここでは例えば４ＫＢ）ずつのデータブロックに分割する。ここでの例では、６４ＫＢ分のデータを４ＫＢずつに分割するので、１６個のデータブロックが得られる。
【００２１】
第１の制御部１１は、得られた１６個のデータブロック（ＢＬＫ０〜ＢＬＫ１５とする）を、２つの系列にストライピングして並べ替え、ＢＬＫ０，ＢＬＫ２，ＢＬＫ４…，ＢＬＫ１４のデータブロックを含む第１の系列（３２ＫＢ分）と、ＢＬＫ１，ＢＬＫ３，…，ＢＬＫ１５のデータブロックを含む第２の系列（３２ＫＢ分）とを得る。そして第１の制御部１１は、第１の系列のデータブロックを論理ボリュームへ書き込む第１系列の指示（先頭ＬＢＡと、それに続く３２ＫＢ分領域にデータを書き込む指示とを含む）と、第２の系列のデータブロックを論理ボリュームへ書き込む第２系列の指示（先頭ＬＢＡと、それに続く３２ＫＢ分領域にデータを書き込む指示とを含む）とを生成する。
【００２２】
そして第１の制御部１１は、ホストから入力されたＬＢＡ（ＨＬＢＡ：Host Logical Block Address）を分割する数で除した余りに従って、最初のデータブロックを出力するチャネルを決定する。上述の例ではＨＬＢＡを「８」で除した商が奇数であるか偶数であるか（１６で除した余りが０か否か）により最初のデータブロックを出力するチャネルを決定する。具体的に以下の例では、ＨＬＢＡを「８」で除した商が偶数であるときに最初のデータブロックを出力するチャネルをチャネル０（ＣＨ０）とし、ＨＬＢＡを「８」で除した商が奇数であるときに最初のデータブロックを出力するチャネルをチャネル１（ＣＨ１）とする。
【００２３】
第１の制御部１１は、第１系列の指示に続き、第１の系列のデータブロックのうち、最初のデータブロック（ブロック０へ書き込まれるべきデータブロックＢＬＫ０）を上述の方法で定めたチャネル（以下の例ではＣＨ０とする）を介して出力する。
【００２４】
次に第１の制御部１１は、第２系列の指示に続き、第２の系列のデータブロックのうち、最初のデータブロック（ブロック１へ書き込まれるべきデータブロックＢＬＫ１）を次のチャネル（ここでは最初のデータブロックをＣＨ０を介して出力しているのでＣＨ１となる）を介して出力する。以下、第１の制御部１１は、ＣＨ０及びＣＨ１に対して交互に、データブロックＢＬＫ２，３…，１５を出力していく。
【００２５】
これにより、ブロック０，２，４…，１４に格納されるべき第１の系列のデータブロックＢＬＫ０，ＢＬＫ２，ＢＬＫ４…，ＢＬＫ１４、及びそれらを書き込むべき旨の第１系列の指示は、第２のインタフェース部１３のＣＨ０を介して出力されることとなり、ブロック１，３，５，…，１５に格納されるべきデータブロックＢＬＫ１，ＢＬＫ３，…，ＢＬＫ１５、及びそれらを書き込むべき旨の第２系列の指示は、第２のインタフェース部１３のＣＨ１を介して出力されることとなる。
【００２６】
またこの第１の制御部１１は、ホスト２からＲＡＩＤ０の論理ボリュームのＬＢＡ及びＬＢＮを指定したデータを読み出すべき旨のコマンドを受け入れると、当該ホスト２から受け入れたコマンドを第２のインタフェース部１３が有しているＮ個のチャネル（Ｎは２以上の整数）に振り分けて、複数系列のアクセス指示として出力する。
【００２７】
例えば、先に述べた例と同様、Ｎ＝２であり、第２のインタフェース部１３がチャネル０（ＣＨ０）と、チャネル１（ＣＨ１）とを有しているときには、この読み出しのコマンドを受けた第１の制御部１１は次のように動作する。
【００２８】
以下では、第１の制御部１１が、ホスト２からＲＡＩＤ０の論理ボリュームのブロック０からブロック１５（各ブロックは４ＫＢとする）までに格納されたデータを読み出すべき旨のコマンドを受け入れたものとする。
【００２９】
第１の制御部１１は、上記１６個のデータブロック（ＢＬＫ０〜ＢＬＫ１５）を、２つの系列にストライピングして並べ替えて書き込み処理を行っているので、対応するデータブロックの先頭ＬＢＡと、それに続く３２ＫＢ分領域からデータを読み出す指示を生成して、各チャネルを介して出力する。
【００３０】
これにより、ブロック０，２，４…，１４に格納されているデータブロックＢＬＫ０，ＢＬＫ２，ＢＬＫ４…，ＢＬＫ１４を読み出すべき旨の第１系列の指示が、第２のインタフェース部１３のＣＨ０を介して出力されることとなり、ブロック１，３，５，…，１５に格納されているデータブロックＢＬＫ１，ＢＬＫ３，…，ＢＬＫ１５を読み出すべき旨の第２系列の指示は、第２のインタフェース部１３のＣＨ１を介して出力されることとなる。
【００３１】
また、第１の制御部１１は、第２のインタフェース部１３のＣＨ０，ＣＨ１を介して入力される、各ブロックのデータ（データブロック）を受け入れると、順番に（ここでは交互に）配列して連接し、ホスト２へ出力する。
【００３２】
この第１の制御部１１の処理は、ＲＡＩＤ０コントローラの処理として広く知られたものと同じであるので、ここでのこれ以上の詳しい説明は省略する。
【００３３】
さらにこの第１の制御部１１は、チャネルごとに処理終了の要求を受信すると、当該処理終了の要求が行われたチャネルに係る処理を終了する。
【００３４】
次に、第２の制御部１４について説明する。第２の制御部１４は、マイクロプロセッサ等のプログラム制御デバイスであり、プログラムを保持したメモリデバイスを有し、当該メモリデバイスに保持されたプログラムに従って動作する。本実施の形態においてこの第２の制御部１４は、第２のインタフェース部１３の各チャネルを介してそれぞれ一連のアクセス指示を受け入れる。第２の制御部１４は、当該受け入れた複数系列のアクセス指示に基づいて、論理ボリュームへのアクセス指示を再構成し、第３のインタフェース部１６を介して出力する。この再構成の処理については後に詳しく述べる。
【００３５】
またこの第２の制御部１４は、論理ボリュームから読み出されたデータブロックを、当該データブロックを読み出すコマンドが入力されたチャネルを介して出力する。
【００３６】
記憶部１５は、再構成されたデータ、または読み出されたデータを保持する、キャッシュとして機能し、第２の制御部１４とストレージシステム１７とによって読み出し、または書き込みされる。第３のインタフェース部１６は、第２の制御部１４とストレージシステム１７とに接続され、第２の制御部１４が出力するコマンドをストレージシステム１７へ送出する。
【００３７】
本実施の形態のある例では、この記憶部１５は、ＦＩＦＯ（First In First Out）メモリと、マルチプレクサと、本体メモリとを有しており、逐次的に入力されるデータブロックをＦＩＦＯに格納し、またＦＩＦＯからデータブロックを順番に読み出して、マルチプレクサにより本体メモリ内の格納先を選択しつつ、当該読み出したデータブロックを本体メモリ内の選択された格納先に格納していく。
【００３８】
ストレージシステム１７は、コントローラ部１７１と、ストレージとしてのディスクドライブ１７２とを有している。ここでコントローラ部１７１は、例えばＲＡＩＤコントローラであり、第３のインタフェース部１６を介して受け入れたコマンドに従って、記憶部１５に格納されたデータを読み出してＲＡＩＤに構成したディスクドライブ１７２に対して書き込み、または当該ディスクドライブ１７２からデータを読み出して、記憶部１５に格納する。
【００３９】
ディスクドライブ１７２は、ＳＳＤまたはハードディスクドライブ（ＨＤＤ）等であり、複数設けられて、ＲＡＩＤに構成されている。
【００４０】
ホスト２は、ストレージ制御装置１のホストとして機能するパーソナルコンピュータ（ＰＣ）等であり、ストレージ制御装置１に対して第１のインタフェース部１２を介して接続され、データの書き込みコマンドや、当該コマンドにより書き込まれるべきデータを送出する。またこのホスト２は、ストレージ制御装置１に対してデータを読み出すコマンドを第１のインタフェース部１２を介して送出し、ストレージ制御装置１から読み出されたデータを、第１のインタフェース部１２を介して受け入れる。
【００４１】
次に、第２の制御部１４の動作について説明する。この第２の制御部１４は、機能的には図２に例示するように、受入部１４１と、同期処理部１４２と、出力部１４４とを備えている。この機能的構成は、第２の制御部１４が、メモリ（不図示）内に格納したプログラムを実行することにより実現される。本実施の形態において、このプログラムは、シングルプロセスとして（マルチタスク型のオペレーティングシステム下で動作する場合であっても、処理中にプロセスコンテクストの切り替えが生じることなしに、単一のプロセスとして）動作する。
【００４２】
受入部１４１は、Ｎチャネルに分割されたコマンド（Ｎ系列のアクセス指示）を、第２のインタフェース部１３の各チャネルを介して受け入れ、コマンドは同期処理部１４２に出力し、データブロックは記憶部１５に出力する。この受入部１４１は、具体的には図３に例示するように、第２のインタフェース部１３のいずれかのチャネルからコマンドが入力されるまで待機し（Ｓ１１）、コマンドが入力されたときには、当該コマンドがデータの書き込み、または読み出しのコマンドであるか否か判断する（Ｓ１２）。
【００４３】
ここで当該コマンドがデータの書き込み、または読み出しのコマンドである場合（Ｓ１２：Yes）は、当該コマンドを同期処理部１４２に出力し、また第２のインタフェース部１３の各チャネルを介して受け入れたデータブロックはＤＭＡ処理部１４３に出力して（Ｓ１３）、処理Ｓ１１に戻る。
【００４４】
また処理Ｓ１１において入力されたコマンドがデータの書き込み、または読み出しのコマンドでなければ（Ｓ１２：No）、受入部１４１は、当該コマンドをそのままストレージシステム１７に出力し（Ｓ１４）、処理Ｓ１１に戻る。
【００４５】
同期処理部１４２は、コマンドが受入部１４１から入力されると、図４に示す処理を開始し、単一の論理ボリュームに対するコマンドを再構成する。ここでチャネルごとに入力される、データの読み書きに係るコマンドは、データの書き込み先またはデータの読み出し元のアドレス（論理ブロックアドレス：ＬＢＡ）と、書き込み、または読み出すデータのサイズ（論理ブロック数：ＬＢＮ）とを含む。
【００４６】
同期処理部１４２は、最初にアクティブとなる（最初にコマンドが入力される）チャネルを特定する（Ｓ２１）。具体的にこの処理では、各チャネルがアクティブであるか否かを表すＮ個のフラグＦｌｇ0〜ＦｌｇN-1を「０」にリセットしておき、次いで、チャネル０からチャネルＮ−１まで順番に、Ｆｌｇi（ｉは調べようとしているチャネルｉを特定する番号）が「０」である場合に、チャネルｉがアクティブであるか否かを調べ、アクティブであればチャネルｉを介して入力されているコマンドのＬＢＡとＬＢＮとを取得して対応するフラグＦｌｇiを「１」にセットする処理を行う。その後、再度、チャネル０からチャネルＮ−１まで順番に、Ｆｌｇi（ｉは調べようとしているチャネルｉを特定する番号）が「０」である場合に、チャネルｉがアクティブであるか否かを調べ、アクティブであればチャネルｉを介して入力されているコマンドのＬＢＡとＬＢＮとを取得して対応するフラグＦｌｇiを「１」にセットする処理を行う。以下、アクティブであるチャネルを、アクティブチャネルと呼ぶ。
【００４７】
第１の制御部１２により複数系列に分割されたコマンドの発行は逐次的であり、コマンド発行にはスキュー（時間差）が生じているため、このようにすることで、最初に起動されるチャネル（ストライピングされた、最初のデータブロックが出力されるチャネル（ホストから指定されるＬＢＡに依存する）がどのチャネルであっても、すべてのコマンドを受け取ることが可能となる。
【００４８】
なお、この同期処理部１４２の処理においてどのチャネルから順にコマンドが入力されるかが不明であるために、所定の順に各チャネルからコマンドが入力されたか否かを調べた後、再度各チャネルからコマンドが入力されたか否かを調べることとしているものであるが、この処理は必ずしも必要なものではなく、一度所定の順に各チャネルからコマンドが入力されたか否かを調べれば十分である場合は、Ｆｌｇi（ｉは調べようとしているチャネルｉを特定する番号）が「０」である場合に、チャネルｉがアクティブであるか否かを調べ、アクティブであればチャネルｉを介して入力されているコマンドのＬＢＡとＬＢＮとを取得して対応するフラグＦｌｇiを「１」にセットする処理を一度だけ行う。
【００４９】
同期処理部１４２は、取得した複数系列のコマンドに含まれていたＬＢＡのうち、最先（最小）のＬＢＡを取り出し、これを用いてホスト２から入力されたＬＢＡ（ＨＬＢＡ）を再構成してコマンド再構成後のＬＢＡとする。また、取得したＬＢＮを累算して、ホスト２から入力されたＬＢＮを再構成して再構成後のＬＢＮとする（再構成処理：Ｓ２２）。そして同期処理部１４２は、ここで再構成したコマンドをストレージシステム１７に出力する（Ｓ２３）。
【００５０】
また同期処理部１４２は、記憶部１５内にデータを格納する領域を確保し、所定のサイズ（例えば第１のインタフェース部１２を介して入力されるデータ長（再構成後のＬＢＮに相当するデータ長））の記憶領域を確保する（Ｓ２４）。なお、既に記憶領域が確保されている場合は、処理Ｓ２４は実行しない。また、同期処理部１４２は、ストレージシステム１７のコントローラ部１７１に対してデータを格納する領域の確保を指示し、領域の確保を行ってもよい。
【００５１】
そして同期処理部１４２は、入力されたコマンドがデータの書き込みコマンドであるか否かを調べ（Ｓ２５）、書き込みコマンドである場合（Ｓ２５：Yes）には、当該記憶領域を特定する情報（記憶領域の先頭アドレスでよい）を、全てのアクティブチャネルのＤＭＡ処理部１４３に出力し、記憶部１５へのデータの格納を指示する(ＤＭＡ書込指示：Ｓ２６)。同期処理部１４２はＤＭＡ処理部１４３の制御により、書き込みの対象となるデータが記憶部１５に格納されるまで待機する（Ｓ２７）。
【００５２】
一方、処理Ｓ２７において、すべてのデータの準備が完了すると、同期処理部１４２は書き込みの要求を、ストレージシステム１７に対して出力する（Ｓ２８）。
【００５３】
さらに同期処理部１４２は、処理Ｓ２７以降の所定の時点で、処理終了の要求を、チャネルごとに第１の制御部１１に対して出力する。
【００５４】
また、処理Ｓ２５において入力されたコマンドがデータの読み出しコマンドであった場合（Ｓ２５：No）、同期処理部１４２は、処理Ｓ２３にて出力したコマンドにより、ストレージシステム１７が、記憶部１５内に確保された記憶領域にデータを格納するまで待機する（Ｓ３０）。
【００５５】
そして、記憶部１５内にデータが格納された状態となると、ＤＭＡ処理部１４３に対して、当該記憶部１５内のデータを、第２のインタフェース部１３の各チャネルを介して出力するよう指示する（ＤＭＡ読出指示：Ｓ３１）。
【００５６】
ＤＭＡ処理部１４３は、同期処理部１４２からのＤＭＡ書込指示またはＤＭＡ読出指示を受けて動作し、ＤＭＡ書込指示があったときには、各チャネルのＤＭＡ処理部１４３が動作することで、データブロックが並べ替られ、シリアル化して統合されて、一連のデータとして記憶部１５に書き込まれる。またＤＭＡ読み出し指示があったときには、各チャネルのＤＭＡ処理部１４３は記憶部１５からデータを読み出す。具体的にＤＭＡ書込指示があったときには、このＤＭＡ処理部１４３は、同期処理部１４２から入力された情報で特定される記憶領域に、次のようにしてデータブロックを書き込む。
【００５７】
以下の例では、説明を簡単にするために、ホストから入力されるＬＢＡが、Ｂ×Ｎ（ここでＮはチャネルの数、Ｂはデータブロックのサイズ）の倍数であり、かつ、ＬＢＮもＢ×Ｎの倍数であるとして説明するが、実際には、ホストから入力されるＬＢＡ，ＬＢＮは、Ｂ×Ｎの倍数であるとは限らないため、端数処理を実行することとなる。この端数処理は広く知られたものであるので、ここではその詳細な説明を省略する。
【００５８】
すなわちこのＤＭＡ処理部１４３は、ＤＭＡ書込指示を受け入れると、受入部１４１が第１のチャネル（最初のデータブロックを受け入れたチャネル、最先のＬＢＡに書き込まれるべきデータブロックを受け入れたチャネル）を介してｉ番目（ｉ＝１，２…）に受け入れたデータブロックを、同期処理部１４２が確保した記憶領域の先頭アドレスをＡ０として、Ａ０＋Ｎ×（ｉ−１）×Ｂから、Ａ０＋Ｎ×（ｉ−１）×Ｂ＋（Ｂ−１）までの領域に書き込む。ここでＮはチャネルの数、Ｂはデータブロックのサイズである。なお、本実施の形態において、受入部１４１が受け入れる各コマンドにより書き込みまたは読み出されるデータブロックのサイズは一定である（従って各コマンドに含まれるＬＢＮの値は一定となっている）ものとする。
【００５９】
また、ＤＭＡ処理部１４３は、受入部１４１が第ｊチャネル（ｊ番目のデータブロックを受け入れたチャネル）を介してｉ番目（ｉ＝１，２…）に受け入れたデータブロックを、同期処理部１４２が確保した記憶領域の先頭アドレスをＡ０として、Ａ０＋Ｎ×（ｉ−１）×Ｂ＋（ｊ−１）×Ｂから、Ａ０＋Ｎ×（ｉ−１）×Ｂ＋ｊ×Ｂ−１までの領域に書き込む。
【００６０】
これにより例えばＮ＝２の場合に、第２のインタフェース部１３のチャネル０（ＣＨ０）から、先頭から０，２，４，６番目のデータブロックが入力され、第２のインタフェース部１３のチャネル１（ＣＨ１）から、先頭から１，３，５，７番目のデータブロックが入力されているときには、ＤＭＡ処理部１４３の動作により、同期処理部１４２が確保した記憶部１５内の領域に、当該領域の先頭から、０，１，２，３…，７番目のデータブロックが配列されて、一連のデータとして格納された状態となる。
【００６１】
またこのＤＭＡ処理部１４３は、ＤＭＡ読出指示を受け入れると、ストレージシステム１７が記憶部１５に格納したデータを、予め定めたデータブロックのサイズ（第１の制御部１１が各チャネルを介して出力する各コマンドにより読み出されるべきデータブロックのサイズ）に分割し、対応するチャネルを介して、分割して得たデータブロックを先頭から順次送出する。
【００６２】
具体的にこのＤＭＡ処理部１４３は、最初のデータブロックを出力するべき第２のインタフェース部１３のチャネルを、同期処理部１４２が再構成したホストＬＢＡ（ＨＬＢＡ）により決定する。この決定の方法は、第１の制御部１１における方法と同じであり、ここでの例（Ｎ＝２の例）では、ＨＬＢＡを「８」で除した商が偶数であるときに最初のデータブロックを出力するチャネルをチャネル０（ＣＨ０）とし、ＨＬＢＡを「８」で除した商が奇数であるときに最初のデータブロックを出力するチャネルをチャネル１（ＣＨ１）とする。以下の説明ではこのチャネルをチャネルｊ0とする。
【００６３】
ＤＭＡ処理部１４３は、記憶部１５内で同期処理部１４２が確保した記憶領域の先頭アドレスをＡ０として、Ａ０＋Ｎ×（ｉ−１）×Ｂ＋（ｊ−１）×Ｂから、Ａ０＋Ｎ×（ｉ−１）×Ｂ＋ｊ×Ｂ−１（ｉ＝１，２，…）までの領域に格納されているデータを連接して、ｊ番目（１＜ｊ≦Ｎ）のデータブロックを送出するべきｋ番目のチャネルＣＨｋ−１を介して出力する。ここでｋは、ｋ＝（ｊ0＋ｊ−１） ｍｏｄ Ｎ＋１（ここでｘ ｍｏｄ ｙは、ｘをｙで除した余りを意味する）である。
【００６４】
これにより、第２のインタフェース部１３のチャネル０（ＣＨ０）を介して受信したコマンドにより読み出されたデータブロックは、第２のインタフェース部１３のＣＨ０を介して送出され、第２のインタフェース部１３のチャネル１（ＣＨ１）を介して受信したコマンドにより読み出されたデータブロックは、第２のインタフェース部１３のＣＨ１を介して送出されることとなる。出力部１４４は、すべてのデータブロックを送出すると、第１の制御部１１に対して終了処理を要求する。
【００６５】
［動作］
本実施の形態のストレージ制御装置１は、以上の構成を備えており、次のように動作する。以下では、まず、本実施の形態のストレージ制御装置１のデータ書き込み時の動作を、図５のタイミングチャート図を参照しつつ説明する。
【００６６】
ホスト２は、所定のサイズ（例えば１２８ＫＢ）単位以下のデータを、書き込み先の論理ボリューム内の論理ブロックアドレス（ＨＬＢＡ）と、データ長（ＬＢＮ）とを含んだ書き込みコマンドとともに、第１のインタフェース部１２を介して送出する。
【００６７】
第１の制御部１１は、ホスト２から受け入れたデータをさらに所定のサイズ（例えば４ＫＢ）のデータブロックＫ１，Ｋ２…に区分する。第１の制御部１１は、書き込み先の論理ボリュームの論理ブロックアドレス（ＨＬＢＡ）に基づき、第２のインタフェース部１３のどのチャネルからアクセス指示を送出するかを決定する。
【００６８】
例えば、Ｎ＝２であり、第２のインタフェース部１３がチャネル０（ＣＨ０）と、チャネル１（ＣＨ１）とを有しているものとし、ホスト２からデータを書き込むべき旨のコマンドとともに６４ＫＢ分のデータを受け入れたものとする。このとき第１の制御部１１は、このデータを所定のブロックのサイズ（４ＫＢとする）ずつのデータブロックに分割し、１６個のデータブロックを得る。
【００６９】
第１の制御部１１は、得られた１６個のデータブロック（ＢＬＫ０〜ＢＬＫ１５とする）を、２つの系列にストライピングして並べ替え、ＢＬＫ０，ＢＬＫ２，ＢＬＫ４…，ＢＬＫ１４のデータブロックを含む第１の系列（３２ＫＢ分）と、ＢＬＫ１，ＢＬＫ３，…，ＢＬＫ１５のデータブロックを含む第２の系列（３２ＫＢ分）とを得る。そして第１の制御部１１は、第１の系列のデータブロックを論理ボリュームへ書き込む第１系列の指示（先頭ＬＢＡと、それに続く３２ＫＢ分領域にデータを書き込む指示とを含む）と、第２の系列のデータブロックを論理ボリュームへ書き込む第２系列の指示（先頭ＬＢＡと、それに続く３２ＫＢ分領域にデータを書き込む指示とを含む）とを生成する。
【００７０】
第１の制御部１１は、ホスト２から入力されたＨＬＢＡを「８」で除して、その商が奇数であるか偶数であるか（１６で除した余りが０か否か）により最初のデータブロックを出力するチャネルを決定する。すなわちＨＬＢＡを「８」で除した商が偶数であるときに最初のデータブロックを出力するチャネルをチャネル０（ＣＨ０）とし、ＨＬＢＡを「８」で除した商が奇数であるときに最初のデータブロックを出力するチャネルをチャネル１（ＣＨ１）とする。
【００７１】
ここでの例では、最初のデータブロックを出力するチャネルがチャネル０であるとして決定されたものとする。
【００７２】
第１の制御部１１は、ホスト２からＲＡＩＤ０の論理ボリュームのＬＢＡ及びＬＢＮを指定したデータを書き込むべき旨のコマンドを受け入れると、当該ホスト２から受け入れたコマンドを第２のインタフェース部１３が有しているＮ個のチャネル（Ｎは２以上の整数）に振り分けて、複数系列のアクセス指示として出力する。
【００７３】
第２の制御部１４は、第２のインタフェース部１３が備えるＣＨ０，ＣＨ１の各チャネルを介して分割されたコマンド（２系列のコマンド）をまず受け入れる。そして、この２系列の各コマンドに含まれていたＬＢＡのうち、最先（最小）のＬＢＡを取り出し、これを用いてホスト２から入力されたＬＢＡ（ＨＬＢＡ）を再構成してコマンド再構成後のＬＢＡとする。そして第２の制御部１４は、再構成して得たＬＢＡ及びＬＢＮを含むデータの書き込みコマンドをストレージシステム１７に出力する。
【００７４】
同期処理部１４２は、記憶部１５内にデータを格納する領域を確保するようストレージシステム１７のコントローラ部１７１に対して指示し、コントローラ部１７１に、所定のサイズ（例えば第１のインタフェース部１２を介して入力されるデータ長（再構成後のＬＢＮ））の記憶領域を記憶部１５内に確保させる。
【００７５】
同期処理部１４２は、この記憶部１５に確保した記憶領域へのデータの格納指示（ＤＭＡ書込指示）を、全てのアクティブチャネルのＤＭＡ処理部１４３に出力する。同期処理部１４２はＤＭＡ処理部１４３の制御により、書き込みの対象となるデータが記憶部１５に格納されるまで待機する。
【００７６】
第２の制御部１４は、ＤＭＡ処理部としての動作を開始し（ＤＭＡ処理開始）、ＣＨ０，ＣＨ１を介して交互に入力されるデータブロックを、記憶部１５内に格納していく（Ｓ４１）。これにより記憶部１５内には、データブロックＢＬＫ０，ＢＬＫ１，ＢＬＫ２…がこの順に連接されたデータ（ホスト２が送出したデータ）が格納された状態となる。
【００７７】
この例では、ＤＭＡ処理開始後に第１の制御部１１は、ＣＨ０を介してのデータの送出を準備し（タイミングＴ０）、準備ができたところで、対応するデータブロックＢＬＫ０とを送出する。第１の制御部１１は、このＣＨ０を介したデータブロックＢＬＫ０の送出中に、ＣＨ１を介してのデータの送出を準備し（タイミングＴ１）、ＣＨ０を介したデータブロックＢＬＫ０の送出が完了したタイミング（Ｔ２）からＣＨ１を介して次のデータブロックＢＬＫ１を送出する。
【００７８】
以下、ＣＨ０を介してデータブロックＢＬＫ２を送出し、ＣＨ１を介してデータブロックＢＬＫ３を送出し…というように、ＣＨ０，ＣＨ１を交互に用いつつ、データブロックを２つの系列に分けて送出する。
【００７９】
また第１の制御部１１は、最初のデータブロックを出力するチャネルがチャネル１であるとして決定したときには、タイミングＴ０にてＣＨ１を介してのデータの送出を準備し、準備ができたところでＣＨ１を介して、対応するデータブロックＢＬＫ０とを送出する。第１の制御部１１は、このＣＨ１を介したデータブロックＢＬＫ０の送出中に、ＣＨ０を介してのデータの送出を準備し（タイミングＴ１）、ＣＨ１を介したデータブロックＢＬＫ０の送出が完了したタイミング（Ｔ２）からＣＨ０を介して次のデータブロックＢＬＫ１とそれに対応する書き込みコマンドとを送出する。
【００８０】
以下、ＣＨ１を介してデータブロックＢＬＫ２を送出し、ＣＨ０を介してデータブロックＢＬＫ３を送出し…というように、ＣＨ０，ＣＨ１を交互に用いつつ、データブロックを２つの系列に分けて送出する。
【００８１】
ホスト２が送出したデータが記憶部１５内に格納された状態となると、ストレージシステム１７のコントローラ部１７１が、先に送出されたコマンドに従って、記憶部１５に格納されたデータを読み出してＲＡＩＤに構成したディスクドライブ１７２に対して書き込む。
【００８２】
また第２の制御部１４は、ホスト２が送出したデータが記憶部１５内に格納された状態となった後の所定のタイミングで、処理終了の要求を、各チャネルを介して第１の制御部１１に対して出力する。第１の制御部１１は、終了処理の要求を受けて、チャネルをクローズして処理を終了する。第２の制御部１４は、チャネルがクローズされたことを受けて処理を終了する。
【００８３】
また本実施の形態のストレージ制御装置１のデータ読み出し時の動作を説明する。ホスト２が読み出すべきデータが格納されている論理ボリューム内の論理ブロックアドレス（ＨＬＢＡ）と、データ長（ＬＢＮ）とを含んだ読み出しコマンドを第１のインタフェース部１２を介して送出する。
【００８４】
すると、第１の制御部１１は、ホスト２から受け入れた論理ブロックアドレス（ＨＬＢＡ）と、データ長（ＬＢＮ）で特定される論理ボリューム内の論理ブロック（例えば６４ＫＢ分の論理ブロック）を、所定のブロックのサイズ（例えば４ＫＢ）のデータブロック単位に分割し、得られたデータブロックを、Ｎ個（ここでは２つ）の系列にストライピングして並べ替える。
【００８５】
具体的に、上述の場合は、論理ボリューム内の上記４ＫＢのデータブロック（１６個のデータブロックＢＬＫ０〜ＢＬＫ１５となる）を、２つの系列にストライピングして並べ替え、ＢＬＫ０，ＢＬＫ２，ＢＬＫ４…，ＢＬＫ１４のデータブロックを含む第１の系列（３２ＫＢ分）と、ＢＬＫ１，ＢＬＫ３，…，ＢＬＫ１５のデータブロックを含む第２の系列（３２ＫＢ分）とを得る。そして第１の制御部１１は、第１の系列のデータブロックを論理ボリュームから読み出す第１系列の指示（先頭ＬＢＡと、それに続く３２ＫＢ分領域からデータを読み出す指示とを含む）と、第２の系列のデータブロックを論理ボリュームから読み出す第２系列の指示（先頭ＬＢＡと、それに続く３２ＫＢ分領域からデータを読み出す指示とを含む）とを生成する。
【００８６】
第１の制御部１１は、ホスト２から受け入れた読み出し元の論理ボリュームの先頭論理ブロックアドレス（ＨＬＢＡ）に基づき、第２のインタフェース部１３のどのチャネルからアクセス指示を送出するかを決定する。ここでは例えばチャネル０（ＣＨ０）から順にアクセス指示を送出するものとし、チャネルの数Ｎ＝２とする。
【００８７】
次に第１の制御部１１は、第１系列の指示に続き、第１の系列のデータブロックのうち、最初のデータブロック（ブロック０へ書き込まれるべきデータブロックＢＬＫ０）を最初のチャネルであるＣＨ０を介して出力する。
【００８８】
そして第１の制御部１１は、第２系列の指示に続き、第２の系列のデータブロックのうち、最初のデータブロック（ブロック１へ書き込まれるべきデータブロックＢＬＫ１）を次のチャネル（ここでは最初のデータブロックをＣＨ０を介して出力しているのでＣＨ１となる）を介して出力する。以下、第１の制御部１１は、ＣＨ０及びＣＨ１に対して交互に、データブロックＢＬＫ２，３…，１５を出力していく。
【００８９】
これにより、ブロック０，２，４…，１４に格納されるべき第１の系列のデータブロックＢＬＫ０，ＢＬＫ２，ＢＬＫ４…，ＢＬＫ１４、及びそれらを書き込むべき旨の第１系列の指示は、第２のインタフェース部１３のＣＨ０を介して出力されることとなり、ブロック１，３，５，…，１５に格納されるべきデータブロックＢＬＫ１，ＢＬＫ３，…，ＢＬＫ１５、及びそれらを書き込むべき旨の第２系列の指示は、第２のインタフェース部１３のＣＨ１を介して出力されることとなる。ここで第１、第２系列の指示は、各データブロックごとではなく、各系列の複数のデータブロックについて一つの指示として出力される。
【００９０】
またこの第１の制御部１１は、ホスト２からＲＡＩＤ０の論理ボリュームのＬＢＡ及びＬＢＮを指定したデータを読み出すべき旨のコマンドを受け入れると、当該ホスト２から受け入れたコマンドを第２のインタフェース部１３が有しているＮ個のチャネル（Ｎは２以上の整数）に振り分けて、複数系列のアクセス指示として出力する。
【００９１】
また、第１の制御部１１は、ストレージシステム１７から読み出され、第２のインタフェース部１３のＣＨ０，ＣＨ１を介して入力される、各ブロックのデータ（データブロック）を受け入れると、順番に（ここでは交互に）配列して連接し、ホスト２へ出力する。
【００９２】
この第１の制御部１１の処理は、ＲＡＩＤ０コントローラの処理として広く知られたものと同じであるので、ここでのこれ以上の詳しい説明は省略する。
【００９３】
第２の制御部１４は、第２のインタフェース部１３が備えるＣＨ０，ＣＨ１の各チャネルを介して分割されたコマンド（２系列のアクセス指示）を受け入れる。そして、この２系列のアクセス指示として、取得した複数系列のコマンドに含まれていたＬＢＡのうち、最先（最小）のＬＢＡを取り出し、これを用いてホスト２から入力されたＬＢＡ（ＨＬＢＡ）を再構成してコマンド再構成後のＬＢＡとする。
【００９４】
第２の制御部１４は、再構成したＬＢＡ及びＬＢＮを含む読み出しコマンドを、ストレージシステム１７に対して出力する。また第２の制御部１４は、ストレージシステム１７のコントローラ部１７１に対してデータを格納する領域の確保を指示し、記憶部１５内に、読み出したデータを格納する領域を確保させる。なお、この領域を確保する処理は、第２の制御部１４自身が行ってもよい。
【００９５】
ストレージシステム１７は、第２の制御部１４から受け入れたコマンドに従い、指定されたＬＢＡ及びＬＢＮで特定されるディスクドライブ１７２内のデータを読み出して記憶部１５内に確保された領域に格納する。
【００９６】
第２の制御部１４は、ストレージシステム１７が読み出したデータが、記憶部１５に格納された状態となると、当該データを、所定のサイズのデータブロックに分割し、各データブロックを、対応するチャネルを介して送出する。ここでの例では、データブロックＢＬＫ０，ＢＬＫ２，…に係る読み出し指示はＣＨ０、データブロックＢＬＫ１，ＢＬＫ３…に係る読み出し指示はＣＨ１を介して受け入れているので、データブロックＢＬＫ０，ＢＬＫ２，…はＣＨ０、データブロックＢＬＫ１，ＢＬＫ３…はＣＨ１を介してそれぞれ送出する。どのデータブロックをどのチャネルを介して出力するかは、第２の制御部１４が再構成したＬＢＡ（ホスト２が出力したものと同じＬＢＡ、つまりＨＬＢＡ）に基づいて、第１の制御部１１における最初のデータブロックを出力するチャネルを決定する処理と同じ処理により定める。
【００９７】
第２の制御部１４は、読み出しコマンドにより読み出されたデータブロックが第１の制御部１１へすべて送出されると、処理終了の要求を、各チャネルを介して第１の制御部１１に対して出力する。第１の制御部１１は、終了処理の要求を受けて、チャネルをクローズして処理を終了する。第２の制御部１４は、チャネルがクローズされたことを受けて処理を終了する。
【００９８】
本実施の形態では、このようにデータの転送（第１の制御部１１と、ストレージシステム１７との間でのデータ転送）が終了した以降の所定のタイミングで終了処理の要求が行われるよう制御されており、次のような効果がある。すなわち、本実施の形態のようにシングルプロセスでの制御ではなく、仮に第２のインタフェース部１３の各チャネルを個別のプロセスで制御しつつ、各プロセスが一つのＲＡＩＤシステムに対してアクセスし、それぞれのチャネルについて独立して終了処理の要求を行わせることとする。
【００９９】
ここで第１の制御部１１が、チャネル毎の個別のプロセスで独立して終了処理を行っていると、第１の制御部１１がＣＨ０を介して最初のデータブロックの送出を完了した時点で、第２の制御部１４のＣＨ０を制御するプロセスがＣＨ０を介して終了処理の要求を行うが、第１の制御部１１ではＣＨ１のデータが読み出されるまでは処理終了せず、第２の制御部１４のＣＨ０を制御するプロセスも処理終了できずに待機することとなる。このため、ＣＨ１を制御するプロセスは、ＲＡＩＤシステムにアクセスできず、ＣＨ１を介して送出するべきデータブロックを読み出すことができずに処理を待機する。つまり、この状態ですべてのプロセスが処理待機の状態となるので、処理がデッドロックすることとなる。
【０１００】
一方、本実施の形態のように、シングルプロセスによりすべてのチャネルでの処理が完了してから、終了処理の要求を行うことで、第１の制御部１１が、すべてのチャネルから終了処理の要求を受けるまで待ってから一斉に処理を終了する処理を行っていたとしても、デッドロックが生じることがなくなる。
【０１０１】
また本実施の形態によると、ストレージシステム１７が単一の論理ボリュームを含む単一の機器となるので、ストレージシステム１７の可搬性が向上する。これに対し従来例のように複数のＲＡＩＤ等を接続する場合、複数の機器からなる複数の論理ボリュームを単一の論理ボリュームに再構成する装置（特許文献１に開示のような装置）が必要であるので、各ＲＡＩＤの可搬性が低い。
【０１０２】
また本実施の形態によると、ストレージシステム１７としてどのようなストレージ制御装置を用いても構わないので、アクセス速度を維持し、かつ回路規模の増大を抑えながら、冗長性を確保するなど、装置の拡張性を向上できる。
【０１０３】
［変形例］
なお、ここまでの説明において、第２の制御部１４がストレージシステム１７のコントローラ部１７１としても機能するように構成してもよい。この場合は、図６に例示するように、第３のインタフェース部１６は必要でなくなり、第２の制御部１４がディスクドライブ１７２に対してデータを書き込み、またはディスクドライブ１７２からデータを読み出す動作を行う。
【符号の説明】
【０１０４】
１  ストレージ制御装置、２  ホスト、１１  第１の制御部、１２  第１のインタフェース部、１３  第２のインタフェース部、１４  第２の制御部、１５  記憶部、１６  第３のインタフェース部、１７  ストレージシステム、１４１  受入部、１４２  同期処理部、１４３  ＤＭＡ処理部、１４４  出力部、１７１  コントローラ部、１７２  ディスクドライブ。
【図１】
0006527409.tif 000002
【図２】
0006527409.tif 000003
【図３】
0006527409.tif 000004
【図４】
0006527409.tif 000005
【図５】
0006527409.tif 000006
【図６】
0006527409.tif 000007