(57)【要約】      （修正有）【課題】多数の計算機を接続し期待される処理性能を出すために、計算機のデータ転送で使用するプロトコルの変換コストが小さく、データ転送時の計算機資源が少ないネットワークスイッチを提供する。【解決手段】ネットワークスイッチは、各計算機がデバイスと認識するデバイスエミュレータと各計算機のメモリにあるデータを直接操作可能なデータコントローラとデータ転送時にデータを途中で保存するためのポートメモリとネットワークスイッチ内のデータのルーティングを決定するパケットルータを各計算機対応に備え、各デバイスエミュレータは第１のネットワークで相互に接続され、各データコントローラはパケットルータを介して第２のネットワークで相互に接続され、２つの計算機間のデータ転送のセッション構築とセッション解除を対応する２つのデバイスエミュレータが行い、データ転送の実行を前記２つの対応する２つのデータコントローラが行う。【選択図】図１
2014206883.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機をネットワークスイッチ経由で接続して各計算機のメモリ間でデータ転送を行う計算機システムにおいて、前記ネットワークスイッチは、各計算機がデバイスと認識するデバイスエミュレータと各計算機のメモリにあるデータを直接操作可能なデータコントローラとデータ転送時にデータを途中で保存するためのポートメモリとネットワークスイッチ内のデータのルーティングを決定するパケットルータを各計算機対応に備え、各デバイスエミュレータは第１のネットワークで相互に接続され、各データコントローラはパケットルータを介して第２のネットワークで相互に接続され、２つの計算機間のデータ転送のセッション構築とセッション解除を前記２つの計算機に対応数する２つのデバイスエミュレータが前記第１のネットワークを介して行い、データ転送の実行を前記２つの計算機に対応数する２つのデータコントローラが前記第２のネットワークを介して行う計算機システムであって、計算機同士のデータ転送の実行時に送信側計算機対応のデバイスエミュレータは、送信側計算機のドライバから、送信データがある送信側計算機のメモリの先頭アドレス、サイズ、送信宛先を取得し、送信側計算機対応のデータコントローラは前記送信側計算機対応のデバイスエミュレータから通知された情報より送信側計算機のメモリからデータを読み出し、受信側計算機対応のデータコントローラは受信側計算機のメモリへデータを書き込み、書き込み終了時に前記送信側計算機対応のデバイスエミュレータが送信側と受信側の計算機にデータ転送を終了したことを通知することを特徴とする計算機システム。
【請求項２】
前記送信側計算機のドライバは、送信側計算機のOSから要求されたデータ転送において、転送するデータの先頭アドレスとサイズ、送信先の計算機の宛先を前記送信側計算機対応のデバイスエミュレータに通知し、前記送信側計算機対応のデバイスエミュレータによるデータ通信が終了したことの通知を受信し、前記送信側計算機のOSに対してデータ通信が終了したことを通知することを特徴とする請求項１記載の計算機システム。
【請求項３】
前記ポートメモリは、前記ネットワークスイッチ内において、前記データコントローラと接続され、前記データコントローラが受信したデータを保管する機能を有することを特徴とする請求項１に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の計算機を汎用バスを用いて接続する計算機システムのネットワークスイッチに関するものである。
【背景技術】
【０００２】
計算機システムの性能向上の手段の一つとして、ブレードサーバやクラスタシステムなど多数の計算機を接続する方法がある。多数の計算機を接続する際、従来の汎用の技術では、イーサーネットワークに代表されるネットワークカードを計算機の汎用バスであるPCIeで接続し、PCIeのプロトコルでデータ転送を行う。さらに、ネットワーク拡張カード同士、ネットワーク拡張カードとネットワークスイッチ、ネットワークスイッチ同士を専用のネットワークケーブルで多段階に接続し、既定された専用のプロトコルでデータ転送を行う。
【０００３】
従来の汎用の技術では、このようにネットワークスイッチ同士を汎用技術を組み合わせることで接続可能となるため、計算機システムにつながる計算機の台数を増やしたい時、容易に計算機の台数を増やすことが可能である。しかし、計算機システムの性能向上を目的として、多数の計算機を接続する選択は必ずしも有効となるとは限らず、有効であるかどうかは、計算機システムで採用されているネットワークの設計に依存し、多数の計算機を接続して性能向上を目指した計算機システムが期待される処理性能に近い実性能を出すには、採用するネットワークにおいて解決すべき問題がある。
【０００４】
例えばデータ転送において、データを格納しているパケットがネットワーク機器を経由する時、プロトコルの変換やデータの変更を必要とする場合があり、このような状況で接続する計算機や、経由するネットワーク機器が増えると、プロトコルの変換コストが増大し、ネットワークの性能が低下する問題がある。
また、接続する計算機の台数を増やすほど、データ転送の頻度が指数関数的に高くなるプログラムもあり、このようなプログラムに対しては、接続する計算機の台数を増やしても、データ転送のたびにCPU演算機能、メモリ空間、バスの帯域、同期のための時間などの計算機資源を消費し、使用したいプログラムに対して計算機資源を割り当てられなくなり、計算機システムの性能が期待される処理性能より大幅に低下する問題もある。
このようなネットワークが抱える問題を解決すべく、専用ハードウェアを設計し、それをCPUに近い場所に設置するために計算機に専用ハードウェアを組み込み、結果として、計算機単体の高価格化を招くという問題もある。
【０００５】
前述の通り、計算機システムの性能向上を目指して、ネットワークを構築しても、期待される処理性能が出せるとは限らない。しかし、InfiniBandは計算機のメモリにデータを読み出し、書き込み可能なDMA(Direct Memory Access)機能をネットワークカードに内蔵させ、データ転送機能をInfiniBandネットワークカード側で実現することで、データ転送時に計算機資源の消費を抑え、高速なデータ転送と低いレイテンシを実現している。また、公開番号 特開２００５-１８２８１８のようなオンチップバスは、分散バスシステムを構築することで、分散バスシステム上にあるデバイスは計算機を介さずにデータ転送が可能となる。これを利用して、複数の計算機を分散バスシステムで接続し、分散バスシステムそのものをネットワークの代わりとし、データ転送のプロトコルの変換プロセスを削減することが可能である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５-１８２８１８号公報
【特許文献２】特開２００４-２２７５７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
計算機システムの性能向上を目的として、多数の計算機を接続する選択は必ずしも有効となるとは限らない。有効であるかどうかは、計算機システムで採用されているネットワークの設計に依存し、多数の計算機を接続して性能向上を目指した計算機システムが期待される処理性能を出すには、採用するネットワークにおいて解決すべき問題がある。
【０００８】
本発明の目的は、計算機システムの性能向上のために複数の計算機を接続する際に、データ転送で使用するプロトコルの変換コストが小さく、接続した計算機の処理性能を引き出すにあたってデータ転送の処理に必要とされる計算機資源の消費が少ないネットワークスイッチを実現することにある。
【課題を解決するための手段】
【０００９】
多数の計算機を接続するネットワークの構築に、計算機の汎用バスに接続可能なポートを複数持つ汎用バス直接結合型ネットワークスイッチを採用する。
【００１０】
汎用バス直接結合型ネットワークスイッチは、直接、計算機のメモリ内のデータを読み出し・書き込み可能なDMAコントローラを持ち、計算機のデータ転送の際に計算機が送信側計算機のメモリに有る読み出しデータエリアのアドレスとサイズ、受信側計算機のメモリにある書き込みデータエリアのアドレスを汎用バス直接結合型ネットワークスイッチに通知し、汎用バス直接結合型ネットワークスイッチがデータ転送の処理を全て実行し、データ転送の完了通知を計算機に送信する。この時、送信側も受信側も計算機も完了通知の受信待機状態となる。
【００１１】
完了通知の受信待機状態の計算機はデータ転送のための制御する必要がない。よって、計算機は計算機資源をデータ転送のために割く必要がなくなり、データ転送とは関係のない計算に遷移することが可能となり、計算機資源を効率よく使用可能となる。また、汎用バス直接結合型ネットワークスイッチは、内部にメモリを持つ。従来のネットワークスイッチでは、サイズの小さいパケットに区切って細切れにして送信する。この時、受信側計算機のデータ転送の経路が混雑していると、例え、送信側計算機のデータ転送の経路が混雑しておらず、送信側計算機でデータの送信処理が可能であっても、送信側計算機からのデータ転送の送信処理を完了させることができない。
【００１２】
しかし、汎用バス直接結合型ネットワークスイッチは、送信側計算機のメモリからスイッチ側にデータを転送する際に、一度にまとめて送信側計算機のメモリから読み出し、一度にまとめてスイッチ内部のメモリに書き込むことが可能となる。また、スイッチ側から受信側計算機のメモリにデータを転送する際に、一度にまとめてスイッチ内部のメモリから読み出し、一度にまとめて受信側計算機のメモリに書き込むことが可能となる。このように、汎用バス直接結合型ネットワークスイッチにデータ転送の機能を担うDMAコントローラを備えることで、計算機は、データ転送の処理に必要とされる計算機資源を最小化でき、データ転送の際のデータをメモリに確保可能とすることで、データ転送のための経路の効率の良い使用が可能となる。その結果、計算機資源を本来の実行したい計算に割り当てが可能となったことと、データ転送の処理に対する待ち時間を減ったことで、計算機システムとしての性能向上を目指すことが可能となる。
【発明の効果】
【００１３】
本発明における汎用バス直接結合型ネットワークスイッチによれば、接続する計算機の数が増えるほど制御が難しくなるデータ転送を計算機側が制御するのではなく、ネットワークスイッチ側で主体的に制御が可能となる。
【図面の簡単な説明】
【００１４】
【図１】本発明の形態の一つで有る汎用バス直接結合型ネットワークスイッチの実施例を示すブロック図である。
【図２】図１の形態において示されたデバイスエミュレータの内部構成例を示すブロック図である。
【図３】図１の形態において示されたデータコントローラの内部構成例を示すブロック図である。
【図４】図１の形態において示されたポートメモリの内部構成例を示すブロック図である。
【図５】図１の形態において示されたパケットルータの内部構成例を示すブロック図である。
【図６】本発明の形態の一つで有る汎用バス直接結合型ネットワークスイッチと、それに接続する接続したノードのハード、ソフトの階層概念を示す図である。
【図７】図１の実装における例を示す概略図である。
【図８】図１の形態においてノード間のセッション構築の動作を示すシーケンス図である。
【図９】図１の形態においてノード間のセッション解除の動作を示すシーケンス図である。
【図１０】図１の形態においてノード間のデータ転送の動作を示すシーケンス図である。
【図１１】図４の形態においてのデータの流れを示すシーケンス図である。
【図１２】図８のセッション構築のシーケンス図における詳細を示したフローチャート図である。
【図１３】図９のセッション構築のシーケンス図における詳細を示したフローチャート図である。
【図１４ａ】図１０のデータ転送のシーケンス図における詳細を示したフローチャート図の前半１／３部分である。
【図１４ｂ】図１０のデータ転送のシーケンス図における詳細を示したフローチャート図の中間１／３部分である。
【図１４ｃ】図１０のデータ転送のシーケンス図における詳細を示したフローチャート図後半１／３部分である。
【図１５】図１の実施例において使用するプロトコルのプロトコルフォーマット表である。
【図１６】図１の実施例において使用するプロトコル内のデータエリアのデータフォーマット表である。
【発明を実施するための形態】
【００１５】
以下で本発明を実施するための形態を、図面を参照しながら解説する。
【実施例１】
【００１６】
本発明の汎用バス直接結合型ネットワークスイッチの一形態の実施例を図１に示す。汎用バス直接結合型ネットワークスイッチ１０００は、ノードを接続するための汎用バスであるPCIeの電気信号を処理をするポート１０２２、１０４２、１０６２をN個有し、ノード１０２０、１０４０、１０６０はPCIeの各信号線１０２１、１０４１、１０６１を介して各ポート１０２２、１０４２、１０６２と接続する。
【００１７】
汎用バス直接結合型ネットワークスイッチ１０００はN個のポート１０２２、１０４２、１０６２に対し、デバイスエミュレータ１０２４、１０４４、１０６４、データコントローラ１０２６、１０４６、１０６６、ポートメモリ１０２８、１０４８、１０６８、パケットルータ１０３０、１０５０、１０７０をそれぞれ有する。
【００１８】
デバイスエミュレータ１０２４、１０４４、１０６４は、ノード１０２０、１０４０、１０６０と信号線１０２１、１０４１、１０６１、ポート１０２２、１０４２、１０６２、信号線１０２３、１０４３、１０６３を介して接続され、ノード１０２０、１０４０、１０６０はデバイスエミュレータ１０２４、１０４４、１０６４をネットワーク機能を有したデバイスと認識する。
【００１９】
データコントローラ１０２６、１０４６、１０６６はノード１０２０、１０４０、１０６０内のメモリに対してデータの直接の読み出しと書き込みが可能なDMA機能を有し、ノード１０２０、１０４０、１０６０とデータコントローラ１０２６、１０４６、１０６６の間のデータ転送とデータコントローラ１０２６、１０４６、１０６６の間のデータ転送の機能を有する。
【００２０】
ポートメモリ１０２８、１０４８、１０６８は、データコントローラ１０２６、１０４６、１０６６と信号線１０２７、１０４７、１０６７を介して接続され、データコントローラ１０２６、１０４６、１０６６の受信したデータを保管する機能を有する。
【００２１】
パケットルータ１０３０、１０５０、１０７０は、データコントローラ１０２６、１０４６、１０６６と信号線１０２９、１０４９、１０６９を介して接続され、データコントローラ１０２６、１０４６、１０６６同士の通信の機能を有する。
【００２２】
デバイスエミュレータ１０２４、１０４４、１０６４はポート１０２２、１０４２、１０６２と信号線１０２３、１０４３、１０６３を介して接続されている。データコントローラ１０２６、１０４６、１０６６はデバイスエミュレータ１０２４、１０４４、１０６４と信号線１０２５、１０４５、１０６５を介して接続されている。ポートメモリ１０２８、１０４８、１０６８はデータコントローラ１０２６、１０４６、１０６６と信号線１０２７、１０４７、１０６７を介して接続されている。パケットルータ１０３０、１０５０、１０７０はデータ転送の制御を行うデータコントローラ１０２６、１０４６、１０６６と信号線１０２９、１０４９、１０６９を介して接続されている。また、デバイスエミュレータ１０２４、１０４４、１０６４とパケットルータ１０３０、１０５０、１０７０は汎用バス直接結合型ネットワークスイッチ１０００内部で同じデバイス装置での接続を実現するデバイスエミュレータ間ネットワーク１０３１、１０５１、１０７１とパケットルータ間ネットワーク１０３３、１０５３、１０７３を有している。
【００２３】
１台目のノードであるノード#１ １０２０は汎用バス直接結合型ネットワークスイッチ１０００のポート#１ １０２２とポート#１ １０２１で接続し、ポート#１ １０２２はノード#１ １０２０がデバイスのように認識するデバイスエミュレータ#１ １０２４と信号線１０２３で接続している。通常PCIeデバイスは１つのノードにしか接続できないが、汎用バス直接結合型ネットワークスイッチ１０００に接続可能なノードの台数分のデバイスエミュレータ１０２４、１０４４、１０６４を汎用バス直接結合型ネットワークスイッチ１０００に内包させることで、一つの汎用バス直接結合型ネットワークスイッチ１０００に複数のノードのPCIeでの接続を実現させている。
【００２４】
デバイスエミュレータ#１ １０２４は、汎用バス直接結合型ネットワークスイッチ１０００内の全てのデバイスエミュレータ１０２４、１０４８、１０６８と完全結合しているデバイスエミュレータ間ネットワーク１０３１を使用して、デバイスエミュレータ間で制御文を伝送する。また、データ転送は信号線１０２５を通じて、データコントローラ#１ １０２６と行われる。
【００２５】
データコントローラ１０２６、１０４６、１０６６は、汎用バス直接結合型ネットワークスイッチ１０００とノード１０２０、１０４０、１０６０との間で、ノード１０２０、１０４０、１０６０に負荷をかけないデータ転送を実現するために、DMA転送機能を有する。また、汎用バス直接結合型ネットワークスイッチ１０００内でのデータ転送機能も有する。
【００２６】
データコントローラ#１ １０２６はデバイスエミュレータ#１ １０２４ないし、パケットルータ#１ １０３０とのデータ送受信の際に、信号線１０２７を使用して、ポートメモリ#１ １０２８へデータを読み出し・書き込みする。デバイスエミュレータ#１ １０２４ないし、パケットルータ#１ １０３０からデータコントローラ#１ １０２６へデータが送信されるたびに、送信されたデータをポートメモリ#１ １０２８に保存することで、汎用バス直接結合型ネットワークスイッチ１０００とノード１０２０、１０４０、１０６０との間と、汎用バス直接結合型ネットワークスイッチ１０００内のまとまった量のデータ転送を実現している。データコントローラ間におけるデータ転送の際、データコントローラ#１は信号線１０２９を使用して、パケットルータ#１ １０３０を介してデータコントローラ間のデータ通信を実現する。パケットルータ#１ １０３０は完全結合のパケットルータ間ネットワーク１０３３を保持し、パケットルータ間でデータを伝送する。また、デバイスエミュレータ間ネットワーク１０３１とパケットルータ間ネットワーク１０３３は、内部の通信を実現する信号線とは別に、外部へのポート１０３２、１０３４を使用して、複数の汎用バス直接結合型ネットワークスイッチ１０００の接続を実現する。なお、ノード#２ １０４０及びノード#N １０６０はノード#１ １０２０と同様の構成をとる。
【００２７】
図１の実施例について登場したデバイスエミュレータ１０２４、１０４４、１０６４、データコントローラ１０２６、１０４６、１０６６、ポートメモリ１０２８、１０４８、１０６８、パケットルータ１０３０、１０５０、１０７０の内部構成について詳しく図２〜５で示す。示す図はi番目のノード、ノード#iに属するそれぞれの詳細構成図とし、図２ではデバイスエミュレータ#i １１００、図３ではデータコントローラ#i １２００、図４ではポートメモリ#i １３００、図５ではパケットルータ#i １４００について説明する。
【００２８】
図２にて、デバイスエミュレータ#i １１００の内部構成を説明する。デバイスエミュレータ#i １１００は内部に、PCIe通信部１１１０、トランザクション管理部１１１１、デバイスエミュレータ間通信部１１１２、ネットワーク管理部１１１３を有する。
【００２９】
デバイスエミュレータ#i １１００はPCIeの電気的な信号処理を行うポート#i １１０２と信号線１１０３で接続され、ポート#i １１０２とi番目のノードのノード#i は、PCIe#i １１０１で接続される。信号線１１０３はデバイスエミュレータ#i １１００の中にあるPCIe通信部１１１０に接続されている。PCIe通信部１１１０は、PCIeの通信に必要な情報処理の機能を提供する。PCIe通信部１１１０とトランザクション管理部１１１１は、信号線１１１４で接続される。トランザクション管理部１１１１は、ノード間通信において、ノードからデータ転送リクエストを受けてから、ノード間セッションの構築、データ転送、ノード間セッションの解除、ノードへのデータ転送完了通知までをトランザクションとして管理する。ノード間のセッションの構築、解除において、デバイスエミュレータ間通信を行う。
【００３０】
この時、トランザクション管理部１１１１は、信号線１１１５で接続されたデバイスエミュレータ間通信部１１１２を経由して、デバイスエミュレータ間通信を実現する。デバイスエミュレータ間通信部１１１２は汎用バス直接結合型ネットワークスイッチ内部の全てのデバイスエミュレータとの直接通信と、外部との通信のための複数の信号線で構成され、この複数の信号線をデバイスエミュレータ間ネットワーク１１０５としている。この時、データ転送に必要なネットワークの物理情報及び論理情報を、トランザクション管理部１１１１は、信号線１１１６を通じてネットワーク管理部１１１３より取得する。トランザクションのうち、データ転送については、信号線１１０４を通じて図３のデータコントローラ#i １２００に処理を委託している。
【００３１】
図３にて、データコントローラ#i １２００の内部構成を説明する。データコントローラ#i １２００は、DMAコントローラ１２１０、メモリコントローラ１２１５を有する。DMAコントローラ１２１０は図２のデバイスエミュレータ#i １１００のトランザクション管理部１１１１と信号線１１０４で接続されている。トランザクション管理部１１１１がセッションの構築と解除の際、データ転送のための準備とその解除の知らせをDMAコントローラ１２１０はトランザクション管理部１１１１より知らされる。この時、DMAコントローラ１２１０はDMAコントローラ１２１０内のバッファ１２１１の未使用エリアから確保する。また、信号線１２１４を経由してメモリコントローラ１２１５にポートメモリ１３００でのメモリ確保を依頼する。メモリコントローラ１２１５は信号線１２０２、１２０３を経由してポートメモリ１３００と通信を行う。DMAコントローラ間データ転送の送信の際、メモリーコントローラ１２１５からデータを読み出し、バッファ１２１１に読み出し・書き込みを実行し、信号線１２０１を経由して、パケットルータ#i １４００にデータを送信する。
【００３２】
DMAコントローラ間データ転送の受信の際、信号線１２０１を経由して、パケットルータ#i １４００がデータを受信し、バッファ１２１１に書き込み・読み出しを実行し、メモリーコントローラ１２１５へデータの書き込みを実行する。データの読み出し・書き込みにおいては、データの先頭アドレスはアドレスレジスタ１２１２で管理し、データ処理の経過についてはインデックスレジスタ１２１３で管理している。
【００３３】
図４にて、ポートメモリ#i １３００の内部構成を説明する。ポートメモリ#i １３００は、サブメモリコントローラ#１ １３１０、サブメモリコントローラ#２ １３１１、ローカルメモリ#１インサイドメモリ１３１４、ローカルメモリ#２アウトサイドメモリ１３１５を有する。
【００３４】
サブメモリコントローラ１３１０、１３１１は信号線１２０２、１２０３を経由して、図３のデータコントローラ#i １２００の中のメモリコントローラ１２１５と通信している。サブメモリコントローラ１３１０、１３１１は信号線１３１２、１３１３を経由して、ローカルメモリ#１インサイドメモリ１３１４とローカルメモリ#２アウトサイドメモリ１３１５通信している。
【００３５】
ノード#i が送信元ノードの時、ノード#i からデータコントローラ#i へ送信されたデータは、データの一時保存のために、ローカルメモリ#１インサイドメモリ１３１４へ書き込まれる。その後、送信先ノードに転送するために、データは、データコントローラ#i １２００に読み出され、信号線１２０１を経由して、パケットルータ#i １４００に送信される。
【００３６】
ノード#i が送信先ノードの時、データコントローラ#i １２００が受信したデータは、データの一時保存のために、ローカルメモリ#２アウトサイドメモリ１３１５に書き込まれる。その後、送信先ノードであるノード#i に転送するために、データは、データコントローラ#i １２００に読み出され、信号線１１０４を経由して、デバイスエミュレータ#i １１００に送信される。
【００３７】
図５にて、パケットルータ#i １４００の内部構成を説明する。パケットルータ#i １４００は、データルーティング部１４１０を有する。
【００３８】
ノード#i が送信元ノードの時、データルーティング部１４１０は、信号線１２０１を経由して、データコントローラ#i １２００から送信されてきたデータをバッファ１４１１に書き込み・読み出しを実行し、送信先ノードにつながるデータルーティング部へパケットルータ間ネットワーク１４０１を通して送信する。 
ノード#i が送信先ノードの時、データルーティング部１４１０は、パケットルータ間ネットワーク１４０１を経由して、送信元ノードにつながるデータルーティング部から送信されてきたデータをバッファ１４１１に書き込み・読み出しを実行し、データコントローラ#i １２００へ信号線１２０１を通して送信する。データの読み出し・書き込みにおいては、データの先頭アドレスはアドレスレジスタ１４１２で管理し、データ処理の経過についてはインデックスレジスタ１４１３で管理している。
【００３９】
図６にて、２台のノードが接続された汎用バス直接結合型ネットワークスイッチ１０００を例に，ハードウェア、ソフトウェアの階層概念について説明する。
【００４０】
ノードは、汎用バス直接結合型ネットワークスイッチ１０００とそれぞれPCIe１５２５、１５４５で接続され、ハードウェア１５２０、１５４０を持ち、その中にメモリ１５２１、１５４１を含む。また、ハードウェア１５２０、１５４０上では、OS１５２２、１５４２が稼働している。各OS１５２２、１５４２は汎用バス直接結合型ネットワークスイッチ１０００を制御するためのドライバ１５２３、１５４３がインストールされている。各OS１５２２、１５４２上ではユーザプログラム１５２４、１５４４が稼働しており、ユーザプログラム１５２４、１５４４で通信要求があった場合、その要求はドライバ１５２３、１５４３に送信される。ドライバ１５２３、１５４３は要求内容に従い、PCIe１５２５、１５４５を経由して、汎用バス直接結合型ネットワークスイッチ１０００と通信を行う。ドライバ１５２３、１５４３は、OS１５２２、１５４２及びユーザプログラム１５２４、１５４４に対して、通常のネットワークカードのドライバのように振る舞い、OS１５２２、１５４２及びユーザプログラム１５２４、１５４４にドライバ１５２３、１５４３のインストール以外に特別なソフトウェアを必要としない構成となっている。
【００４１】
図７では、本発明の汎用バス直接結合型ネットワークスイッチの実装の一例を示す。
【００４２】
図１-６にて汎用バス直接結合型ネットワークスイッチ１０００とした本発明の汎用バス直接結合型ネットワークスイッチを図７では、スイッチ#１ １６０１とし、ブレードサーバのバックプレーンボード１６００上に設置したものとする。
【００４３】
バックプレーンボード１６００上にはノード#１、２、３、N １６２０、１６３０、１６４０、１６５０があり、PCIeソケット#１、２、３、N １６２１、１６３１、１６４１、１６５１とPCIe信号線束#１、２、３、N １６２２、１６３２、１６４２、１６５２を経由して、スイッチ#１１６０１と接続されている。また、スイッチ間信号線束１６０２はスイッチの拡張でネットワークの拡張のためのものである。
【００４４】
図８-１０では、ノード間通信における、セッション構築プロセス、セッション解除プロセス、データ転送プロセスを図１と図６を元に説明する。汎用バス直接結合型ネットワークスイッチ１０００の構成については図１を元とし、使用するノードはノード#１、#２ １０２０、１０４０とし、内部構成を図６を元とする。説明において、ノード#１を送信ノード、ノード#２は受信ノードとし、次の部位を使用する。ノード#１ドライバ２０００、ノード#１メモリ２００１、ポート#１ ２００２、ポート#１デバイスエミュレータ#１ ２００３、ポート#１ポートメモリ#１ ２００４、ポート#１データコントローラ#１ ２００５、ノード#２ドライバ２０１０、ノード#２メモリ２０１１、ポート#２ ２０１２、ポート#２デバイスエミュレータ#２ ２０１３、ポート#２ポートメモリ#２ ２００１４、ポート#２データコントローラ#２ ２０１５。また、
図８-１０のノード#１ドライバ２０００、ノード#２ドライバ２０１０は図６においてドライバ１５２３、１５４３を意味する。図８-１０のノード#１メモリ２００１、ノード#２メモリ２０１１は図６におけるメモリ１５２１、１５４１を意味する。図８-１０のポート#１ ２００２、ポート#２ ２０１２は図１におけるポート１０２２、１０４２を意味する。図８-１０のポート#１デバイスエミュレータ２００３、ポート#２デバイスエミュレータ２０１３は図１におけるメモリ１０２４、１０４４を意味する。図８-１０のポート#１ポートメモリ#１ ２００４、ポート#２ポートメモリ#１ ２００１４は図１におけるポートメモリ１０２８、１０４８を意味する。図８-１０のポート#１データコントローラ#１ ２００５、ポート#２データコントローラ#２ ２０１５は図１におけるメモリ１０２６、１０４６を意味する。
【００４５】
図８では、汎用バス直接結合型ネットワークスイッチ１０００を介してデータ転送を実行する前のセッション構築のプロセスについて説明する。
【００４６】
ノード#１からノード#２へデータ転送を実行する際、セッション構築を実行する。その時、ノード#１、#２において処理を管理するのはノード#１、２ドライバ２０００、２０１０となる。まず、ノード#１ドライバ２０００はポート#１ ２００２を経由してポート#１デバイスエミュレータ#１ ２００３へセッション接続要求２０２０を送信する。セッション接続要求には、送信元データのアドレス、データサイズ、送信先宛先、送信先など、データ転送において必要な情報が含まれる。
【００４７】
セッション接続要求２０２０を受信したポート#１デバイスエミュレータ#１ ２００３は、セッション構築、データ転送、セッション解除の一連の作業を送信ノードから見た１つのトランザクションとして管理する。トランザクションの情報には、送信ノード、受信ノード、データサイズ、読み出し元アドレス、書き込み先アドレス、データ転送経路情報、バッファなどの情報を管理する。
【００４８】
データ転送において、データ転送経路や中継部位でのバッファが必要となる。送信ノード側で、これらの資源の確保のため、ポート#１デバイスエミュレータ#１ ２００３はポート#１データコントローラ#１ ２００５へデータ転送準備要求２０２１を送信する。データ転送準備要求２０２１を受信したポート#１データコントローラ#１ ２００５は、データ転送に必要な経路や中継部位でのバッファを確保し、データ転送準備完了通知とデータ転送の際に必要な情報が記載されたデータ転送準備情報２０２２を送信する。その後、ポート#１デバイスエミュレータ#１ ２００３は、ノード#１ドライバ２０００から受信したセッション接続情報２０２０とポート#１データコントローラ#１ ２００５から受信したデータ転送準備情報２０２２をデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してポート#２デバイスエミュレータ#２ ２０１３へ送信２０２３する。セッション接続要求とポート#１データコントローラ#１ ２００５からのデータ転送準備情報２０２３を受信したポート#２デバイスエミュレータ#２ ２０１３は、ポート#１デバイスエミュレータ#１ ２００３と同様に、セッション構築、データ転送、セッション解除の一連の作業を受信ノードから見た１つのトランザクションとして管理する。
【００４９】
受信ノード側で、これらの資源の確保のため、ポート#２デバイスエミュレータ#２ ２０１３はポート#２データコントローラ#２ ２０１５へデータ転送準備要求とポート#１データコントローラ#１ ２００５からのデータ転送準備情報を送信２０２４する。データ転送準備要求とポート#１データコントローラ#１ ２００５からのデータ転送準備情報２０２４を受信したポート#２データコントローラ#２ ２０１５は、データ転送に必要な経路や中継部位でのバッファを確保し、ポート#１データコントローラ#１ ２００５からのデータ転送準備情報を元に、データ転送元の経路を把握する。その後、データ転送準備完了通知とデータ転送の際に必要な情報が記載されたデータ転送準備情報２０２５をポート#２デバイスエミュレータ#２ ２０１３へ送信する。その後、セッション接続要求とポート#２データコントローラ#２ ２０１５からのデータ転送準備情報２０２５を受信したポート#２デバイスエミュレータ#２ ２０１３は、ポート#２ ２０１２を経由してノード#２ドライバ２０１０へセッション接続要求２０２６を送信する。
【００５０】
以上のプロセスにより、ノード#１からノード#２へセッション接続要求の送信を完了とする。この後、ノード#２ドライバ２０１０によりノード#２からノード#１へのセッション接続許可通知を送信するプロセスに入る。まず、ノード#２ドライバ２０１０はポート#２ ２０１２を経由してポート#２デバイスエミュレータ#２ ２０１３へセッション接続許可通知２０２７を送信する。ノード#２ドライバ２０１０からセッション接続許可通知２０２７を受信したポート#２デバイスエミュレータ#２ ２０１３はノード#２ドライバ２０１０からのセッション接続許可通知２０２７とポート#２データコントローラ#２ ２０１５からのデータ転送準備情報２０２５をデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してポート#１デバイスエミュレータ#１２００３へ送信２０２８する。セッション接続許可通知２０２７とポート#２データコントローラ#２ ２０１５からのデータ転送準備情報２０２５を受信２０２８したポート#１デバイスエミュレータ#１２００３は、ポート#２データコントローラ#２ ２０１５からのデータ転送準備情報２０２５をポート#１データコントローラ#１ ２００５へ送信２０２９する。ポート#２データコントローラ#２ ２０１５からのデータ転送準備情報２０２５を受信したポート#１データコントローラ#１ ２００５はポート#２データコントローラ#２ ２０１５からのデータ転送準備情報２０２５を元に、データ転送先の経路を把握する。その後、ポート#１デバイスエミュレータ#１ ２００３はポート#１ ２００２を経由して、ノード#１ドライバ２０００へセッション接続許可通知２０２７を送信２０３０する。
以上のプロセスを経て、ノード#１ドライバ２０００がセッション接続許可通知２０３０を受信し、ノード#１、#２間でのセッション構築を完了とする。
【００５１】
図９では、汎用バス直接結合型ネットワークスイッチ１０００を介してデータ転送を実行した後のセッション解除のプロセスについて説明する。ノード#１、#２間でデータ転送が終了した後、ノード#１ドライバ２０１０とノード#２ドライバ２０１０の間のセッションを解除する。
【００５２】
まず最初にポート#１デバイスエミュレータ#１ ２００３から、ポート#２デバイスエミュレータ#２ ２０１３及び、ポート#２ ２０１２を経由して、セッション解除要求２１２０を送信する。
【００５３】
セッション解除要求２１２０を受信したノード#２ドライバ２０１０は、ポート#２ ２０１２を経由して、セッション解除通知２１２１をポート#２デバイスエミュレータ#２ ２０１３へ送信する。
【００５４】
セッション解除通知２１２１を受信したポート#２デバイスエミュレータ#２ ２０１３は、データ転送において、ポート#２データコントローラ#２ ２０１５で確保したデータ転送経路や中継部位でのバッファなどの資源を開放するためにポート#２データコントローラ#２ ２０１５へデータ転送終了処理要求２１２２を送信し、これら資源の解放後、ポート#２デバイスエミュレータ#２ ２０１３はポート#２データコントローラ#２ ２０１５からのデータ転送終了処理開放通知２１２３を受信する。
【００５５】
その後、ポート#２デバイスエミュレータ#２ ２０１３はデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してポート#１デバイスエミュレータ#１ ２００３へセッション解除通知２１２４を送信する。
【００５６】
ポート#２デバイスエミュレータ#２ ２０１３からセッション解除通知を受信したポート#１デバイスエミュレータ#１ ２００３はデータ転送において、ポート#１データコントローラ#１ ２００５で確保したデータ転送経路や中継部位でのバッファなどの資源を開放するためにポート#１データコントローラ#１ ２００５へデータ転送終了処理要求２１２５を送信し、これら資源の解放後、ポート#１デバイスエミュレータ#１ ２００３はポート#１データコントローラ#１ ２００５からのデータ転送終了処理開放通知２１２６を受信する。
【００５７】
最後に、ポート#１デバイスエミュレータ#１ ２００３は、ポート#１ ２００２を経由してノード#１ドライバ２０００へセッション解除通知２１２７を送信し、セッション解除プロセスを終了する。
【００５８】
図１０では、汎用バス直接結合型ネットワークスイッチ１０００を介してのデータ転送プロセスについて説明する。
【００５９】
ノード#１、#２間でセッション構築の成立後、データ転送プロセスを開始する。セッション構築の際、送信元ノード、データの読み出し先のアドレス、サイズ、送信先ノード、データの書き込み先のアドレスがポート#１デバイスエミュレータ#１ ２００３のトランザクションで管理される。そのため、ノード#１ドライバ２０００は、ポート#１ ２００２を経由して、ポート#１デバイスエミュレータ#１ ２００３にデータ転送トランザクション開始要求２２２０を送信し、ポート#１デバイスエミュレータ１ ２００３は、DMAコントローラを内蔵するポート#１データコントローラ#１ ２００５にデータ転送開始要求２２２１を送信する。データ転送開始要求２２２１を受信したポート#１データコントローラ#１ ２００５はノード#１メモリ２００１に対しDMA Read２２２２を要求し、ノード#１メモリ２００１からの指定区間のデータ転送２２２３を受信する。
【００６０】
その後、ポート#１データコントローラ#１ ２００５は、受信したデータをポート#１ポートメモリ#１ ２００４へ書き込み２２２４を実行し、ポート#１データコントローラ#１上のバッファからデータ消えるなどした時、必要なら、ポート#１ポートメモリ#１２００４から読み出し２２２５を実行する。
【００６１】
その後、ポート#１ポートメモリ#１ ２００４からポート#２ポートメモリ#２ ２０１４へパケットルータ#１、#２ １０３０、１０５０を経由しデータを転送２２２６する。
【００６２】
その後、ポート#２データコントローラ#２ ２０１５は、ポート#２ポートメモリ#２に受信したデータの書き込み２２２７を実行し、ポート#２データコントローラ#２上のバッファからデータ消えるなどした時、必要なら、ポート#２ポートメモリ#２ ２０１４から読み出し２２２８を実行する。
【００６３】
その後、データを受信したポート#２データコントローラ#２ ２０１５はノード#２メモリ２０１１に対しデータ転送(DMA Write)２２２９を実行し、ノード#２メモリ２０１１へ指定区間のデータ転送後、ポート#２データコントローラ#２ ２０１５からポート#２データコントローラ#１ ２００５へ指定区間のデータ転送が完了したことの通知２２３０を送信する。データ転送において、データ転送が完了するまで、処理２２２２から２２３０を繰り返す。
【００６４】
データ転送の終了後、ポート#１データコントローラ#１ ２００５はトランザクションを管理しているポート#１デバイスエミュレータ#１ ２００３、ポート#１ ２００２を経由してノード#１ドライバ２０００へデータ転送終了通知２２３２を送信する。その後、ポート#１デバイスエミュレータ#１ ２００３はノード#１ドライバ２０００とノード#２ドライバ２０１０へデータ転送トランザクション終了通知２２３３、２２３４を送信し、データ転送プロセスが終了となる。
【００６５】
図１１では、図３、４を元にデータコントローラ１２００がポートメモリ１３００に対して読み出し・書き込みを実行するプロセスについて説明する。
【００６６】
データコントローラ１２００は、データ受信後、すぐにデータ送信できるとは限らず、データコントローラ１２００に内蔵しているDMAコントローラ１２１０が所持するバッファ１２１１も有限であるため、データ受信時に、必ずポートメモリ１３００にデータの書き込みを実行し、データ送信時にバッファ上からデータが消えている場合，ポートメモリ１３００よりデータの読み出しをする。データをデバイスエミュレータ１１００から受信し、パケットルータ１４００に送信する際には、ポートメモリ１３００に内蔵しているインサイドメモリ１３１４にデータを書き込み・読み出しを実行し、データをパケットルータ１４００から受信し、デバイスエミュレータ１１００に送信する際には、ポートメモリ１３００に内蔵しているアウトサイドメモリ１３１５にデータを書き込み・読み出しをする。
【００６７】
ポートメモリの書き込みにおいて、ポート#１DMAコントローラ#１ ２３００がメモリの書き込みの許可を問い合わせる送信許可要求を外部より受信する。
【００６８】
受信後、ポート#１DMAコントローラ#１ ２３００はポート#１メモリコントローラ#１ ２３０１を経由してポート#１サブメモリコントローラ#１ ２３０２に送信許可要求２３２０を送信し、応答として、ポート#１サブメモリコントローラ#１ ２３０２から送信許可２３２１を受信する。
【００６９】
その後、ポート#１DMAコントローラ#１ ２３００は、ポート#１メモリコントローラ#１ ２３０１とポート#１サブメモリコントローラ#１ ２３０２を経由し、ポート#１ローカルメモリ#１ ２３０３へデータを送信、書き込みを実行２３２２し、応答として、受信完了通知２３２３を受信する。
【００７０】
ポートメモリの読み出しにおいて、ポート#１DMAコントローラ#１ ２３００がメモリへの読み出し要求を行うデータ送信要求を外部より受信する。
【００７１】
受信後、ポート#１DMAコントローラ#１ ２３００はポート#１メインコントローラ#１ ２３０１とポート#１サブメモリコントローラ#２ ２３０４を経由して、ポート#１ローカルメモリ#２ ２３０５へ先頭アドレスと指定サイズを含んだデータ送信要求２３４０を送信し、応答として、ポート#１ローカルメモリ#２ ２３０５からのデータ送信２３４１を受信する。
【００７２】
図８-１０で説明したノード間通信におけるセッション構築プロセス、セッション解除プロセス、データ転送プロセスをフローチャートで図１２-１４に示す。
【００７３】
図１２-１４はブロックを左右２列に配置しており、ノード#１側、#２側を意味している。図８-１０と同様にノード#１を送信ノード、ノード#２は受信ノードとする。
【００７４】
図１２でセッション構築プロセスのフローチャートを説明する。ノード間データ転送において、最初にセッション構築を行う。ステップ２４００をセッション構築プロセスの開始とし、ステップ２４０１に遷移する。
【００７５】
ステップ２４０１では、ノード#１ドライバ１５２３、２０００からポート#１デバイスエミュレータ#１ １０２４、２００３にセッション接続要求を送信２０２０する。
【００７６】
セッション接続要求には、送信ノードであるノード#１ １０２０のメモリ１５２１の中にあるデータを受信ノードであるノード#２ １０４０のメモリ１５４１に複製するために、送信ノード内のデータの先頭アドレス、サイズ、受信ノード宛先が含まれる。
【００７７】
ポート#１デバイスエミュレータ#１ １０２４、２００３内で、セッション接続要求は、PCIe通信部１１１０を経由して、トランザクション管理部１１１１に送信される。トランザクション管理部１１１１は、セッション接続要求の中にある宛先情報を元に、汎用バス直接結合型ネットワークスイッチ１０００内での経路情報をネットワーク管理部１１１３より経路情報を取得する。次にステップ２４０２に遷移する。ステップ２４０２では、ポート#１デバイスエミュレータ#１ １０２４、１１００のトランザクション管理部１１１１は、ポート#１データコントローラ#１ １０２６、１２００から信号２０２１、２０２２を以って、データ転送準備情報を受信する。これにより、汎用バス直接結合型ネットワークスイッチ１０００内の送信ノード側で使用する経路やバッファを確保完了となる。次にステップ２４０３に遷移する。
【００７８】
ステップ２４０３では、ポート#１デバイスエミュレータ#１ １０２４、１１００からポート#２デバイスエミュレータ#２ １０４４、１１００へデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してセッション接続要求とポート#１データコントローラ#１ １０２６、１２００からのデータ転送準備情報を送信する。その後、ポート#１デバイスエミュレータ#１ １０２４、１１００は、ポート#２デバイスエミュレータ#２ １０４４、１１００からのセッション接続許可の受信を待機するステップ２４０４に遷移する。
【００７９】
次に、ステップ２４０３にてポート#１デバイスエミュレータ#１ １０２４、１１００がポート#２デバイスエミュレータ#２ １０４４、１１００へセッション接続要求とポート#１データコントローラ#１ １０２６、１２００からのデータ転送準備情報を送信した後のポート#２デバイスエミュレータ#２の処理ステップ２４０５について説明する。
【００８０】
ステップ２４０５では、ポート#２デバイスエミュレータ#２ １０４４、１１００はポート#１デバイスエミュレータ#１ １０２４、１１００からデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してセッション接続要求とポート#１データコントローラ#１ １０２６、１２００からのデータ転送準備情報を受信する。
【００８１】
その後、ステップ２４０６で、ポート#２デバイスエミュレータ#２ １０４４、１１００のトランザクション管理部１１１１は、ポート#２データコントローラ#２ １０４６、１２００から信号２０２４、２０２５を以って、データ転送準備情報を取得する。これにより、汎用バス直接結合型ネットワークスイッチ１０００内の送信ノード側で使用する経路やバッファを確保完了となる。この時、取得したポート#１データコントローラ#１ １０２６、１２００からのデータ転送準備情報を利用して，データ転送に使用する経路の設定を行い，次にステップ２４０７に遷移する。
【００８２】
ステップ２４０７では、ポート＃２デバイスエミュレータ#２ １０４４、２０１３からノード#２ドライバ１５４３、２０１０へセッション接続要求を送信２０２６する。次に、ステップ２４０８に遷移する。
【００８３】
ステップ２４０８では、セッション接続要求を受信したノード#２ドライバ１５４３、２０１０は、ポート#２デバイスエミュレータ#２ １０４４、２０１３にセッション接続許可通知を送信２０２７する。
【００８４】
セッション接続要求には、送信ノードであるノード#１ １０２０のメモリ１５２１の中にあるデータを受信ノードであるノード#２ １０４０のメモリ１５２１に複製するための受信ノード内での書き込みエリアの先頭アドレスが含まれる。
【００８５】
ポート#２デバイスエミュレータ#２ １０４４、２０１３内で、セッション接続要求は、PCIe通信部１１１０を経由して、トランザクション管理部１１１１に送信される。トランザクション管理部１１１１は、セッション接続要求の中にある宛先情報を元に、汎用バス直接結合型ネットワークスイッチ１０００内での経路情報をネットワーク管理部１１１３より経路情報を取得する。次にステップ２４０９に遷移する。
【００８６】
ステップ２４０９では、ポート#２デバイスエミュレータ#２ １０４４、１１００からポート#１デバイスエミュレータ#１ １０２４、１１００へデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してセッション接続許可通知とポート#２データコントローラ#２ １０４６、１２００からのデータ転送準備情報を送信する。
【００８７】
次に、ステップ２４０９にてポート#２デバイスエミュレータ#２ １０４４、１１００がポート#１デバイスエミュレータ#１ １０２４、１１００へセッション接続許可通知とポート#２データコントローラ#２ １０４６、１２００からのデータ転送準備情報を送信した後のポート#１デバイスエミュレータ#１の処理ステップ２４１０について説明する。
【００８８】
ステップ２４１０では、ポート#１デバイスエミュレータ#１ １０２４、１１００はポート#２デバイスエミュレータ#２ １０４４、１１００からデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してセッション接続許可通知とポート#２データコントローラ#２ １０４６、１２００からのデータ転送準備情報を受信２０２８する。
【００８９】
その後、ステップ２４１１で、ポート#１デバイスエミュレータ#１ １０２４、１１００のトランザクション管理部１１１１は、ポート#１データコントローラ#１ １０２６、１２００へ信号２０２９を以って、ポート#２データコントローラ#２ １０４６、１２００からのデータ転送準備情報を送信する。これにより、取得したポート#２データコントローラ#２ １０４６、１２００からのデータ転送準備情報を利用して，データ転送に使用する経路の設定を行い，次にステップ２４１２に遷移する。
【００９０】
ステップ２４１２において、汎用バス直接結合型ネットワークスイッチ１０００内部で、データ転送のために必要な経路やバッファが確保されており、ポート#１デバイスエミュレータ#１ １０２４、１１００からノード#１ドライバ１５２３、２０００へセッション接続許可通知２０３０を送信する。
【００９１】
最後にステップ２４１３において以上の処理を確認し、セッション構築プロセスの終了となる。
【００９２】
図１３でセッション解除プロセスのフローチャートを説明する。ノード間データ転送において、最後にセッション解除を行う。ステップ２５００をセッション解除プロセスの開始とし、ステップ２５０１に遷移する。
【００９３】
ステップ２５０１では、ポート#１デバイスエミュレータ#１ １０２４、２００３からポート#２デバイスエミュレータ#２ １０４４、２０１３にデバイスエミュレータ間ネットワークを経由して、セッション解除要求を送信２１２０する。
【００９４】
セッションを区別する情報はポート#１デバイスエミュレータ#１ １０２４、２００３内のトランザクション管理部１１１１が所持しているため、セッション解除要求はトランザクション管理部１１１１から送信する。
【００９５】
その後、ポート#１デバイスエミュレータ#１ １０２４、１１００は、ポート#２デバイスエミュレータ#２ １０４４、１１００からのセッション解除通知の受信を待機するステップ２５０２に遷移する。
【００９６】
次に、ステップ２５０１にてポート#１デバイスエミュレータ#１ １０２４、１１００がポート#２デバイスエミュレータ#２ １０４４、１１００へセッション接続要求を送信した後のポート#２デバイスエミュレータ#２の処理ステップ２５０３について説明する。ステップ２５０３では、ポート#２デバイスエミュレータ#２ １０４４、１１００はポート#１デバイスエミュレータ#１ １０２４、１１００からデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してセッション解除要求を受信２１２０する。
【００９７】
その後、ステップ２５０４では、ポート＃２デバイスエミュレータ#２ １０４４、２０１３からノード#２ドライバ１５４３、２０１０へセッション解除要求を送信２１２０する。次に、ステップ２５０５に遷移する。
【００９８】
セッション解除要求を受信したノード#２ドライバ１５４３、２０１０は、ポート#２デバイスエミュレータ#２ １０４４、２０１３にセッション解除通知を送信２１２１する。ポート#２デバイスエミュレータ#２ １０４４、２０１３内で、セッション解除通知は、PCIe通信部１１１０を経由して、トランザクション管理部１１１１に送信される。
【００９９】
その後、ステップ２５０６で、ポート#２デバイスエミュレータ#２ １０４４、１１００のトランザクション管理部１１１１は、ポート#２データコントローラ#２ １０４６、１２００から信号２１２２、２１２３を以って、データ転送終了処理完了通知を受信する。これにより、汎用バス直接結合型ネットワークスイッチ１０００内の受信ノード側で使用した経路やバッファが解除完了となる。次にステップ２５０７に遷移する。
【０１００】
ステップ２５０７では、ポート#２デバイスエミュレータ#２ １０４４、１１００からポート#１デバイスエミュレータ#１ １０２４、１１００へデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してセッション解除通知を送信２１２４する。
【０１０１】
次に、ステップ２５０７にてポート#２デバイスエミュレータ#２ １０４４、１１００がポート#１デバイスエミュレータ#１ １０２４、１１００へセッション接続許可通知を送信した後のポート#１デバイスエミュレータ#１の処理ステップ２５０８について説明する。
【０１０２】
ステップ２５０８では、ポート#１デバイスエミュレータ#１ １０２４、１１００はポート#２デバイスエミュレータ#２ １０４４、１１００からデバイスエミュレータ間ネットワーク１０３１、１０５１を経由してセッション解除通知を受信する。
【０１０３】
その後、ステップ２５０９で、ポート#１デバイスエミュレータ#１ １０２４、１１００のトランザクション管理部１１１１は、ポート#１データコントローラ#１ １０２６、１２００から信号２１２５、２１２６を以って、データ転送終了処理完了通知を受信する。これにより、汎用バス直接結合型ネットワークスイッチ１０００内の送信ノード側で使用した経路やバッファが解除完了となる。次にステップ２５１０に遷移する。
【０１０４】
ステップ２５１０において、最後に、ポート#１デバイスエミュレータ#１ １０２４、１１００からノード#１ドライバ１５２３、２０００へセッション接続許可通知２０３０を送信する。
【０１０５】
ステップ２５１１において以上の処理を確認し、セッション解除プロセスの終了となる。
【０１０６】
図１４aと図１４bと図１４cでデータ転送プロセスのフローチャートを説明する。ステップ２６００をデータ転送プロセスを開始とし、ステップ２６０１に遷移し、ノード#１ドライバにてセッション接続が完了していることを確認する。次にステップ２６０２に遷移する。
【０１０７】
ステップ２６０２にてノード#１ドライバ１５２３からポート#１デバイスエミュレータ#１ １０２４、１１００へデータ転送トランザクション開始要求を送信２２２０する。
【０１０８】
次にステップ２６０３にてポート#１デバイスエミュレータ#１ １０２４、１１００からポート#１データコントローラ#１ １０２６、１２００へデータ転送開始要求を送信２２２１し、ステップ２６０４へ遷移する。
【０１０９】
ステップ２６０４では、DMAで読み出し・書き込みできる分轄された区間にあるデータを転送するためポート#１データコントローラ#１ １０２６、１２００からノード#１メモリ１５２１へDMA Readを送信２２２２し、データを受信２２２３する。
【０１１０】
ステップ２６０５では、DMA Readで要求したデータが取得しているかを確認し、未完了であればステップ２６０４に遷移し、完了であればステップ２６０６に遷移する。
【０１１１】
ステップ２６０６では、信号２２２４で、ポート#１ポートメモリ#１ １０２８、１３００にデータを保存する。次にステップ２６０７にて、ポート#１データコントローラ#１ １０２６、１２００からポート#２データコントローラ#２ １０４６、１２００へポート#１パケットルータ#１ １０３０、１４００、ポート#２パケットルータ#２ １０５０、１４００、パケットルータ間ネットワーク１０３３、１０５３を経由してデータ送信２２２６を開始する。
【０１１２】
ただし、ステップ２６０８にてポート#１データコントローラ#１ １０２６、１２００がポート#１パケットルータ#１ １０３０、１４００よりデータの転送一時停止割込みを受信しているかを確認し、Yesならステップ２６０９へ遷移し、Noならステップ２６１３へ遷移し、ポート#１データコントローラ#１ １０２６、１２００からポート#２データコントローラ#２ １０４６、１２００へのデータ送信を完了とする。
【０１１３】
ステップ２６０９にてポート#１データコントローラ#１ １０２６、１２００がポート#２データコントローラ#２ １０４６、１２００からのデータ転送一時停止割込みを受信したならステップ２６１０にてポート#１データコントローラ#１ １０２６、１２００からポート#２データコントローラ#２ １０４６、１２００へのデータ送信を一時停止する。その後、ステップ２６１１にてポート#１データコントローラ#１ １０２６、１２００がポート#２データコントローラ#２ １０４６、１２００からの転送再開許可通知を受信する。ただし、ステップ２６１２にてポート#１データコントローラ#１ １０２６、１２００のバッファからデータが消えている場合、ポート#１ポートメモリ#１ １０２８、１３００からデータの読み出し２２２５を実行し、ステップ２６０７へ戻る。
【０１１４】
ポート#１データコントローラ#１ １０２６、１２００にてデータ送信を完了した場合、ステップ２６１３へ戻る。
【０１１５】
次に、ステップ２６０７にてポート#１データコントローラ#１ １０２６、１２００がポート#２データコントローラ#２ １０４６、１２００へデータ送信をし始めた時のポート#２データコントローラ#２ １０４６、１２００について説明する。
【０１１６】
ステップ２６１４にてポート#２データコントローラ#２ １０４６、１２００がポート#１データコントローラ#１ １０２６、１２００からのデータ受信２２２６を開始する。ただし、ステップ２６１５にてポート#２データコントローラ#２ １０４６、１２００がポート#２パケットルータ#２ １０５０、１４００よりデータの転送一時停止割込みを送信するかを決定し、Yesならステップ２６１６へ遷移し、Noならステップ２６１９へ遷移し、ポート#２データコントローラ#２ １０４６、１２００のポート#１データコントローラ#１ １０２６、１２００からのデータ受信を継続とする。
【０１１７】
ステップ２６１６にてポート#２データコントローラ#２ １０４６、１２００がポート#１データコントローラ#１ １０２６、１２００へデータ転送一時停止割込みを送信したならステップ２６１７にてポート#２データコントローラ#２ １０４６、１２００はポート#１データコントローラ#１ １０２６、１２００からのデータ受信を一時停止する。
【０１１８】
その後、ステップ２６１８にてポート#２データコントローラ#２ １０４６、１２００がポート#１データコントローラ#１ １０２６、１２００へ転送再開許可通知を送信し、ステップ２６１４へ戻る。ステップ２６１５にて、転送一時停止割込を送信しなかった場合、ステップ２６１９にてポート#２データコントローラ#２ １０４６、１２００はポート#１データコントローラ#１ １０２６、１２００からのデータ受信を継続する。
【０１１９】
その後、ステップ２６２０にて、受信したデータのポート#２ポートメモリ#２ １０４８、１３００への書き込み２２２７を開始する。
【０１２０】
ステップ２６２２にて、ポート#２データコントローラ#２ １０４６、１２００がノード#２メモリ１５４１へデータをDMA Write出来る状況かを判定し、Yesならステップ２６２４、Noならステップ２６２３へ遷移する。
【０１２１】
ステップ２６２３では、動作を一時停止し、その後、再び、ステップ２６２２へ戻る。ステップ２６２２でポート#２データコントローラ#２ １０４６、１２００がノード#２メモリ１５４１へデータをDMA Write出来る状況かの判定で、Yesならステップ２６２４に遷移し、ポート#２ポートメモリ#２ １０４８、１３００からデータの読み出し２２２８を実行する。
【０１２２】
その後、ステップ２６２５にてポート#２データコントローラ#２ １０４６、１２００からノード#２メモリ１５４１への分轄された区間におけるデータのDMA Write完了し、データ転送の終了通知をポート#１データコントローラ#１ １０２６、１２００へ送信２２３０する
次に、ステップ２６２５にてポート#２データコントローラ#２ １０４６、１２００がポート#１データコントローラ#１ １０２６、１２００へデータ転送終了通知を送信２２３０した後のポート#１データコントローラ#１ １０２６、１２００について説明する。
【０１２３】
まず、ステップ２６２６にて、ポート#１データコントローラ#１ １０２６、１２００がポート#２データコントローラ#２ １０４６、１２００からのデータ転送終了通知を受信２２３０し、ステップ２６２７にて、全データの転送が終了しているかを判定し、Noならステップ２６０４に戻り、動作を繰り返し、Yesならステップ２６２８に遷移する。
【０１２４】
ステップ２６２８では、ポート#１データコントローラ#１ １０２６、１２００からポート#２データコントローラ#２ １０４６、１２００へデータ転送終了通知を送信２２３１する
ステップ２６２９では、ポート#１データコントローラ#１ １０２６、１２００からポート#１デバイスエミュレータ#１ １０２４、１１００を経由して、ノード#１ドライバ１５２３へデータ転送終了通知を送信２２３２する。
【０１２５】
ステップ２６３０ではポート#１デバイスエミュレータ#１ １０２４、１１００からポート#２デバイスエミュレータ#２ １０４４、１１００へデバイスエミュレータ間ネットワーク１０３１、１０５１、１１０５を経由してデータ転送トランザクション終了通知２２３４を送信し、ステップ２６３１にて、ポート#１デバイスエミュレータ#１ １０２４、１１００からノード#１ドライバ１５２３へ同様に、データ転送トランザクション終了通知を送信２２３３する。
【０１２６】
次に、ステップ２６２８にてポート#１データコントローラ#１ １０２６、１２００がポート#２データコントローラ#２ １０４６、１２００へデータ転送終了通知を送信２２３１した後のポート#２データコントローラ#２ １０４６、１２００について説明する。
【０１２７】
ステップ２６３２では、ポート#２データコントローラ#２ １０４６、１２００はポート#１データコントローラ#１ １０２６、１２００からデータ転送終了通知を受信２２３１する。
【０１２８】
ステップ２６３３では、ポート#２データコントローラ#１ １０４６、１２００からポート#２デバイスエミュレータ#１ １０４４、１１００を経由して、ノード#２ドライバ１５４３へデータ転送終了通知を送信２２３１する。
【０１２９】
ステップ２６３４ではポート#２デバイスエミュレータ#２ １０４４、１１００はポート#１デバイスエミュレータ#１ １０２４、１１００からデバイスエミュレータ間ネットワーク１０３１、１０５１、１１０５を経由してデータ転送トランザクション終了通知を受信２２３４し、ステップ２６３５にて、ポート#２デバイスエミュレータ#１ １０４４、１１００からノード#２ドライバ１５４３へ同様に、データ転送トランザクション終了通知を送信２２３４する。最後にステップ２６３２にてこれら全ての処理を持ってデータ転送終了となる。
【０１３０】
図１５で、汎用バス直接結合型ネットワークスイッチ１０００を介して、ノード１０２０、１０４、１０６０が通信する際に使用するプロトコルの構成と、そのプロトコルが、汎用バス直接結合型ネットワークスイッチ１０００内部のデバイスエミュレータ１０２４、１０４４、１０６４、データコントローラ１０２６、 １０４６、 １０６６、ポートメモリ１０２８、１０４８、１０６８、パケットルータ１０３０、１０５０、１０７０などの各部位にてどのように使用されるかについて説明する。
【０１３１】
汎用バス直接結合型ネットワークスイッチ１０００とノード１０２０、１０４０、１０６０の経路はPCIeで接続されているため、データ転送で使用されるパケットの構造はPCIeのプロトコルに依存し、パケットはPCIeパケットエリア１７１０と非PCIeパケットエリア１７２０の２つに分けられる。この時、PCIeの経路上では、PCIeパケットエリア１７１０の情報だけを参照し、汎用バス直接結合型ネットワークスイッチ１０００とノード１０２０、１０４０、１０６０の間のデータ転送を実現する。この時、非PCIeパケットエリアはPCIeバス上でのデータ転送におけるパケットの振る舞いに影響を及ぼさない 。
【０１３２】
汎用バス直接結合型ネットワークスイッチはポート１０２２、１０４２、１０６２で PCIeのプロトコルに従う電気信号を送受信し、論理信号に変換したパケットをデバイスエミュレータ１０２４、１０４４、１０６４と送受信する。その後、デバイスエミュレータ１０２４、１０４４、１０６４内のPCIe通信部１１１０にてPCIeのプロトコルに従う信号の処理を行い、PCIeパケットエリア１７１０を削除した非PCIeパケットエリアのみでトランザクション管理１１１１とデータ転送を行う。この後のデバイスエミュレータ１０２４、１０４４、１０６４、データコントローラ１０２６、１０４６、１０６６、ポートメモリ１０２８、１０４８、１０６８、パケットルータ１０３０、１０５０、１０７０の間では、非PCIパケットエリアを参照し、データ転送を実現する。
【０１３３】
非PCIeパケットエリア２７２０は、パケットレングス２７３０、ローカル・トランザクションエリア２７４０、グローバルトランザクションエリア２７５０、データエリア２７６０で構成される。
【０１３４】
パケットレングス２７２０は、非PCIeパケットエリア２７２０のサイズを示す。
【０１３５】
ローカル・トランザクションエリア２７４０は、パケットタイプ２７４１、ステータス２７４２、リクエスタID２７４３、リクエスタ・トランザクション識別子２７４４、コンプリータID２７４５、コンプリータ・トランザクション識別子２７４６、信号処理方向識別子２７４７で構成される。
【０１３６】
ローカル・トランザクションエリア２７４０は、汎用バス直接結合型ネットワークスイッチ１０００内部のデバイスエミュレータ１０２４、１０４４、１０６４、データコントローラ１０２６、１０４６、１０６６、ポートメモリ１０２８、１０４８、１０６８、パケットルータ１０３０、１０５０、１０７０の信号線で接続された部位間でのデータ転送の制御に使用される。パケットタイプ２７４１は、パケットがなんの機能のために発行されたかを示す。各デバイスはパケットタイプ２７４１に従い、パケットを受信したデバイスは挙動を決定する。リクエスタID２７４３とコンプリータID２７４５は、パケットを送信するデバイスと受信するデバイスを意味する。リクエスタ・トランザクション識別子２７４４とコンプリータ・トランザクション識別子２７４６は、各デバイスがデバイス間のローカルなトランザクションを識別するために使用する。
【０１３７】
リクエスタは、パケットをはじめて送信する際にリクエスタ内で固有の値になるようにリクエスタ・トランザクション識別子２７４４を決定し、コンプリータ・トランザクション識別子２７４６は未指定パラメータを設定する。コンプリータは受信したパケットに未知のリクエスタ・トランザクション識別子２７４４と未指定パラメータのコンプリータ・トランザクション識別子２７４６がある判定した時、リクエスタ内で固有の値になるようにコンプリータ・トランザクション識別子２７４６を設定する。リクエスタID２７４３とコンプリータID２７４５とリクエスタ・トランザクション識別子２７４４は、ローカルなトランザクションを開始する際に、リクエスタによって決定され、ローカルなトランザクションが終了するまで変更されない。
【０１３８】
コンプリータ・トランザクション識別子２７４６はローカルなトランザクションが開始された時、未指定パラメータで、コンプリータが信号の返信を行った際にコンプリータによって決定され、ローカルなトランザクションが終了するまで変更されない。
【０１３９】
信号処理方向識別子２７４７は、信号の向きを設定する。グローバル・トランザクションエリア２７５０は、パケットタイプ２７５１、ステータス２７５２、リクエスタID２７５３、リクエスタ・トランザクション識別子２７５４、コンプリータID２７５５、コンプリータ・トランザクション識別子２７５６、信号処理方向識別子２７５７で構成さる。
【０１４０】
グローバル・トランザクションエリア２７５０は、ノード間通信の制御に使用される。
【０１４１】
パラメータID２７５１-２７５７の使用方法についてはローカルトランザクション・エリアのパラメータ２７４１-２７４７と同じである。ただし、グローバル・トランザクションエリア２７５０のリクエスタID２７５３とコンプリータID２７５５はパケットを送信するノードと受信するノードを意味する。
【０１４２】
データエリア２７６０はデータレングス２７６１、データ２７６２で構成される。
【０１４３】
データレングス２７６１はデータ２７６０のサイズを示す。データ２７６２は、ローカルトランザクションエリアの２７４０パケットタイプ２７４１によって内容が異なる。内容については２８１０〜２８２６で構成されたデータフォーマット表２８００にて示す。
【０１４４】
図１６で、汎用バス直接結合型ネットワークスイッチ１０００を介して、ノード１０２０、１０４、１０６０が通信する際に使用するプロトコルにあるデータエリアのデータフォーマットとそのデータがどのように使用されるかについて説明する。
データフォーマット表２８００はローカルトランザクションエリアのパケットタイプ２８１０とデータエリアのデータ２８２０で対応付けられている。RTS(Request To Send)２８１１は送信許可要求であり、データ２７６２には送信データのメモリの読込先の先頭アドレス、サイズ２８２１がある。CTS(Clear To Send)２８１２は送信許可通知であり、データ２７６２には受信データのメモリの書込先の先頭アドレス２８２２がある。
【０１４５】
DMAr(DMA read)２８１３はダイレクトメモリアクセスでの読み出しで、データ２７６２には送信データのメモリの読込先の先頭アドレス、サイズ２８２３がある。
【０１４６】
DMAw(DMA write)２８１４はダイレクトメモリアクセスでの書き込みで、データ２７６２にはメモリの書き込み先の先頭アドレス、データ２８２４がある。ACK/NACK２８１５は処理の成否を意味するAcknowledgement/No-Acknowledgementで、データ２７６２には成功の可否、シーケンス番号２８２５がある。
【０１４７】
DATA２８１６はデータを送信する時に使用し、データ２７６２にはシーケンス番号、サイズ、データ２８２６がある。
【０１４８】
ELSE２８１７はデバイス固有に必要とする命令のために用意されており、データ２７６２はデバイス依存２８２６となる。
【符号の説明】
【０１４９】
１０００…汎用バス直接結合型ネットワークスイッチ
１０２０、１０４０、１０６０…ノード
１０２２、１０４２、１０６２、１１０２…ポート
１０２４、１０４４、１０６４、１１００…デバイスエミュレータ
１０２６、１０４６、１０６６、１２００…データコントローラ
１０２８、１０４８、１０６８、１３００…ポートメモリ
１０３０、１０５０、１０７０、１４００…パケットルータ
１０３１…デバイスエミュレータ間ネットワーク
１０３３…パケットルータ間ネットワーク
１０５１…デバイスエミュレータ間ネットワーク
１０５３…パケットルータ間ネットワーク
１０７１…デバイスエミュレータ間ネットワーク
１０７３…パケットルータ間ネットワーク
１１００…デバイスエミュレータ#i 
１１０２…ポート#i １１０２
１１０５…デバイスエミュレータ間ネットワーク
１１１０…PCIe通信部
１１１１…トランザクション管理部
１１１２…デバイスエミュレータ間通信部
１１１３…ネットワーク管理部
１２００…データコントローラ#i
１２１０…データコントローラ#i １２００に内蔵されるDMAコントローラ
１２１１…DMAコントローラ#i １２１０に内蔵されるバッファ
１２１２…DMAコントローラ#i １２１０に内蔵されるアドレスレジスタ
１２１３…DMAコントローラ#i １２１０に内蔵されるインデックスレジスタ
１２１５…メモリコントローラ
１３００…ポートメモリ#i
１３１０…サブメモリコントローラ#１
１３１１…サブメモリコントローラ#２
１３１４…ポートメモリ#i １３００に内蔵されるローカルメモリ#１
１３１５…ポートメモリ#i １３００に内蔵されるローカルメモリ#２
１４００…パケットルータ#i
１４０１…パケットルータ間ネットワーク
１４１０…データルーティング部
１４１１…バッファ
１４１２…アドレスレジスタ
１４１３…インデックスレジスタ
１５２０…ノード#１ハードウェア
１５２１…メモリ
１５２２…OS
１５２３…ドライバ
１５２４…ユーザプログラム
１５４０…ノード#２ハードウェア
１６００…バックプレーンボード
１６０１…スイッチ#１
１６２０…ノード#１
１６２１…PCIeソケット#１
１６５０…ノード#N
１６５１…PCIeソケット#N
【図１】
2014206883.tif 000003
【図２】
2014206883.tif 000004
【図３】
2014206883.tif 000005
【図４】
2014206883.tif 000006
【図５】
2014206883.tif 000007
【図６】
2014206883.tif 000008
【図７】
2014206883.tif 000009
【図８】
2014206883.tif 000010
【図９】
2014206883.tif 000011
【図１０】
2014206883.tif 000012
【図１１】
2014206883.tif 000013
【図１２】
2014206883.tif 000014
【図１３】
2014206883.tif 000015
【図１４ａ】
2014206883.tif 000016
【図１４ｂ】
2014206883.tif 000017
【図１４ｃ】
2014206883.tif 000018
【図１５】
2014206883.tif 000019
【図１６】
2014206883.tif 000020