(57)【要約】  ストレージシステムにおいて、それぞれがプロセッサモジュール及びメモリを有する複数のコントローラと、プロセッサモジュール間の通信を中継する中継部とを備える。中継部は、メモリに格納されているコマンドを第１のコントローラのプロセッサモジュールと第２のコントローラのプロセッサモジュールの何れで処理するかを判定する振り分け判定を実行する。ここで、第１のコントローラは、コマンドを格納しているメモリを有するコントローラであり、第２のコントローラは、第１のコントローラ以外の何れかのコントローラである。中継部は、第１のコントローラのプロセッサモジュールでコマンドを処理すると判定した場合、コマンドの格納先を示す格納先情報を、第１のコントローラのプロセッサモジュールへ通知し、第２のコントローラのプロセッサモジュールでコマンドを処理すると判定した場合、コマンドを、第２のコントローラへ転送する。
2016006111.tif 000002
【特許請求の範囲】
【請求項１】
それぞれがプロセッサモジュール及びメモリを有する複数のコントローラと、
プロセッサモジュール間の通信を中継する中継部と、を備え、
前記中継部は、
メモリに格納されているコマンドを第１のコントローラのプロセッサモジュールと第２のコントローラのプロセッサモジュールの何れで処理するかを判定する振り分け判定を実行し、前記第１のコントローラは、前記コマンドを格納しているメモリを有するコントローラであり、前記第２のコントローラは、前記第１のコントローラ以外の何れかのコントローラであり、
前記第１のコントローラのプロセッサモジュールで前記コマンドを処理すると判定した場合、前記コマンドの格納先であり前記第１のコントローラのメモリにおける場所を示す情報である格納先情報を、前記第１のコントローラのプロセッサモジュールへ通知し、
前記第２のコントローラのプロセッサモジュールで前記コマンドを処理すると判定した場合、前記コマンドを、前記第２のコントローラへ転送する
ストレージシステム。
【請求項２】
前記第１のコントローラは、さらに、前記コマンドをホストコンピュータから受信するホストインタフェースを有し、
前記第１のコントローラのホストインタフェースは、前記ホストコンピュータから受信したコマンドを、前記第１のコントローラのメモリに格納し、
前記中継部は、
所定のタイミングで前記第１のコントローラのメモリにアクセスすることにより、前記第１のコントローラが新たなコマンドを受信したか否かを確認し、前記第１のコントローラが新たなコマンドを受信したことを確認した場合、前記新たなコマンドについて、前記振り分け判定を実行する
請求項１に記載のストレージシステム。
【請求項３】
前記第２のコントローラのプロセッサモジュールは、
前記中継部から転送されたコマンドを取得した場合、そのコマンドを受領した旨を示す受領通知を、前記中継部へ送信する
請求項１に記載のストレージシステム。
【請求項４】
前記中継部は、前記振り分け判定において、
前記コマンドの送信元を示す送信元識別子と、前記コマンドの実行対象を示す対象論理ボリューム識別子と、に基づいて前記コマンドの振り分け先のコントローラを決定する
請求項１に記載のストレージシステム。
【請求項５】
前記第１のコントローラは、さらに、前記コマンドをホストコンピュータから受信するホストインタフェースを有し、
前記第１のコントローラのホストインタフェースは、
前記ホストコンピュータから受信したコマンドを、前記第１のコントローラのメモリに格納すると共に、前記コマンドの前記格納先情報を前記中継部へ渡し、
前記中継部は、前記ホストインタフェースから渡された前記格納先情報に基づいて、前記第１のコントローラが新たなコマンドを受信したか否かを確認し、前記第１のコントローラが新たなコマンドを受信したことを確認した場合、前記新たなコマンドについて、前記振り分け判定を実行する
請求項１に記載のストレージシステム。
【請求項６】
それぞれがプロセッサモジュール及びメモリを有する複数のコントローラが接続されている中継部において、
メモリに格納されているコマンドを第１のコントローラのプロセッサモジュールと第２のコントローラのプロセッサモジュールの何れで処理するかを判定する振り分け判定を実行し、前記第１のコントローラは、前記コマンドを格納しているメモリを有するコントローラであり、前記第２のコントローラは、前記第１のコントローラ以外の何れかのコントローラであり、
前記第１のコントローラのプロセッサモジュールで前記コマンドを処理すると判定した場合、前記コマンドの格納先であり前記第１のコントローラのメモリにおける場所を示す情報である格納先情報を、前記第１のコントローラのプロセッサモジュールへ通知し、
前記第２のコントローラのプロセッサモジュールで前記コマンドを処理すると判定した場合、前記コマンドを、前記第２のコントローラへ転送する
記憶制御方法。
【請求項７】
前記第１のコントローラは、さらに、前記コマンドをホストコンピュータから受信するホストインタフェースを有し、
前記第１のコントローラのホストインタフェースは、前記ホストコンピュータから受信したコマンドを、前記第１のコントローラのメモリに格納し、
前記中継部は、
所定のタイミングで前記第１のコントローラのメモリにアクセスすることにより、前記第１のコントローラが新たなコマンドを受信したか否かを確認し、前記第１のコントローラが新たなコマンドを受信したことを確認した場合、前記新たなコマンドについて、前記振り分け判定を実行する
請求項６に記載の記憶制御方法。
【請求項８】
前記第２のコントローラのプロセッサモジュールは、
前記中継部から転送されたコマンドを取得した場合、そのコマンドを受領した旨を示す受領通知を、前記中継部へ送信する
請求項６に記載の記憶制御方法。
【請求項９】
前記中継部は、前記振り分け判定において、
前記コマンドの送信元を示す送信元識別子と、前記コマンドの実行対象を示す対象論理ボリューム識別子と、に基づいて前記コマンドの振り分け先のコントローラを決定する
請求項６に記載の記憶制御方法。
【請求項１０】
それぞれがプロセッサモジュール及びメモリを有する複数のコントローラの間に設置され、プロセッサモジュール間の通信を中継する中継装置であって、
メモリに格納されているコマンドを第１のコントローラのプロセッサモジュールと第２のコントローラのプロセッサモジュールの何れで処理するかを判定する振り分け判定を実行し、前記第１のコントローラは、前記コマンドを格納しているメモリを有するコントローラであり、前記第２のコントローラは、前記第１のコントローラ以外の何れかのコントローラであり、
前記第１のコントローラのプロセッサモジュールで前記コマンドを処理すると判定した場合、前記コマンドの格納先であり前記第１のコントローラのメモリにおける場所を示す情報である格納先情報を、前記第１のコントローラのプロセッサモジュールへ通知し、
前記第２のコントローラのプロセッサモジュールで前記コマンドを処理すると判定した場合、前記コマンドを、前記第２のコントローラへ転送する
中継装置。
【請求項１１】
所定のタイミングで前記第１のコントローラのメモリにアクセスすることにより、前記第１のコントローラが新たなコマンドを受信したか否かを確認し、前記第１のコントローラが新たなコマンドを受信したことを確認した場合、前記新たなコマンドについて、前記振り分け判定を実行する
請求項１０に記載の中継装置。
【請求項１２】
前記振り分け判定において、前記コマンドの送信元を示す送信元識別子と、前記コマンドの実行対象を示す対象論理ボリューム識別子と、に基づいて前記コマンドの振り分け先のコントローラを決定する
請求項１０に記載の中継装置。
【請求項１３】
前記ホストインタフェースから渡された前記格納先情報に基づいて、前記第１のコントローラが新たなコマンドを受信したか否かを確認し、前記第１のコントローラが新たなコマンドを受信したことを確認した場合、前記新たなコマンドについて、前記振り分け判定を実行する
請求項１０に記載の中継装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ストレージシステムの技術に関する。
【背景技術】
【０００２】
ストレージシステムにおいて、複数のストレージ装置によりクラスタを構成し、ホストコンピュータがクラスタ内の各ストレージ装置に対して均等にＩ／Ｏ要求を発行することにより、ストレージシステムのアクセス性能及び可用性を高める技術が知られている（特許文献１）。また、ストレージシステムにおいて、一つのチャネルが複数のプロセッサモジュール（以下「プロセッサ」という）によって制御されるように構成され、ホストコンピュータからＩ／Ｏ要求を受信した或るプロセッサが、そのＩ／Ｏ要求を他のプロセッサへ振り分けることにより、ストレージシステムのアクセス性能及び可用性を高める技術が知られている（特許文献２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】ＵＳ２０１３／０１５９６２０
【特許文献２】米国特許８４２３６７７
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の示すストレージシステムでは、Ｉ／Ｏ要求を発行するホストコンピュータが、クラスタを構成する複数のストレージ装置に対して均等にＩ／Ｏ要求を発行する必要がある。しかし、例えば仮想化環境に基づくストレージシステムのように、ホストコンピュータ側からはＩ／Ｏ要求を均等に発行することが困難な場合も多い。また、特許文献２の示すストレージシステムでは、Ｉ／Ｏ要求を受信したプロセッサの処理負荷が高くなってしまう。プロセッサは、Ｉ／Ｏ要求の処理に限らず他の様々な処理も行っているため、Ｉ／Ｏ要求の受信処理負荷が高くなると、ストレージシステム全体の性能が低下してしまうおそれがある。【０００５】
そこで、本発明の目的は、ストレージシステムにおいて、ホストコンピュータからのＩ／Ｏ要求に関するプロセッサの処理負荷を低減させることにある。
【課題を解決するための手段】
【０００６】
本発明の一実施例に係るストレージシステムは、それぞれがプロセッサモジュール及びメモリを有する複数のコントローラと、プロセッサモジュール間の通信を中継する中継部と、を備える。
中継部は、
メモリに格納されているコマンドを第１のコントローラのプロセッサモジュールと第２のコントローラのプロセッサモジュールの何れで処理するかを判定する振り分け判定を実行し、第１のコントローラは、コマンドを格納しているメモリを有するコントローラであり、第２のコントローラは、第１のコントローラ以外の何れかのコントローラであり、
第１のコントローラのプロセッサモジュールでコマンドを処理すると判定した場合、コマンドの格納先であり第１のコントローラのメモリにおける場所を示す情報である格納先情報を、第１のコントローラのプロセッサモジュールへ通知し、
第２のコントローラのプロセッサモジュールでコマンドを処理すると判定した場合、コマンドを、第２のコントローラへ転送する。
【発明の効果】
【０００７】
本発明によれば、ストレージシステムにおいて、ホストコンピュータからのＩ／Ｏ要求に関するプロセッサの処理負荷を低減させることができる。
【図面の簡単な説明】
【０００８】
【図１】比較例に係るストレージシステムの構成例を示す。
【図２】ホストコンピュータからコマンドを受信した比較例に係るホストＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）の処理例を示すフローチャートである。
【図３】比較例に係るプロセッサの処理例を示すフローチャートである。
【図４】図３におけるコマンド振り分け処理の詳細を示すフローチャートである。
【図５】本実施例に係るストレージシステムの構成例を示す。
【図６】ルータ部の構成例を示す。
【図７】プロセッサ特定テーブルの構成例を示す。
【図８】本実施例に係るストレージシステムの処理概要を説明するための図である。
【図９】ホストコンピュータからコマンドを受信した本実施例に係るホストＩ／Ｆの処理例を示すフローチャートである。
【図１０】本実施例に係るルータ部の処理例を示すフローチャートである。
【図１１】図１０におけるコマンド振り分け処理の詳細を示すフローチャートである。
【図１２】振り分け先のプロセッサの処理を示すフローチャートである。
【図１３】図１０におけるインデックス更新処理の詳細を示すフローチャートである。
【図１４】本実施例に係るストレージシステムの変形例を示す。
【発明を実施するための形態】
【０００９】
以下、一実施例を説明する。
以下の説明では、「ｘｘｘテーブル」、「ｘｘｘキュー」又は「ｘｘｘリスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」、「ｘｘｘキュー」又は「ｘｘｘリスト」を「ｘｘｘ情報」と呼ぶことができる。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び通信インターフェイスデバイスのうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
また、以下の説明では、同種の要素を区別して説明する場合には、「コントローラ２０４Ａ」、「コントローラ２０４Ｂ」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「コントローラ２０４」のように参照符号のうちの共通番号のみを使用することがある。
【００１０】
（比較例の説明）
本実施例の特徴を説明する前に、本実施例の比較例となるストレージシステム１００について、図１乃至図３を参照しながら説明する。
【００１１】
図１は、比較例に係るストレージシステム１００の構成例を示す。この図１に示すストレージシステム１００は、後述する図４に示す本実施例に係るストレージシステム２００と対比するためのものである。
【００１２】
ストレージシステム１００には、通信ネットワーク１０３を通じて、ホストコンピュータ１０２が接続されている。また、ストレージシステム１００には、通信ネットワーク１０３を通じて、ストレージシステム１００を管理するための管理装置（不図示）が接続されてもよい。
【００１３】
通信ネットワーク１０３の一例としては、ＦｉｂｒｅＣｈａｎｎｅｌに基づいて構成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）又はＥｔｈｅｒｎｅｔ（登録商標）に基づいて構成されるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などがある。
【００１４】
ホストコンピュータ１０２は、ストレージコントローラ１０４Ａ、１０４Ｂに対して、データのライト要求及びリード要求などのコマンドを送信する。コマンドは、通信ネットワーク１０３のプロトコルに基づくパケット又はフレームなどに格納されて送信されてよい。ホストコンピュータ１０２は、いわゆるオープン系のサーバでもよいし、メインフレームコンピュータでもよい。
【００１５】
ストレージシステム１００は、ストレージコントローラ１０４Ａ、１０４Ｂと、ディスクエンクロージャ１４０とを備える。
【００１６】
ディスクエンクロージャ１４０には、記憶媒体を有する複数のディスク１４２が格納される。ディスク１４２の一例としては、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などがある。
【００１７】
ストレージシステム１００は、複数のディスク１４２からＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループを構成し、そのＲＡＩＤグループによって構成される論理的な記憶領域である論理ボリュームに、ホストコンピュータ１０２から送信されたデータを格納してもよい。ＲＡＩＤグループを構成するディスク１４２に障害が生じた場合、ストレージシステム１００は、その障害が発生したディスク１４２に格納されているデータを、同一のＲＡＩＤグループに属する他のディスク１４２のデータ及びパリティを用いて復元することができる。
【００１８】
ストレージコントローラ１０４は、ストレージシステム１００を制御する。ストレージコントローラ１０４は、ホストＩ／Ｆ１０６と、ディスクＩ／Ｆ１０８と、プロセッサ１１４と、メインメモリ１２８とを有する。これらの要素１０６、１０８、１１４、１２８は、それぞれ複数であってもよい。
【００１９】
例えば、ストレージコントローラ１０４Ａは、ホストコンピュータ１０２からリード要求に係るコマンドを受信した場合、リード要求の対象データをディスクエンクロージャ１４０内のディスク１４２からリードし、そのリードデータをホストコンピュータ１０２へ返すリード処理を行う。例えば、ストレージコントローラ１０４は、ホストコンピュータ１０５からライト要求に係るコマンドを受信した場合、ライト要求の対象データをディスクエンクロージャ１４０内のディスク１４２にライトし、完了応答をホストコンピュータ１０２へ返すライト処理を行う。
【００２０】
ホストＩ／Ｆ１０６は、プロセッサ１１４を通信ネットワーク１０３に接続し、プロセッサ１１４がホストコンピュータ１０２とデータ通信を行えるようにするためのＩ／Ｆである。例えば、ホストコンピュータ１０２側のプロトコルがＦｉｂｒｅＣｈａｎｎｅｌであり、プロセッサ１１４側のプロトコルがＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）である場合、ホストＩ／Ｆ１０６は、ＦｉｂｒｅＣｈａｎｎｅｌとＰＣＩｅとの間のプロトコル変換を行う。
【００２１】
ディスクＩ／Ｆ１０８は、プロセッサ１１４がディスクエンクロージャ１４０とデータ通信を行えるようにするためのＩ／Ｆである。例えば、ディスク１／Ｆ１０８側のプロトコルがＦｉｂｒｅＣｈａｎｎｅｌであり、プロセッサ１１４側のプロトコルがＰＣＩｅである場合、ディスクＩ／Ｆ１０８は、ＦｉｂｒｅＣｈａｎｎｅｌとＰＣＩｅとの間のプロトコル変換を行う。また、ディスクＩ／Ｆ１０８は、ホストコンピュータ１０２に提供する論理ボリュームと、ディスク１４２に構成される物理ボリュームのとの間のアドレス変換を行ってもよい。
【００２２】
メインメモリ１２８は、データを記憶するためのデバイスである。メインメモリ１２８には、プロセッサ１１４のコア１１６で実行されるコンピュータプログラム、そのコンピュータプログラムから使用されるデータ及びディスク１４２へのリード／ライトに係るキャッシュデータなどが格納されてよい。メインメモリ１２８の一例としては、ＤＲＡＭ（Ｄｙｎａｍｉｔｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、相変化メモリ（Ｐｈａｓｅ−Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又はＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などがある。
【００２３】
プロセッサ１１４は、ホストＩ／Ｆ１０６、ディスクＩ／Ｆ１０８及びメインメモリ１２８などから入出力されるコンピュータプログラム及びデータなどを処理し、コントローラ１０４の有する各種機能を実現する。プロセッサ１１４は、例えば、コア１１６と、メモリＩ／Ｆ１２６と、ＰＣＩｅ  Ｉ／Ｆ１２０と、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ１２４と、メモリＩ／Ｆ１２６と、ＮＴＢ（Ｎｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ）１２２とを有し、これらの要素が双方向に通信可能な内部バス１２１（例えばＰＣＩｅバス）で接続されている。
【００２４】
コア１１６は、コンピュータプログラム及びデータを処理する演算回路である。コア１１６は、複数であってもよい。メモリＩ／Ｆ１２６は、メインメモリ１２８を接続するためのＩ／Ｆである。メモリＩ／Ｆ１２６の一例としては、ＤＤＲ（Ｄｏｕｂｌｅ−Ｄａｔａ−Ｒａｔｅ）  Ｉ／Ｆなどがある。ＤＭＡコントローラ１２４は、ホストコンピュータ１０２からのライト要求に係るコマンドに対応するライトデータの冗長性を確保する目的で、他のコントローラ（例えば１０４Ｂ）にライトデータを転送する際に用いる。ＮＴＢ１２２は、例えば、プロセッサ１１４Ａが、他のプロセッサ１１４Ｂとデータ通信を行うためのＩ／Ｆである。以下、処理の主体を「プロセッサ１１４」として説明するが、その場合、コア１１６を処理の主体としてもよい。
【００２５】
プロセッサ１１４は、例えば、ホストＩ／Ｆ１０６及びディスクＩ／Ｆ１０８のデータ転送に関するパラメータを設定したり、ストレージシステム１００の障害を監視し、障害を検出した場合に、その障害に対応する処理を実行したりする。
【００２６】
コントローラ１０４は、複数のプロセッサ１１４を有してもよい。この場合、各プロセッサ１１４がメインメモリ１２８を有しても良いし、各プロセッサから共有可能なメインメモリ１２８を有してもよい。プロセッサ１１４は、ホストＩ／Ｆ１０６又はディスクＩ／Ｆ１０８からコマンドを取得した場合、何れのプロセッサ１１４にコマンドの処理を振り分けるかを決定し、その振り分け先のプロセッサ１１４にそのコマンドを送信する。
【００２７】
図２は、ホストコンピュータからコマンドを受信した比較例に係るホストＩ／Ｆ１０６の処理例を示すフローチャートである。
【００２８】
ホストＩ／Ｆ１０６が、ホストコンピュータ１０２からコマンド（リードコマンド又はライトコマンドなど）を受信すると、以下の処理が開始される（Ｓ６０５）。
【００２９】
ホストＩ／Ｆ１０６は、その受信したコマンドをメインメモリ１２８に格納すると共に、そのコマンドの当該メインメモリ上での格納先を示す格納先情報もメインメモリ１２８に格納し（Ｓ６１０）、処理を終了する。
【００３０】
図３は、比較例に係るプロセッサ１１４の処理例を示すフローチャートである。
【００３１】
プロセッサ１１４は、メインメモリ１２８にアクセスし、新規の格納先情報が存在するか否かを確認する。すなわち、プロセッサ１１４は、新規のコマンドがメインメモリ１２８に格納されたか否かを判定する（Ｓ６１５）。この判定は、一定の周期で行われてよい。
【００３２】
メインメモリ１２８に新規の格納先情報が存在しない場合（Ｓ６１５：Ｎｏ）、プロセッサ１１４は、通常処理を行い（Ｓ６３０）、処理を終了する。通常処理とは、コマンドの振り分けに関する処理ではなく、プロセッサ１１４が通常行っている処理をいう。例えば、コマンドの内容を実行する処理及びストレージコントローラの制御処理などである。
【００３３】
メインメモリ１２８に新規の格納先情報が存在する場合（Ｓ６１５：Ｙｅｓ）、プロセッサ１１４は、その新規の格納先情報に基づき、メインメモリ１２８からコマンドを取得し、振り分けに必要な情報を取得する（Ｓ６２０）。
【００３４】
そして、プロセッサ１１４は、取得したコマンドの内容に基づき、コマンド振り分け処理を行う（Ｓ６２５）。コマンド振り分け処理の詳細については、後述する（図３参照）。そして、プロセッサ１１４は、コマンド振り分け処理の完了後、当該コマンドが格納されていたコマンドキューのインデックスを更新する（Ｓ６２７）。そして、プロセッサ１１４は、通常処理を行い（Ｓ６３０）、Ｓ６１５へ戻る。
【００３５】
図４は、図３におけるコマンド振り分け処理（Ｓ６２５）の詳細を示すフローチャートである。
【００３６】
プロセッサ１１４は、コマンドから、そのコマンドの送信元を識別する送信元識別子と、そのコマンドが対象とする論理ボリュームを識別する論理ボリューム識別子と、を抽出する（Ｓ７０５）。
【００３７】
プロセッサ１１４は、所定のテーブルを参照し、その抽出した送信元識別子及び論理ボリューム識別子とに対応するプロセッサ（つまり、コマンドの振り分け先のプロセッサ）を特定する（Ｓ７１５）。
【００３８】
プロセッサ１１４は、そのコマンドを、その特定した振り分け先のプロセッサに転送するためのＤＭＡの使用権を確保する（Ｓ７２０）。
【００３９】
プロセッサ１１４は、ＤＭＡの使用権が確保できるまで待機し（Ｓ７２５：Ｎｏ）、ＤＭＡの使用権を確保した後（Ｓ７２５：Ｙｅｓ）、コマンドそのものを振り分け先のプロセッサの参照できるメインメモリ１２８の記憶領域へＤＭＡ転送し（Ｓ７３０）、処理を終了する。その後、振り分け先のプロセッサは、コマンドが転送されたメインメモリの記憶領域を参照して通常処理を行うことになる（Ｓ６３０）。
【００４０】
以上のように、比較例に係るストレージシステム１００は、プロセッサ１１４が、コマンドを何れのプロセッサへ振り分けるべきか判断し、そして、その振り分け先のプロセッサへコマンドをＤＭＡ転送する。このとき、例えばプロセッサ１１４Ａによる振分け処理の結果、振分け先がプロセッサ１１４Ａの場合であっても、再度コマンド転送が行なわれる。
【００４１】
しかし、この比較例のストレージシステム１００は、次のような課題を有する。すなわち、コマンドの振り分け処理を行うプロセッサ１１４の処理負荷が高くなってしまう。プロセッサ１１４は、コマンドの振り分け処理に限らず他の様々な処理も行っているため、例えば、ホストコンピュータ１０２から多数のコマンドが発行されると、プロセッサの振り分け処理の処理負荷が高くなり、ひいてはストレージシステム１００の全体の性能低下につながってしまう。更に、振り分け主体のプロセッサが処理を行う場合であっても、再度コマンドの転送が要求されるため、その処理に要する時間がオーバヘッドとなり、ストレージシステム１００全体の性能低下につながってしまう。
【００４２】
（本実施例の説明）
次に、上記の比較例に係る課題に着目した本実施例に係るストレージシステム２００について説明する。
【００４３】
図５は、本実施例に係るストレージシステム２００の構成例を示す。
【００４４】
図５に示すストレージシステム２００におけるホストＩ／Ｆ２０６、ディスクＩ／Ｆ２０８、メインメモリ２２８、ＰＣＩｅ  Ｉ／Ｆ２２０、コア２１６、ＤＭＡコントローラ２２４及びメモリＩ／Ｆ２２６についてはそれぞれ、図１に示すストレージシステム１００におけるホストＩ／Ｆ１０６、ディスクＩ／Ｆ１０８、メインメモリ１２８、ＰＣＩｅ  Ｉ／Ｆ１２０、コア１１６、ＤＭＡコントローラ１２４及びメモリＩ／Ｆ１２６と同様であるので、ここでの説明を省略する。
【００４５】
図５に示すストレージシステム２００は、図１に示すストレージシステム１００と対比して、コマンドの中継器の一種である第１ルータ部２０５Ａ及び第２ルータ部２０５Ｂを備えている点が大きく相違する。第１ルータ部２０５Ａには、コントローラ２０４Ａ及び２０４Ｃが接続されている。第２ルータ部２０５Ｂには、コントローラ２０４Ｂ及び２０４Ｄが接続されている。ルータ部２０５は、ホスト１０２からコマンドを受けるホストＩ／Ｆ２０６が受信したコマンドをメインメモリ２２８に格納する際の経路上でないところに配置する。以下、コントローラ２０４Ａを「第１コントローラ２０４Ａ」、コントローラ２０４Ｂを「第２コントローラ２０４Ｂ」という場合がある。
【００４６】
また、第１ルータ部２０５Ａと第２ルータ部２０５Ｂとの間は、所定の通信路又は通信ネットワークで接続されている。通信路又は通信ネットワークの一例としては、ＰＣＩｅ、ＩｎｆｉｎｉＢａｎｄ、ＦｉｂｒｅＣｈａｎｎｅｌ及びＥｔｈｅｒｎｅｔなどがある。
【００４７】
ここで、比較例のストレージシステム１００では、ホストコンピュータ１０２から受信したコマンドのコマンド振り分け処理を、プロセッサ１１４が行っていたが、本実施例のストレージシステム２００では、このコマンド振り分け処理に相当する処理を、第１ルータ部２０５で行う。
【００４８】
図６は、ルータ部２０５の構成例を示す。
【００４９】
ルータ部２０５は、コマンドルータ３０２と、外部Ｉ／Ｆ３０４と、ＰＣＩｅ  Ｉ／Ｆ３０５と、ＤＭＡコントローラ３２０と、内部メモリ３２５と、スイッチ部３３５とを備える。各要素２０２、２０４、３０５、３２０及び３２５は、スイッチ部３３５を通じて双方向にデータを送受信できる。
【００５０】
ＰＣＩｅ  Ｉ／Ｆ３０５は、コントローラ２０４（プロセッサ２１４）を接続するためのＩ／Ｆである。
【００５１】
外部Ｉ／Ｆ３０４は、他のルータ部２０５を接続するためのＩ／Ｆである。
【００５２】
ＤＭＡコントローラ３２０は、コマンドルータ３０２が、コントローラ２０４のメインメモリ２２８にダイレクトにアクセスを行うデバイスである。
【００５３】
内部メモリ３２５は、データを記憶するためのデバイスである。例えば、内部メモリ３２５には、後述するプロセッサ特定テーブル３３０が格納される。
【００５４】
コマンドルータ３０２は、自分のルータ部２０５に接続されているコントローラ２０４のメインメモリ２２８に新たなコマンドが格納されたか否かを検知する。コマンドルータ３０２は、新たなコマンドの格納を検知した場合、その新たなコマンドを、自分のルータ部２０５に接続されている何れのプロセッサ２１４（コア２１６）へ振り分けるかべきかを判定する。この判定処理を「振り分け判定処理」といってもよい。コマンドルータ３０２は、プロセッサ特定テーブル３３０に基づいて、振り分け先のプロセッサ２１４を決定してもよい。
【００５５】
また、コマンドルータ３０２は、コマンドの振り分け先のプロセッサ２１４とそのコマンドが格納されているメインメモリ２２８とが同じコントローラ２０４に属するか否かを判定し、コマンドの振り分け先のプロセッサ２１４とそのコマンドが格納されているメインメモリ２２８とが同じコントローラ２０４に属する場合、そのコマンドの格納先情報を振り分け先のプロセッサ２１４へ通知してよい。すなわち、コマンドそのものは振り分け先のプロセッサへ転送しなくてもよい。
【００５６】
また、コマンドルータ３０２は、コマンドの振り分け先のプロセッサ２１４とそのコマンドが格納されているメインメモリ２２８とが同じコントローラ２０４に属するか否かを判定し、コマンドの振り分け先のプロセッサ２１４とそのコマンドが格納されているメインメモリ２２８とが同じコントローラ２０４に属さない場合、そのコマンドを振り分け先のプロセッサ２１４へ転送してよい。
【００５７】
コマンドは、メインメモリ２２８におけるコマンドキュー２３０で管理されてもよい。そして、コマンドの格納先を示す格納先情報とは、コマンドキュー２３０においてそのコマンドを識別するためのインデックス番号であってもよい。次に、コマンドをコマンドキュー２３０で管理する場合について説明する。
【００５８】
例えば、ホストＩ／Ｆ２０６は、コンシューマインデックス２１０を有し、メインメモリ２２８は、コマンドキュー２３０及びプロデューサインデックス２３１を有する。ここで、コンシューマインデックス２１０とプロデューサインデックス２３１について説明する。まず、コンシューマインデックス２１０は、コンシューマがコマンドキュー２３０から最後にコマンドを取り出したコマンドキュー２３０の位置を示す情報である。次に、プロデューサインデックス２３１は、プロデューサがコマンドキュー２３０から最後にコマンドを投入したコマンドキュー２３０の位置を示す情報である。そして、ホストＩ／Ｆ２０６は、ホストコンピュータ１０２から受信したコマンドを、メインメモリ２２８のコマンドキュー２３０に登録したとき、プロデューサインデックス２３１に、そのコマンドに対応する格納先情報（インデックス番号）を登録する。一方、コマンドルータ３０２は、コマンドキュー２３０からコマンドを抽出したとき、ホストＩ／Ｆ２０６のコンシューマインデックス２１０に、その抽出したコマンドに対応する格納先情報を登録する。これにより、プロデューサインデックス２３１とコンシューマインデックス２１０の両方に登録されている格納先情報については振り分け処理が完了しており、プロデューサインデックス２３１にのみ登録されている格納先情報については振り分け処理が完了していないことがわかる。なお、プロデューサインデックス２３１とコンシューマインデックス２１０の両方に登録されている格納先情報については、それらのインデックスから適宜削除されてよい。
【００５９】
図７は、プロセッサ特定テーブル３３０の構成例を示す。
【００６０】
プロセッサ特定テーブル３３０は、ホストコンピュータ１０２から受信したコマンドを、何れのプロセッサ２１４に振り分けるかを判定するための情報を有する。プロセッサ特定テーブル３３０は、送信元識別子１２０５と、論理ボリューム識別子１２１０と、プロセッサ識別子１２１５とを属性とする１又は２以上のレコードを有する。
【００６１】
送信元識別子１２０５は、コマンドの送信元のホストコンピュータ１０２を識別するための情報である。例えば、送信元識別子１２０５は、コマンドを含むパケット又はフレーム等の送信元であるホストコンピュータ１０２のポートを識別するための情報である。例えば、ホストコンピュータ１０２とストレージシステム２００がＳＡＮに係るＦｉｂｒｅＣｈａｎｎｅｌで接続されている場合、送信元識別子１２０５は、Ｓｏｕｒｃｅ  ＩＤ（Ｓ＿ＩＤ）であってよい。
【００６２】
論理ボリューム識別子１２１０は、コマンドが対象とする論理ボリュームを識別するための情報である。例えば、論理ボリューム識別子１２１０は、リード要求及びライト要求が指定する格納先の論理ボリューム番号であってもよい。
【００６３】
プロセッサ識別子１２１５は、送信元識別子１２０５及び論理ボリューム識別子１２１０の組み合わせに該当するコマンドの振り分け先のプロセッサを識別するための識別子である。プロセッサ識別子１２１５は、ストレージシステム内において一意な識別子であってよい。
【００６４】
例えば、図６のプロセッサ特定テーブル３３０のレコード３３１は、送信元識別子「００．００．ｅｆ」に対応するホストコンピュータ１０２から送信されたコマンドが、論理ボリューム識別子「０」に対応する論理ボリュームを対象としている場合、このコマンドはプロセッサ識別子「１」に対応するプロセッサに振り分けられるべきであることを表す。
【００６５】
このように、コマンドで指定される論理ボリューム毎に処理するプロセッサを特定することによって、特定のプロセッサがコマンドを処理する場合と比較して、コマンド処理の負荷がプロセッサ間で分散される。すなわち、ストレージシステムの性能低下を防ぐことが出来る。
【００６６】
図８は、本実施例に係るストレージシステム２００の処理概要を説明するための図である。
【００６７】
以下、ホストコンピュータ１０２が第１コントローラ２０４Ａにコマンドを送信したときのストレージシステム２００の処理概要の例を説明する。
【００６８】
（Ｓ１）第１コントローラ２０４ＡのホストＩ／Ｆ２０６Ａは、ホストコンピュータ１０２からコマンドを受信すると、そのコマンドをメインメモリ２２８Ａに格納する。
（Ｓ２）一方、第１ルータ部２０５Ａは、第１コントローラ２０４Ａのメインメモリ２２８Ａを確認し、新たな格納先情報が格納されていることを検出すると、その格納先情報の示すコマンドを取得する。第１ルータ部２０５Ａが、新たな格納先情報が格納されていることを検出する方法について説明する。具体的には、コマンドキュー２３０のプロデュー-サインデックス２３１とコンシューマインデックス２１０の差分を見ることで、新たな格納先情報が格納されていることを検出する。本願では、振り分け処理はルータ部２０５で行われるために、プロセッサ２０４は介在しない。
（Ｓ３）第１ルータ部２０５Ａは、その取得したコマンドから送信元識別子及び論理ボリューム識別子を抽出する。そして、第１ルータ部２０５Ａは、プロセッサ特定テーブル３３０を参照し、その抽出した送信元識別子及び論理ボリューム識別子に対応するプロセッサ識別子を特定する。
（Ｓ４）第１ルータ部２０５Ａは、その特定したプロセッサ識別子に対応するプロセッサが、第１コントローラ２０４Ａに属するものであるか否かを判定する。
（Ｓ５Ａ）その特定したプロセッサ２１４が、例えば第１コントローラ２０４Ａに属するプロセッサ２１４Ａである場合、第１ルータ部２０５Ａは、コマンドそのものではなく、コマンドの当該メインメモリ上の格納先情報をプロセッサ２１４Ａ（コア２１６Ａ）へ通知する。
（Ｓ５Ｂ）一方、その特定したプロセッサ２１４が、例えば第２コントローラ２０４Ｂに属するプロセッサ２１４Ｂである場合、第１ルータ部２０５Ａは、コマンドそのものを、第２ルータ部２０５Ｂを通じてプロセッサ２１４Ｂ（コア２１６Ｂ）に転送する。なお、このとき、第２ルータ部２０５Ｂは、第１ルータ部２０５Ａから受信したコマンドを、第２コントローラ２０４Ｂのメインメモリ２２８Ｂに格納し、そのメインメモリ２２８Ｂにおけるコマンドの格納先情報を、プロセッサ２１４Ｂ（コア２１６Ｂ）へ通知してもよい。
【００６９】
本実施例によれば、例えば次の作用効果を奏する。
（１）コマンドを振り分け処理を、比較例のようにプロセッサではなく、ルータ部で行うことにより、プロセッサの処理負荷を低減させることができる。したがって、例えば、ホストコンピュータから多数のコマンドが発行されたとしても、比較例のように振り分け処理によってプロセッサの負荷が高くなることはないため、ストレージシステム全体の性能低下を抑制することができる。
【００７０】
（２）ルータ部は、コマンドの振り分け先のプロセッサと、そのコマンドが格納されているメインメモリとが同じコントローラに属する場合、コマンドそのものでなく、コマンドの格納先情報のみをプロセッサに通知すればよい。これにより、コマンドそのものをプロセッサに転送する場合と比較して、ストレージシステム全体の性能低下を抑制することができる。
【００７１】
図９は、ホストコンピュータ１０２からコマンドを受信した本実施例に係るホストＩ／Ｆ２０６の処理例を示すフローチャートである。
【００７２】
ホストＩ／Ｆ１０６が、ホストコンピュータ１０２からコマンド（リード要求又はライト要求など）を受信すると、以下の処理が開始される（Ｓ８０５）。
【００７３】
ホストＩ／Ｆ１０６は、その受信したコマンドをメインメモリ２２８におけるコマンドキュー２３０に格納すると共に、そのコマンドに対応する格納先情報をプロデューサインデックス２３１に登録し（Ｓ８１０）、処理を終了する。登録するプロデューサインデックス２３１は、コマンドを１つ格納する毎に現在のプロデューサインデックス２３１をインクリメントした値を登録し、複数のコマンドを格納した場合は、そのコマンド数分加算した値を登録する。
【００７４】
図１０は、本実施例に係るルータ部２０５の処理例を示すフローチャートである。
【００７５】
ルータ部２０５におけるコマンドルータ３０２は、コントローラ２０４内のメインメモリ２２８のプロデューサインデックス２３１及びコンシューマインデックス２１０へ定期的にポーリングを行うことによって、新規の格納先情報が存在するか否かを判定する（Ｓ８１５）。あるいは、コントローラ２０４内のプロセッサからルータ部２０５のコマンドルータ３０２に対して所定の割り込み信号を送信し、その割り込み信号を検知する度にコマンドルータ３０２が上記の判定を行ってもよい。
【００７６】
新規の格納先情報が存在しない場合（Ｓ８１５：ＮＯ）、コマンドルータ３０２は、通常処理を行い（Ｓ８３５）、処理を終了する（終了）。通常処理とは、コマンドルータ３０２が通常行っている処理である。
【００７７】
新規の格納先情報が存在する場合（Ｓ８１５：Ｙｅｓ）、コマンドルータ３０２は、その新規の格納先情報に対応するコマンドを取得する（Ｓ８２０）。
【００７８】
コマンドルータ３０２は、取得したコマンドに基づき、コマンド振り分け処理を行う（Ｓ８２５）。コマンド振り分け処理の詳細については後述する（図９参照）。
【００７９】
コマンド振り分け処理の完了後、コマンドルータ３０２は、インデックス更新処理を行う（Ｓ８３０）。インデックス更新処理の詳細については後述する（図１３参照）。そして、コマンドルータ３０２は、通常処理を行い（Ｓ８３０）、Ｓ８１５へ戻る。
【００８０】
図１１は、図１０におけるコマンド振り分け処理（Ｓ８２５）の詳細を示すフローチャートである。
【００８１】
ルータ部２０５におけるコマンドルータ３０２は、コマンドから送信元識別子及び論理ボリューム識別子を抽出する（Ｓ９０５）。
【００８２】
コマンドルータ３０２は、プロセッサ特定テーブル３３０を参照し、その抽出した送信元識別子及び論理ボリューム識別子に対応する振り分け先のプロセッサを特定する（Ｓ９１５）。
【００８３】
コマンドルータ３０２は、Ｓ９１５で特定した振り分け先のプロセッサ２１４と、振り分け対象のコマンドが格納されているメインメモリ２２８とが同じコントローラ２０４に属しているか否かを判定する（Ｓ９２０）。コマンドルータ３０２は、プロセッサ２１４と、そのプロセッサ２１４が管理するメインメモリ２２８との対応関係を、予め初期設定などで把握しておく。
【００８４】
振り分け先のプロセッサ２１４と、振り分け対象のコマンドが格納されているメインメモリ２２８とが同じコントローラ２０４に属している場合（Ｓ９２０：Ｙｅｓ）、コマンドルータ３０２は、振り分け先のプロセッサ２１４へ、コマンドに対応する格納先情報を通知し（Ｓ９２５）、図１０に示す処理へ戻る。
【００８５】
一方、振り分け先のプロセッサ２１４と、振り分け対象のコマンドが格納されているメインメモリ２２８とが異なるコントローラ２０４に属している場合（Ｓ９２０：Ｎｏ）、コマンドルータ３０２は、振り分け先のプロセッサ２１４へ、コマンドを転送し（Ｓ９３０）、図１０に示す処理へ戻る。
【００８６】
図１２は、振り分け先のプロセッサ２１４の処理を示すフローチャートである。
【００８７】
プロセッサ２１４は、格納先情報を受信した場合、メインメモリ２２８からその格納先情報に対応するコマンドを取得し、次のＳ１０１０へ進む。プロセッサ２１４は、コマンドを受信した場合、そのまま次のＳ１０１０へ進む（Ｓ１００５）。
【００８８】
プロセッサ２１４は、コマンドを受領したことを示すコマンド受領通知を、接続先情報又はコマンドの送信元のルータ部２０５へ通知する（Ｓ１０１０）。
【００８９】
プロセッサ２１４は、コマンドの内容に基づいてコマンド処理を実行する（Ｓ１０１５）。プロセッサ２１４は、コマンド処理の完了後、コンシューマインデックス２１０及びプロデューサインデックス２３１を更新し（Ｓ１０２０）、処理を終了する。
【００９０】
図１３は、図１０におけるインデックス更新処理（Ｓ８３０）の詳細を示すフローチャートである。
【００９１】
コマンドルータ３０２は、振り分け先のプロセッサ２１４からコマンド受領通知を受けたか否かを判定する（Ｓ１１０５）。
【００９２】
コマンド受領通知を受けた場合（Ｓ１１０５：Ｙｅｓ）、コマンドルータ３０２は、このコマンド受領通知に対応するポートのコンシューマインデックス２１０及びプロデューサインデックス２３１を更新し（Ｓ１１１０）、図１０に示す処理へ戻る。
【００９３】
コマンド受領通知を受けていない場合（Ｓ１１０５：Ｎｏ）、コマンドルータ３０２は、図１０に示す処理に戻る。
【００９４】
上記の処理において、振り分け先のプロセッサ２１４からコマンド受領通知を受けた後に（Ｓ１１０５：Ｙｅｓ）、インデックス更新処理（Ｓ１１１０）を行っているのは、プロデューサインデックス２３１及びコンシューマインデックス２１０に不整合が発生することを防止するためである。すなわち、プロデューサインデックス２３１及びコンシューマインデックス２１０は、プロセッサ２１４は、ホストＩ／Ｆ２０６及びコマンドルータ３０２などから共通にアクセス可能であるため、これらが一度にインデックスを変更してしまうと、不整合が発生してしまうおそれがあるためである。
【００９５】
図１４は、本実施例に係るストレージシステムの変形例を示す。
【００９６】
図１４に示すストレージシステム１３００は、図５に示すストレージシステム２００と対比して、インデックス２３１が、ストレージコントローラ１０４のメインメモリ２２８ではなく、ルータ部２０５に接続するメモリ２７０に存在する点が相違する。これにより、ルータ部２０５とインデックス２３１との間の経路的な距離が、図５に示す場合よりも短くなるので、ルータ部２０５の振り分け処理に要する時間を短縮することができる。
【００９７】
上述した実施例は、本発明の説明のための例示であり、本発明の範囲をそれらの実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【００９８】
例えば、図５において、プロセッサ２１４内のＰＣＩｅ  Ｉ／Ｆ２２０以外の部分を、プロセッサモジュールということもできる。例えば、コントローラ２０４が２つだけのストレージシステムの場合、ＰＣＩｅ  Ｉ／Ｆ２２０を相手のプロセッサモジュールとの通信を行う中継器に置換し、その中継器でルータ部２０５と同様の判定を行い、ルータ部２０５を備えないとしてもよい。また、「コントローラ」は、プロセッサモジュールとメインメモリ２２８を含んだデバイスであり、ＰＣＩｅ  Ｉ／Ｆ２２０を含んでもいなくてもよい。
【００９９】
また、ＰＣＩｅ  Ｉ／Ｆ２２０は、プロセッサモジュールと他のプロセッサとの通信のためのＩ／Ｆであってよい。また、中継器は、１以上のＰＣＩｅ  Ｉ／Ｆ２２０と１以上のルータ部２０５の内の少なくとも一方の一例であってもよい。
【０１００】
例えば、上述の説明におけるコントローラ２０４は、ホストＩ／Ｆ２０６、ディスクＩ／Ｆ２０８、プロセッサ２１４及びメインメモリ２２８から構成される「クラスタ」と呼んでもよい。また、コントローラ２０４は、複数のプロセッサ２１４及び複数のメインメモリ２２８を有してもよい。この場合においても、ルータ部２０５は、コマンドの格納されているメインメモリ２２８と、そのコマンドの振り分け先のプロセッサ２１４とが同一のコントローラ２０４に属している場合は、その振り分け先のプロセッサ２１４へ格納先情報のみを通知してよい。
【符号の説明】
【０１０１】
１０２：ホストコンピュータ  ２００：ストレージシステム  ２０４：コントローラ  ２０５：ルータ部  ２０６：ホストＩ／Ｆ  ２１４：プロセッサ  ２２８：メインメモリ
【図１】
2016006111.tif 000003
【図２】
2016006111.tif 000004
【図３】
2016006111.tif 000005
【図４】
2016006111.tif 000006
【図５】
2016006111.tif 000007
【図６】
2016006111.tif 000008
【図７】
2016006111.tif 000009
【図８】
2016006111.tif 000010
【図９】
2016006111.tif 000011
【図１０】
2016006111.tif 000012
【図１１】
2016006111.tif 000013
【図１２】
2016006111.tif 000014
【図１３】
2016006111.tif 000015
【図１４】
2016006111.tif 000016
【国際調査報告】
2016006111.tif 000017
2016006111.tif 000018
2016006111.tif 000019
2016006111.tif 000020