(57)【要約】【課題】リモートＩ／Ｏシステムにおいて、データ転送のスループットを改善する。【解決手段】ホスト計算機と、前記ホスト計算機と通信するデバイスと、前記ホスト計算機及び前記デバイスを接続するネットワークと、を備える計算機システムにおいて、前記デバイスは、デバイスブリッジを介して前記ネットワークに接続され、前記デバイスブリッジは、ブリッジメモリを備え、前記ホスト計算機は、ホストメモリと、デバイスドライバと、を備え、前記デバイスドライバは、前記ホストメモリへの書き込みを受けると、前記書き込みによって前記ホストメモリに格納された内容を前記ブリッジメモリに書き込み、前記デバイスブリッジにデータ転送要求を送信し、前記デバイスブリッジは、前記データ転送要求を受けると、所定の領域からアドレスを読み込み、前記読み込まれたアドレスが示す領域から、データを読み込む。【選択図】図３
2008065515.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機と、前記ホスト計算機と通信するデバイスと、前記ホスト計算機及び前記デバイスを接続するネットワークと、を備える計算機システムにおいて、
前記デバイスは、デバイスブリッジを介して前記ネットワークに接続され、
前記デバイスブリッジは、ブリッジメモリを備え、
前記ホスト計算機は、ホストメモリと、前記デバイスに対するデータ転送を制御するデバイスドライバと、を備え、
前記デバイスドライバは、
前記ホストメモリへの書き込みを受けると、前記書き込みによって前記ホストメモリに格納された内容を前記ブリッジメモリに書き込み、
前記デバイスブリッジにデータ転送要求を送信し、
前記デバイスブリッジは、
前記データ転送要求を受けると、所定の領域からアドレスを読み込み、
前記読み込まれたアドレスが示す領域から、データを読み込むことを特徴とする計算機システム。
【請求項２】
前記ホストメモリへの書き込みによって、データと、前記データが格納された前記ホストメモリのアドレスとが前記ホストメモリに格納され、
前記デバイスドライバは、前記データが格納された前記ホストメモリのアドレスを前記ブリッジメモリの所定の領域に書き込み、
前記デバイスブリッジは、前記データ転送要求を受けると、前記ブリッジメモリから、前記データが格納された前記ホストメモリのアドレスを読み込むことを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記ホストメモリへの書き込みによって、データと、前記データが格納された前記ホストメモリのアドレスとが前記ホストメモリに格納され、
前記ホスト計算機は、前記ホストメモリのアドレスと前記ブリッジメモリのアドレスとを対応付けるアドレス変換情報を保持し、
前記デバイスドライバは、
前記アドレス変換情報に基づいて、前記データが格納された前記ホストメモリのアドレスを、対応する前記ブリッジメモリのアドレスに変換し、
前記データを、前記変換されたアドレスが示す前記ブリッジメモリの領域に書き込み、
前記デバイスブリッジは、前記データ転送要求を受けると、前記ホストメモリから、前記変換されたアドレスを読み込むことを特徴とする請求項１に記載の計算機システム。
【請求項４】
前記ホストメモリへの書き込みによって、データと、前記データが格納された前記ホストメモリのアドレスとが前記ホストメモリに格納され、
前記ホスト計算機は、前記ホストメモリのアドレスと前記ブリッジメモリのアドレスとを対応付けるアドレス変換情報を保持し、
前記デバイスドライバは、
前記アドレス変換情報に基づいて、前記データが格納された前記ホストメモリのアドレスを、対応する前記ブリッジメモリのアドレスに変換し、
前記データ、及び、前記変換されたアドレスを、それぞれ、前記変換されたアドレスが示す前記ブリッジメモリの領域、及び、前記ブリッジメモリの所定の領域に書き込み、
前記デバイスブリッジは、前記データ転送要求を受けると、前記ブリッジメモリから、前記変換されたアドレスを読み込むことを特徴とする請求項１に記載の計算機システム。
【請求項５】
前記ネットワークは、一つ以上のスイッチを含むスイッチファブリックであることを特徴とする請求項１に記載の計算機システム。
【請求項６】
ホスト計算機と、前記ホスト計算機と通信するデバイスと、前記ホスト計算機及び前記デバイスを接続するネットワークと、を備える計算機システムにおいて、
前記デバイスは、デバイスブリッジを介して前記ネットワークに接続され、
前記デバイスブリッジは、ブリッジメモリを備え、
前記ホスト計算機は、ホストブリッジを介して前記ネットワークに接続され、
前記ホスト計算機は、ホストメモリと、前記デバイスに対するデータ転送を制御するデバイスドライバと、を備え、
前記デバイスドライバは、データと、前記データが格納される前記ホストメモリのアドレスとを前記ホストメモリに書き込み、
前記ホストブリッジは、前記デバイスドライバによる書き込みによって前記ホストメモリに格納された内容を前記ブリッジメモリに書き込み、
前記デバイスブリッジは、
データ転送要求を受けると、所定の領域からアドレスを読み込み、
前記読み込まれたアドレスが示す領域から、データを読み込むことを特徴とする計算機システム。
【請求項７】
前記デバイスドライバが前記デバイスブリッジにデータ転送要求を送信することを特徴とする請求項６に記載の計算機システム。
【請求項８】
前記ホストブリッジが前記デバイスブリッジにデータ転送要求を送信することを特徴とする請求項６に記載の計算機システム。
【請求項９】
前記ホストブリッジは、前記データが格納された前記ホストメモリのアドレスを前記ブリッジメモリの所定の領域に書き込み、
前記デバイスブリッジは、前記データ転送要求を受けると、前記ブリッジメモリから、前記データが格納された前記ホストメモリのアドレスを読み込むことを特徴とする請求項６に記載の計算機システム。
【請求項１０】
前記ホスト計算機は、前記ホストメモリのアドレスと前記ブリッジメモリのアドレスとを対応付けるアドレス変換情報を保持し、
前記ホストブリッジは、
前記アドレス変換情報に基づいて、前記データが格納された前記ホストメモリのアドレスを、対応する前記ブリッジメモリのアドレスに変換し、
前記データ、及び、前記変換されたアドレスを、それぞれ、前記変換されたアドレスが示す前記ブリッジメモリの領域、及び、前記ブリッジメモリの所定の領域に書き込み、
前記デバイスブリッジは、前記データ転送要求を受けると、前記ブリッジメモリから、前記変換されたアドレスを読み込むことを特徴とする請求項６に記載の計算機システム。
【請求項１１】
前記ネットワークは、一つ以上のスイッチを含むスイッチファブリックであることを特徴とする請求項６に記載の計算機システム。
【請求項１２】
ホスト計算機と、前記ホスト計算機と通信するデバイスと、前記ホスト計算機及び前記デバイスを接続するネットワークと、を備える計算機システムにおけるデータ転送方法であって、
前記デバイスは、デバイスブリッジを介して前記ネットワークに接続され、
前記デバイスブリッジは、ブリッジメモリを備え、
前記ホスト計算機は、ホストメモリを備え、
前記ホスト計算機は、
データと、前記データが格納される前記ホストメモリのアドレスと、を前記ホストメモリに書き込み、
前記ホストメモリに格納された内容を前記ブリッジメモリに書き込み、
前記デバイスブリッジにデータ転送要求を送信し、
前記デバイスブリッジは、
前記データ転送要求を受けると、所定の領域からアドレスを読み込み、
前記読み込まれたアドレスが示す領域から、データを読み込むことを特徴とする方法。
【請求項１３】
前記ホスト計算機は、さらに、
前記ホストメモリのアドレスと前記ブリッジメモリのアドレスとを対応付けるアドレス変換情報を保持し、
前記アドレス変換情報に基づいて、前記データが格納された前記ホストメモリのアドレスを、対応する前記ブリッジメモリのアドレスに変換し、
前記ホストメモリに格納されたデータを、前記変換されたアドレスが示す前記ブリッジメモリの領域に書き込むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記ネットワークは、一つ以上のスイッチを含むスイッチファブリックであることを特徴とする請求項１２に記載の方法。
【請求項１５】
ホスト計算機と、前記ホスト計算機と通信するデバイスと、前記ホスト計算機及び前記デバイスを接続するネットワークと、を備える計算機システムにおいて、
前記デバイスは、デバイスブリッジを介して前記ネットワークに接続され、
前記デバイスブリッジは、ブリッジメモリを備え、
前記ホスト計算機は、ホストメモリと、前記デバイスに対するデータ転送を制御するデバイスドライバと、前記ホスト計算機の資源を仮想化する仮想化処理部と、を備え、
前記デバイスドライバは、
データと、前記データが格納される前記ホストメモリのアドレスとを前記ホストメモリに書き込み、
前記デバイスブリッジにデータ転送要求を送信し、
前記仮想化処理部は、
前記デバイスドライバから送信されたデータ転送要求を捕捉すると、前記デバイスドライバによる書き込みによって前記ホストメモリに格納された内容を前記ブリッジメモリに書き込み、
前記デバイスブリッジにデータ転送要求を送信し、
前記デバイスブリッジは、
データ転送要求を受けると、所定の領域からアドレスを読み込み、
前記読み込まれたアドレスが示す領域から、データを読み込むことを特徴とする計算機システム。
【請求項１６】
前記仮想化処理部は、前記データが格納された前記ホストメモリのアドレスを前記ブリッジメモリの所定の領域に書き込み、
前記デバイスブリッジは、前記データ転送要求を受けると、前記ブリッジメモリから、前記データが格納された前記ホストメモリのアドレスを読み込むことを特徴とする請求項１５に記載の計算機システム。
【請求項１７】
前記ホスト計算機は、前記ホストメモリのアドレスと前記ブリッジメモリのアドレスとを対応付けるアドレス変換情報を保持し、
前記仮想化処理部は、
前記アドレス変換情報に基づいて、前記データが格納された前記ホストメモリのアドレスを、対応する前記ブリッジメモリのアドレスに変換し、
前記データ、及び、前記変換されたアドレスを、それぞれ、前記変換されたアドレスが示す前記ブリッジメモリの領域、及び、前記ブリッジメモリの所定の領域に書き込み、
前記デバイスブリッジは、前記データ転送要求を受けると、前記ブリッジメモリから、前記変換されたアドレスを読み込むことを特徴とする請求項１５に記載の計算機システム。
【請求項１８】
前記ネットワークは、一つ以上のスイッチを含むスイッチファブリックであることを特徴とする請求項１５に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書で開示される技術は、計算機におけるデータ転送に関し、特に、スイッチファブリックを経由するデータ転送の高速化に関する。
【背景技術】
【０００２】
ホスト計算機とＩ／Ｏデバイスとをスイッチファブリックを介して接続することによってリモートＩ／Ｏを構成するシステムが提案されている（例えば、非特許文献１及び非特許文献２参照）。このようなシステム（以下、リモートＩ／Ｏシステムと記載する）によれば、リソースが集約され、フレキシブルなＩ／Ｏが実現されるため、投資コストを削減することができる。
【０００３】
一方、計算機システムにおけるデータ転送方法として、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送がよく知られている（例えば、特許文献１から特許文献３参照）。ＤＭＡ転送によれば、ＣＰＵを介さずに装置とメモリとの間のデータ転送が実行されるため、高速なデータ転送が実現される。
【特許文献１】特開２００２−２１５５６３号公報
【特許文献２】特開平８−９５８９９号公報
【特許文献３】特開平８−３０５４４号公報
【非特許文献１】Ｐａｕｌ  Ｍｉｌｌａｒｄ他、“ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｓｗｉｔｃｈｉｎｇ  ａｎｄ  Ｒｅｍｏｔｅ  Ｉ／Ｏ  ｉｎ  ｔｈｅ  Ｄａｔａ  Ｃｅｎｔｅｒ”、［ｏｎｌｉｎｅ］、２００５年２月、ｘｙｒａｔｅｘ、ＡＳＩ  ＳＩＧ、［平成１８年８月３日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ａｓｉ−ｓｉｇ．ｏｒｇ／ｅｄｕｃａｔｉｏｎ／ｗｈｉｔｅｐａｐｅｒｓ／Ｒｅｍｏｔｅ＿ＩＯ＿ＷｈｉｔｅＰａｐｅｒ．ｐｄｆ＞
【非特許文献２】Ｓｔｅｐｈｅｎ  Ｃｈｒｉｓｔｏ他、“Ａｐｐｌｉｃａｔｉｏｎ  Ｅｘａｍｐｌｅｓ  Ｅｎａｂｌｉｎｇ  Ｖｉｒｔｕａｌ  ＩＯ  ａｎｄ  Ｓｔｏｒａｇｅ”、［ｏｎｌｉｎｅ］、２００６年６月１５日、ｘｙｒａｔｅｘ、ＡＳＩ  ＳＩＧ、［平成１８年８月３日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ａｓｉ−ｓｉｇ．ｏｒｇ／ｅｄｕｃａｔｉｏｎ／ｐｒｅｓｅｎｔａｔｉｏｎｓ／３＿ＡＳＩ＿Ａｐｐｓ＿Ｅｘａｍｐｌｅｓ＿ＳｔａｒＧｅｎ．ｐｄｆ＞
【発明の開示】
【発明が解決しようとする課題】
【０００４】
リモートＩ／Ｏシステムにおいて、Ｉ／Ｏのための通信は、スイッチファブリックを通過する。このため、レイテンシが増加し、その結果、Ｉ／Ｏスループットが低下する。
【０００５】
Ｉ／Ｏスループットを改善するために、データをバースト転送する等の方法が提案されている。例えば、特許文献１に記載されたＤＭＡコントローラは、バッファを備え、そのバッファにデータを蓄積することによって、バースト転送が実現される。その結果、Ｉ／Ｏスループットが改善される。特許文献２に記載されたＤＭＡ転送制御装置は、複数のＤＭＡコントローラを備える。そして、それらのＤＭＡコントローラが役割ごとに使い分けられる。その結果、Ｉ／Ｏスループットが改善される。特許文献３に記載されたＤＭＡ転送装置は、データが連続している場合に、ＤＭＡアドレスリードを省略することによって、レイテンシを改善する。その結果、Ｉ／Ｏスループットが改善される。このような技術をリモートＩ／Ｏシステムに適用すれば、Ｉ／Ｏスループットを改善することができる。
【０００６】
しかしながら、例えば、ネットワークルータとして使用されるシステム、あるいは、複数の仮想マシンが一つのＩ／Ｏデバイスを共有するシステムにおいては、Ｉ／Ｏデータのサイズが小さくなる（すなわち、粒度が小さくなる）傾向がある。小粒度のデータ転送においては、データサイズに対するアドレスサイズの割合が大きく、かつ、各データの関連性が低いため、データの一括転送も、アドレスの読み込みの省略も困難である。したがって、上記特許文献１から３に記載された技術を小粒度のデータ転送に適用しても、Ｉ／Ｏスループットを改善することは困難である。
【課題を解決するための手段】
【０００７】
本願で開示する代表的な発明は、ホスト計算機と、前記ホスト計算機と通信するデバイスと、前記ホスト計算機及び前記デバイスを接続するネットワークと、を備える計算機システムにおいて、前記デバイスは、デバイスブリッジを介して前記ネットワークに接続され、前記デバイスブリッジは、ブリッジメモリを備え、前記ホスト計算機は、ホストメモリと、前記デバイスに対するデータ転送を制御するデバイスドライバと、を備え、前記デバイスドライバは、前記ホストメモリへの書き込みを受けると、前記書き込みによって前記ホストメモリに格納された内容を前記ブリッジメモリに書き込み、前記デバイスブリッジにデータ転送要求を送信し、前記デバイスブリッジは、前記データ転送要求を受けると、所定の領域からアドレスを読み込み、前記読み込まれたアドレスが示す領域から、データを読み込むことを特徴とする。
【発明の効果】
【０００８】
本発明の一実施形態によれば、小粒度のデータ転送におけるＩ／Ｏスループットを改善することができる。
【発明を実施するための最良の形態】
【０００９】
図１は、本発明の第１の実施の形態のリモートＩ／Ｏシステムのブロック図である。
【００１０】
本実施の形態のリモートＩ／Ｏシステムは、少なくとも、ホストＰＣ１００、ホスト側ブリッジ１２０、デバイス１４０、デバイス側ブリッジ１４１、デバイス１５０、デバイス側ブリッジ１５１及びデバイス１７０を含む。ホストＰＣ１００、デバイス１４０及びデバイス１５０は、それぞれ、ホスト側ブリッジ１２０、デバイス側ブリッジ１４１及びデバイス側ブリッジ１５１と接続される。ホスト側ブリッジ１２０、デバイス側ブリッジ１４１及びデバイス側ブリッジ１５１は、スイッチファブリック１３０を介して相互に接続される。デバイス１７０は、ネットワーク１６０を介してデバイス１４０と接続される。
【００１１】
ホストＰＣ１００は、少なくともＣＰＵ１１０及びホストメモリ１０７を備える計算機である。
【００１２】
ホストＰＣ１００のＣＰＵ１１０は、ホストメモリ１０７に格納された種々のソフトウエアを実行するプロセッサである。
【００１３】
ホストメモリ１０７には、少なくとも、オペレーティングシステム（ＯＳ）１０１、アプリケーションプログラム１０２、ドライバ１０３及びドライバ１０４が格納される。ホストメモリ１０７には、さらに、ホストＰＣ１００とデバイス１４０等との間で転送されるデータ等が一時的に格納される。
【００１４】
アプリケーションプログラム１０２は、ＯＳ１０１の上で動作し、所定の業務を実現するプログラムである。
【００１５】
ドライバ１０３及び１０４は、ＯＳ１０１がデバイス１４０及び１５０に対するデータ転送を制御するために実行されるソフトウエア（いわゆるデバイスドライバ）である。図１において、ドライバ１０３及び１０４は、それぞれ、「ドライバ１」及び「ドライバ２」と表示される。本実施の形態のドライバ１０３は、少なくとも、データ格納処理部１０５及びＤＭＡ転送要求処理部１０６を含む。これらの処理部は、ドライバ１０３を構成するモジュールである。ドライバ１０４も、ドライバ１０３と同様、データ格納処理部（図示省略）及びＤＭＡ転送要求処理部（図示省略）を含んでもよい。
【００１６】
ドライバ１０３及び１０４は、ＣＰＵ１１０によって実行される。このため、以下の説明においてドライバ１０３等が実行する処理は、実際には、ＣＰＵ１１０によって実行される。
【００１７】
ホスト側ブリッジ１２０は、ホストＰＣ１００をスイッチファブリック１３０に接続するための処理（例えば、プロトコル変換等）を実行する。本実施の形態のホスト側ブリッジ１２０は、少なくとも、アドレス変換処理部１２１、アドレス変換テーブル１２２及びデータ転送処理部１２３を含む。
【００１８】
なお、ホスト側ブリッジ１２０は、ホストＰＣ１００に含まれてもよい。
【００１９】
アドレス変換テーブル１２２は、ホスト側ブリッジ１２０内のメモリ（図示省略）に格納される。アドレス変換処理部１２１及びデータ転送処理部１２３は、ホスト側ブリッジ１２０を構成するハードウエアによって実現されてもよいし、ホスト側ブリッジ１２０内のプロセッサ（図示省略）がメモリ（図示省略）に格納されたプログラムを実行することによって実現されてもよい。
【００２０】
スイッチファブリック１３０は、ホストＰＣ１００とデバイス１４０等との間のデータ転送経路を切り替える一つ以上のスイッチ（図示省略）を備える。ホスト側ブリッジ１２０とデバイス側ブリッジ１４１等は、スイッチファブリック１３０を介して、任意のプロトコルに基づく通信を実行することができる。例えば、ホスト側ブリッジ１２０とデバイス側ブリッジ１４１等は、ＰＣＩ−ＥＸＰＲＥＳＳに準拠する通信を実行してもよい。その場合、スイッチファブリック１３０を構成するスイッチは、Ａｄｖａｎｃｅｄ  Ｓｗｉｔｃｈｉｎｇの規格に準拠してもよい。
【００２１】
スイッチファブリック１３０によって、ホストＰＣ１００とデバイス１４０等との間のフレキシブルなＩ／Ｏが実現される。その一方で、ホストＰＣ１００とデバイス１４０等との間で転送されるデータが一つ以上のスイッチを通過するため、データＩ／Ｏのレイテンシが増加する。
【００２２】
なお、本実施の形態では、ホストＰＣ１００とデバイス１４０等とを接続するネットワークの一例として、スイッチファブリック１３０を示す。しかし、スイッチファブリック１３０は、いかなる形態のネットワークによって置き換えられてもよい。ホストＰＣ１００とデバイス１４０等とがどのような経路を介して接続されていても、本発明を適用することができる。
【００２３】
デバイス１４０及び１５０は、ホストＰＣ１００と、ネットワーク１６０に接続された機器（例えば、デバイス１７０）との間のデータＩ／Ｏを実行する。本実施の形態は、例として、デバイス１４０及び１５０がホストＰＣ１００をネットワーク１６０に接続するためのネットワークインターフェースカード（ＮＩＣ）である場合について説明する。
【００２４】
デバイス１４０は、ＤＭＡエンジン１４３を備える。
【００２５】
デバイス側ブリッジ１４１は、デバイス１４０をスイッチファブリック１３０に接続するための処理を実行する。本実施の形態のデバイス側ブリッジ１４１は、少なくとも、ブリッジメモリ１４２を備える。
【００２６】
ＤＭＡエンジン１４３は、少なくとも、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を実行するＤＭＡ転送処理部１４４を備える。
【００２７】
なお、図１において、デバイス１４０、デバイス側ブリッジ１４１及びブリッジメモリ１４２は、それぞれ、「デバイス１」、「デバイス側ブリッジ１」及び「ブリッジメモリ１」と表示される。
【００２８】
一方、デバイス側ブリッジ１５１は、「デバイス側ブリッジ２」と表示される。デバイス１５０は、デバイス１４０と同様、ＤＭＡエンジン（図示省略）及びブリッジメモリ２（図示省略）を備えてもよい。
【００２９】
なお、デバイス側ブリッジ１４１及び１５１は、それぞれ、デバイス１４０及び１５０に含まれてもよい。
【００３０】
図１には二つのデバイス１４０及び１５０を示したが、本実施の形態のリモートＩ／Ｏシステムは、任意の数のデバイスを備えることができる。
【００３１】
ネットワーク１６０は、デバイス１４０とデバイス１７０とを接続する。ネットワーク１６０は、例えばＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であるが、その他のいかなる種類のネットワークであってもよい。
【００３２】
デバイス１７０は、ネットワーク１６０に接続され、ホストＰＣ１００と通信する装置である。デバイス１７０は、いかなる種類の周辺機器であってもよい。あるいは、デバイス１７０は、デバイス１４０と同様のＮＩＣであってもよい。その場合、デバイス１７０は、スイッチファブリック１３０とは別のスイッチファブリック（図示省略）を介して、もしくは直接、ホストＰＣ１００とは別のホストＰＣ（図示省略）と接続されてもよい。
【００３３】
図２は、本発明の第１の実施の形態のアドレス変換テーブル１２２の説明図である。
【００３４】
アドレス変換テーブル１２２は、ホストメモリ１０７のアドレスと、ブリッジメモリ１４２等のアドレスとの対応関係を管理する。後で説明するように、アドレス変換処理部１２１は、アドレス変換テーブル１２２に基づいて、ホストメモリ１０７のアドレスを、それに対応するブリッジメモリ１４２等のアドレスに変換する。言い換えると、ホストメモリ１０７の記憶領域が、アドレス変換テーブル１２２によって、ブリッジメモリ１４２等にマッピングされる。
【００３５】
本実施の形態のアドレス変換テーブル１２２は、項番２０１、ホストメモリアドレス２０２、ブリッジメモリ１アドレス２０３及びブリッジメモリ２アドレス２０４のカラムを含む。
【００３６】
項番２０１は、アドレス変換テーブル１２２に登録された各エントリ（行）を一意に識別する番号である。
【００３７】
ホストメモリアドレス２０２には、ホストメモリ１０７のアドレスが登録される。
【００３８】
ブリッジメモリ１アドレス２０３には、ホストメモリアドレス２０２に登録されたアドレスに対応するブリッジメモリ１４２のアドレスが登録される。
【００３９】
ブリッジメモリ２アドレス２０４には、ホストメモリアドレス２０２に登録されたアドレスに対応するデバイス側ブリッジ１５１内のブリッジメモリ（図示省略）のアドレスが登録される。
【００４０】
本実施の形態のリモートＩ／Ｏシステムには、スイッチファブリック１３０に接続されるデバイスがさらに追加されてもよい。その場合、アドレス変換テーブル１２２には、追加されたデバイスが備えるブリッジメモリに対応するカラムが追加される。
【００４１】
図２の例では、項番２０１が「１」であるエントリのホストメモリアドレス２０２及びブリッジメモリ１アドレス２０３に、それぞれ、「ＦＣ００００００」及び「１２００００００」が登録されている。これは、ホストメモリ１０７のアドレス「ＦＣ００００００」が、ブリッジメモリ１４２のアドレス「１２００００００」と対応することを示す。
【００４２】
なお、ホストメモリアドレス２０２及びブリッジメモリ１アドレス２０３等には、所定のアドレス範囲の先頭アドレスが登録されてもよい。その場合、ホストメモリ１０７のアドレス「ＦＣ００００００」を先頭とする所定のアドレス範囲が、ブリッジメモリ１４２のアドレス「１２００００００」を先頭とする所定のアドレス範囲と対応する。
【００４３】
同様にして、項番２０１が「２」であるエントリは、ホストメモリ１０７のアドレス「Ｄ０００００００」がブリッジメモリ１４２のアドレス「２０００００００」と対応することを示す。さらに、項番２０１が「３」であるエントリは、ホストメモリ１０７のアドレス「Ｃ０００００００」が、デバイス側ブリッジ１５１内のブリッジメモリのアドレス「００８０００００」と対応することを示す。
【００４４】
アドレス変換テーブル１２２は、リモートＩ／Ｏシステムの初期化時に作成される。例えば、スイッチファブリック１３０の管理ソフトウエア等（図示省略）が、スイッチファブリック１３０に接続されたデバイス１４０等に関する情報、及び、ブリッジメモリ１４２等に関する情報を取得し、それらの情報に基づいてアドレス変換テーブル１２２を作成してもよい。
【００４５】
図３は、本発明の第１の実施の形態のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【００４６】
具体的には、図３は、ホストＰＣ１００からデバイス１７０にデータを転送するために実行される一連の処理を示す。
【００４７】
ドライバ１０３が、データをデバイス１７０に転送する要求をＯＳ１０１もしくはアプリケーションプログラム１０２から受信すると、図３に示す処理が開始される。
【００４８】
最初に、ドライバ１０３のデータ格納処理部１０５は、これから転送されるデータ（すなわち、データ転送要求の対象のデータ）、及び、そのデータが格納されるホストメモリ１０７のアドレスを、ホストメモリ１０７に格納するための書き込み要求を発行する（３０１）。その結果、これから転送されるデータが、ホストメモリ１０７内のいずれかの領域（具体的には、ＯＳ１０１によって割り当てられた範囲内のいずれかのアドレスが示す領域）に格納され、さらに、そのデータが格納されたアドレスの値が、ホストメモリ１０７の別のアドレスが示す領域に格納される。これらの格納が完了すると、ドライバ１０３は完了通知を受信する（３０２）。
【００４９】
次に、ドライバ１０３は、ホスト側ブリッジ１２０のデータ転送処理部１２３を起動する（３０３）。
【００５０】
ホスト側ブリッジ１２０のデータ転送処理部１２３は、これから転送されるデータ、及び、そのデータが格納されたホストメモリ１０７のアドレスを、ホストメモリ１０７から読み込むための読み込み要求を発行する（３０４）。その結果、これから転送されるデータ、及び、そのデータが格納されたホストメモリ１０７のアドレスが、ホストメモリ１０７からホスト側ブリッジ１２０に読み込まれる（３０５）。具体的には、ステップ３０１の結果ホストメモリ１０７に書き込まれたデータ及びアドレスが、ステップ３０５において読み込まれる。
【００５１】
ホスト側ブリッジ１２０のアドレス変換処理部１２１は、アドレス変換テーブル１２２に基づいて、ステップ３０５において読み込まれたホストメモリ１０７のアドレスを、対応するブリッジメモリ１４２のアドレスに変換する（後述する図５のステップ５０２参照）。例えば、ステップ３０５においてアドレス「ＦＣ００００００」が読み込まれた場合、図２に示すアドレス変換テーブル１２２に基づいて、そのアドレスが「１２００００００」に変換される。
【００５２】
次に、データ転送処理部１２３は、これから転送されるデータ（すなわち、ステップ３０５において読み込まれたデータ）及びアドレス変換処理部１２１によって変換されたアドレスをブリッジメモリ１４２に格納するための書き込み要求を発行する（３０６）。その結果、ブリッジメモリ１４２内の、アドレス変換処理部１２１によって変換されたアドレスが示す領域に、ステップ３０５において読み込まれたデータが格納される。さらに、所定のアドレスが示す領域に、アドレス変換処理部１２１によって変換されたアドレスの値が格納される。
【００５３】
ステップ３０６の要求に応じたデータ及びアドレスの格納が完了すると、ホスト側ブリッジ１２０は完了通知を受信する（３０７）。
【００５４】
ステップ３０６の書き込み要求及びステップ３０７の完了通知は、スイッチファブリック１３０を介して転送される。しかし、データ転送処理部１２３は、これから転送されるデータと、そのデータが格納されるべきブリッジメモリ１４２のアドレスの両方を知っているため、１回の書き込み要求によってデータ及びアドレスの両方をブリッジメモリ１４２に格納することができる。
【００５５】
データ転送処理部１２３は、完了通知（３０７）を受信すると、ドライバ１０３に完了通知を送信する（３０８）。
【００５６】
ドライバ１０３のＤＭＡ転送要求処理部１０６は、完了通知（３０８）を受信すると、ＤＭＡ転送要求をＤＭＡエンジン１４３のＤＭＡ転送処理部１４４に送信する（３０９）。
【００５７】
ＤＭＡ転送要求（３０９）を受信したＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するアドレス読み込み要求を発行する（３１０）。その結果、ブリッジメモリ１４２に格納されたアドレスが読み込まれる（３１１）。ここで読み込まれるアドレスは、ステップ３０６の書き込み要求の結果格納されたアドレスである。
【００５８】
次に、ＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するデータ読み込み要求を発行する（３１２）。この読み込み要求は、ステップ３１１において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ１４２の、ステップ３１１において読み込まれたアドレスが示す領域から、これから転送されるデータが読み込まれる（３１３）。ここで読み込まれるデータは、ステップ３０６の書き込み要求の結果格納されたデータである。
【００５９】
次に、ＤＭＡ転送処理部１４４は、ステップ３１３において読み込まれたデータをデバイス１７０に送信する（３１４）。このとき、デバイス１４０は、ネットワーク１６０を介してデータを送信するために、プロトコル変換等の処理を実行してもよい。
【００６０】
以上で、ホストＰＣ１００からデバイス１７０へのデータの転送が終了する。
【００６１】
上記のステップ３０６において、データ転送処理部１２３は、これから転送されるデータと、そのデータが格納されるブリッジメモリ１４２のアドレスとをブリッジメモリ１４２に書き込むことを要求する。しかし、データ転送処理部１２３は、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ１０７のアドレスのみをブリッジメモリ１４２に書き込むことを要求してもよい。このような方法は、ブリッジメモリ１４２の容量が十分に大きくない場合に有効である。
【００６２】
この場合、ブリッジメモリ１４２には、アドレス変換処理部１２１によって変換されていないアドレスが格納される。そして、ＤＭＡ転送処理部１４４は、ステップ３１２において、ホストメモリ１０７からデータを読み込むことを要求し、ステップ３１３において、ホストメモリ１０７から読み込まれたデータを取得する。
【００６３】
次に、図３に示すデータ転送処理において、ドライバ１０３、ホスト側ブリッジ１２０及びＤＭＡエンジン１４３が実行する処理について、図４から図６を参照して詳細に説明する。ただし、図４から図６に示す処理のうち、既に図３を参照して説明した処理については、詳細な説明を省略する。
【００６４】
図４は、本発明の第１の実施の形態のドライバ１０３が実行する処理を示すフローチャートである。
【００６５】
最初に、ドライバ１０３のデータ格納処理部１０５が、ホストメモリ１０７にデータ及びアドレスを格納する（４０１）。ステップ４０１は、図３におけるステップ３０１及び３０２に相当する。
【００６６】
次に、ドライバ１０３は、ホスト側ブリッジ１２０のデータ転送処理部１２３を起動する（４０２）。ステップ４０２は、図３におけるステップ３０３に相当する。
【００６７】
次に、ドライバ１０３は、データ転送処理部１２３によるデータ転送が成功したか否かを判定する（４０３）。例えば、ステップ４０２が実行された後、所定の時間内にドライバ１０３が完了通知（３０８）を受信した場合、ステップ４０３において「成功」と判定されてもよい。一方、ドライバ１０３が所定の時間内に完了通知（３０８）を受信しなかった場合、あるいは、ドライバ１０３がデータ転送処理部１２３から転送失敗を示す通知を受信した場合、ステップ４０３において「失敗」と判定されてもよい。
【００６８】
ステップ４０３において「失敗」と判定された場合、処理はステップ４０２に戻り、再びデータ転送処理部１２３が起動される。
【００６９】
一方、ステップ４０３において「成功」と判定された場合、ドライバ１０３のＤＭＡ転送要求処理部１０６が、ＤＭＡエンジン１４３に対して、ＤＭＡ転送要求を発行する（４０４）。ステップ４０４は、図３におけるステップ３０９に相当する。
【００７０】
以上でドライバ１０３は処理を終了する。
【００７１】
図５は、本発明の第１の実施の形態のホスト側ブリッジ１２０が実行する処理を示すフローチャートである。
【００７２】
図３のステップ３０３において起動されたホスト側ブリッジ１２０のデータ転送処理部１２３は、図５に示す処理を開始する。
【００７３】
最初に、ホスト側ブリッジ１２０のデータ転送処理部１２３が、ホストメモリ１０７からデータ及びアドレスを読み込む（５０１）。ステップ５０１は、図３のステップ３０４及び３０５に相当する。
【００７４】
次に、ホスト側ブリッジ１２０のアドレス変換処理部１２１は、アドレス変換テーブル１２２を参照して、アドレスを変換する（５０２）。
【００７５】
次に、データ転送処理部１２３は、データ及びステップ５０２において変換されたアドレスをブリッジメモリ１４２に書き込む（５０３）。ステップ５０３は、図３のステップ３０６及び３０７に相当する。
【００７６】
次に、データ転送処理部１２３は、データ転送結果（すなわち、ステップ５０３の書き込みの結果）を、ドライバ１０３に送信する（５０４）。ステップ５０４は、図３のステップ３０８に相当する。
【００７７】
以上でホスト側ブリッジ１２０は処理を終了する。
【００７８】
図６は、本発明の第１の実施の形態のＤＭＡエンジン１４３が実行する処理を示すフローチャートである。
【００７９】
最初に、ＤＭＡエンジン１４３のＤＭＡ転送処理部１４４は、ＤＭＡ転送要求を受信したか否かを判定する（６０１）。
【００８０】
ステップ６０１において、ＤＭＡ転送要求を受信していないと判定された場合、ＤＭＡ転送処理部１４４は、ＤＭＡ転送要求を待つ。
【００８１】
一方、図３のステップ３０９に示すＤＭＡ転送要求を受信すると、ステップ６０１において、ＤＭＡ転送処理部１４４はＤＭＡ転送要求を受信したと判定する。この場合、ＤＭＡ転送処理部１４４は、ブリッジメモリ１４２からアドレスを読み込む（６０２）。ステップ６０２は、図３のステップ３１０及び３１１に相当する。
【００８２】
次に、ＤＭＡ転送処理部１４４は、ブリッジメモリ１４２からデータを読み込む（６０３）。ステップ６０３は、図３のステップ３１２及び３１３に相当する。
【００８３】
次に、ＤＭＡ転送処理部１４４は、ステップ６０３において読み込まれたデータを、ネットワーク１６０を介してデバイス１７０に送信する（６０４）。ステップ６０４は、図３のステップ３１４に相当する。
【００８４】
以上でＤＭＡエンジン１４３は処理を終了する。
【００８５】
次に、本発明の第１の実施の形態の変形例について説明する。
【００８６】
図３に示すように、本発明の第１の実施の形態によれば、ホストＰＣ１００のドライバ１０３がＤＭＡ転送要求を発行する（３０９）。一方、これから説明する第１の実施の形態の変形例によれば、ホスト側ブリッジがＤＭＡ転送要求を発行する。
【００８７】
図７は、本発明の第１の実施の形態の変形例のリモートＩ／Ｏシステムのブロック図である。
【００８８】
図７に示すリモートＩ／Ｏシステムは、図１に示すホストＰＣ１００及びホスト側ブリッジ１２０を、それぞれ、ホストＰＣ７００及びホスト側ブリッジ７２０に置き換えることによって構成される。図７において、例えばＣＰＵ１１０のように、図１と同じ符号が付された部分は、図１に示したものと同じである。図７に示すリモートＩ／Ｏシステムのうち、図１と同じ部分については、説明を省略する。
【００８９】
ホストＰＣ７００は、少なくともＣＰＵ１１０及びホストメモリ７０７を備える計算機である。
【００９０】
ホストメモリ７０７には、少なくとも、ＯＳ７０１、アプリケーションプログラム１０２、ドライバ７０２及びドライバ７０３が格納される。ホストメモリ７０７には、さらに、ホストＰＣ７００とデバイス１４０等との間で転送されるデータ等が一時的に格納される。
【００９１】
ドライバ７０２及び７０３は、ＯＳ７０１がデバイス１４０及び１５０を制御するために実行されるソフトウエアである。図７において、ドライバ７０２及び７０３は、それぞれ、「ドライバ１」及び「ドライバ２」と表示される。本実施の形態のドライバ７０２は、少なくとも、データ格納処理部１０５を含む。ドライバ７０３も、ドライバ７０２と同様、データ格納処理部（図示省略）を含んでもよい。
【００９２】
ドライバ７０２及び７０３は、ＣＰＵ１１０によって実行される。このため、以下の説明においてドライバ７０２等が実行する処理は、実際には、ＣＰＵ１１０によって実行される。
【００９３】
ホスト側ブリッジ７２０は、ホストＰＣ７００をスイッチファブリック１３０に接続するための処理（例えば、プロトコル変換等）を実行する。図７に示すホスト側ブリッジ７２０は、少なくとも、アドレス変換処理部１２１、アドレス変換テーブル１２２、データ転送処理部７２３及びＤＭＡ転送要求処理部７２４を含む。
【００９４】
図８は、本発明の第１の実施の形態の変形例のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【００９５】
具体的には、図８は、ホストＰＣ７００からデバイス１７０にデータを転送するために実行される一連の処理を示す。図８に示す処理のうち、図３に示したものと同様の処理については、詳細な説明を省略する。
【００９６】
最初に、ドライバ７０２のデータ格納処理部１０５は、これから転送されるデータ、及び、そのデータが格納されるホストメモリ７０７のアドレスを、ホストメモリ７０７に格納するための書き込み要求を発行する（８０１）。ステップ８０１の書き込み要求に従ってデータ及びアドレスの格納が完了すると、ドライバ７０２は、完了通知を受信する（８０２）。ステップ８０１及び８０２は、図３のステップ３０１及び３０２と同様である。
【００９７】
次に、ドライバ７０２は、ホスト側ブリッジ７２０のデータ転送処理部７２３を起動する（８０３）。
【００９８】
ホスト側ブリッジ７２０のデータ転送処理部７２３は、ホストメモリ７０７に対する読み込み要求を発行する（８０４）。その結果、これから転送されるデータ、及び、そのデータが格納されたホストメモリ７０７のアドレスが、ホストメモリ７０７からホスト側ブリッジ７２０に読み込まれる（８０５）。ステップ８０４及び８０５は、図３のステップ３０４及び３０５と同様である。
【００９９】
ホスト側ブリッジ７２０のアドレス変換処理部１２１は、アドレス変換テーブル１２２に基づいて、ステップ８０５において読み込まれたホストメモリ７０７のアドレスを、対応するブリッジメモリ１４２のアドレスに変換する（後述する図１０のステップ１００２参照）。このアドレス変換は、図３において説明したものと同様である。
【０１００】
次に、データ転送処理部７２３は、これから転送されるデータ（すなわち、ステップ８０５において読み込まれたデータ）及びアドレス変換処理部１２１によって変換されたアドレスをブリッジメモリ１４２に格納するための書き込み要求を発行する（８０６）。ステップ８０６の要求に応じたデータ及びアドレスの格納が完了すると、ホスト側ブリッジ７２０は完了通知を受信する（８０７）。ステップ８０６及び８０７は、図３のステップ３０６及び３０７と同様である。
【０１０１】
ホスト側ブリッジ７２０が完了通知（８０７）を受信すると、ＤＭＡ転送要求処理部７２４は、ＤＭＡ転送要求をＤＭＡエンジン１４３のＤＭＡ転送処理部１４４に送信する（８０８）。
【０１０２】
ＤＭＡ転送要求（８０８）を受信したＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するアドレス読み込み要求を発行する（８０９）。その結果、ブリッジメモリ１４２に格納されたアドレスが読み込まれる（８１０）。ここで読み込まれるアドレスは、ステップ８０６の書き込み要求の結果格納されたアドレスである。
【０１０３】
次に、ＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するデータ読み込み要求を発行する（８１１）。この読み込み要求は、ステップ８１０において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ１４２の、ステップ８１０において読み込まれたアドレスから、これから転送されるデータが読み込まれる（８１２）。ここで読み込まれるデータは、ステップ８０６の書き込み要求の結果格納されたデータである。
【０１０４】
次に、ＤＭＡ転送処理部１４４は、ステップ８１２において読み込まれたデータをデバイス１７０に送信する（８１３）。ステップ８０９から８１３は、それぞれ、図３のステップ３１０から３１４と同様である。
【０１０５】
以上で、ホストＰＣ７００からデバイス１７０へのデータの転送が終了する。
【０１０６】
上記のステップ８０６において、データ転送処理部７２３は、これから転送されるデータと、そのデータが格納されるブリッジメモリ１４２のアドレスとをブリッジメモリ１４２に書き込むことを要求する。しかし、データ転送処理部７２３は、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ７０７のアドレスのみをブリッジメモリ１４２に書き込むことを要求してもよい。このような方法は、ブリッジメモリ１４２の容量が十分に大きくない場合に有効である。
【０１０７】
この場合、ブリッジメモリ１４２には、アドレス変換処理部１２１によって変換されていないアドレスが格納される。そして、ＤＭＡ転送処理部１４４は、ステップ８１１において、ホストメモリ７０７からデータを読み込むことを要求し、ステップ８１２において、ホストメモリ７０７から読み込まれたデータを取得する。
【０１０８】
次に、図８に示すデータ転送処理において、ドライバ７０２及びホスト側ブリッジ７２０が実行する処理について、図９及び図１０を参照して詳細に説明する。ＤＭＡエンジン１４３が実行する処理は、図６に示す通りであるため、説明を省略する。図９及び図１０に示す処理のうち、既に他の図を参照して説明した処理については、詳細な説明を省略する。
【０１０９】
図９は、本発明の第１の実施の形態の変形例のドライバ７０２が実行する処理を示すフローチャートである。
【０１１０】
最初に、ドライバ７０２のデータ格納処理部１０５が、ホストメモリ７０７にデータ及びアドレスを格納する（９０１）。ステップ９０１は、図８におけるステップ８０１及び８０２に相当する。
【０１１１】
次に、ドライバ７０２は、ホスト側ブリッジ７２０のデータ転送処理部７２３を起動する（９０２）。ステップ９０２は、図８におけるステップ８０３に相当する。
【０１１２】
以上でドライバ７０２は処理を終了する。
【０１１３】
図１０は、本発明の第１の実施の形態の変形例のホスト側ブリッジ７２０が実行する処理を示すフローチャートである。
【０１１４】
図８のステップ８０３において起動されたホスト側ブリッジ７２０のデータ転送処理部７２３は、図１０に示す処理を開始する。
【０１１５】
最初に、ホスト側ブリッジ７２０のデータ転送処理部７２３が、ホストメモリ７０７からデータ及びアドレスを読み込む（１００１）。ステップ１００１は、図８のステップ８０４及び８０５に相当する。
【０１１６】
次に、ホスト側ブリッジ７２０のアドレス変換処理部１２１は、アドレス変換テーブル１２２を参照して、アドレスを変換する（１００２）。
【０１１７】
次に、データ転送処理部７２３は、データ及びステップ１００２において変換されたアドレスをブリッジメモリ１４２に書き込む（１００３）。ステップ１００３は、図８のステップ８０６に相当する。
【０１１８】
次に、データ転送処理部７２３は、ステップ１００３の書き込みが成功したか否かを判定する（１００４）。例えば、ステップ１００３が実行された後、所定の時間内にデータ転送処理部７２３が完了通知（８０７）を受信した場合、ステップ１００４において「成功」と判定されてもよい。一方、データ転送処理部７２３が所定の時間内に完了通知（８０７）を受信しなかった場合、あるいは、データ転送処理部７２３が書き込み失敗を示す通知を受信した場合、ステップ１００４において「失敗」と判定されてもよい。
【０１１９】
ステップ１００４において「失敗」と判定された場合、処理はステップ１００３に戻り、再びデータ等の書き込みが実行される。
【０１２０】
一方、ステップ１００４において「成功」と判定された場合、ホスト側ブリッジ７２０のＤＭＡ転送要求処理部７２４が、ＤＭＡエンジン１４３に対して、ＤＭＡ転送要求を発行する（１００５）。ステップ１００５は、図８におけるステップ８０８に相当する。
【０１２１】
以上でホスト側ブリッジ７２０は処理を終了する。
【０１２２】
次に、本発明の第２の実施の形態について説明する。
【０１２３】
図１１は、本発明の第２の実施の形態のリモートＩ／Ｏシステムのブロック図である。
【０１２４】
図１１に示すリモートＩ／Ｏシステムは、図１に示すホストＰＣ１００及びホスト側ブリッジ１２０を、それぞれ、ホストＰＣ１１００及びホスト側ブリッジ１１２０に置き換えることによって構成される。図１１において、例えばＣＰＵ１１０のように、図１と同じ符号が付された部分は、図１に示したものと同じである。図１１に示すリモートＩ／Ｏシステムのうち、図１と同じ部分については、説明を省略する。
【０１２５】
ホストＰＣ１１００は、少なくともＣＰＵ１１０及びホストメモリ１１０７を備える計算機である。
【０１２６】
ホストメモリ１１０７には、少なくとも、ＯＳ１１０１、アプリケーションプログラム１０２、ドライバ１１０２及びドライバ１１０３が格納される。ホストメモリ１１０７には、さらに、ホストＰＣ１１００とデバイス１４０等との間で転送されるデータ等が一時的に格納される。
【０１２７】
ドライバ１１０２及び１１０３は、ＯＳ１１０１がデバイス１４０及び１５０を制御するために実行されるソフトウエアである。図１１において、ドライバ１１０２及び１１０３は、それぞれ、「ドライバ１」及び「ドライバ２」と表示される。本実施の形態のドライバ１１０２は、少なくとも、ＤＭＡ転送要求処理部１０６、アドレス変換処理部１１０４、アドレス変換テーブル１１０５及びデータ転送処理部１１０６を含む。ドライバ１１０３も、ドライバ１１０２と同様、ＤＭＡ転送要求処理部（図示省略）、アドレス変換処理部（図示省略）、アドレス変換テーブル（図示省略）及びデータ転送処理部（図示省略）を含んでもよい。
【０１２８】
アドレス変換テーブル１１０５は、図２に示すアドレス変換テーブル１２２と同様であるため、説明を省略する。ドライバ１１０２内の各処理部が実行する処理については、後で図１２及び図１３を参照して説明する。
【０１２９】
ドライバ１１０２及び１１０３は、ＣＰＵ１１０によって実行される。このため、以下の説明においてドライバ１１０２等が実行する処理は、実際には、ＣＰＵ１１０によって実行される。
【０１３０】
ホスト側ブリッジ１１２０は、ホストＰＣ１１００をスイッチファブリック１３０に接続するための処理（例えば、プロトコル変換等）を実行する。
【０１３１】
図１２は、本発明の第２の実施の形態のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【０１３２】
具体的には、図１２は、ホストＰＣ１１００からデバイス１７０にデータを転送するために実行される一連の処理を示す。図１２に示す処理のうち、図３に示したものと同様の処理については、詳細な説明を省略する。
【０１３３】
最初に、ドライバ１１０２のアドレス変換処理部１１０４は、アドレス変換テーブル１１０５を参照して、これから転送されるデータが格納されるホストメモリ１１０７のアドレスを、ブリッジメモリ１４２のアドレスに変換する。
【０１３４】
次に、ドライバ１１０２のデータ転送処理部１１０６は、これから転送されるデータ及びアドレスをブリッジメモリ１４２に格納するための書き込み要求を発行する（１２０１）。その結果、これから転送されるデータが、ブリッジメモリ１４２のうち、アドレス変換処理部１１０４によって変換されたアドレスに格納される。さらに、そのデータが格納されたアドレスの値が、ブリッジメモリ１４２の別のアドレスに格納される。ステップ１２０１の要求に応じたデータ及びアドレスの格納が完了すると、ドライバ１１０２が完了通知を受信する（１２０２）。
【０１３５】
ドライバ１１０２が完了通知（１２０２）を受信すると、ＤＭＡ転送要求処理部１０６は、ＤＭＡ転送要求をＤＭＡエンジン１４３のＤＭＡ転送処理部１４４に送信する（１２０３）。ステップ１２０３は、図３のステップ３０９と同様である。
【０１３６】
ＤＭＡ転送要求（１２０３）を受信したＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するアドレス読み込み要求を発行する（１２０４）。その結果、ブリッジメモリ１４２に格納されたアドレスが読み込まれる（１２０５）。ここで読み込まれるアドレスは、ステップ１２０１の書き込み要求の結果格納されたアドレスである。
【０１３７】
次に、ＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するデータ読み込み要求を発行する（１２０６）。この読み込み要求は、ステップ１２０５において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ１４２の、ステップ１２０５において読み込まれたアドレスから、これから転送されるデータが読み込まれる（１２０７）。ここで読み込まれるデータは、ステップ１２０１の書き込み要求の結果格納されたデータである。
【０１３８】
次に、ＤＭＡ転送処理部１４４は、ステップ１２０７において読み込まれたデータをデバイス１７０に送信する（１２０８）。ステップ１２０４から１２０８は、それぞれ、図３のステップ３１０から３１４と同様である。
【０１３９】
以上で、ホストＰＣ１１００からデバイス１７０へのデータの転送が終了する。
【０１４０】
上記のステップ１２０１において、データ転送処理部１１０６は、これから転送されるデータと、そのデータが格納されるブリッジメモリ１４２のアドレスとをブリッジメモリ１４２に書き込むことを要求する。しかし、データ転送処理部１１０６は、ステップ１２０１において、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ１１０７のアドレスのみをブリッジメモリ１４２に書き込むことを要求してもよい。このような方法は、ブリッジメモリ１４２の容量が十分に大きくない場合に有効である。
【０１４１】
この場合、ブリッジメモリ１４２には、アドレス変換処理部１１０４によって変換されていないアドレスが格納される。そして、ＤＭＡ転送処理部１４４は、ステップ１２０６において、ホストメモリ１１０７からデータを読み込むことを要求し、ステップ１２０７において、ホストメモリ１１０７から読み込まれたデータを取得する。
【０１４２】
あるいは、データ転送処理部１１０６は、ステップ１２０１において、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータのみをブリッジメモリ１４２に書き込むことを要求してもよい。
【０１４３】
この場合、これから転送されるデータは、ブリッジメモリ１４２の、アドレス変換処理部１１０４によって変換されたアドレスが示す領域に格納される。さらに、これから転送されるデータが格納されるブリッジメモリ１４２のアドレス（すなわち、アドレス変換処理部１１０４によって変換されたアドレス）が、ホストメモリ１１０７に格納される。そして、ＤＭＡ転送処理部１４４は、ステップ１２０４において、ホストメモリ１１０７からアドレスを読み込むことを要求し、ステップ１２０５において、ホストメモリ１１０７から読み込まれたアドレスを取得する。
【０１４４】
その後、ステップ１２０６において、ＤＭＡ転送処理部１４４は、ステップ１２０５において取得したアドレスを対象として、データの読み込み要求を発行する。その結果、ステップ１２０７において、ブリッジメモリ１４２から、これから転送されるデータが読み込まれる。
【０１４５】
次に、図１２に示すデータ転送処理において、ドライバ１１０２が実行する処理について、図１３を参照して説明する。ＤＭＡエンジン１４３が実行する処理は、図６に示す通りであるため、説明を省略する。図１３に示す処理のうち、既に他の図を参照して説明した処理については、詳細な説明を省略する。
【０１４６】
図１３は、本発明の第２の実施の形態のドライバ１１０２が実行する処理を示すフローチャートである。
【０１４７】
最初に、ドライバ１１０２のアドレス変換処理部１１０４は、アドレス変換テーブル１１０５を参照して、これから転送されるデータが格納されるホストメモリ１１０７のアドレスを、ブリッジメモリ１４２のアドレスに変換する（１３０１）。
【０１４８】
次に、ドライバ１１０２のデータ転送処理部１１０６は、データ及びアドレスをブリッジメモリ１４２に書き込む（１３０２）。ステップ１３０２は、図１２のステップ１２０１及び１２０２に相当する。
【０１４９】
次に、ドライバ１１０２のＤＭＡ転送要求処理部１０６は、ＤＭＡエンジン１４３に対して、ＤＭＡ転送要求を発行する（１３０３）。ステップ１３０３は、図１２のステップ１２０３に相当する。
【０１５０】
以上でドライバ１１０２は処理を終了する。
【０１５１】
次に、本発明の第３の実施の形態について説明する。
【０１５２】
図１４は、本発明の第３の実施の形態のリモートＩ／Ｏシステムのブロック図である。
【０１５３】
図１４に示すリモートＩ／Ｏシステムは、図１に示すホストＰＣ１００及びホスト側ブリッジ１２０を、それぞれ、ホストＰＣ１４００及びホスト側ブリッジ１４２０に置き換えることによって構成される。図１４において、例えばＣＰＵ１１０のように、図１と同じ符号が付された部分は、図１に示したものと同じである。図１４に示すリモートＩ／Ｏシステムのうち、図１と同じ部分については、説明を省略する。
【０１５４】
ホストＰＣ１４００は、少なくともＣＰＵ１１０及びホストメモリ１４０８を備える計算機である。
【０１５５】
ホストメモリ１４０８には、ＯＳ１４０１、ＯＳ１４０２、アプリケーションプログラム１４０３、ドライバ１４０４、ドライバ１４０５及びハイパバイザ１４１０が格納される。ホストメモリ１４０８には、さらに、ホストＰＣ１４００とデバイス１４０等との間で転送されるデータ等が一時的に格納される。
【０１５６】
ハイパバイザ１４１０は、ホストＰＣ１４００の資源を仮想化するための処理を実行するソフトウエアである。ハイパバイザ１４１０によって、単一のＣＰＵ１１０上で複数のＯＳ１４０１等が稼動することができる。なお、図１４には二つのＯＳ１４０１及び１４０２を示すが、本実施の形態のホストメモリ１４０８には、単一のＣＰＵ１１０上で稼動する任意の数のＯＳが格納されてよい。以下、ＯＳ１４０１についてのみ説明するが、ＯＳ１４０２もＯＳ１４０１と同等の構成を備え、同等の処理を実行してもよい。
【０１５７】
図１４には、ホストＰＣ１４００の資源を仮想化するためにハイパバイザ１４１０が使用される場合を示す。しかし、ハイパバイザ１４１０以外の仮想化手段が使用されても、本実施の形態を実現することができる。
【０１５８】
ドライバ１４０４及び１４０５は、ＯＳ１４０１がデバイス１４０及び１５０を制御するために実行されるソフトウエアである。図１４において、ドライバ１４０４及び１４０５は、それぞれ、「ドライバ１」及び「ドライバ２」と表示される。本実施の形態のドライバ１４０４は、少なくとも、データ格納処理部１４０６及びＤＭＡ転送要求処理部１４０７を含む。ドライバ１４０５も、ドライバ１４０４と同様、データ格納処理部（図示省略）及びＤＭＡ転送要求処理部（図示省略）を含んでもよい。
【０１５９】
ハイパバイザ１４１０は、少なくとも、アドレス変換処理部１４１１、アドレス変換テーブル１４１２、ＤＭＡ要求捕捉処理部１４１３、ＤＭＡ転送要求処理部１４１４及びデータ転送処理部１４１５を含む。
【０１６０】
ハイパバイザ１４１０は、ＣＰＵ１１０によって実行されるソフトウエアである。このため、以下の説明においてハイパバイザ１４１０内の各処理部が実行する処理は、実際には、ＣＰＵ１１０によって実行される。
【０１６１】
ホスト側ブリッジ１４２０は、ホストＰＣ１４００をスイッチファブリック１３０に接続するための処理（例えば、プロトコル変換等）を実行する。
【０１６２】
図１５は、本発明の第３の実施の形態のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【０１６３】
具体的には、図１５は、ホストＰＣ１４００からデバイス１７０にデータを転送するために実行される一連の処理を示す。図１５に示す処理のうち、図３等に示したものと同様の処理については、詳細な説明を省略する。
【０１６４】
最初に、ドライバ１４０４のデータ格納処理部１４０６は、これから転送されるデータ、及び、そのデータが格納されるホストメモリ１４０８のアドレスを、ホストメモリ１４０８に格納するための書き込み要求を発行する（１５０１）。ステップ１５０１の書き込み要求に従ってデータ及びアドレスの格納が完了すると、ドライバ１４０４は、完了通知を受信する（１５０２）。ステップ１５０１及び１５０２は、図３のステップ３０１及び３０２と同様である。
【０１６５】
ドライバ１４０４が完了通知（１５０２）を受信すると、ＤＭＡ転送要求処理部１４０７は、ＤＭＡ転送要求をＤＭＡエンジン１４３のＤＭＡ転送処理部１４４に送信する（１５０３）。ステップ１５０３は、図３のステップ３０９と同様である。
【０１６６】
ステップ１５０３のＤＭＡ転送要求はＤＭＡエンジン１４３に対して送信されたものであるが、ハイパバイザ１４１０のＤＭＡ要求捕捉処理部１４１３は、このＤＭＡ転送要求（１５１３）を捕捉する。
【０１６７】
次に、ハイパバイザ１４１０のデータ転送処理部１４１５は、ＤＭＡ要求捕捉処理部１４１３が捕捉したＤＭＡ転送要求に従って、ホストメモリ１４０８に対する読み込み要求を発行する（１５０４）。その結果、これから転送されるデータ、及び、そのデータが格納されたホストメモリ１４０８のアドレスが、ホストメモリ１４０８からハイパバイザ１４１０に読み込まれる（１５０５）。ステップ１５０４及び１５０５において実行される処理は、図３のステップ３０４及び３０５においてホスト側ブリッジ１２０のデータ転送処理部１２３が実行する処理と同様である。
【０１６８】
ハイパバイザ１４１０のアドレス変換処理部１４１１は、アドレス変換テーブル１４１２に基づいて、ステップ１５０５において読み込まれたホストメモリ１４０８のアドレスを、対応するブリッジメモリ１４２のアドレスに変換する（後述する図１７のステップ１７０３参照）。このアドレス変換は、図３において説明したものと同様である。
【０１６９】
次に、データ転送処理部１４１５は、これから転送されるデータ（すなわち、ステップ１５０５において読み込まれたデータ）及びアドレス変換処理部１４１１によって変換されたアドレスをブリッジメモリ１４２に格納するための書き込み要求を発行する（１５０６）。ステップ１５０６の要求に応じたデータ及びアドレスの格納が完了すると、ハイパバイザ１４１０が完了通知を受信する（１５０７）。ステップ１５０６及び１５０７において実行される処理は、図３のステップ３０６及び３０７においてホスト側ブリッジ１２０のデータ転送処理部１２３が実行する処理と同様である。
【０１７０】
ハイパバイザ１４１０が完了通知（１５０７）を受信すると、ハイパバイザ１４１０のＤＭＡ転送要求処理部１４１４は、ＤＭＡ転送要求をＤＭＡエンジン１４３のＤＭＡ転送処理部１４４に送信する（１５０８）。
【０１７１】
ＤＭＡ転送要求（１５０８）を受信したＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するアドレス読み込み要求を発行する（１５０９）。その結果、ブリッジメモリ１４２に格納されたアドレスが読み込まれる（１５１０）。ここで読み込まれるアドレスは、ステップ１５０６の書き込み要求の結果格納されたアドレスである。
【０１７２】
次に、ＤＭＡ転送処理部１４４は、ブリッジメモリ１４２に対するデータ読み込み要求を発行する（１５１１）。この読み込み要求は、ステップ１５１０において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ１４２の、ステップ１５１０において読み込まれたアドレスから、これから転送されるデータが読み込まれる（１５１２）。ここで読み込まれるデータは、ステップ１５０６の書き込み要求の結果格納されたデータである。
【０１７３】
次に、ＤＭＡ転送処理部１４４は、ステップ１５１２において読み込まれたデータをデバイス１７０に送信する（１５１３）。ステップ１５０９から１５１３は、それぞれ、図３のステップ３１０から３１４と同様である。
【０１７４】
以上で、ホストＰＣ１４００からデバイス１７０へのデータの転送が終了する。
【０１７５】
上記のステップ１５０６において、データ転送処理部１４１５は、これから転送されるデータと、そのデータが格納されるブリッジメモリ１４２のアドレスとをブリッジメモリ１４２に書き込むことを要求する。しかし、データ転送処理部１４１５は、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ１４０８のアドレスのみをブリッジメモリ１４２に書き込むことを要求してもよい。このような方法は、ブリッジメモリ１４２の容量が十分に大きくない場合に有効である。
【０１７６】
この場合、ブリッジメモリ１４２には、アドレス変換処理部１４１１によって変換されていないアドレスが格納される。そして、ＤＭＡ転送処理部１４４は、ステップ１５１１において、ホストメモリ１４０８からデータを読み込むことを要求し、ステップ１５１２において、ホストメモリ１４０８から読み込まれたデータを取得する。
【０１７７】
次に、図１５に示すデータ転送処理において、ドライバ１４０４及びハイパバイザ１４１０が実行する処理について、図１６及び図１７を参照して詳細に説明する。ＤＭＡエンジン１４３が実行する処理は、図６に示す通りであるため、説明を省略する。図１６及び図１７に示す処理のうち、既に他の図を参照して説明した処理については、詳細な説明を省略する。
【０１７８】
図１６は、本発明の第３の実施の形態のドライバ１４０４が実行する処理を示すフローチャートである。
【０１７９】
最初に、ドライバ１４０４のデータ格納処理部１４０６が、ホストメモリ１４０８にデータ及びアドレスを格納する（１６０１）。ステップ１６０１は、図１５におけるステップ１５０１及び１５０２に相当する。
【０１８０】
次に、ドライバ１４０４のＤＭＡ転送要求処理部１４０７が、ＤＭＡエンジン１４３に対して、ＤＭＡ転送要求を発行する（１６０２）。ステップ１６０２は、図１５におけるステップ１５０３に相当する。
【０１８１】
図１７は、本発明の第３の実施の形態のハイパバイザ１４１０が実行する処理を示すフローチャートである。
【０１８２】
最初に、ハイパバイザ１４１０のＤＭＡ要求捕捉処理部１４１３は、ＤＭＡ転送要求を捕捉したか否かを判定する（１７０１）。
【０１８３】
ステップ１７０１において、ＤＭＡ転送要求を捕捉していないと判定された場合、ドライバ１４０４からＤＭＡ転送要求が送信されていない。この場合、処理はステップ１７０１に戻り、ＤＭＡ転送要求が捕捉されるのを待つ。
【０１８４】
一方、ステップ１７０１において、ＤＭＡ転送要求を捕捉したと判定された場合、ドライバ１４０４からＤＭＡ転送要求（図５のステップ１５０３）が送信されている。この場合、ハイパバイザ１４１０のデータ転送処理部１４１５は、ホストメモリ１４０８からデータ及びアドレスを読み込む（１７０２）。ステップ１７０２は、図１５のステップ１５０４及び１５０５に相当する。
【０１８５】
次に、ハイパバイザ１４１０のアドレス変換処理部１４１１は、アドレス変換テーブル１４１２を参照して、アドレスを変換する（１７０３）。
【０１８６】
次に、データ転送処理部１４１５は、データ及びステップ１７０３において変換されたアドレスをブリッジメモリ１４２に書き込む（１７０４）。ステップ１７０４は、図１５のステップ１５０６に相当する。
【０１８７】
次に、データ転送処理部１４１５は、ステップ１７０４の書き込みが成功したか否かを判定する（１７０５）。この判定は、図１０のステップ１００４と同様の方法で実行されてもよい。
【０１８８】
ステップ１７０５において「失敗」と判定された場合、処理はステップ１７０４に戻り、再びデータ等の書き込みが実行される。
【０１８９】
一方、ステップ１７０５において「成功」と判定された場合、ハイパバイザ１４１０のＤＭＡ転送要求処理部１４１４が、ＤＭＡエンジン１４３に対して、ＤＭＡ転送要求を発行する（１７０６）。ステップ１７０６は、図１５におけるステップ１５０８に相当する。
【０１９０】
以上でハイパバイザ１４１０は処理を終了する。
【０１９１】
次に、以上の本発明の第１から第３の実施の形態の効果を説明する。
【０１９２】
図１８は、従来のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【０１９３】
具体的には、図１に示すリモートＩ／Ｏシステムに本発明が適用されていない場合に、ホストＰＣ１００からデバイス１７０にデータを転送するために実行される処理を示す。
【０１９４】
最初に、ドライバ１０３のデータ格納処理部１０５は、これから転送されるデータ、及び、そのデータが格納されるホストメモリ１０７のアドレスを、ホストメモリ１０７に格納するための書き込み要求を発行する（１８０１）。これらの格納が完了すると、ドライバ１０３が完了通知を受信する（１８０２）。
【０１９５】
次に、ドライバ１０３のＤＭＡ転送要求処理部１０６は、ＤＭＡ転送要求をＤＭＡエンジン１４３のＤＭＡ転送処理部１４４に送信する（１８０３）。
【０１９６】
ＤＭＡ転送要求（１８０３）を受信したＤＭＡ転送処理部１４４は、ホストメモリ１０７に対するアドレス読み込み要求を発行する（１８０４）。その結果、ホストメモリ１０７に格納されたアドレスが読み込まれる（１８０５）。ここで読み込まれるアドレスは、ステップ１８０１の書き込み要求の結果格納されたアドレスである。
【０１９７】
次に、ＤＭＡ転送処理部１４４は、ホストメモリ１０７に対するデータ読み込み要求を発行する（１８０６）。この読み込み要求は、ステップ１８０５において読み込まれたアドレスを対象としている。その結果、ホストメモリ１０７の、ステップ１８０５において読み込まれたアドレスから、これから転送されるデータが読み込まれる（１８０７）。ここで読み込まれるデータは、ステップ１８０１の書き込み要求の結果格納されたデータである。
【０１９８】
次に、ＤＭＡ転送処理部１４４は、ステップ１８０７において読み込まれたデータをデバイス１７０に送信する（１８０８）。
【０１９９】
以上で、ホストＰＣ１００からデバイス１７０へのデータの転送が終了する。
【０２００】
図１８に示すように、従来のリモートＩ／Ｏシステムにおいて、ＤＭＡ転送要求（１８０３）、ＤＭＡエンジン１４３によるアドレス読み込み処理（１８０４、１８０５）、及び、ＤＭＡエンジン１４３によるデータ読み込み処理（１８０６、１８０７）がスイッチファブリック１３０を経由する。
【０２０１】
なお、ローカルＩ／Ｏシステムにおいては、ホストＰＣ１００とデバイス１４０とがスイッチファブリック１３０を経由せずに直接接続される。このため、ローカルＩ／Ｏシステムにおいて図１８と同様のデータ転送が実行される場合、上記のステップ１８０３から１８０７までの処理がスイッチファブリック１３０を経由しない。
【０２０２】
図１９は、本発明の実施の形態の効果の説明図である。
【０２０３】
具体的には、図１９は、データ転送のレイテンシを比較する図である。図１９において、横軸は、データ転送のレイテンシ（遅延時間）を示す。図１９において、レイテンシの内訳が、実線及び破線によって示される。実線は、基本処理のレイテンシ、すなわち、スイッチファブリック１３０を経由しない転送のレイテンシを示す。破線は、スイッチファブリック１３０を経由する転送のレイテンシを示す。
【０２０４】
まず、ローカルＩ／Ｏシステムにおけるレイテンシ１９１０について、図１８を参照しながら説明する。レイテンシ１９１０は、レイテンシ１９１１、１９１２、１９１３及び１９１４からなる。
【０２０５】
レイテンシ１９１１は、ドライバ１０３がデータ及びアドレスをホストメモリ１０７に書き込む処理の所要時間である。具体的には、レイテンシ１９１１は、図１８のステップ１８０１及び１８０２の所要時間である。
【０２０６】
レイテンシ１９１２は、ドライバ１０３がＤＭＡエンジン１４３に対してＤＭＡ転送要求を送信する処理の所要時間である。具体的には、レイテンシ１９１２は、図１８のステップ１８０３の所要時間である。ただし、ローカルＩ／Ｏシステムにおいて、ステップ１８０３はスイッチファブリック１３０を経由しない。
【０２０７】
レイテンシ１９１３は、ＤＭＡエンジン１４３がホストメモリ１０７からアドレスを読み込む処理の所要時間である。具体的には、レイテンシ１９１３は、図１８のステップ１８０４及び１８０５の所要時間である。ただし、ローカルＩ／Ｏシステムにおいて、ステップ１８０４及び１８０５はスイッチファブリック１３０を経由しない。
【０２０８】
レイテンシ１９１４は、ＤＭＡエンジン１４３がホストメモリ１０７からデータを読み込む処理の所要時間である。具体的には、レイテンシ１９１４は、図１８のステップ１８０６及び１８０７の所要時間である。ただし、ローカルＩ／Ｏシステムにおいて、ステップ１８０６及び１８０７はスイッチファブリック１３０を経由しない。
【０２０９】
次に、本発明が適用されないリモートＩ／Ｏシステムにおけるデータ転送のレイテンシ１９２０を説明する。レイテンシ１９２０は、レイテンシ１９２１、１９２２、１９２３及び１９２４からなる。
【０２１０】
レイテンシ１９２１は、ドライバ１０３がデータ及びアドレスをホストメモリ１０７に書き込む処理の所要時間である。レイテンシ１９２１は、レイテンシ１９１１と同等である。
【０２１１】
レイテンシ１９２２は、ドライバ１０３がＤＭＡエンジン１４３に対してＤＭＡ転送要求を送信する処理の所要時間である。具体的には、レイテンシ１９２２は、図１８のステップ１８０３の所要時間である。ステップ１８０３はスイッチファブリック１３０を経由する。このため、レイテンシ１９２２は、レイテンシ１９１２と同等のレイテンシ１９２２Ａに加えて、レイテンシ１９２２Ｂを含む。レイテンシ１９２２Ｂは、ＤＭＡ転送要求がスイッチファブリック１３０を通過するための所要時間である。
【０２１２】
レイテンシ１９２３は、ＤＭＡエンジン１４３がホストメモリ１０７からアドレスを読み込む処理の所要時間である。具体的には、レイテンシ１９２３は、図１８のステップ１８０４及び１８０５の所要時間である。ステップ１８０４及び１８０５はスイッチファブリック１３０を経由する。このため、レイテンシ１９２３は、レイテンシ１９１３と同等のレイテンシ１９２３Ａに加えて、レイテンシ１９２３Ｂを含む。レイテンシ１９２３Ｂは、アドレス読み込み要求及び読み込まれたアドレスがスイッチファブリック１３０を通過するための所要時間である。
【０２１３】
レイテンシ１９２４は、ＤＭＡエンジン１４３がホストメモリ１０７からデータを読み込む処理の所要時間である。具体的には、レイテンシ１９２４は、図１８のステップ１８０６及び１８０７の所要時間である。ステップ１８０６及び１８０７はスイッチファブリック１３０を経由する。このため、レイテンシ１９２４は、レイテンシ１９１４と同等のレイテンシ１９２４Ａに加えて、レイテンシ１９２４Ｂを含む。レイテンシ１９２４Ｂは、データ読み込み要求及び読み込まれたデータがスイッチファブリック１３０を通過するための所要時間である。
【０２１４】
このように、リモートＩ／Ｏシステムにおけるレイテンシは、ローカルＩ／Ｏシステムにおけるレイテンシと比較して、要求及びデータ等がスイッチファブリック１３０を通過する時間（具体的には、レイテンシ１９２２Ｂ、１９２３Ｂ及び１９２４Ｂ）の分だけ増加する。
【０２１５】
次に、本発明が適用されたリモートＩ／Ｏシステムにおけるデータ転送のレイテンシ１９３０を説明する。具体的には、レイテンシ１９３０は、本発明の第２の実施の形態のデータ転送におけるレイテンシである（図１２参照）。レイテンシ１９３０は、レイテンシ１９３１、１９３２、１９３３及び１９３４からなる。
【０２１６】
レイテンシ１９３１は、ドライバ１１０２がデータ及びアドレスをブリッジメモリ１４２に書き込む処理の所要時間である。具体的には、レイテンシ１９３１は、図１２のステップ１２０１及び１２０２の所要時間である。ステップ１２０１及び１２０２はスイッチファブリック１３０を経由する。このため、レイテンシ１９３１は、レイテンシ１９１１と同等のレイテンシ１９３１Ａに加えて、レイテンシ１９３１Ｂを含む。レイテンシ１９３１Ｂは、書き込み要求及び完了通知がスイッチファブリック１３０を通過するための所要時間である。
【０２１７】
レイテンシ１９３２は、ドライバ１１０２がＤＭＡエンジン１４３に対してＤＭＡ転送要求を送信する処理の所要時間である。具体的には、レイテンシ１９３２は、図１２のステップ１２０３の所要時間である。ステップ１２０３はスイッチファブリック１３０を経由する。このため、レイテンシ１９３２は、レイテンシ１９１２と同等のレイテンシ１９３２Ａに加えて、レイテンシ１９２２Ｂと同等のレイテンシ１９３２Ｂを含む。
【０２１８】
レイテンシ１９３３は、ＤＭＡエンジン１４３がブリッジメモリ１４２からアドレスを読み込む処理の所要時間である。具体的には、レイテンシ１９３３は、図１２のステップ１２０４及び１２０５の所要時間である。ステップ１２０４及び１２０５はスイッチファブリック１３０を経由しない。このため、レイテンシ１９３３は、ローカルＩ／Ｏシステムのレイテンシ１９１３と同等である。
【０２１９】
レイテンシ１９３４は、ＤＭＡエンジン１４３がブリッジメモリ１４２からデータを読み込む処理の所要時間である。具体的には、レイテンシ１９３４は、図１２のステップ１２０６及び１２０７の所要時間である。ステップ１２０６及び１２０７はスイッチファブリック１３０を経由しない。このため、レイテンシ１９３４は、ローカルＩ／Ｏシステムのレイテンシ１９１４と同等である。
【０２２０】
結局、レイテンシ１９２０と１９３０とを比較すると、レイテンシ１９２０が、スイッチファブリック１３０を経由する三つのレイテンシ１９２２Ｂ、１９２３Ｂ及び１９２４Ｂを含むのに対し、レイテンシ１９３０は、スイッチファブリック１３０を経由する二つのレイテンシ１９３１Ｂ及び１９３２Ｂを含む。このため、レイテンシ１９３０は、レイテンシ１９２０と比較して、スイッチファブリックを経由する１回の処理の所要時間の分だけ小さくなる。
【０２２１】
このような差が生じる理由は、次の通りである。すなわち、データを書き込む側であるドライバ１１０２等は、これから転送されるデータが格納されるメモリ上のアドレスを知っている。このため、ドライバ１１０２等は、データとアドレスを同時にメモリに書き込むことができる。
【０２２２】
一方、データを読み込む側であるＤＭＡエンジン１４３は、これから転送されるデータがメモリ上のどのアドレスに格納されているかを知らない。このため、まず、メモリの所定の領域からアドレスを読み込み、次に、読み込まれたアドレスが示す領域から、データを読み込む。このように、ＤＭＡエンジン１４３は、アドレスの読み込み処理とデータの読み込み処理を順次実行する必要がある。
【０２２３】
従来は、ＤＭＡエンジン１４３がホストメモリ１０７からデータを読み込む処理がスイッチファブリック１３０を経由して実行された。その結果、アドレスを読み込む処理及びデータを読み込む処理がスイッチファブリック１３０を経由するため、それら二つの処理のレイテンシ（レイテンシ１９２３Ｂ及び１９２４Ｂ）が発生した。
【０２２４】
一方、本発明の実施の形態によれば、デバイス１４０側にブリッジメモリ１４２が設けられる。そして、ドライバ１１０２等がスイッチファブリック１３０を経由してブリッジメモリ１４２にデータを書き込む処理を実行する。このとき、アドレスとデータの書き込みが同時に実行されるため、スイッチファブリックを経由する一つの処理のレイテンシ（レイテンシ１９３１Ｂ）が発生する。すなわち、スイッチファブリックを経由する１回の処理のレイテンシが隠蔽される。このように、本発明の実施の形態によれば、スイッチファブリック１３０を経由する処理の回数を削減することによって、従来の処理と比較してレイテンシを削減し、その結果、データ転送のスループットを改善することができる。
【０２２５】
図１９に示すように、本発明の実施の形態によれば、１回の転送ごとに所定の量のレイテンシが削減される。このため、粒度が小さいデータ転送が実行される場合（すなわち、サイズの小さいデータが多くの回数転送される場合）にも、スループットを改善することができる。
【０２２６】
なお、本発明の第２の実施の形態において説明したように、図１２のステップ１２０１において、データ又はアドレスのいずれか一方のみをブリッジメモリに書き込むこともできる。例えばアドレスのみが書き込まれる場合、データを対象とする読み込み要求（１２０６）、及び、読み込まれたデータ（１２０７）がスイッチファブリック１３０を経由する。この場合、図１９において、データ読み込み処理のレイテンシ１９３４に、レイテンシ１９２４Ｂと同等のレイテンシが追加される。その結果、本発明の実施の形態のレイテンシが従来の技術のレイテンシと同等になる。
【０２２７】
しかし、この場合、スイッチファイブリック１３０を経由する処理は、ブリッジメモリ１４２への書き込み要求（１２０１）、書き込み要求に対する完了通知（１２０２）、ＤＭＡ転送要求（１２０３）、データ読み込み要求（１２０６）及び応答データ（１２０７）である。ここで、ステップ１２０１及び１２０２の書き込みにＰｏｓｔｅｄ  Ｗｒｉｔｅを適用することによって、ドライバ１１０２は、完了通知（１２０２）を待たずに次の処理を実行することができる。その結果、ステップ１２０１及び１２０２の処理がスイッチファブリックを経由するレイテンシを無視することができる。すなわち、図１９においてレイテンシ１９３１Ｂが削減されるため、本発明の実施の形態のレイテンシの合計は、従来のレイテンシより小さくなる。ステップ１２０１においてデータのみが書き込まれる場合、もしくはデータ及びアドレスが書き込まれる場合も同様である。
【０２２８】
ただし、Ｐｏｓｔｅｄ  Ｗｒｉｔｅを適用する場合、完了通知（１２０２）以外の手段によって、ステップ１２０１の書き込みを保証する必要がある。
【０２２９】
図１８に示す従来の技術によれば、スイッチファブリック１３０を経由する要求は、ＤＭＡ転送要求（１８０３）及び読み込み要求（１８０５から１８０７）のみである。このため、従来の技術にＰｏｓｔｅｄ  Ｗｒｉｔｅを適用することによって、スイッチファブリック１３０を経由する処理のレイテンシを削減することはできない。
【０２３０】
図１９のレイテンシ１９３０は、本発明の第２の実施の形態のデータ転送（図１２参照）のレイテンシを示す。一方、本発明の第１の実施の形態のデータ転送（図３参照）には、ホスト側ブリッジ１２０が介在する。このため、図１２の処理と比較すると、図３のステップ３０１から３０５及び３０８の所要時間の分だけレイテンシが増加する。ただし、これらのステップはいずれもスイッチファブリック１３０を経由しない。さらに、第１の実施の形態のリモートＩ／Ｏシステムでは、バースト転送を実行することによって、レイテンシを改善することができる。
【０２３１】
本発明の第１の実施の形態の変形例のデータ転送（図８参照）では、ＤＭＡ転送要求がホスト側ブリッジ７２０から発行される。このため、変形例のデータ転送のレイテンシは、図３に示す第１の実施の形態と比較して、ステップ３０８の所要時間の分だけ小さくなる。さらに、第１の実施の形態の変形例によれば、他の実施の形態と比較して、ドライバ７０２が実行する処理が少ない。このため、第１の実施の形態の変形例を実現するためのドライバを容易に作成することができる。
【０２３２】
本発明の第３の実施の形態のデータ転送（図１５参照）では、第１の実施の形態とほぼ同じ手順が実行される。このため、第３の実施の形態によるレイテンシの改善効果は、第１の実施の形態の変形例とほぼ同じである。ただし、第３の実施の形態によれば、ハイパバイザ１４１０が主要な処理を実行する。このため、従来と同じドライバを、改変することなく、ドライバ１４０４として使用することができる。
【０２３３】
上記は、ホストＰＣ１００とデバイス１４０等とがスイッチファブリック１３０を介して接続される場合の効果についての説明である。しかし、ホストＰＣ１００とデバイス１４０等とがいかなる経路を介して接続されていても、その経路を介するデータアクセス時にレイテンシが発生する場合、本発明の実施の形態を適用することによって、上記と同様の効果を期待することができる。
【図面の簡単な説明】
【０２３４】
【図１】本発明の第１の実施の形態のリモートＩ／Ｏシステムのブロック図である。
【図２】本発明の第１の実施の形態のアドレス変換テーブルの説明図である。
【図３】本発明の第１の実施の形態のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【図４】本発明の第１の実施の形態のドライバが実行する処理を示すフローチャートである。
【図５】本発明の第１の実施の形態のホスト側ブリッジが実行する処理を示すフローチャートである。
【図６】本発明の第１の実施の形態のＤＭＡエンジンが実行する処理を示すフローチャートである。
【図７】本発明の第１の実施の形態の変形例のリモートＩ／Ｏシステムのブロック図である。
【図８】本発明の第１の実施の形態の変形例のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【図９】本発明の第１の実施の形態の変形例のドライバが実行する処理を示すフローチャートである。
【図１０】本発明の第１の実施の形態の変形例のホスト側ブリッジが実行する処理を示すフローチャートである。
【図１１】本発明の第２の実施の形態のリモートＩ／Ｏシステムのブロック図である。
【図１２】本発明の第２の実施の形態のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【図１３】本発明の第２の実施の形態のドライバが実行する処理を示すフローチャートである。
【図１４】本発明の第３の実施の形態のリモートＩ／Ｏシステムのブロック図である。
【図１５】本発明の第３の実施の形態のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【図１６】本発明の第３の実施の形態のドライバが実行する処理を示すフローチャートである。
【図１７】本発明の第３の実施の形態のハイパバイザが実行する処理を示すフローチャートである。
【図１８】従来のリモートＩ／Ｏシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
【図１９】本発明の実施の形態の効果の説明図である。
【符号の説明】
【０２３５】
１００、７００、１１００、１４００  ホストＰＣ
１０１、７０１、１１０１、１４０１、１４０２  オペレーティングシステム（ＯＳ）
１０２、１４０３  アプリケーションプログラム
１０３、１０４、７０２、７０３、１１０２、１１０３、１４０４、１４０５  ドライバ
１０５、１４０６  データ格納処理部
１０６、７２４、１４０７、１４１４  ＤＭＡ転送要求処理部
１０７、７０７、１１０７、１４０８  ホストメモリ
１１０  ＣＰＵ
１２０、７２０、１１２０、１４２０  ホスト側ブリッジ
１２１、１１０４、１４１１  アドレス変換処理部
１２２、１１０５、１４１２  アドレス変換テーブル
１２３、７２３、１１０６、１４１５  データ転送処理部
１３０  スイッチファブリック
１４０、１５０、１７０  デバイス
１４１、１５１  デバイス側ブリッジ
１４２  ブリッジメモリ
１４３  ＤＭＡエンジン
１４４  ＤＭＡ転送処理部
１６０  ネットワーク
１４１０  ハイパバイザ
１４１３  ＤＭＡ要求捕捉処理部
【図１】
2008065515.tif 000003
【図２】
2008065515.tif 000004
【図３】
2008065515.tif 000005
【図４】
2008065515.tif 000006
【図５】
2008065515.tif 000007
【図６】
2008065515.tif 000008
【図７】
2008065515.tif 000009
【図８】
2008065515.tif 000010
【図９】
2008065515.tif 000011
【図１０】
2008065515.tif 000012
【図１１】
2008065515.tif 000013
【図１２】
2008065515.tif 000014
【図１３】
2008065515.tif 000015
【図１４】
2008065515.tif 000016
【図１５】
2008065515.tif 000017
【図１６】
2008065515.tif 000018
【図１７】
2008065515.tif 000019
【図１８】
2008065515.tif 000020
【図１９】
2008065515.tif 000021