(57)【要約】【課題】ストレージ装置にメモリモジュール群を多段に接続可能にするためにかかる作業負担を軽減させる。【解決手段】制御装置は、通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む該経路情報を付加した該通信情報を送信し、メモリ装置は、前記通信情報を受信し、前記通信情報の宛先が前記自装置宛ではない場合、前記通信情報の前記経路情報に含まれる中継先の宛先を用いて、次の中継先へ、前記通信情報を送信する。【選択図】図４
2014194610.tif 000002
【特許請求の範囲】
【請求項１】
通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む該経路情報を付加した該通信情報を送信する制御装置と、
前記通信情報を受信し、前記通信情報の宛先が自装置宛ではない場合、前記通信情報の前記経路情報に含まれる中継先の宛先を用いて、次の中継先へ、前記通信情報を送信するメモリ装置と、
を備えることを特徴とするストレージ装置。
【請求項２】
前記制御装置は、
前記経路情報を記憶する第１の記憶部と、
前記通信情報のペイロード部に前記経路情報を付加して、該通信情報を送信する第１の送信部と、
を備える
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記メモリ装置は、
ペイロード部に前記経路情報が埋め込まれた前記通信情報を受信する受信部と、
自装置に接続される他の前記メモリ装置の識別情報と前記他のメモリ装置に接続されるポート番号とが対応付けられた情報である対応情報を記憶する第２の記憶部と、
前記通信情報が自装置宛ではない場合、前記経路情報に含まれる次の中継先の識別情報に対応するポート番号を前記対応情報から取得し、取得した前記ポート番号を前記通信情報のヘッダ部に設定する第１の設定部と、
前記ヘッダ部に設定された前記ポート番号に対応するポートから前記通信情報を送信する第２の送信部と、
を備える
ことを特徴とする請求項１または２に記載のストレージ装置。
【請求項４】
前記メモリ装置は、さらに、
前記次の転送先または前記次の転送先への経路に異常が発生したことを検出する検出部と、
前記異常が検出された場合、前記通信情報のペイロード部に前記通信情報を迂回させるための迂回情報を設定する第２の設定部と、
を備え、
前記第２の送信部は、前記通信情報に前記迂回情報が設定されている場合、前記通信情報を送信するポートを変更する
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記第２の送信部は、前記通信情報に前記迂回情報が設定されている場合、前記迂回情報及び前記受信部が前記通信情報を受信したポートに応じて、前記通信情報を送信するポートを変更する
ことを特徴とする請求項３または４に記載のストレージ装置。
【請求項６】
通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む該経路情報が付加された通信情報を受信する受信部と、
前記通信情報の宛先が前記自装置宛ではない場合、前記通信情報の前記経路情報に含まれる中継先の宛先を用いて、次の中継先へ、前記通信情報を送信する送信部とを
有することを特徴とするメモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関する。
【背景技術】
【０００２】
ＨＤＤ（Hard disk drive）を記憶媒体とするストレージ装置には、幾つかの大きなデメリットがある。その一つは、ＨＤＤのアクセス性能（特にシーク）がボトルネックとなり、ユーザからの性能要求を満たせないことである。スループットを改善するためにストレージ装置にキャッシュを設けることが考えられるが、その場合、装置の信頼性を確保するためにキャッシュの保護のための複雑な仕組みを設けることとなる。
【０００３】
図１は、ＨＤＤを記憶媒体としキャッシュを設けたストレージ装置の一例を示す。ストレージ装置１０は、ＣＰＵ（Central Processing Unit）１１、メモリコントローラ１２、スイッチ１３、ＨＤＤ１４、キャッシュメモリ（以下、キャッシュと記す）１５、キャッシュミラー１６、及びキャッシュバックアップ１７を含む。また、ストレージ装置１０はホスト１８とネットワーク等を介して接続される。
【０００４】
ＣＰＵ１１はホスト１８からストレージ装置１０に対する入出力要求を受信し、ストレージ装置全体の動作を制御する。メモリコントローラ１２はホスト１８からのアクセス対象データが格納された領域にアクセスするための仕組みを提供する。スイッチ１３は複数のＨＤＤ１４に接続し、メモリコントローラ１２とＨＤＤ１４のデータのやり取りを中継する。ＨＤＤ１４にはホスト１８からのアクセス対象のデータが格納される。
【０００５】
キャッシュ１５は、ホスト１８とＨＤＤ１４との間のデータの受け渡しの高速化を図るために使用される。キャッシュミラー１６は、キャッシュ１５に障害が発生した場合にデータの損失を回避するために設けられたものであり、キャッシュ１５と同一の内容のデータが記憶される。キャッシュ１５及びキャッシュミラー１６はＤＲＡＭ（Dynamic Random Access Memory）で構成される。
【０００６】
キャッシュ１５及びキャッシュミラー１６がＤＲＡＭで構成される場合、ＤＲＡＭは揮発性メモリであるので、停電等により予期しない電源停止が発生した場合にキャッシュの内容が失われる。キャッシュバックアップ１７は、そのような場合に備えて、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤと記す）で構成され、予期せぬ電源切断時のキャッシュのバックアップとして機能する。
【０００７】
図１のようにＨＤＤを記録媒体とするストレージシステムにおいて性能を改善するためにキャッシュを設けた場合にシステムの信頼性を確保しようとすると、ストレージシステムの仕組みが複雑になる。
【０００８】
そこで、記憶媒体としてＨＤＤではなくＮＡＮＤを用いた構成のストレージシステムがある。この構成ではＨＤＤより高速に入出力が行えるため、ユーザの性能要求を満たすためのキャッシュを設けずに、シンプルな構成とすることができる。
【０００９】
図２はＮＡＮＤで構成されたストレージシステムの一例を示す。ストレージシステム２０は、ＣＰＵ２１、ＮＡＮＤコントローラ２２、及びＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤと記す）２３を含む。また、ストレージ装置２０はホスト２４とネットワーク等を介して接続される。
【００１０】
ＣＰＵ２１は、図１で記したものと同様の機能を提供する。ＮＡＮＤコントローラ２２は、複数のＮＡＮＤ２３と接続され、ＮＡＮＤ２３の管理を行う。例えば、ＮＡＮＤコントローラ２２は、各ＮＡＮＤ２３の書換え回数の平準化（wear leveling）や、不良ブロックの管理、エラー訂正（ＥＣＣ（Error Check and Correct）等）、論理物理アドレス変換などを行う。ＮＡＮＤ２３にはホストからのアクセス対象のデータが格納される。
【００１１】
ここで、ＮＡＮＤ２３を記憶媒体とする場合、性能面を考慮すると図２に示すようにＮＡＮＤ２３をＮＡＮＤコントローラ２２に対して並列に配置する。また、ＮＡＮＤ２３は物理的に実装可能な数に限度が有るため、ストレージシステム全体の容量が制限される。このように、図２のようなストレージシステムは、実装密度面でＨＤＤの構成に劣る。
【００１２】
そこで、小容量のＮＡＮＤを制御するモジュールをツリーもしくはメッシュ状に多段に接続することにより、実装密度面の向上を図る方法がある。図３に、小容量のＮＡＮＤを制御するモジュールを多段に接続したストレージ装置の一例を示す。ストレージシステム３０は、ＣＰＵ３１、メモリコントローラ３２、及びメモリモジュール３３（図または以下の説明において、ＭＭと記す場合がある）を含む。また、ストレージ装置３０はホスト３４とネットワーク等を介して接続される。
【００１３】
ＣＰＵ３１は、図１で記したものと同様の機能を提供する。メモリコントローラ３２は、ホスト３４からのアクセス対象データが格納されたメモリモジュールの領域にアクセスするための仕組みを提供する。メモリモジュール３３は、ＮＡＮＤコントローラとＮＡＮＤを含み、図２で説明したＮＡＮＤコントローラ２２及びＮＡＮＤ２３と同様の機能を提供する。
【００１４】
図３においては、メモリモジュール３３は、自身に接続されたＮＡＮＤに対するアクセスパス以外に、他のメモリモジュールに対するスルーパスを備える。
図３に示すようなメモリモジュール群を多段に接続可能にするための方法として、独自にプロトコルを定義して設定する方法がある。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】米国特許出願公開第２００９／０１５０７０７号明細書
【特許文献２】特開２０１０−２８７２０３号公報
【特許文献３】特開２０１２−１８６３９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、独自にプロトコルを定義する方法では、開発手番（コスト、工数）が大きくなる。
【００１７】
そこで、１つの側面では、本発明は、ストレージ装置にメモリモジュール群を多段に接続可能にするためにかかる作業負担を軽減させることを目的とする。
【課題を解決するための手段】
【００１８】
一態様のストレージ装置は、制御装置と、複数のメモリ装置を含む。制御装置は、通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む経路情報を付加した通信情報を送信する。メモリ装置は、通信情報を受信し、通信情報の宛先が自装置宛ではない場合、通信情報の経路情報に含まれる中継先の宛先を用いて、次の中継先へ、通信情報を送信する。
【発明の効果】
【００１９】
本実施形態に係るストレージ装置によれば、ストレージ装置にメモリモジュール群を多段に接続可能とするためにかかる作業負担を軽減させることができる。
【図面の簡単な説明】
【００２０】
【図１】ＨＤＤを記憶媒体としキャッシュを設けたストレージ装置の一例を示す。
【図２】ＮＡＮＤで構成されたストレージシステムの一例を示す。
【図３】小容量のＮＡＮＤを制御するモジュールを多段に接続したストレージ装置の一例を示す。
【図４】本実施形態に係るストレージ装置の構成の一例を示す。
【図５】（Ａ）はＰＣＩｅのパケットのフォーマットを示し、（Ｂ）はＴＬＰヘッダ４１のフォーマットを示し、（Ｃ）は各メモリモジュール内のローカルメモリアドレスの指定のために40bit確保した場合のアドレスフィールド４５の様子を説明するための図である。
【図６】本実施形態に係るストレージ装置においてメモリモジュール間の接続の構成を示す図である。
【図７】本実施形態において、パケットがメモリコントローラからメモリモジュール内のＮＡＮＤに送信される様子を説明するための図である。
【図８】メモリコントローラがパケットの宛先経路を特定するためのルートマップのデータ構造の一例を示す。
【図９】アクセス要求を受信したときのメモリコントローラの動作フローを示す。
【図１０】（Ａ）は本実施形態に係るストレージ装置で送受信されるパケットの一例を示し、（Ｂ）は本実施形態におけるパケットのアドレスフィールドに格納されるデータ構造を示す。
【図１１】メモリモジュールの構成の一例を示す。
【図１２】ポート対応表の一例を示す。
【図１３】ＮＡＮＤコントローラの転送処理の様子を説明するための図（その１）である。
【図１４】ＮＡＮＤコントローラの転送処理の様子を説明するための図（その２）である。
【図１５】下位ポートの異常を通知するためのパケットの構成の一例を示す。
【図１６】エラーが発生したことを通知するための応答通知パケットの構成の一例を示す。
【図１７】内部エラーが発生した場合のＮＡＮＤコントローラの動作を説明するための図である。
【図１８】メモリモジュール間の経路で異常が発生した場合の、パケットが迂回路を通るように設定される様子について説明するための図である。
【図１９】左迂回フラグが設定されたパケットが転送される様子を説明するための図である。
【図２０】右迂回フラグが設定されたパケットが転送される様子を説明するための図である。
【図２１】上位ポートからパケットを受信した際のメモリモジュールの動作フローを示す。
【図２２】下位ポートからパケットを受信した際のメモリモジュールの動作フローを示す。
【図２３】下位ポートの異常を検出した際のメモリモジュールの動作フローを示す。
【図２４】複数のメモリモジュールでＲＡＩＤを組んだ接続構成の一例を示す。
【図２５】メモリモジュールの切り替え後の構成の一例を示す。
【図２６】本実施形態に係るメモリコントローラ及びＮＡＮＤコントローラのハードウェア構成の一例を示す。
【発明を実施するための形態】
【００２１】
図４は、本実施形態に係るストレージ装置の構成の一例を示す。
ストレージ装置４０１は、制御装置４０２と、複数のメモリ装置４０３を含む。制御装置４０２は、通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む経路情報を付加した通信情報を送信する。メモリ装置４０３は、通信情報を受信し、通信情報の宛先が自装置宛ではない場合、通信情報の経路情報に含まれる中継先の宛先を用いて、次の中継先へ、通信情報を送信する。
【００２２】
制御装置４０２は、第１の記憶部４０４と、第１の送信部４０５とを含む。
第１の記憶部４０４は、通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む経路情報を付加した通信情報を記憶する。
【００２３】
第１の送信部４０５は、通信情報のペイロード部に経路情報を付加して、通信情報を送信する。
メモリ装置４０３のそれぞれは、受信部４０６、第２の記憶部４０７、判定部４０８、第１の設定部４０９、第２の送信部４１０、検出部４１１、第２の設定部４１２、及び異常通知生成部４１３を含む。
【００２４】
受信部４０６は、ペイロード部に経路情報が付加された通信情報を受信する。
第２の記憶部４０７は、自装置に接続される他のメモリ装置の識別情報と他のメモリ装置に接続されるポート番号とが対応付けられた情報である対応情報を記憶する。
【００２５】
判定部４０８は、経路情報に基づいて通信情報が自装置宛であるか否かを判定する。
第１の設定部４０９は、通信情報が自装置宛ではないと判定された場合、経路情報に含まれる次の中継先の識別情報に対応するポート番号を対応情報から取得し、取得したポート番号を通信情報のヘッダ部に設定する。
【００２６】
第２の送信部４１０は、ヘッダ部に設定されたポート番号に対応するポートから通信情報を送信する。また、第２の送信部４１０は、通信情報に迂回情報が設定されている場合、通信情報を送信するポートを変更する。また、第２の送信部４１０は、通信情報に迂回情報が設定されている場合、迂回情報及び受信部４０６が通信情報を受信したポートに応じて、通信情報を送信するポートを変更する。第２の送信部４１０は、通信情報に異常情報が格納されている場合、通信情報を送信するポートを変更する。
検出部４１１は、次の中継先または次の中継先への経路に異常が発生したことを検出する。
【００２７】
第２の設定部４１２は、異常が検出された場合、通信情報のペイロード部に通信情報を迂回させるための迂回情報を設定する。
異常通知生成部４１３は、異常が検出された場合、通信情報を生成し、生成した通信情報のペイロード部に異常が発生したことを示す異常情報を付加する。
【００２８】
制御装置４０２及び複数のメモリ装置４０３は、二分木の各ノードに幅優先探索の順で識別情報が振られたときに、識別情報の差が１であり、同一の親ノードを持たない葉ノード間が接続されるグラフにおいて、各ノードにメモリ装置をそれぞれ割り当て、二分木の根ノードに制御装置を割り当てたときに構成される接続形態で接続される。
【００２９】
本実施形態では、ストレージ装置にメモリモジュール群を多段に接続可能とするために、汎用プロトコルを用いる。これにより、メモリモジュール群を多段に接続するために独自のプロトコルを定義する作業を削減できる。
【００３０】
本実施形態では汎用プロトコルとして、ＰＣＩ  Ｅｘｐｒｅｓｓ（以下、ＰＣＩｅと記す）の汎用プロトコルを用いる。尚、ＰＣＩｅはＩＰ（ｉｎｔｅｌｌｅｃｔｕａｌ  ｐｒｏｐｅｒｔｙ）としてパッケージされた物が各ベンダーから出ているためプロトコルとして装置に組み込みやすいという側面がある。
【００３１】
ＰＣＩｅの汎用プロトコルは、図３の例のようにメモリモジュールを多段に接続する構成に適したプロトコルではない。これは、ＰＣＩｅの汎用プロトコルの構成に因るものである。次に、図５を参照してＰＣＩｅの汎用プロトコルの構成を説明し、ＰＣＩｅの汎用プロトコルは多段接続に適さないプロトコルである理由を説明する。
【００３２】
図５（Ａ）は、ＰＣＩｅのパケットのフォーマットを示す図である。図５の例は、ＰＣＩｅのトランザクションレイヤのパケットを示しており、以下の説明ではこのパケットをＴＬＰ（transaction layer packet）と記す。ＴＬＰは、ＴＬＰヘッダ４１（TLP Header）、データペイロード４２、ＴＬＰダイジェスト（TLP Digest）４３の３つのフィールドを含む。
【００３３】
ＴＬＰヘッダ４１は、コマンドタイプやアドレスなどの情報が格納される。データペイロード４２はＴＬＰのうち、ＴＬＰヘッダ４１及びＴＬＰダイジェスト４３等の管理情報を除いた正味のデータが格納される。ＴＬＰダイジェスト４３は、オプションのフィールドであり、誤り検出またはリカバリのためのデータが格納される。
【００３４】
図５（Ｂ）は、ＴＬＰヘッダ４１のフォーマットを示す。ＴＬＰヘッダ４１は、図５（Ｂ）に示すように、上位８バイト（予約領域を含む）の制御情報フィールド４４と、下位８バイト（予約領域を含む）のアドレスフィールド４５を含む。制御情報フィールド４４には例えば、フォーマット、タイプ、長さ等の情報が含まれる。
【００３５】
アドレスフィールド４５は、パケットの宛先のアドレスが格納される。ここで、図３のように多段にメモリモジュールを接続する場合において、各メモリモジュールが1TB（terabyte）程度のメモリ容量を有する場合、各メモリモジュール内のローカルのメモリアドレスを指定するために必要なアドレスフィールド４５は40bit程度になる。
【００３６】
図５（Ｃ）は、各メモリモジュール内のローカルメモリアドレスの指定のために40bit確保した場合のアドレスフィールド４５の様子を説明するための図である。図５（Ｃ）の上位アドレスフィールド４６には、ストレージ装置のメモリモジュールの接続構成において、アクセス対象となるメモリモジュールがどれかを特定するためのアドレス情報（以下、メモリモジュールアドレスと記す）が格納される。メモリモジュールアドレスは、具体的には例えば、各メモリモジュール内に含まれるスイッチのポートの番号がＢｙｔｅ単位で表される。下位アドレスフィールド４７には、上位アドレスフィールド４６で示されるメモリモジュールにおいて、そのメモリモジュールに接続されるＮＡＮＤの領域のアドレスを指定するためのアドレス情報（以下、ローカルアドレスと記す）が格納される。
【００３７】
下位アドレスフィールド４７が40bit確保されると、上位アドレスフィールド４６はアドレスフィールド４５の残りの24bitが確保されることになる。その場合、上位アドレスフィールド４６には3ポート分の情報しか確保できない。このため、メモリモジュールの最大連結数は3個程度となる。このように、ＰＣＩｅの汎用プロトコルはメモリモジュールの多段接続に適さない。
ＰＣＩｅの汎用プロトコルにおいて、パケットの種別は、メモリリード、メモリライトなどが定められている。
【００３８】
本実施形態では、メモリコントローラとＮＡＮＤとの間のアクセスを、メモリライト（Memory.Wt.）のパケットのやり取りを基本として行う。すなわち、メモリリード要求についても、本実施形態においては、メモリライトのパケットを基本としたパケットを用いる。これにより、多段に接続されたメモリモジュールの構成においてＰＣＩｅに準拠した構成が実現可能となる。
【００３９】
ここで、ＰＣＩｅの汎用プロトコルでは、種別がメモリライトのパケットを受け取ったときの応答については規定されていない。よって、ＰＣＩｅの汎用プロトコルでは書き込みデータのターゲットへの送達は保証されないが、本実施形態においては、メモリライトのパケットを受け取った場合にメモリモジュールは応答パケットを返す。これにより、書き込みデータのターゲットへの送達の保証が可能となる。パケットの応答動作については後ほど説明する。
【００４０】
次に、本実施形態に係るストレージ装置におけるメモリモジュールの接続の構成について説明する。図６は、本実施形態に係るストレージ装置においてメモリモジュール間の接続の構成の一例を示す図である。
【００４１】
図６に示すように、ストレージ装置における接続構成は、メモリコントローラ６１を頂点（根）とし、頂点以外の各ノードをメモリモジュール６２とする木構造（二分木）のような接続構成となる。ここで、各ノードにあたるメモリモジュール６２は一意の識別番号をもち、識別番号は頂点であるメモリコントローラ６１から幅優先探索の順に振られる。ただし、接続構成は木構造とは異なり、木構造の最底辺に位置する葉ノードにあたるメモリモジュール６２は、隣接する葉ノードにあたるメモリモジュール６２に接続される。言い換えると、木構造の最底辺に位置する葉ノードにあたるメモリモジュール６２は、以下の条件をもつメモリモジュールに接続される。接続対象のメモリモジュールの条件はすなわち、識別番号の差が１であり、最底辺に位置し、且つ同一の親ノードをもたないメモリモジュールであることである。すなわち、図６の例では、ＭＭ８とＭＭ９が接続され、ＭＭ１０とＭＭ１１が接続され、・・・というように接続される。ここで、各ノードはＰＣＩｅにより接続される。
【００４２】
尚、メモリコントローラ６１に直接接続されるメモリモジュールは２以上であってもよい。ただしその場合も、メモリコントローラ６１に直接接続されるメモリモジュールを頂点とする部分木は二分木の構成となる。
以下の説明では、メモリモジュール６２間の接続構成に関する説明においては、メモリモジュール６２を単にノードと記す場合がある。
【００４３】
図６に示すように、本実施形態における各メモリモジュール６２は、他のメモリモジュール６２と接続される３つのポートを有する。ポート１（PT.1）は、親ノードに接続され、ポート２（PT.2）及びポート３（PT.3）は、子ノードまたは深さのレベルが等しいノードに接続される。具体的には、最底辺のノード以外の内部ノードにおいては、ポート２は子ノードのうち番号の若い方のノードに接続し、ポート３は子ノードのうち番号の大きい方のノードに接続される。また、着目するノードをノードＡとすると、最底辺ノードにおいては、ノードＡのポート２は、最底辺のノードのうち識別番号がノードＡより１小さいノードに接続される。または、ノードＡのポート３は、最底辺のノードのうち識別番号がノードＡより１大きいノードに接続される。ここで、最底辺のノードは、同一の親ノードをもつノードに対しては接続されないので、ポート２またはポート３のうちどちらか一方、またはどちらのポートも接続されない構成となる。例えば、ＭＭ８はポート３を介してＭＭ９と接続され、ＭＭ９はポート２を介してＭＭ８に接続される。また、ＭＭ７のポート２及びポート３は接続されない。
【００４４】
以下の説明では、親ノードに接続するポート１を上位ポート、子ノードまたは深さのレベルが等しいノードに接続するポート２及びポート３を下位ポートと記す場合がある。
尚、メモリコントローラ６１は、制御装置４０２に対応する。また、メモリモジュール６２は、メモリ装置４０３に対応する。
【００４５】
次に、パケットがメモリコントローラ６１からメモリモジュール６２内のＮＡＮＤに送信される様子を説明する。
図７は、本実施形態において、パケットがメモリコントローラからメモリモジュール内のＮＡＮＤに送信される様子を説明するための図である。図７の例は、メモリコントローラ６１からＭＭ１５にパケットが送信される例を示している。
【００４６】
メモリコントローラ６１は、各メモリモジュール６２に至る経路を予め記録したルートマップ８０をメモリコントローラ６１の記憶部に格納している。そして、メモリコントローラ６１はルートマップ８０を用いてパケットの宛先経路を特定し、経路情報８２をパケットのデータペイロードに埋め込んで送信する。経路情報８２については、詳しくは後ほど説明するが、メモリコントローラ６１から宛先のメモリモジュール６２までの経路上に位置するメモリモジュール６２の識別番号（以下、ＮＩＤと記すことがある）を順番に並べた情報である。
【００４７】
図７の例において、ＭＭ７及びＭＭ１５がパケットを受信した場合の動作を説明する。ＭＭ７はパケットを受信すると、パケットに埋め込まれた経路情報８２を確認する。そして、ＭＭ７は、経路情報８２の途中に自身のＮＩＤ、すなわち、ＭＭ７があることを確認すると、ＭＭ７の次に記されたＮＩＤのメモリモジュール６２であるＭＭ１５に対して、パケットを回送する。ＭＭ１５は、ＭＭ７からパケットを受信すると、パケットに埋め込まれた経路情報８２を参照する。そして、ＭＭ１５は、自身のＮＩＤであるＭＭ１５が経路情報８２の最後に記されていることを確認する。すると、ＭＭ１５は受信したパケットがＭＭ１５宛のパケットであると認識する。
【００４８】
図８は、メモリコントローラがパケットの宛先経路を特定するためのルートマップのデータ構造の一例を示す。
ルートマップ８０は、宛先情報８１と経路情報８２のデータ項目を含む。宛先情報８１は、ストレージ装置に含まれるメモリモジュール６２の識別番号で示された宛先のメモリモジュール６２を示す情報である。経路情報８２は、宛先情報８１で示されるメモリモジュール６２（以下、宛先メモリモジュールと記す）に対するメモリコントローラ６１からの経路情報８２が格納される。経路情報８２は、メモリコントローラ６１から宛先メモリモジュールに至る経路上に位置するメモリモジュール６２の識別番号（ＮＩＤ）を、メモリコントローラ６１側から順に並べたものである。尚、経路情報８２の末尾に記されるＮＩＤは、宛先メモリモジュールのＮＩＤとなる。尚、経路情報８２は、メモリコントローラ６１から宛先メモリモジュールに至る経路が判別できるものであれば、図８の例に限定されない。
【００４９】
次に、メモリコントローラ６１がホストからのアクセス要求を受信したときの、パケットの送信動作について説明する。図９は、アクセス要求を受信したときのメモリコントローラの動作フローを示す。
【００５０】
メモリコントローラ６１は、アクセス要求とともにアクセス対象のアドレスを受信する（Ｓ９１）と、アクセス対象のアドレスがどのメモリモジュール６２に含まれるＮＡＮＤの領域かを特定する。そして、メモリコントローラ６１は、ルートマップ８０を参照し、特定した宛先メモリモジュールに対応する経路情報８２を取得する（Ｓ９２）。次に、メモリコントローラ６１は、Ｓ９２で取得した経路情報８２をパケットに埋め込んで、経路情報８２に記された最初のメモリモジュール６２にパケットを送信する（Ｓ９３）。
【００５１】
本実施形態においては、メモリコントローラ６１はパケットを送信する際に、経路情報８２をパケットに埋め込むが、次に、本実施形態にかかるストレージ装置で送受信されるパケットの構成を説明する。図１０（Ａ）は、本実施形態に係るストレージ装置で送受信されるパケットの一例を示す。
【００５２】
パケットは、図５に示したＰＣＩｅのパケット（ＴＬＰ）と同様に、ＴＬＰヘッダ４１、データペイロード４２、ＴＬＰダイジェスト４３の３つのフィールドを含む。
ＴＬＰヘッダ４１の構成は図５に示したＴＬＰと同様であるが、アドレスフィールド４５に格納されるデータは異なる。
【００５３】
図１０（Ｂ）は、本実施形態におけるパケットのアドレスフィールド４５に格納されるデータの構造を示す。アドレスフィールド４５には、上位側にＭＭ間回送用制御情報１０５が含まれ、下位側にＮＡＮＤアドレス情報１０６が含まれる。
【００５４】
ＭＭ間回送用制御情報１０５は、上位ポートからパケットを受信したメモリモジュール６２が下位ポートからパケットを転送するために使用される制御情報である。具体的には、ＭＭ間回送用制御情報１０５は、メモリモジュール６２に含まれるＰＣＩｅスイッチがパケットを転送する際の、パケットの出力ポートの番号が格納される。ＭＭ間回送用制御情報１０５が使用される様子は後ほど説明する。
【００５５】
ＮＡＮＤアドレス情報１０６は、メモリモジュール６２が内蔵するＮＡＮＤアドレス情報が設定される。この情報は、図５（Ｃ）における下位アドレスフィールド４７の情報と同様である。
【００５６】
データペイロード４２は、パケット識別子フラグ１０１、迂回フラグ１０２、経路情報１０３、及びＮＡＮＤ書き込みデータ１０４が含まれる。
パケット識別子フラグ１０１は、当該パケットが正常パケットか応答パケットか異常通知パケットかを示す識別子の情報である。
【００５７】
正常パケットは、メモリコントローラ６１がアクセス要求を受信した際に宛先アドレスに対して送信するパケットであり、そのようなパケットである場合に、パケット識別子フラグには正常パケットを示す識別子が設定される。
【００５８】
応答パケットは、アクセス対象のメモリモジュール６２がパケットを受信して、そのパケットに対して応答する際に送信されるパケットであり、そのようなパケットである場合に、パケット識別子フラグには、応答パケットを示す識別子が設定される。
【００５９】
異常通知パケットは、メモリモジュール６２が他のメモリモジュール６２と接続されるポートのリンクダウンを検出した場合に送信されるパケットであり、そのようなパケットである場合に、パケット識別子フラグには、異常通知パケットを示す識別子が設定される。
【００６０】
迂回フラグ１０２は、パケット回送経路上に障害が発生したときに、パケットを迂回させるために設定されるフラグである。迂回フラグ１０２は、左迂回フラグと右迂回フラグとを含む。詳しくは後ほど説明するが、本実施形態では、障害が発生した経路に応じて、左迂回フラグまたは右迂回フラグの値が設定される。
【００６１】
経路情報１０３は、パケットが回送される経路を示した情報である。経路情報１０３には、メモリコントローラ６１がルートマップ８０を参照して取得した経路情報８２が格納される。
【００６２】
ＮＡＮＤ書き込みデータ１０４には、実際にＮＡＮＤに書き込まれるデータが格納される。
ＴＬＰダイジェスト４３は図５に示したＴＬＰと同様である。
以下の説明において、パケットとは図１０を参照して説明したフォーマットのパケットを指す。
【００６３】
次にメモリモジュール６２の構成と動作について説明する。図１１は、メモリモジュールの構成の一例を示す。メモリモジュール６２は、ＰＣＩｅスイッチ１１１、ＮＡＮＤコントローラ１１２、及びＮＡＮＤ１１３を含む。
【００６４】
ＰＣＩｅスイッチ１１１は、データの転送処理を行う。図１１に示すように、ＰＣＩｅスイッチは４つのポートを有する。ポート１、ポート２、及びポート３は、図６において説明したものである。ポート１（PT.1）は、メモリモジュール６２が接続されるネットワークにおいて親ノードに接続され、ポート２（PT.2）及びポート３（PT.3）は、子ノードまたは兄弟ノードに接続されるものである。ポート０はＮＡＮＤコントローラ１１２に接続される。
【００６５】
ＰＣＩｅスイッチ１１１は、ポート１に接続されたメモリモジュール６２もしくはメモリコントローラ６１からパケットを受信すると、受信したパケットをポート０からＮＡＮＤコントローラ１１２に転送する。また、ＰＣＩｅスイッチ１１１は、ポート２またはポート３からパケットを受信すると、受信したパケットをポート１から親ノードに転送する。
【００６６】
さらにＰＣＩｅスイッチ１１１は、ＮＡＮＤコントローラ１１２からポート０を介してパケットを受信すると、パケットのパケット識別子フラグ１０１及びＭＭ間回送用制御情報１０５を参照して、いずれのポートからパケットを出力するかを決定する。そして、ＰＣＩｅスイッチ１１１は、決定したポートからパケットを出力する。
具体的には、ＰＣＩｅスイッチ１１１は、ＮＡＮＤコントローラ１１２からパケットを受信すると、先ず、受信したパケットのパケット識別子フラグ１０１を参照する。
【００６７】
パケット識別子フラグ１０１が応答パケットを示す識別子に設定されている場合、ＰＣＩｅスイッチ１１１は受信したパケットをポート１から出力し、パケットを親ノードに転送する。
パケット識別子フラグ１０１が異常通知パケットを示す識別子に設定されている場合、ＰＣＩｅスイッチは受信したパケットをポート１から出力し、パケットを親ノードに転送する。
【００６８】
パケット識別子フラグが正常パケットを示す値に設定されている場合、ＰＣＩｅスイッチ１１１は、ＭＭ間回送用制御情報１０５を参照し、ＭＭ間回送用制御情報１０５の値がポート２を示す情報であった場合、受信したパケットをポート２から出力する。また、ＭＭ間回送用制御情報１０５の値がポート３を示す情報であった場合、ＰＣＩｅスイッチ１１１は、受信したパケットをポート３から出力する。
【００６９】
次に、ＮＡＮＤコントローラ１１２について説明する。ＮＡＮＤコントローラ１１２は、パケットの転送処理、下位ポートの異常通知処理、内部エラー通知処理の機能を持つ。
パケットの転送処理では、ＮＡＮＤコントローラ１１２は、受信したパケットが自身のノード宛か他のノード宛かを判定し、自身のノード宛の場合は受信したパケットを内部処理し、他のノード宛の場合は受信したパケットを他ノードに転送する処理を行う。尚、以下の説明では、着目するノードそれ自体を自ノードと記し、着目するノード以外のノードを他ノードと記す。
【００７０】
下位ポートの異常通知処理では、ＮＡＮＤコントローラ１１２は、ＰＣＩｅスイッチ１１１の下位ポートの異常（例えばリンクダウン）が検出された場合、異常を検出したことを通知するパケットを生成し、メモリコントローラ６１宛に送信する。ここで、ＰＣＩｅスイッチ１１１のポートがリンクダウンする場合とは、例えば、メモリモジュール６２が接続する経路に障害が発生した場合、または自ノードの下位ポートが直接接続する他ノードがダウンした場合が考えられる。
【００７１】
内部エラー通知処理では、ＮＡＮＤコントローラ１１２は、内部エラーが発生した場合、エラーが発生したことを通知するパケットを生成し、メモリコントローラ６１宛に送信する。内部エラーが発生する場合としては、例えば、内部のＮＡＮＤに書き込みを行う際にＮＡＮＤに障害が発生し書き込みエラー等が発生する場合や、パケットを他のノードに転送する際に自ノードのＰＣＩｅスイッチに障害が発生しパケットを転送できない場合等が考えられる。
【００７２】
次に、ＮＡＮＤコントローラ１１２の転送処理について詳細に説明する。
転送処理のために、ＮＡＮＤコントローラ１１２は、自ノードが属するネットワークにおける自ノードの位置関係を把握するための情報を持つ。ＮＡＮＤコントローラ１１２は、ＰＣＩｅスイッチ１１１のポート番号に対応付けられたＮＩＤを用いてネットワークにおける自ノードの位置関係を把握する。すなわち、ＮＡＮＤコントローラ１１２は、ポート１、ポート２、及びポート３に接続されるメモリモジュール６２のＮＩＤの情報をポート対応表として持つ。
【００７３】
図１２にポート対応表の一例を示す。ポート対応表１２０は、ポート番号１２１、及び接続メモリモジュール識別情報１２２のデータ項目を含む。ポート番号１２１は、メモリモジュール６２のＰＣＩｅスイッチ１１１のポートの番号が格納される。接続メモリモジュール識別情報１２２は、ポート番号１２１に接続されるメモリモジュール６２の識別情報が格納される。図１２に示すポート対応表１２０は、図７のＭＭ３が持つポート対応表の例を示しており、ポート１がＮＩＤ（ＭＭ１）のメモリモジュール６２に、ポート２がＮＩＤ（ＭＭ７）のメモリモジュール６２に、ポート３がＮＩＤ（ＭＭ８）のメモリモジュール６２にそれぞれ接続されていることを示す情報が格納されている。
【００７４】
図１３及び図１４は、ＮＡＮＤコントローラの転送処理の様子を説明するための図である。
図１３に示すように、パケットの転送処理において、ＮＡＮＤコントローラ１１２は、先ず、受信したパケットに含まれる経路情報１０３を参照して、そのパケットの宛先が自ノードか否かを判定する。
【００７５】
具体的には、ＮＡＮＤコントローラ１１２は、受信したパケットに含まれる経路情報１０３の最後のノードが自ノードか否かを判定する。最後のノードが自ノードである場合、ＮＡＮＤコントローラ１１２は、パケットの宛先は自ノードであると判定する。最後のノードが自ノードでない場合、ＮＡＮＤコントローラ１１２は、パケットの宛先は他ノードであると判定する。
【００７６】
受信したパケットの宛先が他ノードであると判定した場合、ＮＡＮＤコントローラ１１２は、次の宛先メモリモジュールを特定し、特定したＮＩＤのメモリモジュール６２に、受信したパケットを転送する。
【００７７】
次の宛先メモリモジュールの特定では、具体的には、ＮＡＮＤコントローラ１１２は、受信したパケットに含まれる経路情報１０３において、自ノードの次に記されたノードを転送先ノードであると判定する。例えば、図９のＭＭ７宛てのパケットをＭＭ３が受信した場合、ＭＭ３のＮＡＮＤコントローラ１１２は、経路情報１０３において自ノードのＮＩＤの次に記されたＮＩＤであるＭＭ７を転送先ノードであると判定する。
転送先ノードを特定すると、ＮＡＮＤコントローラ１１２は、ポート対応表１２０を参照して、転送先ノードに対応するポートの番号を取得する。
【００７８】
次に、ＮＡＮＤコントローラ１１２は、取得したポート番号を示す情報を、受信したパケットのＭＭ間回送用制御情報１０５に設定する。
そして、ＮＡＮＤコントローラ１１２は、設定したパケットをＰＣＩｅスイッチ１１１に転送する。このパケットを受信したＰＣＩｅスイッチ１１１は、ＭＭ間回送用制御情報１０５に設定されたポート番号からパケットを送信する。
【００７９】
ここで、ＭＭ間回送用制御情報１０５は、本実施形態では、パケットの転送先ポートがポート２かポート３のいずれかを示す情報が格納される。よって、ＭＭ間回送用制御情報は例えば、１ビットのブール値であってもよく、このようにすることで、ＴＬＰヘッダ４１のアドレスフィールド４５において、各メモリモジュール６２内のローカルメモリアドレスの指定のための領域を広く確保することができる。
【００８０】
尚、図１３に示すように、下位ポート（ポート２またはポート３）から受信したパケットはＮＡＮＤコントローラ１１２を介することなく、上位ポート（ポート１）から送信される。
【００８１】
また、図１３に示すように、受信したパケットの宛先が自ノードであると判定した場合、ＮＡＮＤコントローラ１１２は、受信したパケットを内部に取り込む。そして、ＮＡＮＤコントローラ１１２は、例えば、受信したパケットが書き込みアクセスの場合、パケットの書き込みデータ１０４の内容をＮＡＮＤアドレス情報１０６で示されるアドレスに書き込む。また、ＮＡＮＤコントローラ１１２は、図１４に示すように、宛先ノードにパケットが到達したことを通知するためのパケット（以下、応答パケットと記す）を生成して、メモリコントローラ６１に対して応答する。応答パケットは、書き込み処理が終了した時点で生成されるようにしてもよい。読み込みアクセスの場合は、応答パケットに読み込み対照のデータが格納される。
【００８２】
応答パケットの送信処理では、具体的には、ＮＡＮＤコントローラ１１２は、先ず新たにパケットを生成し、生成したパケットのパケット識別子フラグ１０１に応答パケットを示す識別子を設定する。そして、ＮＡＮＤコントローラ１１２は生成したパケットをＰＣＩｅスイッチ１１１に転送する。ＰＣＩｅスイッチ１１１に転送されたパケットは、応答パケット受信時の処理動作に従ってポート１から親ノードに出力され、最終的にメモリコントローラ６１に到達する。パケットを受信すると、メモリコントローラ６１は異常が発生したことを異常の内容と併せてホストに通知する。
【００８３】
次に、ＮＡＮＤコントローラ１１２の下位ポートの異常通知処理について説明する。
ＮＡＮＤコントローラ１１２は、下位ポートの異常（例えばリンクダウン）を検出した場合、ポート異常をメモリコントローラ６１に通知するためのパケットを生成し、メモリコントローラ６１宛に送信する。
【００８４】
図１５に下位ポートの異常を通知するためのパケット（以下、異常通知パケットと記す）の構成の一例を示す。異常通知パケットは、基本的には、図１０に示したパケットと同様の構成となるが、異常の内容を格納するための異常内容情報１０７のフィールドがデータペイロード４２に確保される。また、パケット識別子フラグ１０１に異常通知パケットを示す識別子が設定される。尚、迂回フラグ１０２、経路情報１０３、及び書き込みデータ１０４には値は設定されない。
【００８５】
次に、下位ポートの異常通知を検出した際のＮＡＮＤコントローラ１１２の動作について説明する。
下位ポートの異常を検出すると、ＮＡＮＤコントローラ１１２は、新たにパケットを生成し、生成したパケットのパケット識別子フラグ１０１に異常通知パケットを示す識別子を設定する。また、ＮＡＮＤコントローラ１１２は、検出した異常の内容を示す情報を異常内容情報１０７のフィールドに格納する。異常の内容を示す情報としては、リンクダウンしたポートの番号やリンクダウンしたポートに接続されているメモリモジュール６２の情報が格納される。そして、ＮＡＮＤコントローラ１１２は生成したパケットをＰＣＩｅスイッチ１１１に転送する。ＰＣＩｅスイッチ１１１に転送されたパケットは、異常通知パケット受信時の処理動作に従ってポート１から親ノードに出力され、最終的にメモリコントローラ６１に到達する。パケットを受信すると、メモリコントローラ６１は異常が発生したことを異常の内容と併せてホストに通知する。
【００８６】
次に、ＮＡＮＤコントローラ１１２の内部エラー通知処理について説明する。
ＮＡＮＤコントローラ１１２は、親ノードからパケットを受信した際に、内部エラーを検出すると、受信したパケットに対する応答パケットにエラーが発生した旨の情報を格納して応答通知パケットを送信する。
【００８７】
図１６は、エラーが発生したことを通知するための応答通知パケット（以下、異常応答通知パケットと記す）の構成の一例を示す。異常応答通知パケットは、基本的には、図１０に示したパケットと同様の構成となるが、異常が発生したことを示す応答ステータス情報１０８と、異常が発生したノードの情報が格納される応答ノード情報１０９のフィールドがデータペイロード４２に確保される。尚、迂回フラグ１０２、経路情報１０３、及び書き込みデータ１０４には値は設定されない。
【００８８】
図１７は、内部エラーが発生した場合のＮＡＮＤコントローラの動作を説明するための図である。図１７の例では、メモリモジュール６２が親ノードからパケットを受信して、パケットを下位ポートから送信する際にＰＣＩｅスイッチ１１１でエラーが発生した場合の例である。
【００８９】
自ノード内部のエラーを検出すると、ＮＡＮＤコントローラ１１２は、新たにパケットを生成し、生成したパケットのパケット識別子フラグ１０１に応答通知パケットを示す識別子を設定する。また、ＮＡＮＤコントローラ１１２は、応答ステータス情報１０８に異常を検出したことを示す情報を格納する。応答ステータス情報１０８は、異常が発生したか否かを判定するためのものであるので、２値のフラグであってよい。また、ＮＡＮＤコントローラ１１２は、応答ノード情報１０９に自ノードの識別番号（ＮＩＤ）を格納する。
【００９０】
そして、ＮＡＮＤコントローラ１１２は生成したパケットをＰＣＩｅスイッチ１１１に転送する。ＰＣＩｅスイッチ１１１に転送されたパケットはポート１から出力され、最終的にメモリコントローラ６１に到達する。パケットを受信すると、メモリコントローラ６１は異常が発生したことをホストに通知する。
【００９１】
内部エラーが発生するケースは図１７で示した場合に限定されない。例えば、自ノードが管理するＮＡＮＤに対するデータの書き込み処理時に、書き込みエラーが発生した場合等が考えられる。
【００９２】
尚、異常応答通知パケットは、親ノードから受信したパケットに対する応答時に送付されるとしたが、エラーを検出したタイミングで異常応答通知パケットを生成し、メモリコントローラ６１に宛てて送付してもよい。
【００９３】
本実施形態においては、メモリモジュール６２間の経路（ＰＣＩｅリンク）で異常が発生した場合、パケットは迂回経路を通って宛先のメモリモジュール６２に届けられるようにしてもよい。図１８は、メモリモジュール間の経路で異常が発生した場合の、パケットが迂回路を通るように設定される様子について説明するための図である。
【００９４】
図１８の例では、正常時には、メモリコントローラ６１からＭＭ５までの経路は、ＭＭ０、ＭＭ１、ＭＭ３、ＭＭ５の経路となる。図１８の例において、ＭＭ１とＭＭ３の間の経路で障害が発生した場合、ＭＭ１は、ＭＭ３と接続されるポートのリンクダウンを検出し、異常通知パケットをメモリコントローラ６１に送信する。
【００９５】
また、このときＭＭ１はメモリコントローラ６１からＭＭ５宛てのパケットを受信すると、迂回経路をとるようにしてＭＭ５にパケットを送信する。図１８の例の場合、ＭＭ１はパケットを受信すると、ＭＭ４、ＭＭｘ１、ＭＭｚ１、ＭＭｙ１、ＭＭ５の経路でパケットをＭＭ５に届ける。
【００９６】
このように、メモリモジュール６２間の経路で異常が発生した場合にパケットが迂回経路を介して宛先メモリモジュールに到達するようにするために、異常を検出したメモリモジュール６２は受信したパケットに対して迂回フラグ１０２の設定を行う。迂回フラグ１０２には右迂回フラグと左迂回フラグがあるが、どちらの迂回フラグが設定されるかは、異常を検出したポートに応じて決まる。すなわち、異常を検出したポートが、ポート２（子ノードに接続するポートのうち、識別番号が若いノードに接続されるポート）である場合、ＮＡＮＤコントローラ１１２は左迂回フラグをたてる（設定する）。また、異常を検出したポートが、ポート３（子ノードに接続するポートのうち、識別番号が大きいノードに接続されるポート）である場合、ＮＡＮＤコントローラ１１２は右迂回フラグをたてる（設定する）。左迂回フラグを設定すると、メモリモジュール６２は、ポート３（障害の発生していない方の下位ポート）からパケットを送信する。また、右迂回フラグを設定すると、メモリモジュール６２は、ポート２（障害の発生していない方の下位ポート）からパケットを送信する。
【００９７】
尚、メモリコントローラ６１とメモリモジュール６２の間の経路に異常が発生した場合も、メモリモジュール６１は、メモリモジュール６２と同様に迂回フラグを設定し、パケットを送信してもよい。
【００９８】
左迂回フラグが設定されたパケットを上位ポートから受信すると、メモリモジュール６２は、ポート２（子ノードに接続するポートのうち、識別番号が若いノードに接続されるポート）から、受信したパケットを送信する。また、右迂回フラグが設定されたパケットを上位ポートから受信すると、メモリモジュール６２は、ポート３（子ノードに接続するポートのうち、識別番号が大きいノードに接続されるポート）から、受信したパケットを送信する。
【００９９】
尚、図１８の例では、メモリモジュール間の経路で異常が発生した場合の例を示したが、メモリモジュール６２自体に異常が発生し、経路情報１０３で示される経路でパケットが到達不能となる場合も図１８と同様の動作となる。
【０１００】
次に、左迂回フラグが設定されたパケットが転送される様子と、右迂回フラグが設定されたパケットが転送される様子を図１９及び図２０を参照して説明する。
図１９は、左迂回フラグが設定されたパケットが転送される様子を説明するための図である。
【０１０１】
図１９はＭＭ１とＭＭ３の間の経路で障害が発生した場合の例である。障害が発生した、ＭＭ１とＭＭ３の間の経路は、ＭＭ１のポート２に接続されているため、ＭＭ１は上位ノードからパケットを受信するとそのパケットに左迂回フラグを設定する。そして、ＭＭ１は障害の発生していない下位ポートであるポート３からＭＭ４に対してパケットを転送する。
【０１０２】
ＭＭ１から転送されたパケットを上位ポートで受信したＭＭ４は、受信したパケットに左迂回フラグまたは右迂回フラグが設定されているか否かを確認する。図１９の例の場合、ＭＭ４は、受信したパケットに左迂回フラグが設定されていることを確認する。するとＭＭ４は、左迂回フラグに従って、ポート２からパケットを送信する。同様に、上位ポートでパケットを受信したＭＭｎ１及びＭＭｎ２は、左迂回フラグに従って、ポート２からパケットを送信する。
【０１０３】
ＭＭｎ２から転送されたパケットを下位ポートで受信したＭＭｎ３は、パケットの経路情報１０３を参照して、パケットの宛先を確認する。すなわち、ＭＭｎ３は、受信したパケットの経路情報１０３を参照し、末尾に記されたＮＩＤが自ノードのＮＩＤと一致するか否かを確認する。図１９の例の場合、パケットの宛先はＭＭ３であるので、経路情報１０３に記載される末尾のＮＩＤは、ＭＭ３のＮＩＤとなる。よって、ＭＭｎ３は、受信したパケットの宛先が他ノードであることを確認する。すると、ＭＭｎ３は上位ポートからパケットを送信する。ＭＭ５もＭＭｎ３と同様の動作となる。
【０１０４】
ＭＭ５から転送されたパケットを下位ポートで受信したＭＭ３は、パケットの経路情報１０３を参照して、パケットの宛先を確認する。すなわち、ＭＭ３は、受信したパケットの経路情報１０３を参照し、末尾に記されたＮＩＤが自ノードのＮＩＤと一致するか否かを確認する。図１９の例では、ＭＭ３は、パケットの宛先が自ノードであることを確認し、パケットを内部で処理する。
【０１０５】
図２０は、右迂回フラグが設定されたパケットが転送される様子を説明するための図である。
図２０はＭＭ１とＭＭ４の間の経路で障害が発生した場合の例である。障害が発生した、ＭＭ１とＭＭ４の間の経路は、ＭＭ１のポート３に接続されているため、ＭＭ１は上位ノードからパケットを受信するとそのパケットに右迂回フラグを設定する。そして、ＭＭ１は障害の発生していない下位ポートであるポート２からＭＭ３に対してパケットを転送する。
【０１０６】
ＭＭ１から転送されたパケットを上位ポートで受信したＭＭ３は、受信したパケットに左迂回フラグまたは右迂回フラグが設定されているか否かを確認する。図２０の例の場合、ＭＭ３は、受信したパケットに右迂回フラグが設定されていることを確認する。するとＭＭ３は、右迂回フラグに従って、ポート３からパケットを送信する。同様に、上位ポートでパケットを受信したＭＭ５及びＭＭｎ３は、右迂回フラグに従って、ポート３からパケットを送信する。
【０１０７】
ＭＭｎ３から転送されたパケットを下位ポートで受信したＭＭｎ２は、パケットの経路情報１０３を参照して、パケットの宛先を確認する。すなわち、ＭＭｎ２は、受信したパケットの経路情報１０３を参照し、末尾に記されたＮＩＤが自ノードのＮＩＤと一致するか否かを確認する。図２０の例の場合、パケットの宛先はＭＭ４であるので、経路情報１０３に記載される末尾のＮＩＤは、ＭＭ４のＮＩＤとなる。よって、ＭＭｎ２は、受信したパケットの宛先が他ノードであることを確認する。すると、ＭＭｎ２は上位ポートからパケットを送信する。ＭＭｎ１もＭＭｎ２と同様の動作となる。
【０１０８】
ＭＭｎ１から転送されたパケットを下位ポートで受信したＭＭ４は、パケットの経路情報１０３を参照して、パケットの宛先を確認する。すなわち、ＭＭ４は、受信したパケットの経路情報１０３を参照し、末尾に記されたＮＩＤが自ノードのＮＩＤと一致するか否かを確認する。図２０の例では、ＭＭ４は、パケットの宛先が自ノードであることを確認し、パケットを内部で処理する。
【０１０９】
尚、図１３等における説明において下位ポートから受信したパケットはＮＡＮＤコントローラ１１２を介さずにポート１から回送されると説明したが、経路迂回を行う場合は図１９及び図２０で説明したように、ＮＡＮＤコントローラ１１２における処理が発生する。そのため、下位ポートから受信したパケットは、ポート０から一旦ＮＡＮＤコントローラ１１２に転送されて、ＮＡＮＤコントローラ１１２で自ノード宛のパケットか否かの判定処理がなされることとなる。
【０１１０】
図１９及び図２０で説明したように迂回フラグを用いてパケットを迂回させることで、パケットの送信経路上に異常が発生した場合でも、汎用プロトコルを用いてパケットを迂回させて宛先ノードにパケットを届けることができる。
【０１１１】
次に、パケットを受信した際のメモリモジュール６２の動作フローを図２１及び図２２を参照して説明する。
図２１は、上位ポートからパケットを受信した際のメモリモジュールの動作フローを示す。
【０１１２】
メモリモジュール６２は上位ポートからパケットを受信すると（Ｓ２０１）、受信したパケットに左迂回フラグまたは右迂回フラグが設定されているか否かを確認する（Ｓ２０２）。左迂回フラグまたは右迂回フラグが設定されている場合（Ｓ２０２でＹｅｓ）、メモリモジュール６２は、迂回フラグに従って、下位ポートのうちどちらのポートからパケットを送信するかを特定し、特定したポートからパケットを送信する（Ｓ２０３）。
【０１１３】
Ｓ２０２において、受信したパケットに左迂回フラグも右迂回フラグも設定されていない場合（Ｓ２０２でＮｏ）、メモリモジュール６２はパケットの経路情報１０３を検索する（Ｓ２０４）。そして、メモリモジュール６２は、経路情報１０３に記された末尾のＮＩＤが自ノードのＮＩＤと一致するか否かを確認する（Ｓ２０５）。経路情報１０３に記された末尾のＮＩＤが自ノードのＮＩＤと一致する場合（Ｓ２０５でＹｅｓ）、メモリモジュール６２は自ノードが管理するＮＡＮＤに受信したパケットのデータを書き込む（Ｓ２０６）。メモリモジュール６２は、パケットの書き込みが終了したら、応答パケットを生成し、メモリコントローラ６１に通知する。
【０１１４】
Ｓ２０５において、経路情報１０３に記された末尾のＮＩＤが自ノードのＮＩＤと一致しない場合（Ｓ２０５でＮｏ）、メモリモジュール６２は、経路情報１０３において、自ノードのＮＩＤの次に記載されたＮＩＤを取得する。そして、メモリモジュール６２は、ポート対応表１２０を参照して、取得したＮＩＤに対応するポート番号を取得する（Ｓ２０７）。
【０１１５】
次に、メモリモジュール６２は、Ｓ２０７で取得したポート番号のポートが正常か否かを判定する（Ｓ２０８）。ポートに異常がある場合（Ｓ２０８でＮｏ）、異常のあるポート番号に応じて、メモリモジュール６２はパケットに左迂回フラグまたは右迂回フラグを設定する（Ｓ２０９）。そして、メモリモジュール６２は迂回フラグを設定したパケットを正常な下位ポートから回送する（Ｓ２１０）。
【０１１６】
Ｓ２０８においてポートに異常がない場合（Ｓ２０８でＹｅｓ）、メモリモジュール６２は、アドレスフィールド４５の書換えを行う（Ｓ２１１）。すなわち、メモリモジュール６２は、ヘッダ部のアドレスフィールドのＭＭ間回送用制御情報１０５に、Ｓ２０７で取得したポート番号を設定する。そして、メモリモジュール６２は、Ｓ２１１で設定したＭＭ間回送用制御情報１０５の情報に基いて、パケットを下位ポートから回送する（Ｓ２１２）。
【０１１７】
尚、Ｓ２０８では、Ｓ２０７で取得したポート番号のポートに接続されたノードが正常か否かを判定する処理としてもよい。また、Ｓ２０８において、初めてノード異常が検出された場合には、メモリモジュール６２は、異常応答通知パケットを生成して、メモリコントローラ６１に宛てて、ポート１から生成した異常応答通知パケットを送信してもよい。
【０１１８】
図２２は、異常発生時にパケットの迂回を行う場合において、下位ポートからパケットを受信した際のメモリモジュールの動作フローを示す。
【０１１９】
メモリモジュール６２は下位ポートからパケットを受信すると（Ｓ２２１）、受信したパケットのパケット識別子フラグ１０１の値に正常パケットを示す識別子が設定されているか否かを確認する（Ｓ２２２）。
【０１２０】
Ｓ２２２において、受信したパケットのパケット識別子フラグ１０１に正常パケットを示す識別子が設定されていない場合（Ｓ２２２でＮｏ）、メモリモジュール６２は、パケットを上位ポートから親ノードに送信する（Ｓ２２７）。
【０１２１】
Ｓ２２２において、受信したパケットのパケット識別子フラグ１０１に正常パケットを示す識別子が設定されている場合（Ｓ２２２でＹｅｓ）、受信したパケットの迂回フラグ１０２に左迂回フラグまたは右迂回フラグが設定されているか否かを確認する（Ｓ２２３）。
【０１２２】
Ｓ２２３において、受信したパケットに左迂回フラグも右迂回フラグも設定されていない場合（Ｓ２２３でＮｏ）、メモリモジュール６２は、パケットを上位ポートから親ノードに送信する（Ｓ２２７）。
【０１２３】
Ｓ２２３において、受信したパケットに左迂回フラグまたは右迂回フラグが設定されている場合（Ｓ２２３でＹｅｓ）、メモリモジュール６２はパケットの経路情報１０３を検索する（Ｓ２２４）。そして、メモリモジュール６２は、経路情報１０３に記された末尾のＮＩＤが自ノードのＮＩＤと一致するか否かを確認する（Ｓ２２５）。
【０１２４】
経路情報１０３に記された末尾のＮＩＤが自ノードのＮＩＤと一致する場合（Ｓ２２５でＹｅｓ）、メモリモジュール６２は自ノードが管理するＮＡＮＤメモリに受信したパケットのデータを書き込む（Ｓ２２６）。メモリモジュール６２は、パケットの書き込みが終了したら、応答パケットを生成し、メモリコントローラ６１に通知する。
【０１２５】
Ｓ２２５において、経路情報１０３に記された末尾のＮＩＤが自ノードのＮＩＤと一致しない場合（Ｓ２２５でＮｏ）、メモリモジュール６２は、パケットを上位ポートから親ノードに送信する（Ｓ２２７）。
【０１２６】
尚、図２１及び図２２は、書き込みアクセス時のパケットを例としたため、Ｓ２０６、Ｓ２２６において、データの書き込みを行うとしたが、読み込みアクセス時のパケットの場合は、データの読み込みを行うこととなる。
【０１２７】
図２３は、下位ポートの異常を検出した際のメモリモジュールの動作フローを示す。
メモリモジュール６２は下位ポートの異常を検知すると（Ｓ２３１）、異常通知パケットを生成する（Ｓ２３２）。そして、メモリモジュール６２は、生成した異常通知パケットを上位ポートからメモリコントローラ６１に宛てて送信する（Ｓ２３３）。
【０１２８】
メモリモジュール６２で発生する障害に備えて、複数のメモリモジュール６２でＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を組むことにより、ストレージ装置の信頼性や可用性を向上させることができる。図２４は、複数のメモリモジュールでＲＡＩＤを組んだ接続構成の一例を示す。
【０１２９】
図２４は、ＭＭ３、ＭＭ７、ＭＭ８でＲＡＩＤグループが構成され、ＭＭ１は、ＲＡＩＤに含まれるメモリモジュールに障害が発生した場合のスペアとなっている例である。ＲＡＩＤを構成するメモリモジュール６２の情報（以下、ＲＩＡＤ構成情報と記す）はメモリコントローラ６１が持つ。ＲＡＩＤ構成情報は、例えば、ＲＡＩＤを構成するメモリモジュール６２の識別情報の組、及び、そのＲＡＩＤに対応するスペアのメモリモジュール６２の識別情報等が含まれる。ここで、ＲＡＩＤは種々のメモリモジュール６２で構成するように設定でき、例えば、ＭＭ４、ＭＭ９、ＭＭ１０でＲＡＩＤを構成し、ＭＭ１はスペアのメモリモジュール６２とすることなどができる。
【０１３０】
次に、メモリモジュール６２で障害が発生した場合の動作を説明する。メモリモジュール（ＭＭ７）で発生した障害を検知すると、ＭＭ７またはＭＭ３は、異常通知パケットまたは異常応答通知パケットをメモリコントローラ６１に宛てて送信する。
【０１３１】
メモリコントローラ６１は異常通知パケットまたは異常応答通知パケットを受信すると、異常内容情報１０７または応答ノード情報１０９を参照し、どのメモリモジュール６２に障害が発生したのかを特定する。図２４の例では、メモリコントローラ６１は、異常が発生したノードはＭＭ７であると特定する。そして、メモリコントローラ６１は、ＲＡＩＤ構成情報を参照し、障害が発生したメモリモジュール６２に対応するスペアのメモリモジュール６２の識別情報を取得する。図２４の例では、メモリコントローラ６１は、スペアのメモリモジュールの識別情報はＭＭ１であることを取得する。そして、メモリコントローラ６１は、障害が発生したメモリモジュール６２から取得した識別情報のメモリモジュールに切り替えを行う。
【０１３２】
図２５は、メモリモジュールの切り替え後の構成の一例を示す。図２５では、ＭＭ１がＲＡＩＤグループにアサインされ、ＭＭ１、ＭＭ３、ＭＭ８で新たにＲＡＩＤグループが構成されている。メモリモジュール切り替えの命令も、図１０で示したパケットのデータペイロード４２に切り替え命令を埋め込むことで、汎用プロトコルでのＲＡＩＤグループの切り替えを行うことができる。
【０１３３】
メモリモジュール６２の切り替え動作は、構成するＲＡＩＤの種類に応じて異なるが、例えば、パリティ情報などから障害が発生したノードに記憶されたデータを復元してスペアノードに書き込む方法等、種々の方法が採られる。尚、ＲＡＩＤの構成の切り替えの際には、メモリコントローラ６１は障害が発生したメモリモジュール６２のアドレスがスペアのメモリモジュール６２に対応するように設定変更をする処理等も行われる。
【０１３４】
図２６は、本実施形態に係るメモリコントローラ６１、及びＮＡＮＤコントローラ１１２のハードウェア構成の一例を示す。メモリコントローラ６１、ＮＡＮＤコントローラ１１２は、図２６に示すように、プロセッサ２６１、メモリ２６２、通信インターフェース２６３、入出力部２６４を含む。なお、プロセッサ２６１、メモリ２６２、通信インターフェース２６３、入出力部２６４は、例えば、バス２６５を介して互いに接続されている。
【０１３５】
プロセッサ２６１は、メモリ２６２を利用して上述のフローチャートの手順を記述したプログラムを実行する。プロセッサ２６１は、第１の送信部４０５、受信部４０６、判定部４０８、第１の設定部４０９、第２の送信部４１０、検出部４１１、第２の設定部４１２、及び異常通知生成部４１３の機能の一部または全てを提供する。
【０１３６】
メモリ２６２は、例えば半導体メモリであり、ＲＡＭ（Random Access Memory）領域およびＲＯＭ（Read Only Memory）領域を含んで構成される。メモリコントローラ６１においては、ルートマップ８０、及びＲＡＩＤ構成情報はメモリ２６２に記憶される。ＮＡＮＤコントローラ１１２においては、自ノードの識別情報、及びポート対応表はメモリ２６２に記憶される。メモリ２６２は、第１の記憶部４０４、及び第２の記憶部４０７の一部またはすべての機能を提供する。
【０１３７】
通信インターフェース２６３は、プロセッサ２６１の指示に従ってネットワークを介してパケットを送受信する。通信インターフェース２６３はメモリコントローラ６１においては、ＰＣＩｅで接続されるポート及びホストと接続するインターフェースに対応する。ＮＡＮＤコントローラ１１２においては、通信インターフェース２６３は、ＰＣＩｅで接続されるポートに対応する。
【０１３８】
入出力部２６４は、メモリコントローラ６１においては、ルートマップ８０を設定するためのデバイスに相当する。また、入出力部２６４は、ＮＡＮＤコントローラ１１２においては、識別番号及びポート対応表１２０を設定するためのデバイスに相当する。尚、入出力部２６４はなくてもよい。
【０１３９】
実施形態を実現するための情報処理プログラムは、例えば、下記の形態でメモリコントローラ６１またはＮＡＮＤコントローラ１１２に提供される。
（１）メモリ２６２に予めインストールされている。
（２）ネットワークを介してホストから提供される。
【０１４０】
尚、本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
本実施形態では、汎用プロトコルはＰＣＩｅに限定されず、他の汎用プロトコルとしてもよい。
【０１４１】
上記実施形態に関し、更に以下の付記を開示する。
（付記１）
通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む該経路情報を付加した該通信情報を送信する制御装置と、
前記通信情報を受信し、前記通信情報の宛先が自装置宛ではない場合、前記通信情報の前記経路情報に含まれる中継先の宛先を用いて、次の中継先へ、前記通信情報を送信するメモリ装置と、
を備えることを特徴とするストレージ装置。
（付記２）
前記制御装置は、
前記経路情報を記憶する第１の記憶部と、
前記通信情報のペイロード部に前記経路情報を付加して、該通信情報を送信する第１の送信部と、
を備える
ことを特徴とする付記１に記載のストレージ装置。
（付記３）
前記メモリ装置は、
ペイロード部に前記経路情報が付加された前記通信情報を受信する受信部と、
自装置に接続される他の前記メモリ装置の識別情報と前記他のメモリ装置に接続されるポート番号とが対応付けられた情報である対応情報を記憶する第２の記憶部と、
前記経路情報に基づいて前記通信情報が自装置宛であるか否かを判定する判定部と、
前記通信情報が自装置宛ではないと判定された場合、前記経路情報に含まれる次の中継先の識別情報に対応するポート番号を前記対応情報から取得し、取得した前記ポート番号を前記通信情報のヘッダ部に設定する第１の設定部と、
前記ヘッダ部に設定された前記ポート番号に対応するポートから前記通信情報を送信する第２の送信部と、
を備える
ことを特徴とする付記１または２に記載のストレージ装置。
（付記４）
前記メモリ装置は、さらに、
前記次の中継先または前記次の中継先への経路に異常が発生したことを検出する検出部と、
前記異常が検出された場合、前記通信情報のペイロード部に前記通信情報を迂回させるための迂回情報を設定する第２の設定部と、
を備え、
前記第２の送信部は、前記通信情報に前記迂回情報が設定されている場合、前記通信情報を送信するポートを変更する
ことを特徴とする付記３に記載のストレージ装置。
（付記５）
前記第２の送信部は、前記通信情報に前記迂回情報が設定されている場合、前記迂回情報及び前記受信部が前記通信情報を受信したポートに応じて、前記通信情報を送信するポートを変更する
ことを特徴とする付記３または４に記載のストレージ装置。
（付記６）
前記メモリ装置は、さらに、
前記異常が検出された場合、前記通信情報を生成し、生成した該通信情報のペイロード部に前記異常が発生したことを示す異常情報を格納する異常通知生成部
を備え、
前記第２の送信部は、前記通信情報に前記異常情報が格納されている場合、前記通信情報を送信するポートを変更する
ことを特徴とする付記３〜５のうちいずれか１項に記載のストレージ装置。
（付記７）
前記制御装置及び複数の前記メモリ装置は、
二分木の各ノードに幅優先探索の順で識別番号が振られたときに、該識別番号の差が１であり、同一の親ノードを持たない葉ノード間が接続されるグラフにおいて、前記二分木の根ノードに前記制御装置を割り当て、前記根ノード以外の各前記ノードに前記メモリ装置をそれぞれ割り当てたときに構成される接続形態で接続される
ことを特徴とする付記１〜６のうちいずれか１項に記載のストレージ装置。
（付記８）
前記通信情報は、ＰＣＩ Ｅｘｐｒｅｓｓ規格に準拠している
ことを特徴とする請求項１〜７のうちいずれか１項に記載のストレージ装置。
（付記９）
通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む該経路情報を付加した該通信情報を送信する
ことを特徴とする制御装置。
（付記１０）
通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む該経路情報が付加された通信情報を受信する受信部と、
前記通信情報の宛先が前記自装置宛ではない場合、前記通信情報の前記経路情報に含まれる中継先の宛先を用いて、次の中継先へ、前記通信情報を送信する送信部とを
有することを特徴とするメモリ装置。
（付記１１）
制御装置は、通信情報の宛先までの経路を示す経路情報であって、通信情報の宛先に到達するまでに通過する中継先の宛先を含む該経路情報を付加した該通信情報を送信し、
メモリ装置は、
前記通信情報を受信し、前記通信情報の宛先が前記自装置宛ではない場合、前記通信情報の前記経路情報に含まれる中継先の宛先を用いて、次の中継先へ、前記通信情報を送信する
ことを特徴とする制御方法。
（付記１２）
前記制御装置は、
前記経路情報を前記通信情報のペイロード部に付加して、該通信情報を送信し、
前記メモリ装置は、
前記ペイロード部に前記経路情報が付加された前記通信情報を受信し、
前記経路情報に基づいて前記通信情報が前記複数のメモリ装置のうちの第１のメモリ装置宛であるか否かを判定し、
前記通信情報が自装置宛ではないと判定された場合、前記経路情報から次の中継先の識別情報を取得し、
取得された前記識別情報に対応するポート番号を、自装置に接続される他のメモリ装置の識別情報と他のメモリ装置に接続されるポート番号とが対応付けられた情報である対応情報から取得し、
取得された前記ポート番号を前記通信情報のヘッダ部に設定し、
前記ヘッダ部に設定された前記ポート番号に対応するポートから前記通信情報を送信する
ことを特徴とする付記１１に記載の制御方法。
【符号の説明】
【０１４２】
４１    ＴＬＰヘッダ
４２    データペイロード
４３    ＴＬＰダイジェスト
４４    制御情報フィールド
４５    アドレスフィールド
４６    上位アドレスフィールド
４７    下位アドレスフィールド
６１    メモリコントローラ
６２    メモリモジュール
８０    ルートマップ
８１    宛先情報
８２    経路情報
１０１    パケット識別子フラグ
１０２    迂回フラグ
１０３    経路情報
１０４    書き込みデータ
１０５    ＭＭ間回送用制御情報
１０６    ＮＡＮＤアドレス情報
１０７    異常内容情報
１０８    応答ステータス情報
１０９    応答ノード情報
１１１    ＰＣＩｅスイッチ
１１２    ＮＡＮＤコントローラ
１１３    ＮＡＮＤ
１２０    ポート対応表
１２１    ポート番号
１２２    接続メモリモジュール識別情報
２６１    プロセッサ
２６２    メモリ
２６３    通信インターフェース
２６４    入出力部
２６５    バス
４０１    ストレージ装置
４０２    制御装置
４０３    メモリ装置
４０４    第１の記憶部
４０５    第１の送信部
４０６    受信部
４０７    第２の記憶部
４０８    判定部
４０９    第１の設定部
４１０    第２の送信部
４１１    検出部
４１２    第２の設定部
４１３    異常通知生成部
【図１】
2014194610.tif 000003
【図２】
2014194610.tif 000004
【図３】
2014194610.tif 000005
【図４】
2014194610.tif 000006
【図５】
2014194610.tif 000007
【図６】
2014194610.tif 000008
【図７】
2014194610.tif 000009
【図８】
2014194610.tif 000010
【図９】
2014194610.tif 000011
【図１０】
2014194610.tif 000012
【図１１】
2014194610.tif 000013
【図１２】
2014194610.tif 000014
【図１３】
2014194610.tif 000015
【図１４】
2014194610.tif 000016
【図１５】
2014194610.tif 000017
【図１６】
2014194610.tif 000018
【図１７】
2014194610.tif 000019
【図１８】
2014194610.tif 000020
【図１９】
2014194610.tif 000021
【図２０】
2014194610.tif 000022
【図２１】
2014194610.tif 000023
【図２２】
2014194610.tif 000024
【図２３】
2014194610.tif 000025
【図２４】
2014194610.tif 000026
【図２５】
2014194610.tif 000027
【図２６】
2014194610.tif 000028