(57)【要約】【課題】デバイスツリーに接続可能なデバイス数を少なくすることなく複数のホストシステムのシステム領域を分離するとともに、システム起動時のコンフィギュレーション後にデバイスツリー構造が変更された場合にも、分離したシステム領域の間でＩＤルーティングを可能にする。【解決手段】高機能スイッチ１７は、アップストリームポート４１、ダウンストリームポート４２及びノントランスペアレントポート４３を備えている。ＩＤ管理テーブル５０はＩＤルーティングのためのリクエストＩＤのデータの保存と変換を行う。デバイス監視部４７〜４９は、それぞれが接続されているポート４１〜４３でのデバイスツリー構造の変更が生じるイベントを監視し、デバイスツリー構造の変更があったとき、新たなデバイスツリー構造におけるＩＤをＩＤ管理テーブル５０に書き込む。【選択図】図２
2014002545.tif 000002
【特許請求の範囲】
【請求項１】
デバイスを備える複数のホストシステムのシステム領域を分離する機能、及び前記システム領域間のデバイス間でデータ転送を行う機能を有するデータ転送装置であって、
前記ホストシステムのデバイスツリー構造に応じて決定され、前記データ転送に使用されるＩＤ情報を前記ホストシステムが起動されたときに取得するＩＤ情報取得手段と、
前記ホストシステムのデバイスツリー構造の変更を監視する監視手段と、
前記監視手段により前記変更が検出されたとき、新たなデバイスツリー構造における前記ＩＤ情報を取得する新ＩＤ情報取得手段と、
を備えるデータ転送装置。
【請求項２】
請求項１に記載されたデータ転送装置において、
前記監視手段は、デバイスツリー構造の変更が生ずるイベントを監視するデータ転送装置。
【請求項３】
請求項２に記載されたデータ転送装置において、
デバイスツリー構造の変更が生ずるイベントの発生を記憶する記憶手段を備え、
前記監視手段は、前記記憶手段に記憶されているデータを基にデバイスツリー構造の変更を検出するデータ転送装置。
【請求項４】
請求項１に記載されたデータ転送装置において、
前記ＩＤ情報は、コンフィギュレーションリードリクエストのリクエスタＩＤであるデータ転送装置。
【請求項５】
デバイスを備える複数のホストシステムのシステム領域を分離する機能、及び前記システム領域間のデバイス間でデータ転送を行う機能を有するデータ転送装置により実行されるデータ転送方法であって、
前記ホストシステムのデバイスツリー構造に応じて決定され、前記データ転送に使用されるＩＤ情報を前記ホストシステムが起動されたときに取得するＩＤ情報取得工程と、
前記ホストシステムのデバイスツリー構造の変更を監視する監視工程と、
前記監視工程により前記変更が検出されたとき、新たなデバイスツリー構造における前記ＩＤ情報を取得する新ＩＤ情報取得工程と、
を備えるデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホストシステム間でデータ転送を行うデータ転送装置、及びデータ転送方法に関する。
【背景技術】
【０００２】
近年、高速シリアルインターフェースとしてＰＣＩ Express（登録商標：以下、ＰＣＩｅ）が普及してきている。ＰＣＩｅは、高いデータ転送速度及びデータ帯域幅を有しており、その特徴を生かしてパーソナルコンピュータ等の様々な電子機器に使用されている。
【０００３】
ＰＣＩｅシステムのデバイスは、ホスト機能を有するルートコンプレックスを最上位デバイスとしてポイント・ツー・ポイント（point-to-point）でツリー状に接続・構成され、通常１つのＰＣＩｅデバイスツリーには１つのルートコンプレックスしか接続できない。
【０００４】
この問題を解決するために、ノントランスペアレント（Non-Transparent）ポート（以下、ＮＴポート）を有するＰＣＩｅスイッチを使用して、他のルートコンプレックスを有するシステムとスイッチのＮＴポートを接続してシステム領域（管理領域）を分離することで、ルートコンプレックスを有するホストシステム同士を接続して通信を行うことが可能となっている。
【０００５】
図９は、３つのホストシステム間でＰＣＩｅを用いて通信するシステム構成例を示す図である。ホストシステムＨ１１は、ＣＰＵ１０１を備えており、ＣＰＵ１０１には１つのルートコンプレックス１０２が接続されている。ルートコンプレックス１０２には、メモリ１０３、接続されるデバイスであるエンドポイント１０４及びＰＣＩｅスイッチ１０５が接続されている。ＰＣＩｅスイッチ１０５には、エンドポイント１０６、及びＮＴポートを備えたＰＣＩｅスイッチ１０７が接続されており、ＰＣＩｅスイッチ１０７にはエンドポイント１０８が接続されている。
【０００６】
ホストシステムＨ１２は、ＣＰＵ２０１を備えており、ＣＰＵ２０１には１つのルートコンプレックス２０２が接続されている。ルートコンプレックス２０２には、メモリ２０３、エンドポイント２０４及びＰＣＩｅスイッチ２０５が接続されている。ＰＣＩｅスイッチ２０５には、エンドポイント２０６が接続されているとともに、ＰＣＩｅスイッチ２０５は、ＰＣＩｅスイッチ１０７のＮＴポートに接続されている。
【０００７】
ホストシステムＨ１３は、ＣＰＵ３０１を備えており、ＣＰＵ３０１には１つのルートコンプレックス３０２が接続されている。ルートコンプレックス３０２には、メモリ３０３が接続されているとともに、ルートコンプレックス３０２はＰＣＩｅスイッチ１０７のＮＴポートに接続されている。
【０００８】
こうしたルートコンプレックス、ＰＣＩｅスイッチ及びエンドポイントからなるＰＣＩｅのデバイスツリー構造を構築する場合、デバイスツリー構造には複数のルートコンプレックスを接続することはできない。そのため、ＮＴポートを備えたＰＣＩｅスイッチにより３つのホストシステムを接続することで、複数のルートコンプレックスの接続を実現することができる。この場合、図９の点線で囲まれた領域で示すように、ＮＴポートにより３つのホストシステムのシステム領域（アドレス領域）が分離した状態に設定されている。
【０００９】
図１０は、ＰＣＩｅスイッチ１０７の論理的な内部構造に関するブロック構成図である。ＰＣＩｅスイッチ１０７は、アップストリームポート１１１、ダウンストリームポート１１２及びＮＴポート１１３を備えている。システムの上流側に対応するアップストリームポート１１１には、ＰＣＩｅスイッチ１０５が接続されており、システムの下流側に対応するダウンストリームポート１１２には、エンドポイント１０８が接続されている。そして、ＮＴポート１１３は、ホストシステムＨ１２側のＰＣＩｅスイッチ２０５に接続されている。なお、便宜上、ホストシステムＨ１３側のルートコンプレックス３０２に接続されているＮＴポートは省略した。
【００１０】
ＰＣＩｅスイッチ１０７は、複数のポート１１１、１１２及び１１３を結合し、ポート間でパケットルーティングを行う。論理的には、２つの仮想ＰＣＩ−ＰＣＩブリッジ１１４及び１１５と仮想ＰＣＩバス１１７を接続して構成される。ＮＴポート１１３に対応して設定されるインターフェース部１１６についても他のポートに対応して設定された仮想ＰＣＩ−ＰＣＩブリッジ１１４及び１１５との間を仮想ＰＣＩバス１１７により接続されている。
【００１１】
インターフェース部１１６は、ノントランスペアレント（Non-transparent）ブリッジ（以下、ＮＴブリッジ）１１６ａを備えている。ＮＴブリッジ１１６ａは、ホストシステムＨ１１側、ホストシステムＨ１２側の双方からエンドポイントとして認識される。即ち、ホストシステムＨ１１側からはノントランスペアレント（Non-Transparent）エンドポイント（以下、ＮＴエンドポイント）１１６ｂとして認識され、ホストシステムＨ１２側からはＮＴエンドポイント１１６ｃとして認識される。
【００１２】
このため、２つのホストシステムのアドレス領域が分離した状態に設定される。そして、ＮＴブリッジ１１６ａは、仮想ＰＣＩ−ＰＣＩブリッジ１１４及び１１５と同様にトランザクションを転送する。トランザクションがＮＴブリッジ１１６ａを通過する際にトランザクションのアドレス変換処理が行われる。そのため、一方のホストシステム側から他方のホストシステム側にアクセスする際に他方のホストシステム側のアドレス領域に対応するアドレス変換が行われてアクセス可能となる。
【００１３】
このようなシステム構成の具体例として、特許文献１には、画像処理ユニット部及び情報処理ユニット部にＰＣＩｅによるデータ転送ユニットを備え、データ転送ユニット間をＰＣＩｅスイッチのＮＴポートを使用して接続する構成が記載されている。
【００１４】
図１１は、上述したシステム構成におけるＰＣＩｅのデバイスツリー構造におけるメモリトランザクションの流れに関する説明図である。ここで、図１１Ａは、メモリリードリクエストを実行した場合のトランザクションの流れを示している。リクエスタであるエンドポイントから送信されたメモリリードリクエストは、リクエストのアドレスデータに基づいてルーティングされ、メモリにアクセスされる（図中の矢印ａ参照）。メモリにアクセスしてリクエストされたデータを取得した後に、コンプリータであるルートコンプレックスによりリードデータを含むコンプリーションがリクエスタに返信される。リクエスタは、コンプリーションを受信することでデータを獲得する。このとき、コンプリーションの返信経路（図中の矢印ｂ参照）は、ＩＤ（Identification）ルーティングによって設定される。
【００１５】
図１１Ｂは、メモリライトリクエストを実行した場合のトランザクションの流れを示している。リクエスタであるエンドポイントから送信されたメモリライトリクエストは、リクエストのアドレスデータに基づいてルーティングされ、メモリにアクセスしてデータの書き込みを行う（図中の矢印ｃ参照）。メモリライトリクエストでは、リクエスタが送信したトランザクションに対して、コンプリータであるルートコンプレックスはコンプリーションを返信しない。
【００１６】
図１２は、アドレスルーティング及びＩＤルーティングのヘッダ構造に関する説明図である。ＰＣＩｅでは、トランザクションは、パケットの形にして転送される。ＰＣＩｅのトランザクション層で転送されるパケット(Transaction Layer Packet：以下、ＴＬＰ)は、転送するデータ（データペイロード）、トランザクションの種類を決定するＴＬＰヘッダ、及び、データのエラー検出を行うＴＬＰダイジェストから構成されている。ＴＬＰにはホストシステム内のＣＰＵのアドレス空間上で管理されるＰＣＩｅのフレームが使用される。
【００１７】
ＴＬＰヘッダは、トランザクションの送信先を決定するために用いられる。トランザクションの送信先へのルーティング方法としては、アドレスルーティング及びＩＤルーティングがある。図１２Ａは、３２ビットの場合のアドレスルーティングにおけるヘッダ構造を示している。この例では、Byte８のアドレス［３１：２］に格納されたアドレス値を用いて、それに対応するアドレスを割り当てたデバイスがトランザクションの送信先に設定されることになる。図１２Ｂは、３２ビットの場合のＩＤルーティングにおけるヘッダ構造を示している。Byte８のバス番号、デバイス番号及びファンクション番号がトランザクションの送信先を決定するために使用され、システム内で対応する番号を割り当てられたデバイスがトランザクションの送信先に設定されることになる。
【００１８】
こうしたヘッダ構造に基づいてトランザクションはルーティングされるが、図９に示すようにＮＴポートを介して別のホストシステムを接続した場合、ホストシステム間（分離したシステム領域間）で使用しているアドレス空間が異なる場合がある。また、分離したシステム領域間では、バス番号、デバイス番号及びファンクション番号に同じ値が使用される場合がある。
【００１９】
このような場合でも、一方から他方のシステム領域へトランザクション送信を行うとき、例えば、図１１Ｂに示すメモリライトリクエストの処理では、リクエストパケットがＮＴブリッジを通過する際にアドレス変換が行われ、他方のシステム領域で使用しているアドレス空間にアクセスすることが可能となる。
【００２０】
一方、図１１Ａに示すメモリリードリクエストについては、送信先のデバイスまではアドレスでルーティングされるため、アドレス変換によりアクセス可能である。しかしながら、コンプリーションの返信処理では、ＩＤルーティングで行われるため、各ホストシステムで使用しているバス番号、デバイス番号及びファンクション番号に同じ値が使用されている場合、別のシステム領域内で誤ったルーティングが行われてしまう。
【００２１】
つまり、ＰＣＩｅスイッチのＮＴポートによって分離されたシステム領域は、互いのホストシステムから相互に隠蔽され、メモリリードリクエストパケットに格納したＩＤが各ホストシステム内でどの様に使用されるか分からないため、ホストシステム間でＩＤの調停を行う機構が無いと、ＩＤルーティングが必要なメモリリードリクエストには対応出来ないという問題がある。
【００２２】
そこで、ＰＣＩｅスイッチに各ホストシステムで使用するＩＤを保存する機能とＩＤを変換する機能を有するＩＤ管理テーブルを設けることでリクエストのＩＤルーティングを実現する構成が考えられる。しかし、ＩＤ管理テーブルにＩＤデータを格納するタイミングがシステム起動時のコンフィギュレーションのときだけでは、ＰＣＩｅスイッチのフェイルオーバー（Failover）機能の使用やスイッチのパーティション構成の変更などによって、コンフィギュレーション後にＰＣＩｅのデバイスツリー構造が変更された場合、メモリリードリクエストのＩＤルーティングが実行出来なくなってしまうという問題がある。
【００２３】
他方、ＰＣＩｅスイッチのＮＴポートと同様に、ホストシステム間のシステム領域を分離することが可能なデバイスとしてクラスタポートを用いることでホストシステム間の通信を行う技術もある（特許文献２）。しかし、この技術にはホストシステム間通信を行うシステムの全デバイスでトランザクションヘッダを独自解釈する仕様をサポートしなければならないという問題がある。また、バス番号を記憶しておくためにトランザクションＩＤの使用領域を制限するため、ＰＣＩデバイスツリーに接続可能なデバイス数が少なくなるという問題がある。
【発明の概要】
【発明が解決しようとする課題】
【００２４】
そこで、本発明は、デバイスツリーに接続可能なデバイス数を少なくすることなく複数のホストシステムのシステム領域を分離するとともに、システム起動時のコンフィギュレーション後にデバイスツリー構造が変更された場合にも、分離したシステム領域の間でＩＤルーティングを可能にすることを目的とする。
【課題を解決するための手段】
【００２５】
本発明に係るデータ転送装置は、デバイスを備える複数のホストシステムのシステム領域を分離する機能、及び前記システム領域間のデバイス間でデータ転送を行う機能を有するデータ転送装置であって、前記ホストシステムのデバイスツリー構造に応じて決定され、前記データ転送に使用されるＩＤ情報を前記ホストシステムが起動されたときに取得するＩＤ情報取得手段と、前記ホストシステムのデバイスツリー構造の変更を監視する監視手段と、前記監視手段により前記変更が検出されたとき、新たなデバイスツリー構造における前記ＩＤ情報を取得する新ＩＤ情報取得手段と、を備えるデータ転送装置である。
【発明の効果】
【００２６】
本発明によれば、デバイスツリーに接続可能なデバイス数を少なくすることなく複数のホストシステムのシステム領域を分離するとともに、システム起動時のコンフィギュレーション後にデバイスツリー構造が変更された場合にも、分離したシステム領域の間でＩＤルーティングが可能になる。
【図面の簡単な説明】
【００２７】
【図１】本発明の実施形態に係るデータ転送装置を備えた通信システムを示す図である。
【図２】本発明の実施形態に係るデータ転送装置のブロック図である。
【図３】図２におけるＩＤ管理テーブルに保存されるＩＤデータを説明するための図である。
【図４】図１に示す通信システムにおけるコンフィギュレーション及びメモリリードリクエストの手順を示すシーケンス図である。
【図５】本発明の実施形態に係るデータ転送装置におけるＩＤ変換処理の手順を示すシーケンス図である。
【図６】図１に示す通信システムにおいてデバイスツリー構造が変更された状態を示す図である。
【図７】本発明の実施形態に係るデータ転送装置におけるデバイス監視部の動作を示すフローチャートである。
【図８】本発明の実施形態に係るデータ転送装置におけるデバイス監視部がデバイスツリー変更のトリガ信号の有無を判定する方法を説明するための図である。
【図９】３つのホストシステム間でＰＣＩｅを用いて通信するシステム構成例を示す図である。
【図１０】ＰＣＩｅスイッチの論理的な内部構造に関するブロック構成図である。
【図１１】ＰＣＩｅのデバイスツリー構造におけるメモリトランザクションの流れに関する説明図である。
【図１２】アドレスルーティング及びＩＤルーティングのヘッダ構造に関する説明図である。
【発明を実施するための形態】
【００２８】
以下、本発明の実施形態について図面を用いて説明する。
〈通信システムの構成〉
図１は本発明の実施形態に係るデータ転送装置を備えた通信システムを示す図である。この例では、３つのホストシステムＨ１、ホストシステムＨ２、及びホストシステムＨ３の間でＰＣＩｅを用いて通信するように構成されている。
【００２９】
ホストシステムＨ１は、ＣＰＵ１１を備えており、ＣＰＵ１１には１つのルートコンプレックス１２が接続されている。ルートコンプレックス１２には、メモリ１３、接続されるデバイスであるエンドポイント１４及びＰＣＩｅスイッチ１５が接続されている。ＰＣＩｅスイッチ１５には、エンドポイント１６及び高機能スイッチ１７が接続されており、高機能スイッチ１７にはエンドポイント１８が接続されている。高機能スイッチ１７が本発明の実施形態に係るデータ転送装置である。
【００３０】
ホストシステムＨ２は、ＣＰＵ２１を備えており、ＣＰＵ２１には１つのルートコンプレックス２２が接続されている。ルートコンプレックス２２には、メモリ２３、エンドポイント２４及びＰＣＩｅスイッチ２５が接続されている。ＰＣＩｅスイッチ２５には、エンドポイント２６及び高機能スイッチ１７が接続されている。
【００３１】
ホストシステムＨ３は、ＣＰＵ３１を備えており、ＣＰＵ３１には１つのルートコンプレックス３２が接続されている。ルートコンプレックス３２には、メモリ３３が接続されているとともに、ルートコンプレックス３２は、高機能スイッチ１７に接続されている。
【００３２】
高機能スイッチ１７は、ＮＴポートを備えており、ＰＣＩｅスイッチ２５及びルートコンプレックス３２とＮＴポートで接続されている。そのため、ホストシステムＨ１のシステム領域とホストシステムＨ２のシステム領域とは、高機能スイッチ１７により分離された状態に設定される。そして、高機能スイッチ１７を介してホストシステムＨ１、ホストシステムＨ２、ホストシステムＨ３の互いのデバイス間で通信が可能となっている。
【００３３】
〈高機能スイッチのブロック図〉
図２は高機能スイッチ１７のブロック図である。高機能スイッチ１７は、アップストリームポート４１、ダウンストリームポート４２及びＮＴポート４３を備えている。システムの上流側に対応するアップストリームポート４１には、ＰＣＩｅスイッチ１５が接続されており、システムの下流側に対応するダウンストリームポート４２には、エンドポイント１８が接続されている。そして、ＮＴポート４３は、ホストシステムＨ２側のＰＣＩｅスイッチ２５に接続されている。なお、便宜上、ホストシステムＨ３側のルートコンプレックス３２に接続されているＮＴポートは省略した。
【００３４】
高機能スイッチ１７は、複数のポート４１、４２及び４３を結合し、ポート間でパケットルーティングを行う。論理的には、２つの仮想ＰＣＩ−ＰＣＩブリッジ４４及び４５と仮想ＰＣＩバス５１を接続して構成される。
【００３５】
ＮＴポート４３に対応して設定されるインターフェース部４６についても他のポートに対応して設定された仮想ＰＣＩ−ＰＣＩブリッジ４４及び４５との間を仮想ＰＣＩバス５１により接続されている。
【００３６】
インターフェース部４６は、ＮＴブリッジ４６ａを備えている。ＮＴブリッジ４６ａは、ホストシステムＨ１側、ホストシステムＨ２側の双方からエンドポイントとして認識される。即ち、ホストシステムＨ１側からはＮＴエンドポイント４６ｂとして認識され、ホストシステムＨ２側からはＮＴエンドポイント４６ｃとして認識される。このため、２つのホストシステムのシステム領域が分離した状態に設定される。そして、ＮＴブリッジ４６ａは、仮想ＰＣＩ−ＰＣＩブリッジ４４及び４５と同様にトランザクションを転送する。トランザクションがＮＴブリッジ４６ａを通過する際にトランザクションのアドレス変換処理が行われる。そのため、一方のホストシステム側から他方のホストシステム側にアクセスする際に他方のホストシステム側のアドレス領域に対応するアドレス変換が行われてアクセス可能となる。
【００３７】
つまり、ここまで述べた高機能スイッチ１７の構成は図９におけるＰＣＩｅスイッチ１０７と同様である。高機能スイッチ１７は、以上の構成に加えて、アップストリームポート４１と仮想ＰＣＩ−ＰＣＩブリッジ４４との間に接続されたデバイス監視部４７、ダウンストリームポート４２と仮想ＰＣＩ−ＰＣＩブリッジ４５との間に接続されたデバイス監視部４８、ＮＴポート４３とインターフェース部４６との間に接続されたデバイス監視部４９、及びＩＤ管理テーブル５０を備えている。
【００３８】
ＩＤ管理テーブル５０はＮＴブリッジ４６ａの両端のＮＴエンドポイント４６ｂ、４６ｃと接続されており、ＩＤルーティングのためのリクエストのＩＤのデータの保存と変換を行う。デバイス監視部４７〜４９は、それぞれが接続されているポート４１〜４３でのデバイスツリー構造の変更が生じるイベントをトリガ信号として監視し、デバイスツリー構造の変更があったとき、新たなデバイスツリー構造におけるＩＤをＩＤ管理テーブル５０に書き込む。ＩＤ管理テーブル５０、及びデバイス監視部４７〜４９の動作の詳細については後述する。
【００３９】
〈ＩＤ管理テーブルに保存されるＩＤデータ〉
ＰＣＩｅでは、システムの電源をオンにしたとき、システムのデバイスツリー構造を把握するために、システム内に接続されている各デバイスのコンフィギュレーションを実施する。
【００４０】
このとき、ルートコンプレックスから送信されるコンフィギュレーションリードリクエストのＴＬＰヘッダには、パケット送信元のリクエスタＩＤ（バス番号／デバイス番号／ファンクション番号）が格納されている。高機能スイッチ１７は、ＮＴエンドポイント４６ｂ及びＮＴエンドポイント４６ｃとしてコンフィギュレーションリードリクエストを受信したときに、リクエスト内に含まれる送信元のリクエスタＩＤをＩＤ管理テーブル５０に格納する。
【００４１】
図３は図２におけるＩＤ管理テーブル５０に保存されるＩＤデータを説明するための図である。ＩＤ管理テーブル５０には、コンフィギュレーションリードリクエストに含まれるＩＤデータが格納され、コンフィギュレーションリードリクエストが入力されたＮＴエンドポイント別に分類して識別番号を付与する。そのため、ＩＤ管理テーブル５０には、ＩＤデータとともに関連するＮＴエンドポイント及び識別番号が管理情報として保存される。
【００４２】
図３に示す例では、ルートコンプレックス１２から送信されたコンフィギュレーションリードリクエストをＮＴエンドポイント４６ｂで受信することによって取得したリクエスタＩＤが０／１／０であり、取得したリクエスタＩＤにエントリーナンバー０（No.０）の識別番号を割り当てて保存する。こうして、ホストシステムＨ１のシステム領域内のパケット送信元のリクエスタＩＤが全て個別の識別番号を付与されてＮＴエンドポイント４６ｂに関連付けられて保存されるようになる。
【００４３】
また、ルートコンプレックス２２から送信されたコンフィギュレーションリードリクエストをＮＴエンドポイント４６ｃで受信することによって取得したリクエスタＩＤが０／２／０であり、取得したリクエスタＩＤにエントリーナンバー１（No.１）の識別番号を割り当てて保存する。ホストシステムＨ２のシステム領域内のパケット送信元のリクエスタＩＤについても全て個別の識別番号を付与されてＮＴエンドポイント４６ｃに関連付けられて保存されるようになる。
【００４４】
〈コンフィギュレーション及びメモリリードリクエストの手順〉
図４は図１に示す通信システムにおけるコンフィギュレーション及びメモリリードリクエストの手順を示すシーケンス図である。この例は、コンフィギュレーションの後に、ホストシステムＨ１からホストシステムＨ２のエンドポイント２４に対してメモリリードリクエストを送信する場合のシーケンスである。
【００４５】
手順Ｓ１では、ホストシステムＨ１の電源がオンになってコンフィギュレーションが開始される。コンフィギュレーションによって高機能スイッチ１７にコンフィギュレーションリードリクエストが転送され、高機能スイッチ１７は、コンフィギュレーションリードリクエストのリクエスタＩＤを取得してＩＤ管理テーブルに格納する。
【００４６】
手順Ｓ２では、ホストシステムＨ２の電源がオンになってコンフィギュレーションが開始される。コンフィギュレーションによって高機能スイッチ１７にコンフィギュレーションリードリクエストが転送され、高機能スイッチ１７は、コンフィギュレーションリードリクエストのリクエスタＩＤを取得してＩＤ管理テーブルに格納する。
【００４７】
手順Ｓ３では、コンフィギュレーション終了後、任意のタイミングでＣＰＵ１１がホストシステムＨ２のエンドポイント２４に対するメモリリードをルートコンプレックス１２に指示する。
【００４８】
手順Ｓ４では、ＣＰＵ１１の指示に基づいてルートコンプレックス１２からメモリリードリクエストが送信され、メモリリードリクエストが高機能スイッチ１７に転送される。手順Ｓ５では、高機能スイッチ１７は、ホストシステムＨ２のアドレス空間にアクセスするためのアドレス変換処理及びホストシステムＨ２のエンドポイント２４から返信されるコンプリーションをルーティングするためのリクエスタＩＤ変換処理を実行する。
【００４９】
手順Ｓ６ではホストシステムＨ２にメモリリードリクエストを転送する。アドレス変換処理によりホストシステムＨ２側のデバイスのアドレスに変換されているため、エンドポイント２４にルーティングされる。
【００５０】
手順Ｓ７では、エンドポイント２４においてメモリリードリクエストを受信した後、対象のアドレスに格納されているデータをコンプリーションとしてエンドポイント２４から転送（返信）する。コンプリーションのヘッダには、手順Ｓ５において変換したリクエスタＩＤが格納されており、変換されたリクエスタＩＤに基づいて高機能スイッチ１７へルーティングされる。
【００５１】
手順Ｓ８では、高機能スイッチ１７は、受信したコンプリーションのヘッダに格納されている手順Ｓ５で変換したリクエスタＩＤに基づいて、ホストシステムＨ１側で使用している元のリクエスタＩＤに戻すように変換処理する。手順Ｓ９では、変換した元のリクエスタＩＤに基づいてルーティング処理が行われ、ルートコンプレックス１２にコンプリーションが返信される。
【００５２】
〈高機能スイッチ１７におけるＩＤ変換処理〉
図５は本発明の実施形態に係るデータ転送装置、即ち高機能スイッチ１７におけるＩＤ変換処理の手順を示すシーケンス図である。
【００５３】
この例では、ホストシステムＨ１及びホストシステムＨ２の電源をオンにして各ホストシステムがコンフィギュレーション処理を実行した場合における、ＮＴエンドポイント４６ｂ及びＮＴエンドポイント４６ｃに割り当てられたリクエスタＩＤがそれぞれ２／０／１及び３／０／１に設定されており、ＩＤ管理テーブル５０に保存されている。
【００５４】
なお、ホストシステムＨ１及びホストシステムＨ２のシステム領域内のパケット送信元に関するすべてのリクエスタＩＤは、図３に示すように、ＩＤ管理テーブルに識別番号を付与されて格納されている。そして、ホストシステムＨ１のルートコンプレックス１２から送信されたホストシステムＨ２側のエンドポイント２４に対するメモリリードリクエストのリクエスタＩＤを０／１／０としている。
【００５５】
手順Ｓ１１では、ホストシステムＨ１においてルートコンプレックス１２から送信されたメモリリードリクエストを高機能スイッチ１７が受信する。手順Ｓ１２では、受信したメモリリードリクエストのリクエスタＩＤ（０／１／０）がＩＤ管理テーブル５０に保存されたリクエスタＩＤと比較される。リクエスタＩＤが一致する場合には、保存されたリクエスタＩＤに付与された識別番号（Entry No.ｎ）をリクエスタＩＤのファンクション番号として書き込む。そのため、リクエスタＩＤ（０／１／０）は、リクエスタＩＤ（０／１／Entry No.ｎ）に変換処理されるようになる。手順Ｓ１２と同時にアドレス変換処理も行われて、メモリリードリクエストの送信先アドレスがホストシステムＨ２側のエンドポイント２４のアドレスに変換される。
【００５６】
手順Ｓ１３では、識別番号に基づいて変換処理されたリクエスタＩＤ（０／１／Entry No.ｎ）に対して、ＮＴエンドポイント４６ｃのバス番号及びデバイス番号を書き込む。そのため、リクエスタＩＤ（０／１／Entry No.ｎ）は、リクエスタＩＤ（３／０／Entry No.ｎ）に変換処理される。そして、手順Ｓ１４では、変換処理されたリクエスタＩＤを含むメモリリードリクエストがＮＴエンドポイント４６ｃからホストシステムＨ２側に送信されて、手順Ｓ１２で変換処理されたアドレスに基づいてエンドポイント２４にルーティングされる。
【００５７】
手順Ｓ１５では、エンドポイント２４は、メモリリードリクエストを受信した後にコンプリーションを返信する。コンプリーションは、手順Ｓ１３で変換処理されたリクエスタＩＤ（３／０／Entry No.ｎ）に書き込まれたバス番号及びデバイス番号（３／０）に基づいてＮＴエンドポイント４６ｃにルーティングされ、高機能スイッチ１７は、コンプリーションを受信する。
【００５８】
手順Ｓ１６では、受信したコンプリーションのリクエスタＩＤ（３／０／Entry No.ｎ）のファンクション番号として書き込まれている識別番号（Entry No.ｎ）とＩＤ管理テーブルに保存されている識別番号とを比較する。識別番号が一致する場合には、その識別番号に対応するリクエスタＩＤをコンプリーションのリクエスタＩＤとして書き込む。そのため、リクエスタＩＤ（３／０／Entry No.ｎ）は、元のリクエスタＩＤ（０／１／０）に変換処理される。
【００５９】
手順Ｓ１７では、コンプリーションは、変換処理されたリクエスタＩＤに基づいてＮＴエンドポイント４６ｂからルーティングされて、ルートコンプレックス１２を介してメモリリードリクエストの発信元に転送される。
【００６０】
このように、高機能スイッチ１７のＮＴポートにより分離されたホストシステムＨ１、ホストシステムＨ２、及びホストシステムＨ３の間で通信を行う場合、高機能スイッチ１７において、各ホストシステムのシステム領域から送信されるリクエストのＩＤデータをＩＤ管理テーブル５０に保存しておく。そして、高機能スイッチ１７で受信したトランザクションのＩＤデータを、ＩＤ管理テーブル５０を参照して各ホストシステムのシステムで使用可能なＩＤデータに変換し、ＩＤルーティングが確実に行えるようにしている。そのため、複数のホストシステム間で確実にメモリリードリクエストの通信を行うことができる。
【００６１】
〈デバイスツリー構造が変更されたときの高機能スイッチの動作〉
上述のとおり、高機能スイッチ１７に各ホストシステムで使用するＩＤを保存する機能とＩＤを変換する機能を有するＩＤ管理テーブル５０を備えることで、複数のホストシステム間で確実にメモリリードリクエストの通信を行うことができる。しかし、ＩＤ管理テーブル５０にＩＤデータを格納するタイミングがシステム起動時のコンフィギュレーションのときだけでは、ＰＣＩｅスイッチのフェイルオーバー機能の使用やスイッチのパーティション構成の変更などによって、コンフィギュレーション後にＰＣＩｅのデバイスツリー構造が変更された場合、メモリリードリクエストのＩＤルーティングが実行出来なくなってしまう。このことについて図６を用いて説明する。
【００６２】
図６は図１に示す通信システムにおいてデバイスツリー構造が変更された状態を示す図である。この例は、ＰＣＩｅスイッチのフェイルオーバー機能によりデバイスツリー構造が変更された場合である。
【００６３】
ＰＣＩｅスイッチのフェイルオーバー機能を使用することで、あるホストシステムの特定の箇所で異常が発生したときにスイッチのポート接続（ポート設定）を切り替えて異常箇所を切り離し、別のホストシステムと接続して異常箇所より下流にあるデバイスを使用することが可能になる。
【００６４】
図６では、ホストシステムＨ１のルートコンプレックス１２とＰＣＩｅスイッチ１５との間でリンク異常が発生した例を示している。通常、ルートコンプレックス１２は自ホストシステムのデバイスツリーに接続されているデバイスを管理しているが、ルートコンプレックス１２とＰＣＩｅスイッチ１５との間のリンクに異常が発生したことで、ホストシステムＨ１のＰＣＩｅスイッチ１５より下流にあるデバイス（エンドポイント１６、エンドポイント１８）は未管理の状態になってしまう。
【００６５】
スイッチのフェイルオーバー機能を使用すると、未管理状態になってしまったエンドポイント１６、エンドポイント１８のデバイスを他のホストシステムからアクセスして使用出来るように、デバイスツリーの構成を変更できる。図では、ＰＣＩｅスイッチ１５のアップストリームポートをＮＴポートに変更して、異常発生箇所とシステム領域を分離し、ホストシステムＨ２が接続されている高機能スイッチ１７のＮＴポートをアップストリームポートに変更している。
【００６６】
この結果、エンドポイント１６とエンドポイント１８はＣＰＵ２１及びルートコンプレックス２２の管理下に置かれる、即ちホストシステムＨ２側のデバイスになる。ここで、ＣＰＵ２１及びルートコンプレックス２２はエンドポイント１６とエンドポイント１８のデバイスを管理下に置くために、再度コンフィギュレーションを実施し、エンドポイント１６とエンドポイント１８に新たにバス番号を割り当てる。
【００６７】
このとき、割り当てられるバス番号が初期の状態から変更されることがある（図ではエンドポイント１６のバス番号＃２→＃５、エンドポイント１８のバス番号＃４→＃６に変更された例を示している。）これらの変更は、結果としてリクエスト発行時のＩＤが変更されることにつながる。
【００６８】
そこで、本実施形態では、前述したとおり、高機能スイッチ１７内のデバイス監視部４７〜４９がポート４１〜４３でのデバイスツリー構造の変更が生じるイベントをトリガ信号として監視し、デバイスツリー構造の変更があったとき、新たなデバイスツリー構造におけるＩＤをＩＤ管理テーブル５０に書き込む。
【００６９】
図７はデバイス監視部４７〜４９の動作を示すフローチャートである。ステップＳＴ１では、デバイスツリー構造の変更が生じるイベントをトリガ信号として監視する（監視方法については後述する。）。
【００７０】
デバイスツリー構造に変更があった場合は（ステップＳＴ１：Yes）、システム起動時のコンフィギュレーション（図４における手順Ｓ１及びＳ２）の際にＩＤ管理テーブル５０に保存しておいたＩＤ情報を初期化する（ステップＳＴ２）。
【００７１】
デバイスツリー構造が変更されると、再コンフィギュレーションが実施されるので、新たなデバイスツリー構造におけるＩＤ情報を取得し（ステップＳＴ３）、ＩＤ管理テーブル５０に書き込む（ステップＳＴ４）。
【００７２】
その後は、ステップＳＴ１〜ＳＴ４を繰り返し、デバイスツリー構造の変更に伴って、ＩＤ管理テーブル５０のＩＤ情報を更新する。ＩＤ情報更新後は、前述したＩＤルーティング手順によってメモリリードリクエストの実行が可能になる。
【００７３】
次にステップＳＴ１における監視方法の詳細について説明する。図８はデバイス監視部がデバイスツリー変更のトリガ信号の有無を判定する方法を説明するための図である。ここでは、ダウンストリームポート４２についてのみ示しているが、アップストリームポート４１及びＮＴポート４３も同様に構成されている。
【００７４】
図示のように、ダウンストリームポート４２には、イベント発生用レジスタ４２ａとして、フェイルオーバーレジスタ（フェイルオーバー機能を実施する際のフラグレジスタ）やポート／パーティション再構成レジスタ（スイッチのポートとパーティションの動的再構成を実施する際にアクセスするレジスタ）等が設けられている。デバイス監視部４８はこれらのレジスタを監視し、レジスタの設定値に変化あった場合に、デバイスツリー構造の変更があると判断し、トリガ信号として判定する。この図は、フェイルオーバー機能を実施することでフェイルオーバーレジスタの値が１に変化し、スイッチのポートとパーティションの動的再構成を実施していないためポート／パーティション再構成レジスタの値が０のままであることを示している。
【００７５】
なお、これらのレジスタの値はＣＰＵにより設定されるが、ＰＣＩｅインターフェース以外のＰＣＩｅスイッチに接続されている外部インターフェース、例えば図１に示すホストシステムＨ１のデバイスツリーとは別にルートコンプレックス１２に接続されている外部インターフェースから設定されても良い。また、これらのレジスタはスイッチの仕様として設計思想に応じて決定することが可能であり、レジスタの仕様に応じて監視するレジスタを決定する。
【符号の説明】
【００７６】
１７…高機能スイッチ、４１…アップストリームポート、４２…ダウンストリームポート、４２ａ…イベント発生用レジスタ、４３…ＮＴポート、４７〜４９…デバイス監視部、５０…ＩＤ管理テーブル、Ｈ１〜Ｈ３…ホストシステム。
【先行技術文献】
【特許文献】
【００７７】
【特許文献１】特開２００８−０６７２４２号公報
【特許文献２】特表２０１０−５２０５４１号公報
【図１】
2014002545.tif 000003
【図２】
2014002545.tif 000004
【図３】
2014002545.tif 000005
【図４】
2014002545.tif 000006
【図５】
2014002545.tif 000007
【図６】
2014002545.tif 000008
【図７】
2014002545.tif 000009
【図８】
2014002545.tif 000010
【図９】
2014002545.tif 000011
【図１０】
2014002545.tif 000012
【図１１】
2014002545.tif 000013
【図１２】
2014002545.tif 000014