(57)【特許請求の範囲】
【請求項１】
ホストコンピュータに接続するストレージシステムであって、
プロセッサ番号対応情報及び転送リストインデックス−プロセッサ番号対応情報を備えるローカルルータ部と、前記ホストコンピュータと前記ローカルルータ部との間においてデータを送受信するプロトコルプロセッサと、を含むチャネルアダプタと、
それぞれがプロセッサを含みディスクドライブに接続する、複数のストレージノードと、
を備え、
前記複数のストレージノードのそれぞれは、前記ディスクドライブを前記ホストコンピュータに論理ユニットとして提供し、
前記プロセッサ番号対応情報は、前記論理ユニットの番号と前記ストレージノードのプロセッサの番号とを含み、
前記転送リストインデックス−プロセッサ番号対応情報は、前記プロセッサ番号と、前記プロセッサが前記プロトコルプロセッサに指示する処理の内容を示す転送リストを特定する転送リストインデックスと、を含み、
前記ローカルルータ部は、
前記プロトコルプロセッサからのアクセスを受信し、
前記アクセスの送信先を解析し、
前記送信先が、前記ホストコンピュータからのフレームを格納するフレームＦＩＦＯである場合に、
前記アクセスから論理ユニット番号を抽出し、
前記アクセスのプロセッサ番号を、前記論理ユニット番号と前記プロセッサ番号対応情報とを参照して決定し、
前記プロセッサ番号のプロセッサに前記アクセスを転送し、
前記送信先が、前記プロトコルプロセッサからのメッセージを格納するメッセージＦＩＦＯである場合に、
前記アクセスから転送リストインデックスを抽出し、
前記アクセスのプロセッサ番号を、前記抽出した転送リストインデックスと前記転送リストインデックス−プロセッサ番号対応情報とを参照して決定し、
前記プロセッサ番号のプロセッサに前記アクセスを転送する、ストレージシステム。
【請求項２】
前記受信したアクセスの送信先が、転送リストインデックスを格納する要求ＦＩＦＯである場合に、前記ローカルルータ部は、前記要求ＦＩＦＯから前記転送リストインデックスを抽出し、前記プロトコルプロセッサに前記抽出した転送リストインデックスを送る、請求項１に記載のストレージシステム。
【請求項３】
前記ローカルルータ部は、前記プロセッサからのアクセスに応じて前記要求ＦＩＦＯへ転送リストインデックスを格納し、前記転送リストインデックス−プロセッサ番号対応情報を更新する、請求項２に記載のストレージシステム。
【請求項４】
前記プロセッサ番号対応情報は、ＬＢＡと前記ホストコンピュータのポートアドレスであるＳ＿ＩＤとを、さらに含み、
前記ローカルルータ部は、前記アクセスの送信先が前記フレームＦＩＦＯである場合に、前記アクセスからＳ＿ＩＤとＬＢＡとを抽出し、前記アクセスのプロセッサ番号を、前記抽出したＳ＿ＩＤとＬＢＡをさらに参照して決定する、請求項３に記載のストレージシステム。
【請求項５】
前記複数のストレージノードのそれぞれは、さらに、キャッシュメモリを備え、
前記ローカルルータ部は、前記送信先が前記キャッシュメモリである場合に、前記アクセスを前記キャッシュメモリに転送する、請求項４に記載のストレージシステム。
【請求項６】
前記ローカルルータ部は、同一の周辺回路に接続される複数のプロセッサに同一の処理を割り当て可能である、請求項５に記載のストレージシステム。
【請求項７】
ホストコンピュータに接続されるストレージシステムにおけるデータ転送方法であって、
前記ストレージシステムは、
プロセッサ番号対応情報及び転送リストインデックス−プロセッサ番号対応情報を備えるローカルルータ部と、前記ホストコンピュータと前記ローカルルータ部との間においてデータを送受信するプロトコルプロセッサと、を含むチャネルアダプタと、
それぞれがプロセッサを含みディスクドライブに接続する、複数のストレージノードと、を備え、
前記複数のストレージノードのそれぞれは、前記ディスクドライブを前記ホストコンピュータに論理ユニットとして提供し、
前記プロセッサ番号対応情報は、前記論理ユニットの番号と前記ストレージノードのプロセッサの番号とを含み、
前記転送リストインデックス−プロセッサ番号対応情報は、前記プロセッサ番号と、前記プロセッサが前記プロトコルプロセッサに指示する処理の内容を示す転送リストを特定する転送リストインデックスと、を含み、
前記ローカルルータ部が、
前記プロトコルプロセッサからのアクセスを受信し、
前記アクセスの送信先を解析し、
前記送信先が、前記ホストコンピュータからのフレームを格納するフレームＦＩＦＯである場合に、
前記アクセスから論理ユニット番号を抽出し、
前記アクセスのプロセッサ番号を、前記論理ユニット番号と前記プロセッサ番号対応情報とを参照して決定し、
前記プロセッサ番号のプロセッサに前記アクセスを転送し、
前記送信先が、前記プロトコルプロセッサからのメッセージを格納するメッセージＦＩＦＯである場合に、
前記アクセスから転送リストインデックスを抽出し、
前記アクセスのプロセッサ番号を、前記抽出した転送リストインデックスと前記転送リストインデックス−プロセッサ番号対応情報とを参照して決定し、
前記プロセッサ番号のプロセッサに前記アクセスを転送する、データ転送方法。
【請求項８】
前記受信したアクセスの送信先が、転送リストインデックスを格納する要求ＦＩＦＯである場合に、前記ローカルルータ部が、前記要求ＦＩＦＯから前記転送リストインデックスを抽出し、前記プロトコルプロセッサに前記抽出した転送リストインデックスを送る、請求項７に記載のデータ転送方法。
【請求項９】
前記ローカルルータ部が、前記プロセッサからのアクセスに応じて前記要求ＦＩＦＯへ転送リストインデックスを格納し、前記転送リストインデックス−プロセッサ番号対応情報を更新する、請求項８に記載のデータ転送方法。
【請求項１０】
前記プロセッサ番号対応情報は、ＬＢＡと前記ホストコンピュータのポートアドレスであるＳ＿ＩＤとを、さらに含み、
前記ローカルルータ部が、前記アクセスの送信先が前記フレームＦＩＦＯである場合に、前記アクセスからＳ＿ＩＤとＬＢＡとを抽出し、前記アクセスのプロセッサ番号を、前記抽出したＳ＿ＩＤとＬＢＡをさらに参照して決定する、請求項９に記載のデータ転送方法。
【請求項１１】
前記複数のストレージノードのそれぞれは、さらに、キャッシュメモリを備え、
前記ローカルルータ部が、前記送信先が前記キャッシュメモリである場合に、前記アクセスを前記キャッシュメモリに転送する、請求項１０に記載のデータ転送方法。
【請求項１２】
前記ローカルルータ部が、同一の周辺回路に接続される複数のプロセッサに同一の処理を割り当てる、請求項１１に記載のデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、チャネルを介してホストコンピュータに接続されるストレージシステムに関し、特に、前記チャネルを複数のプロセッサによって制御する技術に関する。
【背景技術】
【０００２】
近年、複数のストレージシステムが、一つの大規模ストレージに置き換えられている。他にも、複数のストレージシステムを、一つの大規模ストレージシステムに見せる技術が採用されている。これらによって、ストレージシステムの管理を容易化する。この場合、大規模ストレージシステムは、記憶容量だけでなく、性能も要求される。
【０００３】
一方、安価な小規模ストレージシステムから、大規模ストレージシステムへの拡張のニーズも存在する。
【０００４】
小規模ストレージシステムから大規模ストレージシステムをサポートするための技術として、仮想化スイッチ技術及び高スケーラブル化技術が知られている。
【０００５】
例えば、仮想化スイッチ技術については、特許文献１に開示されている。仮想化スイッチ技術では、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を構成するＳＡＮスイッチが、仮想化の機能を備える。具体的には、仮想化スイッチ技術は、接続される複数のストレージシステムを単一のストレージシステムとしてホストコンピュータに提供する。更に、仮想化スイッチは、接続される複数のストレージシステムに様々な機能を提供する。
【０００６】
しかしこの場合、管理者は、仮想化スイッチ及び複数のストレージシステムのそれぞれに対して設定を行う必要がある。また、仮想化スイッチが行う仮想化のための変換処理が、ストレージシステムの性能のボトルネックになってしまう。
【０００７】
また、ストレージシステムの高スケーラブル化については、特許文献２に開示されている。高スケーラブル化されたストレージシステムは、当該ストレージシステムを制御する多数のプロセッサを備える。更に、高スケーラブル化されたストレージシステムは、多数のプロトコルプロセッサを備える。
【０００８】
プロトコルプロセッサについては、特許文献３に開示されている。プロトコルプロセッサは、ホストコンピュータとストレージシステムとを接続するチャネルのプロトコルを処理する。具体的には、プロトコルプロセッサは、チャネルを通じて受信したパケット又はフレームを、ストレージシステムの内部のプロトコルに変換する。
【０００９】
ストレージシステムを高スケーラブルにできれば、小規模な構成から大規模な構成にまで拡張できる。そのため、ユーザの要求する規模にあわせたストレージシステムを提供できる。
【特許文献１】米国特許第６，８９８，６７０号明細書
【特許文献２】特開２００４−２４０９４９号公報
【特許文献３】米国特許第６，７９１，９８９号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、一般的なストレージシステムには、以下のような問題点がある。プロトコルプロセッサは、１つ又は少数のプロセッサのみにチャネルの制御機能を提供する。そのため、高スケーラブル化されたストレージシステムにおいては、多数のプロセッサを備えていても、すべてのプロセッサを有効に活用できない。
【００１１】
また、プロトコルプロセッサの能力が不足しているので、プロセッサの処理の効率を上げられない。
【００１２】
本発明は、前述した問題点に鑑みてなされたものであり、プロセッサを効率よく利用するストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の一態様は、ホストコンピュータに接続するストレージシステムであって、プロセッサ番号対応情報及び転送リストインデックス−プロセッサ番号対応情報を備えるローカルルータ部と、前記ホストコンピュータと前記ローカルルータ部との間においてデータを送受信するプロトコルプロセッサと、を含むチャネルアダプタと、それぞれがプロセッサを含みディスクドライブに接続する、複数のストレージノードと、を備える。前記複数のストレージノードのそれぞれは、前記ディスクドライブを前記ホストコンピュータに論理ユニットとして提供する。前記プロセッサ番号対応情報は、前記論理ユニットの番号と前記ストレージノードのプロセッサの番号とを含む。前記転送リストインデックス−プロセッサ番号対応情報は、前記プロセッサ番号と、前記プロセッサが前記プロトコルプロセッサに指示する処理の内容を示す転送リストを特定する転送リストインデックスと、を含む。前記ローカルルータ部は、前記プロトコルプロセッサからのアクセスを受信し、前記アクセスの送信先を解析する。前記送信先が、前記ホストコンピュータからのフレームを格納するフレームＦＩＦＯである場合に、前記ローカルルータ部は、前記アクセスから論理ユニット番号を抽出し、前記アクセスのプロセッサ番号を、前記論理ユニット番号と前記プロセッサ番号対応情報とを参照して決定し、前記プロセッサ番号のプロセッサに前記アクセスを転送する。前記送信先が、前記プロトコルプロセッサからのメッセージを格納するメッセージＦＩＦＯである場合に、前記ローカルルータ部は、前記アクセスから転送リストインデックスを抽出し、前記アクセスのプロセッサ番号を、前記抽出した転送リストインデックスと前記転送リストインデックス−プロセッサ番号対応情報とを参照して決定し、前記プロセッサ番号のプロセッサに前記アクセスを転送する。
【発明の効果】
【００１４】
本発明の代表的な形態によれば、一つのチャネルを複数のプロセッサが制御する。これによって、本発明の代表的な形態のストレージシステムは、プロセッサ資源を有効に活用できる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を図面を参照して説明する。
【００１６】
（第１の実施の形態）
図１は、本発明の第１の実施の形態の計算機システムの構成のブロック図である。
【００１７】
計算機システムは、ストレージシステム１、ホストコンピュータ２及びＳＡＮスイッチ３を備える。
【００１８】
ストレージシステム１とＳＡＮスイッチ３とは、チャネル４によって接続される。同様に、ホストコンピュータ２とＳＡＮスイッチ３とは、チャネル４によって接続される。なお、本実施の形態のチャネル４には、ファイバチャネル（ＦＣ：Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）プロトコルが適用されている。なお、チャネル４には、ファイバチャネルプロトコル以外のプロトコルが適用されていてもよい。
【００１９】
ＳＡＮスイッチ３は、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を構成するスイッチである。ＳＡＮスイッチ３は、ストレージシステム１とホストコンピュータ２
との通信を制御する。
【００２０】
ストレージシステム１は、ハードディスクエンクロージャ部（ＨＤＤエンクロージャ部）５、チャネルアダプタ６、内部スイッチ７及びストレージノード８を備える。
【００２１】
内部スイッチ７は、チャネルアダプタ６とストレージノード８とを接続する。なお、チャネルアダプタ６と内部スイッチ７とは、内部パス７１によって接続される。同様に、ストレージノード８と内部スイッチ７とは、内部パス７１によって接続される。
【００２２】
ＨＤＤエンクロージャ部５は、複数のハードディスクドライブ（ＨＤＤ）５１を含む。ＨＤＤ５１は、ホストコンピュータ２によって書き込み要求されたデータ等を記憶する。なお、ＨＤＤ５１は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）を構成していてもよいし、ＲＡＩＤを構成していなくてもよい。
【００２３】
チャネルアダプタ６は、プロトコルプロセッサ６１、ローカルルータ部６２及びメモリモジュール６３を備える。
【００２４】
プロトコルプロセッサ６１は、チャネル４に接続される。また、プロトコルプロセッサ６１は、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｎｔｒｏｌ  Ｉｎｆｏｒｍａｔｉｏｎ）バス又はＰＣＩ−Ｅｘｐｒｅｓｓ等で、ローカルルータ部６２等に接続される。
【００２５】
プロトコルプロセッサ６１は、チャネル４のプロトコルを制御する。具体的には、プロトコルプロセッサ６１は、チャネル４のプロトコルとストレージシステム１の内部のプロトコルとを相互に変換する。これによって、プロトコルプロセッサ６１は、チャネル４にフレームを送信する。同様に、プロトコルプロセッサ６１は、チャネル４からフレームを受信する。なお、チャネル４にファイバチャネルプロトコル以外のプロトコルが適用されている場合、プロトコルプロセッサ６１は、フレームの代わりに、パケットを送受信する。
【００２６】
ローカルルータ部６２は、プロトコルプロセッサ６１によって処理されたフレームの転送先となるプロセッサを、ストレージノード８に備わるプロセッサの中から選択する。そして、ローカルルータ部６２は、選択されたプロセッサに、プロトコルプロセッサ６１によって処理されたフレームを転送する。なお、ローカルルータ部６２については、図１２で詳細を説明する。
【００２７】
メモリモジュール６３は、ローカルルータ部６２によって実行されるプログラム及びローカルルータ部６２によって必要とされる情報を記憶する。具体的には、メモリモジュール６３は、プロセッサ番号対応テーブル（図１３）、送信先アドレステーブル（図１４）及び転送リストインデックス−プロセッサ番号対応テーブル（図１５）等を記憶する。なお、ローカルルータ部６２がＬＳＩによって構成される場合には、メモリモジュール６３は、プログラムを記憶しない。また、メモリモジュール６３の一部は、要求ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）として使用される。なお、要求ＦＩＦＯについては、図８で詳細を説明する。
【００２８】
ストレージノード８は、ＨＤＤ側チャネル５２を介してＨＤＤ５１に接続される。なお、ストレージノードについては、図２で詳細を説明する。
【００２９】
図２は、本発明の第１の実施の形態のストレージシステム１に備わるストレージノード８の構成のブロック図である。
【００３０】
ストレージノード８は、内部ネットワークインタフェース部（内部ネットワークＩ／Ｆ部）８１、プロセッサ８２、周辺回路部８３、メモリモジュール８４、ブリッジ部８５、ＨＤＤ側プロトコルプロセッサ８６及びキャッシュメモリ８７を備える。
【００３１】
内部ネットワークＩ／Ｆ部８１は、内部パス７１を介して内部スイッチ７に接続される。
【００３２】
ブリッジ部８５は、内部ネットワークＩ／Ｆ部８１、周辺回路部８３、ブリッジ部８５、ＨＤＤ側プロトコルプロセッサ８６及びキャッシュメモリ８７を相互に接続する。また、ブリッジ部８５は、ＤＭＡコントローラ８５１を備える。ＤＭＡコントローラ８５１は、ブリッジ部８５のデータ転送処理を制御する。
【００３３】
ＨＤＤ側プロトコルプロセッサ８６は、ＨＤＤ側チャネル５２に接続される。ＨＤＤ側プロトコルプロセッサ８６は、ＨＤＤ側チャネル５２を介して、ＨＤＤ５１を制御する。
【００３４】
周辺回路部８３は、例えば、チップセット等である。周辺回路部８３は、プロセッサ８２、メモリモジュール８４及びブリッジ部８５を相互に接続する。また、周辺回路部８３は、プロセッサ８２がプログラムを実行する際に必要とする機能を提供する。例えば、周辺回路部８３は、タイマー機能をプロセッサ８２に提供する。更に、周辺回路部８３は、メモリモジュール８４を制御する。
【００３５】
メモリモジュール８４には、プロセッサ８２によって実行されるプログラム及びプロセッサ８２によって必要とされる情報等が記憶される。具体的には、メモリモジュール８４には、ストレージシステム１を制御するためのプログラム、ストレージシステム１の構成に関する情報及びキャッシュメモリ８７のディレクトリに関する情報等が記憶される。但し、ストレージシステム１の構成に関する情報及びキャッシュメモリ８７のディレクトリに関する情報は、メモリモジュール８４に記憶されずに、キャッシュメモリ８７に記憶されてもよい。なお、メモリモジュール８４の一部が通信領域として使用されることによって、プロセッサ８２は、他のプロセッサ８２と通信しながら処理をしてもよい。
【００３６】
更に、メモリモジュール８４の一部は、フレームＦＩＦＯ及びメッセージＦＩＦＯとして使用される。なお、フレームＦＩＦＯについては、図１０で詳細を説明する。また、メッセージＦＩＦＯについては、図９で詳細を説明する。
【００３７】
キャッシュメモリ８７は、ホストコンピュータ２によって書き込み要求されたデータ又は読み出し要求されたデータを一時的に記憶する。
【００３８】
ストレージシステム１のアベイラビリティを向上させるために、ストレージノード８の構成は、冗長化されてもよい。本ブロック図のストレージノード８は、電源ユニットＡによって電力を供給される電源系Ａ８０１、及び電源ユニットＢによって電力を供給される電源系Ｂ８０２を含む。そして、電源系Ａ８０１及び電源系Ｂ８０２のそれぞれが、内部ネットワークＩ／Ｆ部８１、プロセッサ８２、周辺回路部８３、メモリモジュール８４、ブリッジ部８５、ＨＤＤ側プロトコルプロセッサ８６及びキャッシュメモリ８７を備える。なお、ブリッジ部８５のＤＭＡコントローラ８５１は、電源系Ａに備わるキャッシュメモリ８７及び電源系Ｂに備わるキャッシュメモリ８７の両方にデータを格納する。
【００３９】
これによって、一方の電源系が故障しても、データが消失しない。更に、故障していないもう一方の電源系が、処理を継続できる。
【００４０】
プロセッサ８２は、メモリモジュール８４に記憶されるプログラムを実行することによって、各種処理を行う。これによって、プロセッサ８２は、ストレージシステム１を制御する。
【００４１】
プロセッサ８２は、フレームＦＩＦＯ、要求ＦＩＦＯ及びメッセージＦＩＦＯを用いて、チャネルアダプタ６に備わるプロトコルプロセッサ６１と通信する。プロセッサ８２は、ホストコンピュータ２から発行されたＩＯ要求を受信すると、受信したＩＯ要求を解析する。これによって、プロセッサ８２は、当該ＩＯ要求の種類、当該ＩＯ要求の対象となるＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）及び当該ＩＯ要求の対象となるＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）等を特定する。なお、ＩＯ要求は、リード要求又はライト要求のいずれかである。また、ＩＯ要求の対象となるＬＵＮは、当該ＩＯ要求によってデータを読み出し又は書込みされるＬＵの識別子である。ＩＯ要求の対象となるＬＢＡは、当該ＩＯ要求によってデータを読み出し又は書き込みされるＬＢＡである。
【００４２】
ＩＯ要求がリード要求である場合、プロセッサ８２は、キャッシュメモリ８７のディレクトリに関する情報に基づいて、読み出し要求されたデータ（リードデータ）がキャッシュメモリ８７に記憶されているか否かを判定する。
【００４３】
リードデータがキャッシュメモリ８７に記憶されている場合、プロセッサ８２は、当該リードデータをホストコンピュータ２に転送するように、プロトコルプロセッサ６１に指示する。
【００４４】
一方、リードデータがキャッシュメモリ８７に記憶されていない場合、プロセッサ８２は、当該リードデータが格納されているＨＤＤ５１及びＬＢＡを特定する。そして、プロセッサ８２は、特定したＨＤＤ５１中の、特定したＬＢＡから、リードデータを抽出する。次に、プロセッサ８２は、抽出したリードデータを、キャッシュメモリ８７に格納する。そして、プロセッサ８２は、当該リードデータをホストコンピュータ２に転送するように、プロトコルプロセッサ６１に指示する。
【００４５】
ＩＯ要求がライト要求である場合、プロセッサ８２は、キャッシュメモリ８７のディレクトリに関する情報に基づいて、ＩＯ要求の対象となるＬＢＡに対応する記憶領域がキャッシュメモリ８７上に存在するか否かを判定する。
【００４６】
ＩＯ要求の対象となるＬＢＡに対応する記憶領域がキャッシュメモリ８７に存在する場合、プロセッサ８２は、ホストコンピュータ２によって書き込み要求されるデータ（ライトデータ）をキャッシュメモリ８７上の当該記憶領域に書き込むように、プロトコルプロセッサ６１に指示する。
【００４７】
一方、ＩＯ要求の対象となるＬＢＡに対応する記憶領域がキャッシュメモリ８７に存在しない場合、プロセッサ８２は、ライトデータを格納する記憶領域を、キャッシュメモリ８７に確保する。但し、ライトデータが格納される記憶領域を、キャッシュメモリ８７に確保できない場合、プロセッサ８２は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムなどを用いて、キャッシュメモリ８７から削除するデータを決定する。そして、プロセッサ８２は、決定したデータをＨＤＤ５１に戻す。そして、プロセッサ８２は、決定したデータを、キャッシュメモリ８７から削除することによって、ライトデータが格納される記憶領域をキャッシュメモリ８７に確保する。
【００４８】
次に、プロセッサ８２は、キャッシュメモリ８７上に確保された記憶領域に、ライトデータを書き込むように、プロトコルプロセッサ６１に指示する。
【００４９】
なお、ブリッジ部８５に備わるＤＭＡコントローラ８５１は、プロセッサ８２からの指示に応じて、プロトコルプロセッサ６１から送信されるＩＯ要求を、分割又は統合できる。更に、ブリッジ部８５に備わるＤＭＡコントローラ８５１は、プロセッサ８２からの指示に応じて、電源系Ａに備わるキャッシュメモリ８７及び電源系Ｂに備わるキャッシュメモリ８７の両方にデータを書き込むことができる。
【００５０】
次に、ファイバチャネルプロトコルを説明する。
【００５１】
図３は、本発明の第１の実施の形態のファイバチャネルプロトコルのフレーム１０００の説明図である。
【００５２】
ファイバチャネルプロトコルでは、情報の伝達にフレーム１０００が使用される。フレーム１０００は、ＳＯＦ（Ｓｔａｒｔ  Ｏｆ  Ｆｒａｍｅ）３０１０、ヘッダ３０２０、ペイロード３０３０、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）３０４０及びＥＯＦ（Ｅｎｄ  Ｏｆ  Ｆｒａｍｅ）３０５０を含む。
【００５３】
ＳＯＦ３０１０は、フレーム１０００の先頭を示すビットである。ペイロード３０３０には、情報ユニット（Ｉｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔ）が格納される。なお、Ｉｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔについては、図４Ａ〜図４Ｄで説明する。
【００５４】
ＣＲＣ３０４０は、フレーム１０００の転送エラーを検出するためのビットである。ＥＯＦ３０５０は、フレーム１０００の最後尾を示すビットである。
【００５５】
ヘッダ３０２０は、Ｒ＿ＣＴＬ３０２１、Ｄ＿ＩＤ３０２２、Ｓ＿ＩＤ３０２３、ＴＹＰＥ３０２４、Ｆ＿ＣＴＬ３０２４１、ＳＥＱ＿ＩＤ３０２５、ＳＥＱ＿ＣＮＴ３０２６、ＯＸ＿ＩＤ３０２７、ＲＸ＿ＩＤ３０２８等を含む。
【００５６】
Ｒ＿ＣＴＬ３０２１は、当該フレーム１０００の種類を示す。なお、フレーム１０００の種類には、リンク制御フレーム又はデータフレーム等がある。リンク制御フレームは、リンクを正常に保つために用いられる。また、データフレームは、データを転送するために用いられる。なお、本実施の形態におけるフレーム１０００は、データフレームである。
【００５７】
Ｄ＿ＩＤ３０２２は、当該フレーム１０００の送信先のポートアドレスである。Ｓ＿ＩＤ３０２３は、当該フレーム１０００の送信元のポートアドレスである。
【００５８】
ＴＹＰＥ３０２４は、当該フレーム１０００によって転送されるデータのタイプを示す。例えば、ＴＹＰＥ３０２４は、当該フレーム１０００によってＳＣＳＩ−ＦＣＰのタイプのデータが転送されることを示す。
【００５９】
Ｆ＿ＣＴＬ３０２４１は、当該フレーム１０００のシーケンス及びエクスチェンジの属性を示す。例えば、Ｆ＿ＣＴＬ３０２４１は、当該フレーム１０００がシーケンスの最初又は最後であることを示す。また、Ｆ＿ＣＴＬ３０２４１は、当該フレーム１０００の送信元が要求発行元（オリジネータ）又は要求受信元（レスポンダ）のいずれであるかを示す。
【００６０】
ＳＥＱ＿ＩＤ３０２５は、当該フレーム１０００に対応するシーケンスの一意な識別子である。ＳＥＱ＿ＣＮＴ３０２６は、ＳＥＱ＿ＩＤ３０２５によって識別されるシーケンス中における、当該フレーム１０００の順番である。
【００６１】
ＯＸ＿ＩＤ３０２７は、オリジネータによって付与されるエクスチェンジＩＤである。ＲＸ＿ＩＤ３０２８は、レスポンダによって付与されるエクスチェンジＩＤである。なお、エクスチェンジＩＤについては、図５で詳細を説明する。
【００６２】
次に、フレーム１０００のペイロード３０３０に含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔについて説明する。ここでは、ＦＣＰ＿ＣＭＮＤ３１００、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００、ＦＣＰ＿ＤＡＴＡ３３００及びＦＣＰ＿ＲＳＰ３４００について説明する。
【００６３】
図４Ａは、本発明の第１の実施の形態のＦＣＰ＿ＣＭＮＤ３１００に含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【００６４】
ＦＣＰ＿ＣＭＮＤ３１００は、ＩＯ要求に関するフレーム１０００である。この場合、Ｒ＿ＣＴＬ３０２１は、当該フレームがＩＯ要求に関するフレームであることを示す。
【００６５】
ＦＣＰ＿ＣＭＮＤ３１００のＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔは、ＬＵＮ３１０１、ＦＣＰ＿ＣＮＴＬ３１０２、ＦＣＰ＿ＣＤＢ３１０３及びＦＣＰ＿ＤＬ３１０５を含む。
【００６６】
ＬＵＮ３１０１は、ＩＯ要求の対象となるアクセスデータ（ＬＵＮ：Ｌｏｇｉｃａｉ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）を示す。なお、ＩＯ要求の対象となるＬＵＮとは、当該ＩＯ要求によってデータを読み出し又は書き込みされるＬＵＮである。
【００６７】
ＦＣＰ＿ＣＮＴＬ３１０２は、当該ＩＯ要求の属性を示す。ＦＣＰ＿ＣＤＢ３１０５には、ＳＣＳＩコマンド及びＬＢＡ３１０４等が格納される。ＬＢＡ３１０４は、ＩＯ要求の対象となるＬＢＡを示す。
【００６８】
ＦＣＰ＿ＤＬ３１０５は、当該ＩＯ要求によって転送されるデータの最大転送長である。例えば、ＦＣＰ＿ＤＬ３１０５には、当該ＩＯ要求によって書き込み又は読み出しされるデータの大きさが格納される。
【００６９】
図４Ｂは、本発明の第１の実施の形態のＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００に含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【００７０】
ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００は、ライトデータの受信準備の完了をホストコンピュータ２に通知するためのフレームである。つまり、ストレージシステム１は、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００をホストコンピュータ２に送信することによって、ライトデータの送信をホストコンピュータ２に要求する。
【００７１】
ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００のＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔは、ＤＡＴＡ＿ＲＯ３２０１及びＢＵＲＳＴ＿ＬＥＮ３２０２を含む。
【００７２】
ＤＡＴＡ＿ＲＯ３２０１は、当該フレームによって要求されるライトデータのアドレスオフセットである。ＢＵＲＳＴ＿ＬＥＮ３２０２は、当該フレームによって要求されるライトデータのバースト長である。
【００７３】
図４Ｃは、本発明の第１の実施の形態のＦＣＰ＿ＤＡＴＡ３３００に含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【００７４】
ＦＣＰ＿ＤＡＴＡ３３００は、リードデータ又はライトデータを送信するためのフレームである。
【００７５】
ＦＣＰ＿ＤＡＴＡ３３００のＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔは、ＤＡＴＡ３３０１を含む。ＤＡＴＡ３３０１は、当該フレームによって送信されるリードデータ又はライトデータである。
【００７６】
図４Ｄは、本発明の第１の実施の形態のＦＣＰ＿ＲＳＰ３４００に含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【００７７】
ＦＣＰ＿ＲＳＰ３４００は、ステータス又はセンスデータを通知するためのフレームである。
【００７８】
ＦＣＰ＿ＲＳＰ３４００のＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔは、ＦＣＰ＿ＳＴＡＴＵＳ３４０１及びＲＳＰ＿ＣＯＤＥ３４０２を含む。
【００７９】
ＦＣＰ＿ＳＴＡＴＵＳ３４０１は、当該フレームによって通知されるステータスである。ＲＳＰ＿ＣＯＤＥ３４０２は、当該フレームによって通知されるエラーの内容である。
【００８０】
次に、ホストコンピュータ２がストレージシステム１にリード要求を送信した時の処理を説明する。
【００８１】
図５は、本発明の第１の実施の形態の計算機システムのリード処理のタイミングチャートである。
【００８２】
本説明図では、ホストコンピュータ２は、リード要求を送信するので、オリジネータである。また、ストレージシステム１は、リード要求を受信するので、レスポンダである。
【００８３】
まず、ホストコンピュータ２は、リード要求２００１を含むフレームをストレージシステム１に送信する。リード要求２００１を含むフレームは、前述したＦＣＰ＿ＣＭＮＤ３１００である。
【００８４】
ストレージシステム１は、リード要求を含むフレームを受信する。すると、ストレージシステム１は、リード要求２００１によって読み出し要求されたデータ（リードデータ）がキャッシュメモリ８７に記憶されているか否かを判定する。リードデータがキャッシュメモリ８７に記憶されていない場合、ストレージシステム１は、ＨＤＤ５１からリードデータを抽出する。そして、ストレージシステム１は、抽出したリードデータを、キャッシュメモリ８７に格納する。
【００８５】
次に、ストレージシステム１は、キャッシュメモリ８７に記憶されているリードデータをホストコンピュータ２に送信する。
【００８６】
なお、本説明図では、ストレージシステム１は、リードデータを、三つのデータ２００２、２００３及び２００４に分割する。次に、ストレージシステム１は、データ２００２を含むフレーム、データ２００３を含むフレーム、及びデータ２００４を含むフレームをホストコンピュータ２に送信する。なお、これらのフレームは、ＦＣＰ＿ＤＡＴＡ３３００である。
【００８７】
その後、ストレージシステム１は、ステータス２００５を含むフレームをホストコンピュータ２に送信する。なお、当該ステータス２００５は、送信されたリードデータを正確に受信できたことを通知する。また、ステータス２００５を含むフレームは、ＦＣＰ＿ＲＳＰ３４００である。
【００８８】
なお、一連の仕事に関する処理が、シーケンス１００１である。本説明図では、三つのシーケンス１００１を含む。一つ目のシーケンス１００１は、ホストコンピュータ２のリード要求送信処理である。二つ目のシーケンス１００１は、ストレージシステム２のリードデータ送信処理である。また、三つ目のシーケンス１００１は、ストレージシステム２のステータス通知処理である。なお、二つ目のシーケンス１００１は、三つのフレームによって実行される。このように、シーケンス１００１は、複数のフレームによって実行されてもよい。
【００８９】
また、ホストコンピュータ２によって発行されたＩＯ要求に関する処理の一群が、エクスチェンジ１００２である。本説明図で説明したすべての処理が、エクスチェンジ１００２である。つまり、本説明図のエクスチェンジ１００２は、三つのシーケンスから構成される。なお、エクスチェンジ１００２は、エクスチェンジＩＤによって一意に識別される。
【００９０】
本説明図では、フレームに含まれるＯＸ＿ＩＤ３０２７、ＲＸ＿ＩＤ３０２８、ＳＥＱ＿ＩＤ３０２５及びＳＥＱ＿ＣＮＴ３０２６が図示されている。
【００９１】
ＯＸ＿ＩＤ３０２７は、オリジネータであるホストコンピュータ２によって付与されるエクスチェンジＩＤである。ＲＸ＿ＩＤ３０２８は、レスポンダであるストレージシステム１によって付与されるエクスチェンジＩＤである。ＳＥＱ＿ＩＤ３０２５は、当該フレームに対応するシーケンスの一意な識別子である。ＳＥＱ＿ＣＮＴ３０２６は、ＳＥＱ＿ＩＤ３０２５によって識別されるシーケンス中における、当該フレームの順番である。
【００９２】
本説明図によると、エクスチェンジ１００２に含まれるすべてのフレームのＯＸ＿ＩＤ３０２７には、同一の値の「０ｘ１２３４」が格納される。また、リード要求２００１を含むフレームのＲＸ＿ＩＤ３０２８には、初期値の「０ｘｆｆｆｆ」が格納される。そして、ストレージシステム１は、リード要求２００１を含むフレームを受信すると、ＲＸ＿ＩＤ３０２８を「０ｘ５６７８」に決定する。そして、以降の処理のすべてのフレームのＲＸ＿ＩＤ３０２８には、ストレージシステム１によって決定されたエクスチェンジＩＤの「０ｘ５６７８」が格納される。
【００９３】
また、データ２００２を含むフレームのＳＥＱ＿ＣＮＴ３０２６には、「０」が格納される。データ２００３を含むフレームのＳＥＱ＿ＣＮＴ３０２６には、「１」が格納される。データ２００４を含むフレームのＳＥＱ＿ＣＮＴ３０２６には、「２」が格納される。
【００９４】
次に、ホストコンピュータ２がストレージシステム１にライト要求を送信した時の処理を説明する。
【００９５】
図６は、本発明の第１の実施の形態の計算機システムのライト処理のタイミングチャートである。
【００９６】
本説明図では、ホストコンピュータ２は、ライト要求を送信するので、オリジネータである。また、ストレージシステム１は、ライト要求を受信するので、レスポンダである。
【００９７】
まず、ホストコンピュータ２は、ライト要求２０１１を含むフレームをストレージシステム１に送信する。なお、ライト要求２０１１を含むフレームは、前述したＦＣＰ＿ＣＭＮＤ３１００である。
【００９８】
ストレージシステム１は、ライト要求２０１１を含むフレームを受信する。すると、ストレージシステム１は、ライトデータを格納する記憶領域をキャッシュメモリ８７に確保する。
【００９９】
そして、ストレージシステム１は、ライトデータの受信準備の完了通知２０１２を含むフレームを、ホストコンピュータ２に送信する。なお、ライトデータの受信準備の完了通知２０１２を含むフレームは、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００である。
【０１００】
ホストコンピュータ２は、ライトデータの受信準備の完了通知２０１２を含むフレームを受信する。すると、ホストコンピュータ２は、ライトデータをストレージシステム１に送信する。本説明図では、ホストコンピュータ２は、ライトデータを、三つのデータ２０１３、２０１４及び２０１５に分割する。次に、ホストコンピュータ２は、データ２０１３を含むフレーム、データ２０１４を含むフレーム及びデータ２０１５を含むフレームを、ストレージシステム１に送信する。なお、これらのフレームは、ＦＣＰ＿ＤＡＴＡ３３００である。
【０１０１】
ストレージシステム１は、データ２０１３を含むフレーム、データ２０１４を含むフレーム及びデータ２０１５を含むフレームを受信する。すると、ストレージシステム１は、受信したフレームに含まれるデータ２０１３、２０１４及び２０１５をキャッシュメモリ８７に格納する。
【０１０２】
その後、ストレージシステム１は、ステータス２０１６を含むフレームをホストコンピュータ２に送信する。なお、当該ステータス２０１６は、送信されたライトデータの書き込み完了を通知する。また、ステータス２０１６を含むフレームは、ＦＣＰ＿ＲＳＰ３４００である。
【０１０３】
本説明図では、フレームに含まれるＯＸ＿ＩＤ３０２７、ＲＸ＿ＩＤ３０２８、ＳＥＱ＿ＩＤ３０２５及びＳＥＱ＿ＣＮＴ３０２６が図示されている。
【０１０４】
本説明図によると、同一のエクスチェンジに含まれるすべてのフレームのＯＸ＿ＩＤ３０２７には、同一の値の「０ｘ１２３５」が格納される。また、ライト要求２０１１を含むフレームのＲＸ＿ＩＤ３０２８には、初期値の「０ｘｆｆｆｆ」が格納される。そして、ストレージシステム１は、ライト要求２０１１を含むフレームを受信すると、ＲＸ＿ＩＤ３０２８を「０ｘ５６７９」に決定する。そして、以降の処理のすべてのフレームのＲＸ＿ＩＤ３０２８には、ストレージシステム１によって決定された値の「０ｘ５６７９」が格納される。
【０１０５】
また、データ２０１３を含むフレームのＳＥＱ＿ＣＮＴ３０２６には、「０」が格納される。データ２０１４を含むフレームのＳＥＱ＿ＣＮＴ３０２６には、「１」が格納される。データ２０１５を含むフレームのＳＥＱ＿ＣＮＴ３０２６には、「２」が格納される。
【０１０６】
次に、プロトコルプロセッサ６１の処理について説明する。ここでは、ホストコンピュータ２がストレージシステム１にライト要求を送信した時の処理を説明する。
【０１０７】
図７は、本発明の第１の実施の形態の計算機システムのライト処理の説明図である。
【０１０８】
まず、ホストコンピュータ２は、ライト要求２０１１を含むフレームをストレージシステム１のチャネルアダプタ６に送信する。
【０１０９】
すると、チャネルアダプタ６に備わるプロトコルプロセッサ６１は、ライト要求２０１１を含むフレームを受信する。すると、プロトコルプロセッサ６１は、受信したフレームを、ローカルルータ部６２を介してフレームＦＩＦＯ１１に格納する。なお、ストレージノード８に備わるメモリモジュール８４の一部が、フレームＦＩＦＯ１１として使用される。
【０１１０】
一方、ストレージノード８に備わるプロセッサ８２は、フレームをフレームＦＩＦＯ１１から抽出する。プロセッサ８２は、抽出したフレームに対応する処理を行う。ここでは、プロセッサ８２は、ライトデータを格納する記憶領域をキャッシュメモリ８７に確保する。次に、プロセッサ８２は、確保した記憶領域のアドレス等を含む転送リストを作成する。なお、転送リストについては、図８で詳細を説明する。
【０１１１】
次に、プロセッサ８２は、作成した転送リストに対応する、転送リストポインタのインデックスを特定する。転送リストポインタは、転送リストが格納されている記憶領域のアドレスを示す。次に、プロセッサ８２は、特定した転送リストポインタのインデックスを、ローカルルータ部６２を介して要求ＦＩＦＯ１３に格納する。なお、チャネルアダプタ６に備わるメモリモジュール６３の一部が、要求ＦＩＦＯ１３として使用される。
【０１１２】
プロトコルプロセッサ６１は、転送リストポインタのインデックスを、要求ＦＩＦＯ１３から抽出する。次に、プロトコルプロセッサ６１は、抽出したインデックスに対応する転送リストを取得する。そして、プロトコルプロセッサ６１は、取得した転送リストに従って、ライトデータの受信準備の完了通知２０１２を含むフレームを、ホストコンピュータ２に送信する。つまり、プロトコルプロセッサ６１は、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００をホストコンピュータに送信する。
【０１１３】
本実施の形態では、転送リストポインタのインデックスが、フレームのＲＸ＿ＩＤ３０２８となる。なお、転送リストには、フレームのＲＸ＿ＩＤ３０２８に関するフィールドが含まれていてもよい。この場合、プロトコルプロセッサ６１は、取得した転送リストに含まれるＲＸ＿ＩＤを、送信するフレームのＲＸ＿ＩＤ３０２８とする。
【０１１４】
プロトコルプロセッサ６１は、ライトデータの受信準備の完了通知２０１２を含むフレームを正常に送信すると、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００の送信に関するシーケンスの完了メッセージを、メッセージＦＩＦＯ１２に格納する。なお、ストレージノード８に備わるメモリモジュール８４の一部が、メッセージＦＩＦＯ１２として使用される。
【０１１５】
プロセッサ８２は、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００の送信に関するシーケンスの完了メッセージを、メッセージＦＩＦＯ１２から抽出する。プロセッサ８２は、抽出したメッセージに基づいて、プロトコルプロセッサ６１がＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００を正常に送信したことを確認する。
【０１１６】
一方、ホストコンピュータ２は、ライトデータの受信準備の完了通知２０１２を含むフレームを受信する。すると、ホストコンピュータ２は、ライトデータを、三つのデータ２０１３、２０１４及び２０１５に分割する。次に、ホストコンピュータ２は、データ２０１３を含むフレーム、データ２０１４を含むフレーム及びデータ２０１５を含むフレームを、ストレージシステム１のチャネルアダプタ６に送信する。
【０１１７】
チャネルアダプタ６に備わるプロトコルプロセッサ６１は、データ２０１３を含むフレーム、データ２０１４を含むフレーム及びデータ２０１５を含むフレームを受信する。すると、プロトコルプロセッサ６１は、転送リストに従って、受信したフレームに含まれるデータ２０１３、２０１４及び２０１５をキャッシュメモリ８７に格納する。
【０１１８】
そして、プロトコルプロセッサ６１は、データ２０１３を含むフレーム、データ２０１４を含むフレーム及びデータ２０１５を含むフレームのすべてを受信すると、ライトデータの受信に関するシーケンスが完了したと判定する。そこで、プロトコルプロセッサ６１は、ライトデータの受信に関するシーケンスの完了メッセージを、メッセージＦＩＦＯ１２に格納する。
【０１１９】
プロセッサ８２は、ライトデータの受信に関するシーケンスの完了メッセージを、メッセージＦＩＦＯ１２から抽出する。プロセッサ８２は、抽出したメッセージに基づいて、プロトコルプロセッサ６１がライトデータを正常に受信したことを確認する。次に、プロセッサ８２は、ＤＭＡコントローラ８５１及びキャッシュメモリ８７のステータスを参照することによって、ライトデータがキャッシュメモリ８７に正常に格納されたか否かを判定する。
【０１２０】
ライトデータがキャッシュメモリ８７に正常に格納された場合、プロセッサ８２は、転送リストを書き換える。なお、書換後の転送リストは、ステータス２０１６をホストコンピュータ２に送信することを指示する。また、ステータス２０１６は、ライトデータの書き込み完了を通知する。
【０１２１】
次に、プロセッサ８２は、書き換えた転送リストに対応する、転送リストポインタのインデックスを、要求ＦＩＦＯ１３に格納する。
【０１２２】
プロトコルプロセッサ６１は、転送リストポインタのインデックスを、要求ＦＩＦＯ１３から抽出する。次に、プロトコルプロセッサ６１は、抽出したインデックスに対応する転送リストを取得する。そして、プロトコルプロセッサ６１は、取得した転送リストに従って、ステータス２０１６を含むフレームを、ホストコンピュータ２に送信する。つまり、プロトコルプロセッサ６１は、ＦＣＰ＿ＲＳＰ３４００をホストコンピュータ２に送信する。
【０１２３】
プロトコルプロセッサ６１は、ステータス２０１６を含むフレームを正常に送信すると、ＦＣＰ＿ＲＳＰ３４００の送信に関するシーケンスの完了メッセージを、メッセージＦＩＦＯ１２に格納する。
【０１２４】
プロセッサ８２は、ＦＣＰ＿ＲＳＰ３４００の送信に関するシーケンスの完了メッセージを、メッセージＦＩＦＯ１２から抽出する。プロセッサ８２は、抽出したメッセージに基づいて、ＦＣＰ＿ＲＳＰ３４００をプロトコルプロセッサ６１が正常に送信したことを確認する。
【０１２５】
以上のように、ストレージシステム１は、ライトデータをキャッシュメモリ８７に格納する。つまり、プロトコルプロセッサ６１とプロセッサ８２とは、フレームＦＩＦＯ１１、メッセージＦＩＦＯ１２及び要求ＦＩＦＯ１３の三つのＦＩＦＯを用いて、情報を交換する。
【０１２６】
なお、プロトコルプロセッサ６１は、ライト要求を含むフレームをメッセージＦＩＦＯ１１に格納してもよい。この場合、プロトコルプロセッサ６１は、フレームである旨を、メッセージの種別とする。プロセッサ８２は、メッセージの種別に基づいて、メッセージＦＩＦＯ１２から抽出した情報が、フレーム又はメッセージのいずれであるかを判定する。
【０１２７】
図８は、本発明の第１の実施の形態の要求ＦＩＦＯ１３及び転送リストの説明図である。
【０１２８】
要求ＦＩＦＯ１３には、転送リストポインタ１３１のインデックスが格納される。転送リストポインタ１３１は、転送リストが格納された記憶領域のアドレスを示す。
【０１２９】
本説明図では、要求ＦＩＦＯ１３の先頭には、転送リストポインタ１３１のインデックスである「３８」が格納されている。
【０１３０】
転送リストポインタ１３１内の、インデックス「３８」に対応するエントリ１３２には、転送リスト１３５のアドレスが格納されている。
【０１３１】
転送リスト１３５は、ＦＣＰ＿ＲＳＰ３４００の送信を要求する。そのため、転送リスト１３５は、種別フィールド１３１１及びステータスフィールド１３１４を含む。
【０１３２】
種別フィールド１３１１には、プロトコルプロセッサ６１によって送信されるフレームの種類が格納される。つまり、転送リスト１３５の種別フィールド１３１１は、プロトコルプロセッサ６１によって送信されるフレームがＦＣＰ＿ＲＳＰ３４００であることを示す。ステータスフィールド１３１４には、プロトコルプロセッサ６１によって送信されるフレームに含めるステータスが格納される。
【０１３３】
また、要求ＦＩＦＯ１３には、転送リストポインタ１３１のインデックスである「１２８」が二番目に格納されている。
【０１３４】
転送リストポインタ１３１内の、インデックス「１２８」に対応するエントリ１３３には、転送リスト１３４のアドレスが格納されている。
【０１３５】
転送リスト１３４は、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００の送信を要求する。そのため、転送リスト１３４は、種別フィールド１３１１、要素数フィールド１３１２及びデータフィールド１３１３を含む。
【０１３６】
種別フィールド１３１１には、プロトコルプロセッサ６１によって送信されるフレームの種類が格納される。つまり、転送リスト１３４の種別フィールド１３１１は、プロトコルプロセッサ６１によって送信されるフレームがＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００であることを示す。
【０１３７】
要素数フィールド１３１２には、キャッシュメモリ８７に格納可能なライトデータの要素数が格納される。つまり、転送リスト１３４は、要素数フィールド１３１２に格納された値と同数のデータフィールド１３１３を含む。
【０１３８】
データフィールド１３１３には、キャッシュメモリ８７上の、ライトデータが格納される記憶領域のアドレスが格納される。更に、データフィールド１３１３には、キャッシュメモリ８７上の当該記憶領域に格納されるライトデータのデータ長が格納される。
【０１３９】
図９は、本発明の第１の実施の形態のメッセージＦＩＦＯ１２の説明図である。
【０１４０】
メッセージＦＩＦＯ１２には、プロトコルプロセッサ６１によってメッセージが格納される。メッセージＦＩＦＯ１２に格納されるメッセージは、内容フィールド１２１、転送リストインデックスフィールド１２２及びステータスフィールド１２３を含む。
【０１４１】
内容フィールド１２１には、当該メッセージの種別が格納される。例えば、内容フィールド１２１には、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ３２００の送信に関するシーケンスの完了通知、ＦＣＰ＿ＲＳＰ３４００の送信に関するシーケンスの完了通知、又はＦＣＰ＿ＤＡＴＡ３３００の受信に関するシーケンスの完了通知等が当該メッセージの種別として格納される。
【０１４２】
転送リストインデックスフィールド１２２には、当該メッセージに対応する転送リストのインデックスが格納される。ステータスフィールド１２３には、内容フィールド１２１に格納されている処理の結果が格納される。
【０１４３】
次に、フレームＦＩＦＯ１１、メッセージＦＩＦＯ１２及び要求ＦＩＦＯ１３の実装について説明する。
【０１４４】
図１０は、本発明の第１の実施の形態のフレームＦＩＦＯ１１、メッセージＦＩＦＯ１２及び要求ＦＩＦＯ１３の制御に関する説明図である。
【０１４５】
本実施の形態では、フレームＦＩＦＯ１１、メッセージＦＩＦＯ１２及び要求ＦＩＦＯ１３のそれぞれに、プロデューサインデックス及びコンシューマインデックスが設定される。
【０１４６】
ここで、プロデューサは、プロトコルプロセッサ６１又はプロセッサ８２のうち、ＦＩＦＯにデータを格納するものである。一方、コンシューマは、プロトコルプロセッサ６１又はプロセッサ８２のうち、ＦＩＦＯからデータを抽出するものである。また、プロデューサインデックスは、プロデューサがＦＩＦＯに最後にデータを格納したエントリのインデックスである。また、コンシューマインデックスは、コンシューマがＦＩＦＯから最後にデータを抽出したエントリのインデックスである。
【０１４７】
つまり、フレームＦＩＦＯ１１に関しては、プロトコルプロセッサ６１がプロデューサであり、プロセッサ８２がコンシューマである。そこで、プロトコルプロ セッサ６１は、フレームＦＩＦＯコンシューマインデックス６１１を管理する。一方、プロセッサ８２は、フレームＦＩＦＯプロデューサインデックス８２１を 管理する。
【０１４８】
また、メッセージＦＩＦＯ１２に関しては、プロトコルプロセッサ６１がプロデューサであり、プロセッサ８２がコンシューマである。そこで、プロトコルプロ セッサ６１は、メッセージＦＩＦＯコンシューマインデックス６１２を管理する。一方、プロセッサ８２は、メッセージＦＩＦＯプロデューサインデックス ８２２を管理する。
【０１４９】
また、要求ＦＩＦＯ１３に関しては、プロトコルプロセッサ６１がコンシューマであり、プロセッサ８２がプロデューサである。そこで、プロトコルプロセッサ ６１は、要求ＦＩＦＯプロデューサインデックス６１３を管理する。一方、プロセッサ８２は、書込用要求ＦＩＦＯコンシューマインデックス８２３を管理する。
【０１５０】
次に、プロトコルプロセッサ６１及びプロセッサ８２の処理を説明する。
【０１５１】
プロデューサは、ＦＩＦＯにデータを格納する場合、当該ＦＩＦＯに対応するプロデューサインデックスとコンシューマインデックスとを比較する。これによって、プロデューサは、ＦＩＦＯにデータを格納するための空き領域が存在するか否かを判定する。なお、プロデューサインデックス及びコンシューマインデックスは、サイクリックな境界を持つ。
【０１５２】
ＦＩＦＯに空き領域が存在すると、プロデューサは、プロデューサインデックスを増加させる。そして、プロデューサは、ＦＩＦＯ中の、増加させたプロデューサインデックスに対応するエントリに、データを格納する。
【０１５３】
コンシューマは、コンシューマインデックスとプロデューサインデックスとを比較する。コンシューマインデックスとプロデューサインデックスとが等しくない場合、ＦＩＦＯにデータが格納されていない。そこで、コンシューマは、ＦＩＦＯからデータを抽出する。そして、コンシューマは、データを抽出したＦＩＦＯに対応するコンシューマインデックスを増加させる。
【０１５４】
なお、プロデューサは、コンシューマインデックスの複製を記憶する等によって、コンシューマインデックスを参照できる。同様に、コンシューマは、プロデューサインデックスの複製を記憶する等によって。プロデューサインデックスを参照できる。
【０１５５】
また、フレームＦＩＦＯプロデューサインデックス８２１、メッセージＦＩＦＯプロデューサインデックス８２２、書込用要求ＦＩＦＯコンシューマインデックス８２３は、プロセッサ８２に記憶されてもよいし、メモリモジュール８４等に記憶されてもよい。
【０１５６】
以上のように、プロトコルプロセッサ６１とプロセッサ８２とは、データを交換する。そのため、従来のストレージシステムでは、一つのプロトコルプロセッサ６１は、一つ又は少数のプロセッサ８２によって制御される。そのため、従来のストレージシステムは、一つのチャネル４に対して多数のプロセッサ８２を備えていても、プロセッサ８２を有効に活用できなかった。そこで、本実施の形態のストレージシステム１は、ローカルルータ部６２を備える。これによって、本実施の形態のストレージシステム１では、複数のプロセッサ８２が一つのプロトコルプロセッサ６１を制御できる。
【０１５７】
図１１は、本発明の第１の実施の形態のフレームＦＩＦＯ１１、メッセージＦＩＦＯ１２及び要求ＦＩＦＯ１３の説明図である。
【０１５８】
本実施の形態では、ストレージシステム１は、プロセッサＡ８２からプロセッサＮ８２を備える。また、ストレージシステム１は、プロトコルプロセッサＡ６１からプロトコルプロセッサＭ８２を備える。そして、プロトコルプロセッサＡ６１は、すべてのプロセッサ８２からアクセスを受信する。
【０１５９】
ストレージノード８に備わるメモリモジュール８４は、プロセッサ８２に対するフレーム／メッセージＦＩＦＯ群１１０をプロセッサ８２の数だけ記憶する。
【０１６０】
プロセッサ８２に対するフレーム／メッセージＦＩＦＯ群１１０のそれぞれは、フレームＦＩＦＯ１１及びメッセージＦＩＦＯ１２をプロトコルプロセッサ６１ごとに有する。
【０１６１】
チャネルアダプタ６に備わるメモリモジュール６３は、要求ＦＩＦＯ１３を記憶する。更に、当該メモリモジュール６３は、当該書込用要求ＦＩＦＯ１３０をプロセッサ８２の数だけ記憶する。
【０１６２】
なぜなら、ライトアクセスは、データの到達を待たないが、リードアクセスは、データが到達するまで処理がとまってしまうからである。要求ＦＩＦＯ１３は、プロトコルプロセッサ６１によってリードされるので、プロトコルプロセッサ６１の近くのメモリモジュール６３に記憶される。一方、フレームＦＩＦＯ１１及びメッセージＦＩＦＯ１２は、プロセッサ８２によってリードされるので、プロセッサ８２の近くのメモリモジュール８４に記憶される。これによって、ストレージシステム１の性能が向上する。
【０１６３】
ただし、プロトコルプロセッサに対する要求ＦＩＦＯ１３は、ローカルルータ部６２に記憶されてもよい。例えば、要求ＦＩＦＯ１３は、ローカルルータ部６２のレジスタ等に記憶される。この場合、ローカルルータ部６２は、メモリモジュール６３にアクセスしないですむので、処理を更に高速化できる。
【０１６４】
ローカルルータ部６２は、フレームＦＩＦＯ１１に格納されるフレームを処理をするプロセッサ（担当プロセッサ）８２を決定する。例えば、ローカルルータ部６２は、エクスチェンジＩＤ、ＩＯ要求の対象となるアクセスデータ、ＩＯ要求の対象となるＬＢＡ又はフレームに含まれるＳ＿ＩＤ３０２３に応じて、担当プロセッサ８２を決定する。
【０１６５】
ローカルルータ部６２は、決定した担当プロセッサ８２に対するフレーム／メッセージＦＩＦＯ群１１０に含まれるフレームＦＩＦＯ１１に、フレームを格納する。
【０１６６】
また、ローカルルータ部６２は、メッセージＦＩＦＯ１２に格納されるメッセージを処理をするプロセッサ（担当プロセッサ）８２を決定する。そして、ローカルルータ部６２は、決定した担当プロセッサ８２に対するフレーム／メッセージＦＩＦＯ群１１０に含まれるメッセージＦＩＦＯ１２に、メッセージを格納する。
【０１６７】
また、プロセッサ８２は、転送リストのインデックスを、当該プロセッサ８２用の書込用要求ＦＩＦＯ１３０に格納する。例えば、プロセッサ８２Ａは、転送リストのインデックスを、プロセッサＡ用書込用要求ＦＩＦＯ１３０Ａに格納する。
【０１６８】
すると、ローカルルータ部６２は、書込用要求ＦＩＦＯ１３０のそれぞれに格納された転送リストのインデックスを抽出する。そして、ローカルルータ部６２は、抽出した転送リストのインデックスを、プロトコルプロセッサに対する要求ＦＩＦＯ１３に格納する。
【０１６９】
なお、ローカルルータ部６２は、プロセッサ８２が書込用要求ＦＩＦＯ１３０に格納しようとした転送リストのインデックスを、書込用要求ＦＩＦＯ１３０に格納せずに、そのままプロトコルプロセッサに対する要求ＦＩＦＯ１３に格納してもよい。
【０１７０】
これによって、プロトコルプロセッサ６１は、当該プロトコルプロセッサ６１に対する要求ＦＩＦＯ１３に格納されるインデックスに対応する転送リストのみを処理すればよい。つまり、プロトコルプロセッサ６１は、一つの要求ＦＩＦＯ１３に格納されるインデックスに対応する転送リストを処理することによって、複数のプロセッサ８２によって発行された転送リストを処理できる。
【０１７１】
次に、ローカルルータ部６２の詳細について説明する。
【０１７２】
図１２は、本発明の第１の実施の形態のローカルルータ部６２の構成のブロック図である。
【０１７３】
ローカルルータ部６２は、アドレスデコーダ６２１、バッファ６２５、プロセッサ番号対応テーブル６２６、フレームＦＩＦＯサーチ部６２７、メッセージＦＩＦＯサーチ部６２８、送信先アドレス変更部６２９、転送リストインデクス−プロセッサ番号対応テーブル６２８０、送信先アドレステーブル６２９０、要求ＦＩＦＯ制御部６２１０及びメモリコントローラ６２１１を備える。
【０１７４】
アドレスデコーダ６２１は、プロトコルプロセッサ６１からアクセスを受信する。なお、アクセスは、フレーム又はメッセージ等である。すると、アドレスデコーダ６２１は、受信したアクセスの送信先アドレスを解析する。これによって、アドレスデコーダ６２１は、受信したアクセスの送信先がキャッシュメモリ８７、フレームＦＩＦＯ１１、メッセージＦＩＦＯ１２又は要求ＦＩＦＯ１３のいずれであるかを判定する。
【０１７５】
アクセスの送信先がキャッシュメモリ８７であると、アドレスデコーダ６２は、当該アクセスをそのままプロセッサ８２へ転送する（６２４）。
【０１７６】
一方、アクセスの送信先がフレームＦＩＦＯ１１であると、アドレスデコーダ６２１は、当該アクセスをバッファ６２５に格納する（６２２）。
【０１７７】
フレームＦＩＦＯサーチ部６２７は、プロセッサ番号対応テーブル６２６に基づいて、バッファ６２５に格納されているアクセスを処理するプロセッサ（担当プロセッサ）８２を決定する。そして、フレームＦＩＦＯサーチ部６２７は、決定した担当プロセッサ８２を、当該アクセスの転送先とする。
【０１７８】
送信先アドレス変更部６２９は、決定された担当プロセッサ８２及び送信先アドレステーブル６２９０に基づいて、アクセスの送信先アドレスを変更する。
【０１７９】
そして、送信先アドレス変更部６２９は、送信先アドレスを変更したアクセスを、プロセッサ８２へ転送する。なお、アクセスの送信先がフレームＦＩＦＯ１１の場合のローカルルータ部６２の処理については、図１６で詳細を説明する。
【０１８０】
一方、アクセスの送信先がメッセージＦＩＦＯ１２であると、アドレスデコーダ６２１は、当該アクセスをバッファ６２５に格納する（６２３）。
【０１８１】
メッセージＦＩＦＯサーチ部６２８は、転送リストインデクス−プロセッサ番号対応テーブル６２８０に基づいて、バッファ６２５に格納されているアクセスを処理するプロセッサ（担当プロセッサ）８２を決定する。そして、メッセージＦＩＦＯサーチ部６２８は、決定した担当プロセッサ８２を、当該アクセスの転送先とする。
【０１８２】
送信先アドレス変更部６２９は、決定された担当プロセッサ８２及び送信先アドレステーブル６２９０に基づいて、アクセスの送信先アドレスを変更する。
【０１８３】
そして、送信先アドレス変更部６２９は、送信先アドレスを変更したアクセスを、プロセッサ８２へ転送する。なお、アクセスの送信先がメッセージＦＩＦＯ１２の場合のローカルルータ部６２の処理については、図１７で詳細を説明する。
【０１８４】
一方、アクセスの送信先が要求ＦＩＦＯ１３であると、メモリコントローラ６２１１は、メモリモジュール６３に含まれる要求ＦＩＦＯ１３から、転送リストのインデックスを抽出する。要求ＦＩＦＯ制御部６２１０は、抽出された転送リストのインデックスをプロトコルプロセッサ６１に送信する。
【０１８５】
また、要求ＦＩＦＯ制御部６２１０は、プロセッサ８２からアクセスを受ける。すると、要求ＦＩＦＯ制御部６２１０は、受信したアクセスに含まれる転送リストのインデックスを、メモリモジュール６３に含まれる要求ＦＩＦＯ１３に格納する。
【０１８６】
なお、アクセスの送信先が要求ＦＩＦＯ１３の場合のローカルルータ部６２の処理については、図１９で詳細を説明する。
【０１８７】
プロセッサ番号対応テーブル６２６は、ホストコンピュータ２から送信されたフレームを処理するプロセッサ（担当プロセッサ）８２を示す。なお、プロセッサ番号対応テーブル６２６については、図１３で詳細を説明する。
【０１８８】
送信先アドレステーブル６２９０は、プロトコルプロセッサ６１から送信されたアクセスの転送先となるアドレスを示す。なお、送信先アドレステーブル６２９０については、図１４で詳細を説明する。
【０１８９】
転送リストインデックス−プロセッサ番号対応テーブル６２８０は、転送リストポインタのインデックスとプロセッサ番号との対応を示す。なお、転送リストインデックス−プロセッサ番号対応テーブル６２８０については、図１５で詳細を説明する。
【０１９０】
図１３は、本発明の第１の実施の形態のプロセッサ番号対応テーブル６２６の構成図である。
【０１９１】
プロセッサ番号対応テーブル６２６は、入力フレーム６２６１及びプロセッサ番号６２６５を含む。
【０１９２】
入力フレーム６２６１は、プロトコルプロセッサ６１によって受信されたフレームの内容である。具体的には、入力フレーム６２６１は、Ｓ＿ＩＤ６２６２、ＬＵＮ６２６３及びＬＢＡ６２６４を含む。
【０１９３】
Ｓ＿ＩＤ６２６２は、当該フレームの送信元であるホストコンピュータ２のポートアドレスである。プロセッサ番号対応テーブル６２６がＳ＿ＩＤ６２６２を含むことによって、ローカルルータ部６２は、特定のホストコンピュータ２からしか認識できない論理ボリューム（ＬＵ）を設定できる。
【０１９４】
ＬＵＮ６２６３は、当該フレームによってアクセスが要求される論理ボリュームの一意な識別子である。ＬＢＡ６２６４は、当該フレームによってアクセスが要求される論理ブロックの一意な識別子である。
【０１９５】
なお、入力フレーム６２６１は、論理デバイス番号を含んでいてもよい。論理デバイス番号は、当該フレームによってアクセスが要求される論理デバイスの一意な識別子である。
【０１９６】
プロセッサ番号６２６５は、当該エントリのＳ＿ＩＤ６２６２、ＬＵＮ６２６３及びＬＢＡ６２６４に対応するフレームを処理するプロセッサの一意な識別子である。
【０１９７】
ローカルルータ部６２のフレームＦＩＦＯサーチ部６２７は、検索アルゴリズムを用いることによって、プロセッサ番号対応テーブル６２６から、プロセッサ番号６２６５を検索してもよい。この場合、ローカルルータ部６２のフレームＦＩＦＯサーチ部６２７は、プロセッサ番号６２６５を高速に検索できる。なお、検索アルゴリズムは、二分木検索アルゴリズム又はハッシュアルゴリズム等である。また、検索アルゴリズムの種類によっては、テーブルの並び順を昇順にするなどの処理が予め必要となる。
【０１９８】
また、プロセッサ番号対応テーブル６２６は、ＣＡＭ（Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ）を用いて実装されてもよい。
【０１９９】
これによって、ローカルルータ部６２は、フレームがアクセスを要求する領域に応じて、当該フレームを処理するプロセッサ８２を決定できる。そのため、プロセッサ８２は、他のプロセッサとの排他処理を行うことなく、データを読み書きできる。
【０２００】
また、ローカルルータ部６２は、一つのプロセッサ８２でなく、同一の周辺回路部８３に接続される複数のプロセッサ８２に同一の処理を割り当ててもよい。同一の周辺回路部８３に接続されるプロセッサ８２間は高速に通信できるので、ストレージシステム１は、プロセッサ８２の処理能力を効率的に利用できる。
【０２０１】
図１４は、本発明の第１の実施の形態の送信先アドレステーブル６２９０の構成図である。
【０２０２】
送信先アドレステーブル６２９０は、プロセッサ番号６２９１、フレームＦＩＦＯのベースアドレス６２９２、メッセージＦＩＦＯのベースアドレス６２９３、フレームＦＩＦＯのプロデューサインデックス６２９４、メッセージＦＩＦＯのプロデューサインデックス６２９５、フレームＦＩＦＯのコンシューマインデックス６２９６、及びメッセージＦＩＦＯのコンシューマインデックス６２９７を含む。
【０２０３】
プロセッサ番号６２９１は、ストレージノード８に備わるプロセッサ８２の一意な識別子である。
【０２０４】
フレームＦＩＦＯのベースアドレス６２９２は、当該エントリのプロセッサ番号６２９１によって識別されるプロセッサ８２に対するフレームＦＩＦＯ１１の先頭のアドレスある。メッセージＦＩＦＯのベースアドレス６２９３は、当該エントリのプロセッサ番号６２９１によって識別されるプロセッサ８２に対するメッセージＦＩＦＯ１２の先頭のアドレスである。
【０２０５】
フレームＦＩＦＯのプロデューサインデックス６２９４は、当該エントリのプロセッサ番号６２９１によって識別されるプロセッサ８２に対するフレームＦＩＦＯ１１に、最後にデータが格納されたエントリのインデックスである。
【０２０６】
メッセージＦＩＦＯのプロデューサインデックス６２９５は、当該エントリのプロセッサ番号６２９１によって識別されるプロセッサ８２に対するメッセージＦＩＦＯ１２に、最後にデータが格納されたエントリのインデックスである。
【０２０７】
フレームＦＩＦＯのコンシューマインデックス６２９６は、当該エントリのプロセッサ番号６２９１によって識別されるプロセッサ８２に対するフレームＦＩＦＯ１１から、最後にデータが抽出されたエントリのインデックスである。
【０２０８】
メッセージＦＩＦＯのコンシューマインデックス６２９７は、当該エントリのプロセッサ番号６２９１によって識別されるプロセッサ８２に対するメッセージＦＩＦＯ１２から、最後にデータが抽出されたエントリのインデックスである。
【０２０９】
図１５は、本発明の第１の実施の形態の転送リストインデックス−プロセッサ番号対応テーブル６２８０の構成図である。
【０２１０】
転送リストインデックス−プロセッサ番号対応テーブル６２８０は、転送リストインデックス６２８１、Ｖａｌｉｄ６２８２、プロセッサ番号６２８３及びプロセッサ用インデックス６２８４を含む。
【０２１１】
転送リストインデックス６２８１は、転送リストポインタのインデックスである。Ｖａｌｉｄ６２８２は、当該エントリが有効であるか否かを示す。具体的には、当該エントリが有効の場合、Ｖａｌｉｄ６２８２には「ｔｒｕｅ」が格納される。一方、当該エントリが無効の場合、Ｖａｌｉｄ６２８２には「ｆａｌｓｅ」が格納される。
【０２１２】
プロセッサ番号６２８３は、当該エントリの転送リストインデックス６２８１に対応する転送リストを処理するプロセッサ８２の一意な識別子である。プロセッサ用インデックス６２８４は、当該エントリのプロセッサ番号６２８３によって識別されるプロセッサ８２が用いる転送リストポインタのインデックスである。
【０２１３】
図１６は、本発明の第１の実施の形態のフレームＦＩＦＯ１１宛てのアクセスを受信したローカルルータ部６２の処理のフローチャートである。
【０２１４】
まず、ローカルルータ部６２は、フレームＦＩＦＯ１１に対するアクセスを受信する。当該アクセスは、フレームである。ローカルルータ部６２は、受信したフレームから、Ｓ＿ＩＤ、ＩＯ要求の対象となるＬＵＮ及びＩＯ要求の対象となるＬＢＡを抽出する（Ｓ１５０１）。
【０２１５】
次に、ローカルルータ部６２は、プロセッサ番号対応テーブル６２６に基づいて、当該フレームの転送先となるプロセッサ８２を決定する（Ｓ１５０２）。
【０２１６】
具体的には、ローカルルータ部６２は、抽出したＳ＿ＩＤとプロセッサ番号対応テーブル６２６のＳ＿ＩＤ６２６２とが一致するエントリを、プロセッサ番号対応テーブル６２６から選択する。次に、ローカルルータ部６２は、抽出したＬＵＮとプロセッサ番号対応テーブル６２６のＬＵＮ６２６３とが一致するエントリを、選択したエントリの中から選択する。更に、ローカルルータ部６２は、抽出したＬＢＡがプロセッサ番号対応テーブル６２６のＬＢＡに含まれるエントリを、選択したエントリの中から選択する。
【０２１７】
次に、ローカルルータ部６２は、選択したエントリから、プロセッサ番号６２６５を抽出する。そして、ローカルルータ部６２は、抽出したプロセッサ番号６２６５によって識別されるプロセッサ８２を、フレームの転送先に決定する。
【０２１８】
なお、本実施の形態では、順次選択する方法を示した。ローカルルータ部６２は、Ｓ＿ＩＤ、ＬＵＮ及びＬＢＡを一続きのキーとして、二項検索アルゴリズム又はハッシュアルゴリズムを用いていもよい。また、ローカルルータ部６２は、検索機能を備えるメモリを用いてもよい。検索機能を備えるメモリは、例えば、ＣＡＭ（Content Addressable Memory）である。
【０２１９】
次に、ローカルルータ部６２は、送信先アドレステーブル６２９０に基づいて、転送先となるプロセッサ８２に対するフレームＦＩＦＯ１１のベースアドレスを特定する。
【０２２０】
具体的には、ローカルルータ部６２は、抽出したプロセッサ番号６２６５と送信先アドレステーブル６２９０のプロセッサ番号６２９１とが一致するエントリを、送信先アドレステーブル６２９０から選択する。
【０２２１】
次に、ローカルルータ部６２は、選択したエントリから、フレームＦＩＦＯのベースアドレス６２９２を抽出する（Ｓ１５０３）。更に、ローカルルータ部６２は、選択したエントリから、フレームＦＩＦＯのプロデューサインデックス６２９４及びフレームＦＩＦＯのコンシューマインデックス６２９６を抽出する（Ｓ１５０４）。
【０２２２】
次に、ローカルルータ部６２は、抽出したフレームＦＩＦＯのプロデューサインデックス６２９４に「１」を加算する。次に、ローカルルータ部６２は、「１」を加算されたフレームＦＩＦＯのプロデューサインデックス６２９４を、フレームＦＩＦＯ１１に含まれるエントリの数で除算した余りを求める。そして、ローカルルータ部６２は、求めた余りと抽出したフレームＦＩＦＯのコンシューマインデックス６２９６とを比較する（Ｓ１５０５）。
【０２２３】
余りとフレームＦＩＦＯのコンシューマインデックス６２９６とが等しい場合、フレームＦＩＦＯ１１に空きがない。そこで、ローカルルータ部６２は、抽出したフレームＦＩＦＯのコンシューマインデックス６２９４が更新されるまで待機する（Ｓ１５０６）。そして、フレームＦＩＦＯのコンシューマインデックス６２９４が更新されると、ローカルルータ部６２は、ステップＳ１５０４に戻る。
【０２２４】
一方、余りとコンシューマインデックス６２９６とが異なる場合、フレームＦＩＦＯ１１に空きがある。そこで、ローカルルータ部６２は、当該フレームの送信先のアドレスを算出する。
【０２２５】
具体的には、ローカルルータ部６２は、以下の式（１）によって送信先アドレスを算出する。
【０２２６】
（送信先アドレス）＝（フレームＦＩＦＯのベースアドレス６２９２）＋（フレームＦＩＦＯのプロデューサインデックス６２９４に「１」が加算された値）×（フレームＦＩＦＯ１１の１エントリのサイズ）・・・（１）
【０２２７】
ローカルルータ部６２は、フレームに含まれる送信先アドレスを、算出した送信先アドレスに変更する（Ｓ１５０７）。そして、ローカルルータ部６２は、送信先アドレスを変更したフレームを、内部スイッチ部７に送信する。
【０２２８】
次に、ローカルルータ部６２は、送信先アドレステーブル６２９０に含まれるフレームＦＩＦＯのプロデューサインデックス６２９４を更新する（Ｓ１５０８）。
【０２２９】
具体的には、ローカルルータ部６２は、抽出したフレームＦＩＦＯのプロデューサインデックス６２９４に「１」を加算する。次に、ローカルルータ部６２は、「１」を加算されたフレームＦＩＦＯのプロデューサインデックス６２９４を、フレームＦＩＦＯ１１に含まれるエントリの数で除算した余りを求める。次に、ローカルルータ部６２は、求めた余りを、送信先アドレステーブル６２９０のフレームＦＩＦＯのプロデューサインデックス６２９４に格納する。
【０２３０】
そして、ローカルルータ部６２は、本処理を終了する。
【０２３１】
図１７は、本発明の第１の実施の形態のメッセージＦＩＦＯ１２宛てのアクセスを受信したローカルルータ部６２の処理のフローチャートである。
【０２３２】
まず、ローカルルータ部６２は、メッセージＦＩＦＯ１２に対するアクセスを受信する。当該アクセスは、メッセージである。ローカルルータ部６２は、受信したメッセージから、転送リストインデックスを抽出する（Ｓ１６０１）。
【０２３３】
次に、ローカルルータ部６２は、転送リストインデックス−プロセッサ番号対応テーブル６２８０に基づいて、当該メッセージの転送先となるプロセッサ８２を決定する（Ｓ１６０２）。なお、ステップＳ１６０２の処理については、図１８で詳細を説明する。
【０２３４】
例えば、ローカルルータ部６２は、抽出した転送リストインデックスと転送リストインデックス−プロセッサ番号対応テーブル６２８０の転送リストインデックス６２８１とが一致するエントリを、転送リストインデックス−プロセッサ番号対応テーブル６２８０から選択する。
【０２３５】
次に、ローカルルータ部６２は、選択したエントリから、プロセッサ番号６２８３及びプロセッサ用インデックス６２８４を抽出する。次に、ローカルルータ部６２は、メッセージに含まれる転送リストインデックスを、抽出したプロセッサ用インデックス６２８４に変更する。また、ローカルルータ部６２は、抽出したプロセッサ番号６２８３によって識別されるプロセッサ８２を、メッセージの転送先に決定する。
【０２３６】
次に、ローカルルータ部６２は、送信先アドレステーブル６２９０に基づいて、転送先となるプロセッサ８２に対するメッセージＦＩＦＯ１２のベースアドレスを特定する。
【０２３７】
具体的には、ローカルルータ部６２は、抽出したプロセッサ番号６２８３と送信先アドレステーブル６２９０のプロセッサ番号６２９１とが一致するエントリを、送信先アドレステーブル６２９０から選択する。
【０２３８】
次に、ローカルルータ部６２は、選択したエントリから、メッセージＦＩＦＯのベースアドレス６２９３を抽出する（Ｓ１６０３）。更に、ローカルルータ部６２は、選択したエントリから、メッセージＦＩＦＯのプロデューサインデックス６２９５及びメッセージＦＩＦＯのコンシューマインデックス６２９７を抽出する（Ｓ１６０４）。
【０２３９】
次に、ローカルルータ部６２は、抽出したメッセージＦＩＦＯのプロデューサインデックス６２９５に「１」を加算する。次に、ローカルルータ部６２は、「１」を加算されたメッセージＦＩＦＯのプロデューサインデックス６２９５を、メッセージＦＩＦＯ１２に含まれるエントリの数で除算した余りを求める。そして、ローカルルータ部６２は、求めた余りと抽出したメッセージＦＩＦＯのコンシューマインデックス６２９７とを比較する（Ｓ１６０５）。
【０２４０】
余りとメッセージＦＩＦＯのコンシューマインデックス６２９７とが等しい場合、メッセージＦＩＦＯ１２に空きがない。そこで、ローカルルータ部６２は、抽出したメッセージＦＩＦＯのコンシューマインデックス６２９５が更新されるまで待機する（Ｓ１６０６）。そして、メッセージＦＩＦＯのコンシューマインデックス６２９５が更新されると、ローカルルータ部６２は、ステップＳ１６０４に戻る。
【０２４１】
一方、余りとメッセージＦＩＦＯのコンシューマインデックス６２９７とが異なる場合、メッセージＦＩＦＯ１２に空きがある。そこで、ローカルルータ部６２は、当該メッセージの送信先のアドレスを算出する。
【０２４２】
具体的には、ローカルルータ部６２は、以下の式（２）によって送信先アドレスを算出する。
【０２４３】
（送信先アドレス）＝（メッセージＦＩＦＯのベースアドレス６２９３）＋（メッセージＦＩＦＯのプロデューサインデックス６２９５に「１」が加算された値）×（メッセージＦＩＦＯ１２の１エントリのサイズ）・・・（２）
【０２４４】
ローカルルータ部６２は、メッセージに含まれる送信先アドレスを、算出した送信先アドレスに変更する（Ｓ１６０７）。そして、ローカルルータ部６２は、送信先アドレスを変更したメッセージを、内部スイッチ部７に送信する。
【０２４５】
次に、ローカルルータ部６２は、送信先アドレステーブル６２９０に含まれるメッセージＦＩＦＯのプロデューサインデックス６２９５を更新する（Ｓ１６０８）。
【０２４６】
具体的には、ローカルルータ部６２は、抽出したメッセージＦＩＦＯのプロデューサインデックス６２９５に「１」を加算する。次に、ローカルルータ部６２は、「１」を加算されたメッセージＦＩＦＯのプロデューサインデックス６２９５を、メッセージＦＩＦＯ１２のエントリ数で除算した余りを求める。次に、ローカルルータ部６２は、求めた余りを、メッセージＦＩＦＯのプロデューサインデックス６２９５に格納する。
【０２４７】
そして、ローカルルータ部６２は、本処理を終了する。
【０２４８】
図１８は、本発明の第１の実施の形態のローカルルータ部６２が担当プロセッサ８２を決定する処理のフローチャートである。
【０２４９】
担当プロセッサ８２を決定する処理は、ローカルルータ部の処理（図１７）のステップＳ１６０２において実行される。
【０２５０】
まず、ローカルルータ部６２は、ローカルルータ部の処理（図１７）のステップＳ１６０１で抽出した転送リストインデックスと転送リストインデックス−プロセッサ番号対応テーブル６２８０の転送リストインデックス６２８１とが一致するエントリを、転送リストインデックス−プロセッサ番号対応テーブル６２８０から選択する（Ｓ１８０１）。
【０２５１】
次に、ローカルルータ部６２は、ステップＳ１８０１において、転送リストインデックスが一致するエントリを選択できたか否かを判定する（Ｓ１８０２）。
【０２５２】
転送リストインデックスが一致するエントリを選択できない場合、ローカルルータ部６２は、エラーをプロセッサ８２等に通知する（Ｓ１８０５）。
【０２５３】
一方、転送リストインデックスが一致するエントリを選択できた場合、ローカルルータ部６２は、選択したエントリから、Ｖａｌｉｄ６２８２を抽出する。次に、ローカルルータ部６２は、抽出したＶａｌｉｄ６２８２が「ｔｒｕｅ」又は「ｆａｌｓｅ」のいずれであるかを判定する（Ｓ１８０３）。
【０２５４】
Ｖａｌｉｄ６２８２が「ｆａｌｓｅ」であると、ローカルルータ部６２は、エラーをプロセッサ８２等に通知する（Ｓ１８０５）。
【０２５５】
一方、Ｖａｌｉｄ６２８２が「ｔｒｕｅ」であると、ローカルルータ部６２は、選択したエントリから、プロセッサ番号６２８３を抽出する。そして、ローカルルータ部６２は、抽出したプロセッサ番号６２８３によって識別されるプロセッサ８２を、メッセージの転送先に決定する。そして、ローカルルータ部６２は、本処理を終了する。
【０２５６】
次に、転送リストインデックス−プロセッサ番号対応テーブル６２８０の更新処理を説明する。
【０２５７】
図１９は、本発明の第１の実施の形態の転送リストインデックス−プロセッサ番号対応テーブル６２８０の更新処理のフローチャートである。
【０２５８】
ローカルルータ部６２は、要求ＦＩＦＯ１３に対するアクセスをプロセッサ８２から受信する。但し、当該アクセスは、ＦＣＰ＿ＲＳＰの送信要求でない。
【０２５９】
ローカルルータ部６２は、書込用要求ＦＩＦＯ１３０に対するアクセスを受信すると、当該アクセスに対応する転送リストインデックスを、要求ＦＩＦＯ１３に格納する（Ｓ２００１）。なお、要求ＦＩＦＯ１３に転送リストインデックスを格納する処理は、図２３で詳細を説明する。また、要求ＦＩＦＯ１３は、プロトコルプロセッサ６１によって認識される。一方、書込用要求ＦＩＦＯ１３０は、プロセッサ８２によって認識される。
【０２６０】
次に、ローカルルータ部６２は、転送リストインデックス−プロセッサ番号対応テーブル６２８０のＶａｌｉｄ６２８２に「ｔｒｕｅ」が格納されているエントリを、転送リストインデックス−プロセッサ番号対応テーブル６２８０から選択する（Ｓ２００２）。
【０２６１】
なお、ローカルルータ部６２は、ステップＳ２００２において、当該転送リストによって送信を要求されるフレームのＯＸ＿ＩＤと転送リストインデックス−プロセッサ番号対応テーブル６２８０の転送リストインデックス６２８１とが一致するエントリを、転送リストインデックス−プロセッサ番号対応テーブル６２８０から選択してもよい。
【０２６２】
次に、ローカルルータ部６２は、ステップＳ２００２においてエントリを選択できたか否かを判定する（Ｓ２００３）。
【０２６３】
エントリを選択できない場合、ローカルルータ部６２は、最も昔に更新したエントリを選択する。例えば、ローカルルータ部６２は、ＬＲＵアルゴリズム等を用いて、最も昔に更新したエントリを選択する。次にローカルルータ部６２は、選択したエントリのＶａｌｉｄ６２８２に「ｆａｌｓｅ」を格納する（Ｓ２００４）。そして、ローカルルータ部６２は、ステップＳ２００２に戻る。
【０２６４】
一方、エントリを選択できた場合、ローカルルータ部６２は、選択したエントリのプロセッサ番号６２８３に、受信したアクセスの送信元であるプロセッサ８２の識別子を格納する（Ｓ２００５）。
【０２６５】
次に、ローカルルータ部６２は、選択したエントリのプロセッサ用インデックス６２８４に、書込用要求ＦＩＦＯ１３０に格納された転送リストインデックスを格納する（Ｓ２００６）。その後、ローカルルータ部６２は、選択したエントリのＶａｌｉｄ６２８２に「ｔｒｕｅ」を格納する（Ｓ２００７）。
【０２６６】
そして、ローカルルータ部６２は、本処理を終了する。
【０２６７】
なお、ローカルルータ部６２は、ステップＳ２００４において転送リストインデックス−プロセッサ番号対応テーブル６２８０のＶａｌｉｄ６２８２を「ｆａｌｓｅ」に変更した。しかし、プロセッサ８２が、転送リストインデックス−プロセッサ番号対応テーブル６２８０のＶａｌｉｄ６２８２を「ｆａｌｓｅ」に変更してもよい。また、ローカルルータ部６２は、転送リストインデックスに対応する転送リストの処理をプロトコルプロセッサ６１が完了した時に、当該処理された転送リストに対応するエントリのＶａｌｉｄ６２８２を「ｆａｌｓｅ」に変更してもよい。
【０２６８】
なお、ローカルルータ部６２は、転送リストインデックスを異なる方法で管理してもよい。
【０２６９】
図２０は、本発明の第１の実施の形態の転送リストインデックスの管理に関する説明図である。
【０２７０】
本説明図では、転送リストインデックスが、複数の区間に分けられる。それぞれの区間は、特定のプロセッサ８２のみに使用される。例えば、「０ｘ０００〜０ｘ０１ｆ」の区間に含まれる転送リストインデックスは、プロセッサ番号の「１」によって識別されるプロセッサ８２のみが使用する。同様に、「０ｘ０２０〜０ｘ０３ｆ」の区間に含まれる転送リストインデックスは、プロセッサ番号の「２」によって識別されるプロセッサ８２のみが使用する。
【０２７１】
この場合、ローカルルータ部６２は、転送リストインデックスに対応するプロセッサを容易に特定できる。そのため、ローカルルータ部６２は、転送リストインデックス−プロセッサ番号対応テーブル６２８０の更新処理（図１９）を行う必要がなくなる。
【０２７２】
但し、転送リストインデックスを使用するプロセッサ８２に制限を設定できない場合等には、ローカルルータ部６２は、エクスチェンジＩＤ−プロセッサ番号リストを備える。また、本実施の形態ではメッセージＦＩＦＯ１２には転送リストインデックスが含まれるとしたが、そうではないプロトコルプロセッサ６１を用いた場合にも、ローカルルータ部６２は、エクスチェンジＩＤ−プロセッサ番号リストを備える。
【０２７３】
図２１は、本発明の第１の実施の形態のエクスチェンジＩＤ−プロセッサ番号リスト２６００の説明図である。
【０２７４】
エクスチェンジＩＤ−プロセッサ番号リスト２６００には、リスト構造でデータが格納されている。また、エクスチェンジＩＤ−プロセッサ番号リスト２６００は、Ｓ＿ＩＤフィールド２６０１、エクスチェンジＩＤフィールド２６０２、プロセッサ番号フィールド２６０３及びネクストポインタフィールド２６０４を含む。
【０２７５】
Ｓ＿ＩＤフィールド２６０１には、フレームに含まれるＳ＿ＩＤが格納される。なお、Ｓ＿ＩＤは、フレームの送信元のポートアドレスである。エクスチェンジＩＤフィールド２６０２には、フレームに含まれるＯＸ＿ＩＤが格納される。ＯＸ＿ＩＤは、オリジネータによって付与されるエクスチェンジＩＤである。プロセッサ番号フィールド２６０３は、当該リストのＳ＿ＩＤフィールド２６０１及びエクスチェンジＩＤフィールド２６０２に対応するフレームを処理するプロセッサの一意な識別子が格納される。ネクストポインタフィールド２６０４は、次のリストの位置を示す。
【０２７６】
ローカルルータ部６２は、送信先がフレームＦＩＦＯ１１であるアクセスをプロトコルプロセッサ６１から受信すると、図１６で説明した処理を行う。なお、当該アクセスは、フレームである。
【０２７７】
但し、この場合、ローカルルータ部６２は、ステップＳ１５０２の後に、エクスチェンジＩＤ−プロセッサ番号リスト２６００に新たなリストを追加する。
【０２７８】
次に、ローカルルータ部６２は、受信したフレームから、Ｓ＿ＩＤ及びＯＸ＿ＩＤを抽出する。次に、ローカルルータ部６２は、抽出したＳ＿ＩＤを、新たなリストのＳ＿ＩＤフィールド２６０１に格納する。次に、ローカルルータ部６２は、抽出したＯＸ＿ＩＤを、新たなリストのエクスチェンジＩＤフィールド２６０２に格納する。
【０２７９】
次に、ローカルルータ部６２は、プロセッサ番号対応テーブル６２６に基づいて、受信したフレームの転送先となるプロセッサ８２を決定する。次に、ローカルルータ部６２は、決定したプロセッサ８２の識別子を、新たなリストのプロセッサ番号２６０３に格納する。
【０２８０】
そして、ローカルルータ部６２は、ステップＳ１５０３以降の処理を行う。
【０２８１】
その後、ローカルルータ部６２は、送信先がメッセージＦＩＦＯ１２であるアクセスをプロトコルプロセッサ６１から受信すると、図１７で説明した処理を行う。但し、ローカルルータ部６２は、ステップＳ１６０２の代わりに、以下の処理を行う。なお、当該アクセスは、メッセージである。
【０２８２】
ローカルルータ部６２は、受信したメッセージから、Ｓ＿ＩＤ及びエクスチェンジＩＤを抽出する。次に、ローカルルータ部６２は、エクスチェンジＩＤ−プロセッサ番号リスト２６００を先頭からたどる。そして、ローカルルータ部６２は、抽出したＳ＿ＩＤとＳ＿ＩＤフィールド２６０１とが一致し、且つ、抽出したエクスチェンジＩＤとエクスチェンジフィールドＩＤ２６０３とが一致するリストを、エクスチェンジＩＤ−プロセッサ番号リスト２６００から選択する。
【０２８３】
次に、ローカルルータ部６２は、選択したリストのプロセッサ番号フィールド２６０３から、プロセッサ８２の識別子を抽出する。そして、ローカルルータ部６２は、抽出したプロセッサに識別子によって識別されるプロセッサ８２を、メッセージの転送先に決定する。その後、受信されたメッセージに対応するエクスチェンジが終了すると、ローカルルータ部６２は、選択したリストを削除する。
【０２８４】
図２２は、本発明の第１の実施の形態のメッセージＦＩＦＯの仮想化に関する説明図である。
【０２８５】
本説明図では、プロトコルプロセッサＡ６１の認識範囲６１００及びプロセッサＡ８２の認識範囲８２００が図示されている。
【０２８６】
ローカルルータ部６２は、プロトコルプロセッサ６１に、仮想プロトコルプロセッサ用メッセージＦＩＦＯ６１１１を提供する。但し、仮想プロトコルプロセッサ用メッセージＦＩＦＯ６１１１は、実態が存在しない仮想的なＦＩＦＯである。
【０２８７】
プロトコルプロセッサ６１が、仮想プロトコルプロセッサＡ用メッセージＦＩＦＯ６１１１に対するメッセージを送信したとする。すると、ローカルルータ部６２は、当該メッセージの送信先を変更することによって、プロトコルプロセッサＡ用メッセージＦＩＦＯ１２Ａにメッセージを格納する。なお、プロトコルプロセッサＡ用メッセージＦＩＦＯ１２Ａは、メモリモジュール８４に含まれる。
【０２８８】
次に、プロトコルプロセッサ６１は、プロセッサＡに対するメッセージＦＩＦＯプロデューサインデックス８２２０を増加させる。
【０２８９】
なお、ローカルルータ部６２は、プロセッサＡに対するメッセージＦＩＦＯプロデューサインデックス８２２０と別に、プロセッサＡに対するプロトコルプロセッサＡ用メッセージＦＩＦＯプロデューサインデックスのコピー６１２１を備える。
【０２９０】
プロセッサＡに対するメッセージＦＩＦＯプロデューサインデックス８２２０が更新されると、ローカルルータ部６２は、プロセッサＡに対するプロトコルプロセッサＡ用メッセージＦＩＦＯプロデューサインデックスのコピー６１２１を用いて、プロトコルプロセッサＡ用メッセージＦＩＦＯプロデューサインデックス８２２Ａを増加させる。なお、プロトコルプロセッサ用メッセージＦＩＦＯプロデューサインデックス８２２は、プロセッサ８２に備わる。
【０２９１】
このようにして、プロトコルプロセッサ６１は、メッセージの送信をプロセッサ８２に通知する。
【０２９２】
その後、プロセッサＡ８２が、プロトコルプロセッサＡ用メッセージＦＩＦＯ１２Ａからメッセージを抽出したとする。すると、プロセッサＡ８２は、プロセッサＡに対するプロトコルプロセッサＡ用メッセージＦＩＦＯコンシューマインデックス６１２０を増加させる。
【０２９３】
なお、ローカルルータ部６２は、プロセッサＡに対するプロトコルプロセッサＡ用メッセージＦＩＦＯコンシューマインデックス６１２０と別に、プロセッサＡに対するプロトコルプロセッサＡ用メッセージＦＩＦＯコンシューマインデックスのコピー（図示省略）を備える。
【０２９４】
プロセッサＡに対するプロトコルプロセッサＡ用メッセージＦＩＦＯコンシューマインデックス６１２０が更新されると、ローカルルータ部６２は、プロセッサＡに対するプロトコルプロセッサＡ用メッセージＦＩＦＯコンシューマインデックスのコピーを用いて、メッセージＦＩＦＯコンシューマインデックス６１２を増加させる。このとき、ローカルルータ部６２は、仮想プロトコルプロセッサＡ用メッセージＦＩＦＯ６１１１と整合が取れるように、メッセージＦＩＦＯコンシューマインデックス６１２を更新する。具体的には、ローカルルータ部６２は、メッセージＦＩＦＯコンシューマインデックス６１２を増加させる。なお、メッセージＦＩＦＯコンシューマインデックス６１２は、プロトコルプロセッサ６１に備わる。
【０２９５】
ローカルルータ部６２が以上のように動作することによって、プロトコルプロセッサ６１は、一つのプロセッサ８２のみとデータを送受信しているのと同一の処理によって、複数のプロセッサ８２とデータを送受信できる。
【０２９６】
図２３は、本発明の第１の実施の形態の要求ＦＩＦＯの書き込みに関する説明図である。
【０２９７】
本説明図では、プロトコルプロセッサＡ６１の認識範囲６１０１及びプロセッサＡ８２の認識範囲８２０１が図示されている。
【０２９８】
プロセッサＡ８２は、メモリモジュール６３に格納されたプロセッサＡ用書込用要求ＦＩＦＯ１３０Ａを要求ＦＩＦＯ１３として認識している。
【０２９９】
プロトコルプロセッサ６１が、プロセッサＡ用書込用要求ＦＩＦＯ１３０Ａを送信先とするアクセスを送信する。なお、当該アクセスは、転送リストポインタのインデックスの格納を要求する。
【０３００】
すると、ローカルルータ部６２は、プロトコルプロセッサＡに対する要求ＦＩＦＯ１３に空きがあるか否かを判定する。プロトコルプロセッサＡに対する要求ＦＩＦＯ１３に空きがない場合、ローカルルータ部６２は、当該アクセスをプロセッサＡ用書込用要求ＦＩＦＯ１３０Ａに格納する。
【０３０１】
一方、プロトコルプロセッサＡに対する要求ＦＩＦＯ１３に空きがある場合、ローカルルータ部６２は、当該アクセスの送信先を変更することによって、プロトコルプロセッサＡに対する要求ＦＩＦＯ１３に当該アクセスを格納する。
【０３０２】
次に、プロセッサ８２は、プロセッサＡ用書込用要求ＦＩＦＯプロデューサインデックス６１３０を増加させる。
【０３０３】
なお、ローカルルータ部６２は、プロセッサＡ用書込用要求ＦＩＦＯプロデューサインデックス６１３０と別に、プロセッサＡ用書込用要求ＦＩＦＯプロデューサインデックスのコピー（図示省略）を備える。
【０３０４】
プロセッサＡ用書込用要求ＦＩＦＯプロデューサインデックス６１３０が更新されると、ローカルルータ部６２は、プロセッサＡ用書込用要求ＦＩＦＯプロデューサインデックスのコピーを用いて、要求ＦＩＦＯプロデューサインデックス６１３を増加させる。なお、要求ＦＩＦＯプロデューサインデックス６１３は、プロトコルプロセッサ６１に備わる。
【０３０５】
その後、プロトコルプロセッサＡ６１が、プロトコルプロセッサＡに対する要求ＦＩＦＯ１３からアクセスを抽出したとする。すると、プロトコルプロセッサＡ６１は、プロトコルプロセッサＡに対する要求ＦＩＦＯコンシューマインデックス８２３０を増加させる。
【０３０６】
なお、ローカルルータ部６２は、プロトコルプロセッサＡに対する要求ＦＩＦＯコンシューマインデックス８２３０と別に、プロセッサＡ用書込用要求ＦＩＦＯコンシューマインデックスのコピー６１３１を備える。
【０３０７】
プロトコルプロセッサＡに対する要求ＦＩＦＯコンシューマインデックス８２３０が更新されると、ローカルルータ部６２は、プロセッサＡ用書込用要求ＦＩＦＯコンシューマインデックスのコピー６１３１を用いて、書込用要求ＦＩＦＯコンシューマインデックス８２３を更新する。具体的には、ローカルルータ部６２は、書込用要求ＦＩＦＯコンシューマインデックス８２３を増加させる。なお、書込用要求ＦＩＦＯコンシューマインデックス８２３は、プロセッサ８２に備わる。
【０３０８】
これによって、プロセッサ８２は、ローカルルータ部６２をプロトコルプロセッサ６１として認識する。また、プロトコルプロセッサ６１は、ローカルルータ部６２をプロセッサ８２として認識する。そのため、プロセッサ８２は、プロトコルプロセッサ６１には一つのプロセッサ８２のみが接続されていると認識する。これによって、プロセッサ８２は、いかなるタイミングであっても、要求ＦＩＦＯ１３を更新できる。
【０３０９】
図２４は、本発明の第１の実施の形態の要求ＦＩＦＯ１３宛てのアクセスを受信したローカルルータ部６２の処理のフローチャートである。
【０３１０】
まず、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０に対するアクセスをプロセッサ８２から受信する。すると、ローカルルータ部６２は、要求ＦＩＦＯ１３に空きがあるか否かを判定する（Ｓ２３０１）。
【０３１１】
具体的には、ローカルルータ部６２は、プロトコルプロセッサに対する要求ＦＩＦＯプロデューサインデックスのコピーに「１」を加算する。次に、ローカルルータ部６２は、求まった値を要求ＦＩＦＯ１３のエントリ数で除算した余りを求める。次に、ローカルルータ部６２は、求まった値とプロトコルプロセッサに対する要求ＦＩＦＯコンシューマインデックス８２３０とを比較する。これらが等しい場合、要求ＦＩＦＯ１３には空きがない。一方、これらが異なる場合、要求ＦＩＦＯ１３には空きがある。
【０３１２】
要求ＦＩＦＯ１３に空きがある場合、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０が空であるか否かを判定する（Ｓ２３０２）。
【０３１３】
具体的には、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯコンシューマインデックスのコピー６１３１とプロセッサ用書込用要求ＦＩＦＯプロデューサインデックス６１３０とを比較する。これらが等しい場合、プロセッサ用書込用要求ＦＩＦＯ１３０が空である。一方、これらが異なる場合、プロセッサ用書込用要求ＦＩＦＯ１３０には一つ以上のアクセスが格納されている。
【０３１４】
プロセッサ用書込用要求ＦＩＦＯ１３０が空の場合、ローカルルータ部６２は、受信したアクセスを、要求ＦＩＦＯ１３に格納する（Ｓ２３０３）。具体的には、ローカルルータ部６２は、要求ＦＩＦＯ１３内の、要求ＦＩＦＯプロデューサインデックスのコピーに対応する位置に、アクセスを格納する。つまり、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０でなく、要求ＦＩＦＯ１３にアクセスを格納する。
【０３１５】
次に、ローカルルータ部６２は、要求ＦＩＦＯプロデューサインデックス６１３を増加させる。同時に、ローカルルータ部６２は、要求ＦＩＦＯプロデューサインデックスのコピーも増加させる。
【０３１６】
このとき、ローカルルータ部６２は、書込用要求ＦＩＦＯコンシューマインデックス８２３及び書込用要求ＦＩＦＯコンシューマインデックスのコピー６１３１も増加させておいてもよい（Ｓ２３０４）。そして、ローカルルータ部６２は、本処理を終了する。
【０３１７】
一方、ステップＳ２３０１で要求ＦＩＦＯ１３に空きがない場合又はステップＳ２３０２でプロセッサ用書込用要求ＦＩＦＯ１３０が空でない場合には、ローカルルータ部６２は、ステップＳ２３０５に進む。
【０３１８】
ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０に空きがあるか否かを判定する（Ｓ２３０５）。
【０３１９】
プロセッサ用書込用要求ＦＩＦＯ１３０に空きがある場合、ローカルルータ部６２は、そのままステップＳ２３０８に進む。
【０３２０】
一方、プロセッサ用書込用要求ＦＩＦＯ１３０に空きがない場合、ローカルルータ部６２は、要求ＦＩＦＯ１３に空きが出るまで待機する。そして、要求ＦＩＦＯ１３に空きがでると、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０に格納されているアクセスを抽出する。そして、ローカルルータ部６２は、抽出したアクセスを、要求ＦＩＦＯ１３に格納する。これによって、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０に格納されているアクセスを、要求ＦＩＦＯ１３に移動する（Ｓ２３０６）。
【０３２１】
次に、ローカルルータ部６２は、要求ＦＩＦＯプロデューサインデックス６１３及び要求ＦＩＦＯプロデューサインデックスのコピーを増加させる（Ｓ２３０７）。
【０３２２】
次に、ローカルルータ部６２は、受信したアクセスを、プロセッサ用書込用要求ＦＩＦＯ１３０に格納する（Ｓ２３０８）。そして、ローカルルータ部６２は、書込用要求ＦＩＦＯコンシューマインデックス８２３及び要求ＦＩＦＯコンシューマインデックス６１３１のコピーを増加させる（Ｓ２３０９）。
【０３２３】
次に、ローカルルータ部６２は、要求ＦＩＦＯ１３に空きが出るまで待機する。そして、要求ＦＩＦＯ１３に空きがでると、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０に格納されているアクセスを抽出する。そして、ローカルルータ部６２は、抽出したアクセスを、要求ＦＩＦＯ１３に格納する。これによって、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０に格納されているアクセスを、要求ＦＩＦＯ１３に移動する（Ｓ２３１０）。
【０３２４】
次に、ローカルルータ部６２は、要求ＦＩＦＯプロデューサインデックス６１３及び要求ＦＩＦＯプロデューサインデックスのコピーを増加させる（Ｓ２３１１）。
【０３２５】
次に、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０が空であるか否かを判定する（Ｓ２３１２）。
【０３２６】
プロセッサ用書込用要求ＦＩＦＯ１３０が空でない場合、ローカルルータ部６２は、ステップＳ２３１０に戻る。そして、ローカルルータ部６２は、プロセッサ用書込用要求ＦＩＦＯ１３０が空となるまで、ステップＳ２３１０〜ステップＳ２３１２の処理を繰り返す。
【０３２７】
一方、プロセッサ用書込用要求ＦＩＦＯ１３０が空の場合、ローカルルータ部６２は、そのまま本処理を終了する。
【０３２８】
以上のように、本実施の形態では、複数のプロセッサ８２が、一つのプロトコルプロセッサ６１を制御できる。よって、ストレージシステムに備わるプロセッサを有効活用できる。
【０３２９】
（第２の実施形態）
図２５は、本発明の第２の実施の形態の計算機システムの構成のブロック図である。
【０３３０】
第２の実施の形態の計算機システムでは、ＨＤＤエンクロージャ部５が、ストレージノード８でなく、ディスクアダプタ９に接続される。第２の実施の形態の計算機システムのそれ以外の構成は、第１の実施の形態の計算機システム（図１）と同一であるので、説明を省略する。
【０３３１】
ディスクアダプタ９は、プロトコルプロセッサ６１、ローカルルータ部６２及びメモリモジュール６３を備える。プロトコルプロセッサ６１、ローカルルータ部６２及びメモリモジュール６３は、チャネルアダプタ６に備わるものと同一である。同一の構成には同一の番号を付すことによって、説明を省略する。
【０３３２】
但し、ディスクアダプタ９に備わるプロトコルプロセッサ６１は、ＨＤＤエンクロージャ部５に接続される。
【０３３３】
ストレージノード８は、ディスクアダプタ９を介してＨＤＤエンクロージャ部５を制御する。なお、第２の実施の形態の計算機システムの処理は、第１の実施の形態の計算機システムと同一であるので、説明を省略する。
【０３３４】
第２の実施の形態の計算機システムは、プロセッサ資源とＨＤＤ資源とを分けて管理できる。よって、多数のプロセッサ８２が、少数のＨＤＤ５１を処理できる。そのため、第２の実施の形態の計算機システムは、データベース環境等に適用すると好適である。
【０３３５】
（第３の実施形態）
図２６は、本発明の第３の実施の形態の計算機システムの構成のブロック図である。
【０３３６】
本発明の第３の実施の形態の計算機システムの構成は、チャネルアダプタ６を除き、第１の実施の形態の計算機システム（図１）と同一である。同一の構成には同一の番号を付すことによって説明を省略する。
【０３３７】
チャネルアダプタ６は、プロトコルプロセッサ６１、ローカルルータ部６２、メモリモジュール６３、ブリッジ部６４及びフロントエンドプロセッサ部６８を備える。
【０３３８】
プロトコルプロセッサ６１、ローカルルータ部６２及びメモリモジュール６３は、第１の実施の形態のチャネルアダプタ６に備わるものと同一であるので、説明を省略する。ただし、本実施の形態のローカルルータ部６２は、フロントエンドプロセッサ６７にアクセスを振り分ける。
【０３３９】
ブリッジ部６４は、ローカルルータ部６２とフロントエンドプロセッサ部６８とを接続する。
【０３４０】
フロントエンドプロセッサ部６８は、フロントエンドプロセッサ６７及びメモリモジュール６５を備える。
【０３４１】
メモリモジュール６５は、フロントエンドプロセッサ６７によって実行されるプログラム及びフロントエンドプロセッサ６７によって必要とされる情報等を記憶する。
【０３４２】
フロントエンドプロセッサ６７は、メモリモジュール６５に記憶されるプログラムを実行することによって、各種処理を行う。具体的には、フロントエンドプロセッサ６７は、プロトコルプロセッサ６１を介してチャネル４を制御する。また、フロントエンドプロセッサ６７は、プロトコルプロセッサ６１がチャネル４から受信したフレームに含まれるＩＯ要求を解釈することによって、当該ＩＯ要求を処理するプロセッサ８２を特定する。次に、フロントエンドプロセッサ６７は、特定されたプロセッサ８２と通信することによって、当該ＩＯ要求に対応する処理を行う。例えば、フロントエンドプロセッサ６７は、ＩＯ要求によってアクセスを要求されたデータがキャッシュメモリ８７に格納されているか否かをプロセッサ８２に問い合わせる。更に、ＩＯ要求によって要求されたデータがキャッシュメモリ８７に格納されている場合、フロントエンドプロセッサ６７は、当該データが格納されているキャッシュメモリ８７上のアドレスを、プロセッサ８２に問い合わせる。
【０３４３】
フロントエンドプロセッサ６７とプロセッサ８２との通信は、フロントエンドプロセッサ６７とプロトコルプロセッサ６１との通信よりも、オーバヘッドが大きいが、高性能な処理を行える。そのため、第３の実施の形態のストレージシステム１は、プロセッサ８２間の負荷を分散できる。また、複数のフロントエンドプロセッサ６７が、チャネル４を制御する。よって、第３の実施の形態のストレージシステム１では、チャネル制御が性能のボトルネックになることを回避できる。その結果として、第３の実施の形態のストレージシステム１は、プロセッサ８２を有効活用できる。
【図面の簡単な説明】
【０３４４】
【図１】本発明の第１の実施の形態の計算機システムの構成のブロック図である。
【図２】本発明の第１の実施の形態のストレージシステムに備わるストレージノードの構成のブロック図である。
【図３】本発明の第１の実施の形態のファイバチャネルプロトコルのフレームの説明図である。
【図４Ａ】本発明の第１の実施の形態のＦＣＰ＿ＣＭＮＤに含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【図４Ｂ】本発明の第１の実施の形態のＦＣＰ＿ＸＦＥＲ＿ＲＤＹに含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【図４Ｃ】本発明の第１の実施の形態のＦＣＰ＿ＤＡＴＡに含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【図４Ｄ】本発明の第１の実施の形態のＦＣＰ＿ＲＳＰに含まれるＩｎｆｏｒｍａｔｉｏｎ  Ｕｎｉｔの説明図である。
【図５】本発明の第１の実施の形態の計算機システムのリード処理のタイミングチャートである。
【図６】本発明の第１の実施の形態の計算機システムのライト処理のタイミングチャートである。
【図７】本発明の第１の実施の形態の計算機システムのライト処理の説明図である。
【図８】本発明の第１の実施の形態の要求ＦＩＦＯ及び転送リストの説明図である。
【図９】本発明の第１の実施の形態のメッセージＦＩＦＯの説明図である。
【図１０】本発明の第１の実施の形態のフレームＦＩＦＯ、メッセージＦＩＦＯ及び要求ＦＩＦＯの制御に関する説明図である。
【図１１】本発明の第１の実施の形態のフレームＦＩＦＯ、メッセージＦＩＦＯ及び要求ＦＩＦＯの説明図である。
【図１２】発明の第１の実施の形態のローカルルータ部の構成のブロック図である。
【図１３】本発明の第１の実施の形態のプロセッサ番号対応テーブルの構成図である。
【図１４】本発明の第１の実施の形態の送信先アドレステーブルの構成図である。
【図１５】本発明の第１の実施の形態の転送リストインデックス−プロセッサ番号対応テーブルの構成図である。
【図１６】本発明の第１の実施の形態のフレームＦＩＦＯ宛てのアクセスを受信したローカルルータ部の処理のフローチャートである。
【図１７】本発明の第１の実施の形態のメッセージＦＩＦＯ宛てのアクセスを受信したローカルルータ部の処理のフローチャートである。
【図１８】本発明の第１の実施の形態のローカルルータ部が担当プロセッサを決定する処理のフローチャートである。
【図１９】本発明の第１の実施の形態の転送リストインデックス−プロセッサ番号対応テーブルの更新処理のフローチャートである。
【図２０】本発明の第１の実施の形態の転送リストインデックスの管理に関する説明図である。
【図２１】本発明の第１の実施の形態のエクスチェンジＩＤ−プロセッサ番号リストの説明図である。
【図２２】本発明の第１の実施の形態のメッセージＦＩＦＯの仮想化に関する説明図である。
【図２３】本発明の第１の実施の形態の要求ＦＩＦＯの書き込みに関する説明図である。
【図２４】本発明の第１の実施の形態の要求ＦＩＦＯ宛てのアクセスを受信したローカルルータ部の処理のフローチャートである。
【図２５】本発明の第２の実施の形態の計算機システムの構成のブロックである。
【図２６】本発明の第３の実施の形態の計算機システムの構成のブロックである。
【符号の説明】
【０３４５】
１  ストレージシステム
２  ホストコンピュータ
３  ＳＡＮスイッチ
４  チャネル
５  ＨＤＤエンクロージャ部
６  チャネルアダプタ
７  内部スイッチ部
８  ストレージノード
９  ディスクアダプタ
１１  フレームＦＩＦＯ
１２  メッセージＦＩＦＯ
１３  要求ＦＩＦＯ
５１  ＨＤＤ
５２  ＨＤＤ側チャネル
６１  プロトコルプロセッサ
６２  ローカルルータ部
６３  メモリモジュール
６７  フロントエンドプロセッサ
６８  フロントエンドプロセッサ部
８１  内部ネットワークＩ／Ｆ部
８２  プロセッサ
８３  周辺回路部
８４  メモリモジュール
８５  ブリッジ部
８６  ＨＤＤ側プロトコルプロセッサ
８７  キャッシュメモリ
６２１  アドレスデコーダ
６２５  バッファ
６２６  プロセッサ番号対応テーブル
６２７  フレームＦＩＦＯサーチ部
６２８  メッセージＦＩＦＯサーチ部
８０１  電源系Ａ
８０２  電源系Ｂ
８５１  ＤＭＡコントローラ
【図１】
0004740763.tif 000002
【図２】
0004740763.tif 000003
【図３】
0004740763.tif 000004
【図４Ａ】
0004740763.tif 000005
【図４Ｂ】
0004740763.tif 000006
【図４Ｃ】
0004740763.tif 000007
【図４Ｄ】
0004740763.tif 000008
【図５】
0004740763.tif 000009
【図６】
0004740763.tif 000010
【図７】
0004740763.tif 000011
【図８】
0004740763.tif 000012
【図９】
0004740763.tif 000013
【図１０】
0004740763.tif 000014
【図１１】
0004740763.tif 000015
【図１２】
0004740763.tif 000016
【図１３】
0004740763.tif 000017
【図１４】
0004740763.tif 000018
【図１５】
0004740763.tif 000019
【図１６】
0004740763.tif 000020
【図１７】
0004740763.tif 000021
【図１８】
0004740763.tif 000022
【図１９】
0004740763.tif 000023
【図２０】
0004740763.tif 000024
【図２１】
0004740763.tif 000025
【図２２】
0004740763.tif 000026
【図２３】
0004740763.tif 000027
【図２４】
0004740763.tif 000028
【図２５】
0004740763.tif 000029
【図２６】
0004740763.tif 000030