図1は、本発明の第1の実施の形態のリモートI/Oシステムのブロック図である。
本実施の形態のリモートI/Oシステムは、少なくとも、ホストPC100、ホスト側ブリッジ120、デバイス140、デバイス側ブリッジ141、デバイス150、デバイス側ブリッジ151及びデバイス170を含む。ホストPC100、デバイス140及びデバイス150は、それぞれ、ホスト側ブリッジ120、デバイス側ブリッジ141及びデバイス側ブリッジ151と接続される。ホスト側ブリッジ120、デバイス側ブリッジ141及びデバイス側ブリッジ151は、スイッチファブリック130を介して相互に接続される。デバイス170は、ネットワーク160を介してデバイス140と接続される。
ホストPC100は、少なくともCPU110及びホストメモリ107を備える計算機である。
ホストPC100のCPU110は、ホストメモリ107に格納された種々のソフトウエアを実行するプロセッサである。
ホストメモリ107には、少なくとも、オペレーティングシステム(OS)101、アプリケーションプログラム102、ドライバ103及びドライバ104が格納される。ホストメモリ107には、さらに、ホストPC100とデバイス140等との間で転送されるデータ等が一時的に格納される。
アプリケーションプログラム102は、OS101の上で動作し、所定の業務を実現するプログラムである。
ドライバ103及び104は、OS101がデバイス140及び150に対するデータ転送を制御するために実行されるソフトウエア(いわゆるデバイスドライバ)である。図1において、ドライバ103及び104は、それぞれ、「ドライバ1」及び「ドライバ2」と表示される。本実施の形態のドライバ103は、少なくとも、データ格納処理部105及びDMA転送要求処理部106を含む。これらの処理部は、ドライバ103を構成するモジュールである。ドライバ104も、ドライバ103と同様、データ格納処理部(図示省略)及びDMA転送要求処理部(図示省略)を含んでもよい。
ドライバ103及び104は、CPU110によって実行される。このため、以下の説明においてドライバ103等が実行する処理は、実際には、CPU110によって実行される。
ホスト側ブリッジ120は、ホストPC100をスイッチファブリック130に接続するための処理(例えば、プロトコル変換等)を実行する。本実施の形態のホスト側ブリッジ120は、少なくとも、アドレス変換処理部121、アドレス変換テーブル122及びデータ転送処理部123を含む。
なお、ホスト側ブリッジ120は、ホストPC100に含まれてもよい。
アドレス変換テーブル122は、ホスト側ブリッジ120内のメモリ(図示省略)に格納される。アドレス変換処理部121及びデータ転送処理部123は、ホスト側ブリッジ120を構成するハードウエアによって実現されてもよいし、ホスト側ブリッジ120内のプロセッサ(図示省略)がメモリ(図示省略)に格納されたプログラムを実行することによって実現されてもよい。
スイッチファブリック130は、ホストPC100とデバイス140等との間のデータ転送経路を切り替える一つ以上のスイッチ(図示省略)を備える。ホスト側ブリッジ120とデバイス側ブリッジ141等は、スイッチファブリック130を介して、任意のプロトコルに基づく通信を実行することができる。例えば、ホスト側ブリッジ120とデバイス側ブリッジ141等は、PCI−EXPRESSに準拠する通信を実行してもよい。その場合、スイッチファブリック130を構成するスイッチは、Advanced Switchingの規格に準拠してもよい。
スイッチファブリック130によって、ホストPC100とデバイス140等との間のフレキシブルなI/Oが実現される。その一方で、ホストPC100とデバイス140等との間で転送されるデータが一つ以上のスイッチを通過するため、データI/Oのレイテンシが増加する。
なお、本実施の形態では、ホストPC100とデバイス140等とを接続するネットワークの一例として、スイッチファブリック130を示す。しかし、スイッチファブリック130は、いかなる形態のネットワークによって置き換えられてもよい。ホストPC100とデバイス140等とがどのような経路を介して接続されていても、本発明を適用することができる。
デバイス140及び150は、ホストPC100と、ネットワーク160に接続された機器(例えば、デバイス170)との間のデータI/Oを実行する。本実施の形態は、例として、デバイス140及び150がホストPC100をネットワーク160に接続するためのネットワークインターフェースカード(NIC)である場合について説明する。
デバイス140は、DMAエンジン143を備える。
デバイス側ブリッジ141は、デバイス140をスイッチファブリック130に接続するための処理を実行する。本実施の形態のデバイス側ブリッジ141は、少なくとも、ブリッジメモリ142を備える。
DMAエンジン143は、少なくとも、DMA(Direct Memory Access)転送を実行するDMA転送処理部144を備える。
なお、図1において、デバイス140、デバイス側ブリッジ141及びブリッジメモリ142は、それぞれ、「デバイス1」、「デバイス側ブリッジ1」及び「ブリッジメモリ1」と表示される。
一方、デバイス側ブリッジ151は、「デバイス側ブリッジ2」と表示される。デバイス150は、デバイス140と同様、DMAエンジン(図示省略)及びブリッジメモリ2(図示省略)を備えてもよい。
なお、デバイス側ブリッジ141及び151は、それぞれ、デバイス140及び150に含まれてもよい。
図1には二つのデバイス140及び150を示したが、本実施の形態のリモートI/Oシステムは、任意の数のデバイスを備えることができる。
ネットワーク160は、デバイス140とデバイス170とを接続する。ネットワーク160は、例えばLAN(Local Area Network)であるが、その他のいかなる種類のネットワークであってもよい。
デバイス170は、ネットワーク160に接続され、ホストPC100と通信する装置である。デバイス170は、いかなる種類の周辺機器であってもよい。あるいは、デバイス170は、デバイス140と同様のNICであってもよい。その場合、デバイス170は、スイッチファブリック130とは別のスイッチファブリック(図示省略)を介して、もしくは直接、ホストPC100とは別のホストPC(図示省略)と接続されてもよい。
図2は、本発明の第1の実施の形態のアドレス変換テーブル122の説明図である。
アドレス変換テーブル122は、ホストメモリ107のアドレスと、ブリッジメモリ142等のアドレスとの対応関係を管理する。後で説明するように、アドレス変換処理部121は、アドレス変換テーブル122に基づいて、ホストメモリ107のアドレスを、それに対応するブリッジメモリ142等のアドレスに変換する。言い換えると、ホストメモリ107の記憶領域が、アドレス変換テーブル122によって、ブリッジメモリ142等にマッピングされる。
本実施の形態のアドレス変換テーブル122は、項番201、ホストメモリアドレス202、ブリッジメモリ1アドレス203及びブリッジメモリ2アドレス204のカラムを含む。
項番201は、アドレス変換テーブル122に登録された各エントリ(行)を一意に識別する番号である。
ホストメモリアドレス202には、ホストメモリ107のアドレスが登録される。
ブリッジメモリ1アドレス203には、ホストメモリアドレス202に登録されたアドレスに対応するブリッジメモリ142のアドレスが登録される。
ブリッジメモリ2アドレス204には、ホストメモリアドレス202に登録されたアドレスに対応するデバイス側ブリッジ151内のブリッジメモリ(図示省略)のアドレスが登録される。
本実施の形態のリモートI/Oシステムには、スイッチファブリック130に接続されるデバイスがさらに追加されてもよい。その場合、アドレス変換テーブル122には、追加されたデバイスが備えるブリッジメモリに対応するカラムが追加される。
図2の例では、項番201が「1」であるエントリのホストメモリアドレス202及びブリッジメモリ1アドレス203に、それぞれ、「FC000000」及び「12000000」が登録されている。これは、ホストメモリ107のアドレス「FC000000」が、ブリッジメモリ142のアドレス「12000000」と対応することを示す。
なお、ホストメモリアドレス202及びブリッジメモリ1アドレス203等には、所定のアドレス範囲の先頭アドレスが登録されてもよい。その場合、ホストメモリ107のアドレス「FC000000」を先頭とする所定のアドレス範囲が、ブリッジメモリ142のアドレス「12000000」を先頭とする所定のアドレス範囲と対応する。
同様にして、項番201が「2」であるエントリは、ホストメモリ107のアドレス「D0000000」がブリッジメモリ142のアドレス「20000000」と対応することを示す。さらに、項番201が「3」であるエントリは、ホストメモリ107のアドレス「C0000000」が、デバイス側ブリッジ151内のブリッジメモリのアドレス「00800000」と対応することを示す。
アドレス変換テーブル122は、リモートI/Oシステムの初期化時に作成される。例えば、スイッチファブリック130の管理ソフトウエア等(図示省略)が、スイッチファブリック130に接続されたデバイス140等に関する情報、及び、ブリッジメモリ142等に関する情報を取得し、それらの情報に基づいてアドレス変換テーブル122を作成してもよい。
図3は、本発明の第1の実施の形態のリモートI/Oシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
具体的には、図3は、ホストPC100からデバイス170にデータを転送するために実行される一連の処理を示す。
ドライバ103が、データをデバイス170に転送する要求をOS101もしくはアプリケーションプログラム102から受信すると、図3に示す処理が開始される。
最初に、ドライバ103のデータ格納処理部105は、これから転送されるデータ(すなわち、データ転送要求の対象のデータ)、及び、そのデータが格納されるホストメモリ107のアドレスを、ホストメモリ107に格納するための書き込み要求を発行する(301)。その結果、これから転送されるデータが、ホストメモリ107内のいずれかの領域(具体的には、OS101によって割り当てられた範囲内のいずれかのアドレスが示す領域)に格納され、さらに、そのデータが格納されたアドレスの値が、ホストメモリ107の別のアドレスが示す領域に格納される。これらの格納が完了すると、ドライバ103は完了通知を受信する(302)。
次に、ドライバ103は、ホスト側ブリッジ120のデータ転送処理部123を起動する(303)。
ホスト側ブリッジ120のデータ転送処理部123は、これから転送されるデータ、及び、そのデータが格納されたホストメモリ107のアドレスを、ホストメモリ107から読み込むための読み込み要求を発行する(304)。その結果、これから転送されるデータ、及び、そのデータが格納されたホストメモリ107のアドレスが、ホストメモリ107からホスト側ブリッジ120に読み込まれる(305)。具体的には、ステップ301の結果ホストメモリ107に書き込まれたデータ及びアドレスが、ステップ305において読み込まれる。
ホスト側ブリッジ120のアドレス変換処理部121は、アドレス変換テーブル122に基づいて、ステップ305において読み込まれたホストメモリ107のアドレスを、対応するブリッジメモリ142のアドレスに変換する(後述する図5のステップ502参照)。例えば、ステップ305においてアドレス「FC000000」が読み込まれた場合、図2に示すアドレス変換テーブル122に基づいて、そのアドレスが「12000000」に変換される。
次に、データ転送処理部123は、これから転送されるデータ(すなわち、ステップ305において読み込まれたデータ)及びアドレス変換処理部121によって変換されたアドレスをブリッジメモリ142に格納するための書き込み要求を発行する(306)。その結果、ブリッジメモリ142内の、アドレス変換処理部121によって変換されたアドレスが示す領域に、ステップ305において読み込まれたデータが格納される。さらに、所定のアドレスが示す領域に、アドレス変換処理部121によって変換されたアドレスの値が格納される。
ステップ306の要求に応じたデータ及びアドレスの格納が完了すると、ホスト側ブリッジ120は完了通知を受信する(307)。
ステップ306の書き込み要求及びステップ307の完了通知は、スイッチファブリック130を介して転送される。しかし、データ転送処理部123は、これから転送されるデータと、そのデータが格納されるべきブリッジメモリ142のアドレスの両方を知っているため、1回の書き込み要求によってデータ及びアドレスの両方をブリッジメモリ142に格納することができる。
データ転送処理部123は、完了通知(307)を受信すると、ドライバ103に完了通知を送信する(308)。
ドライバ103のDMA転送要求処理部106は、完了通知(308)を受信すると、DMA転送要求をDMAエンジン143のDMA転送処理部144に送信する(309)。
DMA転送要求(309)を受信したDMA転送処理部144は、ブリッジメモリ142に対するアドレス読み込み要求を発行する(310)。その結果、ブリッジメモリ142に格納されたアドレスが読み込まれる(311)。ここで読み込まれるアドレスは、ステップ306の書き込み要求の結果格納されたアドレスである。
次に、DMA転送処理部144は、ブリッジメモリ142に対するデータ読み込み要求を発行する(312)。この読み込み要求は、ステップ311において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ142の、ステップ311において読み込まれたアドレスが示す領域から、これから転送されるデータが読み込まれる(313)。ここで読み込まれるデータは、ステップ306の書き込み要求の結果格納されたデータである。
次に、DMA転送処理部144は、ステップ313において読み込まれたデータをデバイス170に送信する(314)。このとき、デバイス140は、ネットワーク160を介してデータを送信するために、プロトコル変換等の処理を実行してもよい。
以上で、ホストPC100からデバイス170へのデータの転送が終了する。
上記のステップ306において、データ転送処理部123は、これから転送されるデータと、そのデータが格納されるブリッジメモリ142のアドレスとをブリッジメモリ142に書き込むことを要求する。しかし、データ転送処理部123は、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ107のアドレスのみをブリッジメモリ142に書き込むことを要求してもよい。このような方法は、ブリッジメモリ142の容量が十分に大きくない場合に有効である。
この場合、ブリッジメモリ142には、アドレス変換処理部121によって変換されていないアドレスが格納される。そして、DMA転送処理部144は、ステップ312において、ホストメモリ107からデータを読み込むことを要求し、ステップ313において、ホストメモリ107から読み込まれたデータを取得する。
次に、図3に示すデータ転送処理において、ドライバ103、ホスト側ブリッジ120及びDMAエンジン143が実行する処理について、図4から図6を参照して詳細に説明する。ただし、図4から図6に示す処理のうち、既に図3を参照して説明した処理については、詳細な説明を省略する。
図4は、本発明の第1の実施の形態のドライバ103が実行する処理を示すフローチャートである。
最初に、ドライバ103のデータ格納処理部105が、ホストメモリ107にデータ及びアドレスを格納する(401)。ステップ401は、図3におけるステップ301及び302に相当する。
次に、ドライバ103は、ホスト側ブリッジ120のデータ転送処理部123を起動する(402)。ステップ402は、図3におけるステップ303に相当する。
次に、ドライバ103は、データ転送処理部123によるデータ転送が成功したか否かを判定する(403)。例えば、ステップ402が実行された後、所定の時間内にドライバ103が完了通知(308)を受信した場合、ステップ403において「成功」と判定されてもよい。一方、ドライバ103が所定の時間内に完了通知(308)を受信しなかった場合、あるいは、ドライバ103がデータ転送処理部123から転送失敗を示す通知を受信した場合、ステップ403において「失敗」と判定されてもよい。
ステップ403において「失敗」と判定された場合、処理はステップ402に戻り、再びデータ転送処理部123が起動される。
一方、ステップ403において「成功」と判定された場合、ドライバ103のDMA転送要求処理部106が、DMAエンジン143に対して、DMA転送要求を発行する(404)。ステップ404は、図3におけるステップ309に相当する。
以上でドライバ103は処理を終了する。
図5は、本発明の第1の実施の形態のホスト側ブリッジ120が実行する処理を示すフローチャートである。
図3のステップ303において起動されたホスト側ブリッジ120のデータ転送処理部123は、図5に示す処理を開始する。
最初に、ホスト側ブリッジ120のデータ転送処理部123が、ホストメモリ107からデータ及びアドレスを読み込む(501)。ステップ501は、図3のステップ304及び305に相当する。
次に、ホスト側ブリッジ120のアドレス変換処理部121は、アドレス変換テーブル122を参照して、アドレスを変換する(502)。
次に、データ転送処理部123は、データ及びステップ502において変換されたアドレスをブリッジメモリ142に書き込む(503)。ステップ503は、図3のステップ306及び307に相当する。
次に、データ転送処理部123は、データ転送結果(すなわち、ステップ503の書き込みの結果)を、ドライバ103に送信する(504)。ステップ504は、図3のステップ308に相当する。
以上でホスト側ブリッジ120は処理を終了する。
図6は、本発明の第1の実施の形態のDMAエンジン143が実行する処理を示すフローチャートである。
最初に、DMAエンジン143のDMA転送処理部144は、DMA転送要求を受信したか否かを判定する(601)。
ステップ601において、DMA転送要求を受信していないと判定された場合、DMA転送処理部144は、DMA転送要求を待つ。
一方、図3のステップ309に示すDMA転送要求を受信すると、ステップ601において、DMA転送処理部144はDMA転送要求を受信したと判定する。この場合、DMA転送処理部144は、ブリッジメモリ142からアドレスを読み込む(602)。ステップ602は、図3のステップ310及び311に相当する。
次に、DMA転送処理部144は、ブリッジメモリ142からデータを読み込む(603)。ステップ603は、図3のステップ312及び313に相当する。
次に、DMA転送処理部144は、ステップ603において読み込まれたデータを、ネットワーク160を介してデバイス170に送信する(604)。ステップ604は、図3のステップ314に相当する。
以上でDMAエンジン143は処理を終了する。
次に、本発明の第1の実施の形態の変形例について説明する。
図3に示すように、本発明の第1の実施の形態によれば、ホストPC100のドライバ103がDMA転送要求を発行する(309)。一方、これから説明する第1の実施の形態の変形例によれば、ホスト側ブリッジがDMA転送要求を発行する。
図7は、本発明の第1の実施の形態の変形例のリモートI/Oシステムのブロック図である。
図7に示すリモートI/Oシステムは、図1に示すホストPC100及びホスト側ブリッジ120を、それぞれ、ホストPC700及びホスト側ブリッジ720に置き換えることによって構成される。図7において、例えばCPU110のように、図1と同じ符号が付された部分は、図1に示したものと同じである。図7に示すリモートI/Oシステムのうち、図1と同じ部分については、説明を省略する。
ホストPC700は、少なくともCPU110及びホストメモリ707を備える計算機である。
ホストメモリ707には、少なくとも、OS701、アプリケーションプログラム102、ドライバ702及びドライバ703が格納される。ホストメモリ707には、さらに、ホストPC700とデバイス140等との間で転送されるデータ等が一時的に格納される。
ドライバ702及び703は、OS701がデバイス140及び150を制御するために実行されるソフトウエアである。図7において、ドライバ702及び703は、それぞれ、「ドライバ1」及び「ドライバ2」と表示される。本実施の形態のドライバ702は、少なくとも、データ格納処理部105を含む。ドライバ703も、ドライバ702と同様、データ格納処理部(図示省略)を含んでもよい。
ドライバ702及び703は、CPU110によって実行される。このため、以下の説明においてドライバ702等が実行する処理は、実際には、CPU110によって実行される。
ホスト側ブリッジ720は、ホストPC700をスイッチファブリック130に接続するための処理(例えば、プロトコル変換等)を実行する。図7に示すホスト側ブリッジ720は、少なくとも、アドレス変換処理部121、アドレス変換テーブル122、データ転送処理部723及びDMA転送要求処理部724を含む。
図8は、本発明の第1の実施の形態の変形例のリモートI/Oシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
具体的には、図8は、ホストPC700からデバイス170にデータを転送するために実行される一連の処理を示す。図8に示す処理のうち、図3に示したものと同様の処理については、詳細な説明を省略する。
最初に、ドライバ702のデータ格納処理部105は、これから転送されるデータ、及び、そのデータが格納されるホストメモリ707のアドレスを、ホストメモリ707に格納するための書き込み要求を発行する(801)。ステップ801の書き込み要求に従ってデータ及びアドレスの格納が完了すると、ドライバ702は、完了通知を受信する(802)。ステップ801及び802は、図3のステップ301及び302と同様である。
次に、ドライバ702は、ホスト側ブリッジ720のデータ転送処理部723を起動する(803)。
ホスト側ブリッジ720のデータ転送処理部723は、ホストメモリ707に対する読み込み要求を発行する(804)。その結果、これから転送されるデータ、及び、そのデータが格納されたホストメモリ707のアドレスが、ホストメモリ707からホスト側ブリッジ720に読み込まれる(805)。ステップ804及び805は、図3のステップ304及び305と同様である。
ホスト側ブリッジ720のアドレス変換処理部121は、アドレス変換テーブル122に基づいて、ステップ805において読み込まれたホストメモリ707のアドレスを、対応するブリッジメモリ142のアドレスに変換する(後述する図10のステップ1002参照)。このアドレス変換は、図3において説明したものと同様である。
次に、データ転送処理部723は、これから転送されるデータ(すなわち、ステップ805において読み込まれたデータ)及びアドレス変換処理部121によって変換されたアドレスをブリッジメモリ142に格納するための書き込み要求を発行する(806)。ステップ806の要求に応じたデータ及びアドレスの格納が完了すると、ホスト側ブリッジ720は完了通知を受信する(807)。ステップ806及び807は、図3のステップ306及び307と同様である。
ホスト側ブリッジ720が完了通知(807)を受信すると、DMA転送要求処理部724は、DMA転送要求をDMAエンジン143のDMA転送処理部144に送信する(808)。
DMA転送要求(808)を受信したDMA転送処理部144は、ブリッジメモリ142に対するアドレス読み込み要求を発行する(809)。その結果、ブリッジメモリ142に格納されたアドレスが読み込まれる(810)。ここで読み込まれるアドレスは、ステップ806の書き込み要求の結果格納されたアドレスである。
次に、DMA転送処理部144は、ブリッジメモリ142に対するデータ読み込み要求を発行する(811)。この読み込み要求は、ステップ810において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ142の、ステップ810において読み込まれたアドレスから、これから転送されるデータが読み込まれる(812)。ここで読み込まれるデータは、ステップ806の書き込み要求の結果格納されたデータである。
次に、DMA転送処理部144は、ステップ812において読み込まれたデータをデバイス170に送信する(813)。ステップ809から813は、それぞれ、図3のステップ310から314と同様である。
以上で、ホストPC700からデバイス170へのデータの転送が終了する。
上記のステップ806において、データ転送処理部723は、これから転送されるデータと、そのデータが格納されるブリッジメモリ142のアドレスとをブリッジメモリ142に書き込むことを要求する。しかし、データ転送処理部723は、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ707のアドレスのみをブリッジメモリ142に書き込むことを要求してもよい。このような方法は、ブリッジメモリ142の容量が十分に大きくない場合に有効である。
この場合、ブリッジメモリ142には、アドレス変換処理部121によって変換されていないアドレスが格納される。そして、DMA転送処理部144は、ステップ811において、ホストメモリ707からデータを読み込むことを要求し、ステップ812において、ホストメモリ707から読み込まれたデータを取得する。
次に、図8に示すデータ転送処理において、ドライバ702及びホスト側ブリッジ720が実行する処理について、図9及び図10を参照して詳細に説明する。DMAエンジン143が実行する処理は、図6に示す通りであるため、説明を省略する。図9及び図10に示す処理のうち、既に他の図を参照して説明した処理については、詳細な説明を省略する。
図9は、本発明の第1の実施の形態の変形例のドライバ702が実行する処理を示すフローチャートである。
最初に、ドライバ702のデータ格納処理部105が、ホストメモリ707にデータ及びアドレスを格納する(901)。ステップ901は、図8におけるステップ801及び802に相当する。
次に、ドライバ702は、ホスト側ブリッジ720のデータ転送処理部723を起動する(902)。ステップ902は、図8におけるステップ803に相当する。
以上でドライバ702は処理を終了する。
図10は、本発明の第1の実施の形態の変形例のホスト側ブリッジ720が実行する処理を示すフローチャートである。
図8のステップ803において起動されたホスト側ブリッジ720のデータ転送処理部723は、図10に示す処理を開始する。
最初に、ホスト側ブリッジ720のデータ転送処理部723が、ホストメモリ707からデータ及びアドレスを読み込む(1001)。ステップ1001は、図8のステップ804及び805に相当する。
次に、ホスト側ブリッジ720のアドレス変換処理部121は、アドレス変換テーブル122を参照して、アドレスを変換する(1002)。
次に、データ転送処理部723は、データ及びステップ1002において変換されたアドレスをブリッジメモリ142に書き込む(1003)。ステップ1003は、図8のステップ806に相当する。
次に、データ転送処理部723は、ステップ1003の書き込みが成功したか否かを判定する(1004)。例えば、ステップ1003が実行された後、所定の時間内にデータ転送処理部723が完了通知(807)を受信した場合、ステップ1004において「成功」と判定されてもよい。一方、データ転送処理部723が所定の時間内に完了通知(807)を受信しなかった場合、あるいは、データ転送処理部723が書き込み失敗を示す通知を受信した場合、ステップ1004において「失敗」と判定されてもよい。
ステップ1004において「失敗」と判定された場合、処理はステップ1003に戻り、再びデータ等の書き込みが実行される。
一方、ステップ1004において「成功」と判定された場合、ホスト側ブリッジ720のDMA転送要求処理部724が、DMAエンジン143に対して、DMA転送要求を発行する(1005)。ステップ1005は、図8におけるステップ808に相当する。
以上でホスト側ブリッジ720は処理を終了する。
次に、本発明の第2の実施の形態について説明する。
図11は、本発明の第2の実施の形態のリモートI/Oシステムのブロック図である。
図11に示すリモートI/Oシステムは、図1に示すホストPC100及びホスト側ブリッジ120を、それぞれ、ホストPC1100及びホスト側ブリッジ1120に置き換えることによって構成される。図11において、例えばCPU110のように、図1と同じ符号が付された部分は、図1に示したものと同じである。図11に示すリモートI/Oシステムのうち、図1と同じ部分については、説明を省略する。
ホストPC1100は、少なくともCPU110及びホストメモリ1107を備える計算機である。
ホストメモリ1107には、少なくとも、OS1101、アプリケーションプログラム102、ドライバ1102及びドライバ1103が格納される。ホストメモリ1107には、さらに、ホストPC1100とデバイス140等との間で転送されるデータ等が一時的に格納される。
ドライバ1102及び1103は、OS1101がデバイス140及び150を制御するために実行されるソフトウエアである。図11において、ドライバ1102及び1103は、それぞれ、「ドライバ1」及び「ドライバ2」と表示される。本実施の形態のドライバ1102は、少なくとも、DMA転送要求処理部106、アドレス変換処理部1104、アドレス変換テーブル1105及びデータ転送処理部1106を含む。ドライバ1103も、ドライバ1102と同様、DMA転送要求処理部(図示省略)、アドレス変換処理部(図示省略)、アドレス変換テーブル(図示省略)及びデータ転送処理部(図示省略)を含んでもよい。
アドレス変換テーブル1105は、図2に示すアドレス変換テーブル122と同様であるため、説明を省略する。ドライバ1102内の各処理部が実行する処理については、後で図12及び図13を参照して説明する。
ドライバ1102及び1103は、CPU110によって実行される。このため、以下の説明においてドライバ1102等が実行する処理は、実際には、CPU110によって実行される。
ホスト側ブリッジ1120は、ホストPC1100をスイッチファブリック130に接続するための処理(例えば、プロトコル変換等)を実行する。
図12は、本発明の第2の実施の形態のリモートI/Oシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
具体的には、図12は、ホストPC1100からデバイス170にデータを転送するために実行される一連の処理を示す。図12に示す処理のうち、図3に示したものと同様の処理については、詳細な説明を省略する。
最初に、ドライバ1102のアドレス変換処理部1104は、アドレス変換テーブル1105を参照して、これから転送されるデータが格納されるホストメモリ1107のアドレスを、ブリッジメモリ142のアドレスに変換する。
次に、ドライバ1102のデータ転送処理部1106は、これから転送されるデータ及びアドレスをブリッジメモリ142に格納するための書き込み要求を発行する(1201)。その結果、これから転送されるデータが、ブリッジメモリ142のうち、アドレス変換処理部1104によって変換されたアドレスに格納される。さらに、そのデータが格納されたアドレスの値が、ブリッジメモリ142の別のアドレスに格納される。ステップ1201の要求に応じたデータ及びアドレスの格納が完了すると、ドライバ1102が完了通知を受信する(1202)。
ドライバ1102が完了通知(1202)を受信すると、DMA転送要求処理部106は、DMA転送要求をDMAエンジン143のDMA転送処理部144に送信する(1203)。ステップ1203は、図3のステップ309と同様である。
DMA転送要求(1203)を受信したDMA転送処理部144は、ブリッジメモリ142に対するアドレス読み込み要求を発行する(1204)。その結果、ブリッジメモリ142に格納されたアドレスが読み込まれる(1205)。ここで読み込まれるアドレスは、ステップ1201の書き込み要求の結果格納されたアドレスである。
次に、DMA転送処理部144は、ブリッジメモリ142に対するデータ読み込み要求を発行する(1206)。この読み込み要求は、ステップ1205において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ142の、ステップ1205において読み込まれたアドレスから、これから転送されるデータが読み込まれる(1207)。ここで読み込まれるデータは、ステップ1201の書き込み要求の結果格納されたデータである。
次に、DMA転送処理部144は、ステップ1207において読み込まれたデータをデバイス170に送信する(1208)。ステップ1204から1208は、それぞれ、図3のステップ310から314と同様である。
以上で、ホストPC1100からデバイス170へのデータの転送が終了する。
上記のステップ1201において、データ転送処理部1106は、これから転送されるデータと、そのデータが格納されるブリッジメモリ142のアドレスとをブリッジメモリ142に書き込むことを要求する。しかし、データ転送処理部1106は、ステップ1201において、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ1107のアドレスのみをブリッジメモリ142に書き込むことを要求してもよい。このような方法は、ブリッジメモリ142の容量が十分に大きくない場合に有効である。
この場合、ブリッジメモリ142には、アドレス変換処理部1104によって変換されていないアドレスが格納される。そして、DMA転送処理部144は、ステップ1206において、ホストメモリ1107からデータを読み込むことを要求し、ステップ1207において、ホストメモリ1107から読み込まれたデータを取得する。
あるいは、データ転送処理部1106は、ステップ1201において、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータのみをブリッジメモリ142に書き込むことを要求してもよい。
この場合、これから転送されるデータは、ブリッジメモリ142の、アドレス変換処理部1104によって変換されたアドレスが示す領域に格納される。さらに、これから転送されるデータが格納されるブリッジメモリ142のアドレス(すなわち、アドレス変換処理部1104によって変換されたアドレス)が、ホストメモリ1107に格納される。そして、DMA転送処理部144は、ステップ1204において、ホストメモリ1107からアドレスを読み込むことを要求し、ステップ1205において、ホストメモリ1107から読み込まれたアドレスを取得する。
その後、ステップ1206において、DMA転送処理部144は、ステップ1205において取得したアドレスを対象として、データの読み込み要求を発行する。その結果、ステップ1207において、ブリッジメモリ142から、これから転送されるデータが読み込まれる。
次に、図12に示すデータ転送処理において、ドライバ1102が実行する処理について、図13を参照して説明する。DMAエンジン143が実行する処理は、図6に示す通りであるため、説明を省略する。図13に示す処理のうち、既に他の図を参照して説明した処理については、詳細な説明を省略する。
図13は、本発明の第2の実施の形態のドライバ1102が実行する処理を示すフローチャートである。
最初に、ドライバ1102のアドレス変換処理部1104は、アドレス変換テーブル1105を参照して、これから転送されるデータが格納されるホストメモリ1107のアドレスを、ブリッジメモリ142のアドレスに変換する(1301)。
次に、ドライバ1102のデータ転送処理部1106は、データ及びアドレスをブリッジメモリ142に書き込む(1302)。ステップ1302は、図12のステップ1201及び1202に相当する。
次に、ドライバ1102のDMA転送要求処理部106は、DMAエンジン143に対して、DMA転送要求を発行する(1303)。ステップ1303は、図12のステップ1203に相当する。
以上でドライバ1102は処理を終了する。
次に、本発明の第3の実施の形態について説明する。
図14は、本発明の第3の実施の形態のリモートI/Oシステムのブロック図である。
図14に示すリモートI/Oシステムは、図1に示すホストPC100及びホスト側ブリッジ120を、それぞれ、ホストPC1400及びホスト側ブリッジ1420に置き換えることによって構成される。図14において、例えばCPU110のように、図1と同じ符号が付された部分は、図1に示したものと同じである。図14に示すリモートI/Oシステムのうち、図1と同じ部分については、説明を省略する。
ホストPC1400は、少なくともCPU110及びホストメモリ1408を備える計算機である。
ホストメモリ1408には、OS1401、OS1402、アプリケーションプログラム1403、ドライバ1404、ドライバ1405及びハイパバイザ1410が格納される。ホストメモリ1408には、さらに、ホストPC1400とデバイス140等との間で転送されるデータ等が一時的に格納される。
ハイパバイザ1410は、ホストPC1400の資源を仮想化するための処理を実行するソフトウエアである。ハイパバイザ1410によって、単一のCPU110上で複数のOS1401等が稼動することができる。なお、図14には二つのOS1401及び1402を示すが、本実施の形態のホストメモリ1408には、単一のCPU110上で稼動する任意の数のOSが格納されてよい。以下、OS1401についてのみ説明するが、OS1402もOS1401と同等の構成を備え、同等の処理を実行してもよい。
図14には、ホストPC1400の資源を仮想化するためにハイパバイザ1410が使用される場合を示す。しかし、ハイパバイザ1410以外の仮想化手段が使用されても、本実施の形態を実現することができる。
ドライバ1404及び1405は、OS1401がデバイス140及び150を制御するために実行されるソフトウエアである。図14において、ドライバ1404及び1405は、それぞれ、「ドライバ1」及び「ドライバ2」と表示される。本実施の形態のドライバ1404は、少なくとも、データ格納処理部1406及びDMA転送要求処理部1407を含む。ドライバ1405も、ドライバ1404と同様、データ格納処理部(図示省略)及びDMA転送要求処理部(図示省略)を含んでもよい。
ハイパバイザ1410は、少なくとも、アドレス変換処理部1411、アドレス変換テーブル1412、DMA要求捕捉処理部1413、DMA転送要求処理部1414及びデータ転送処理部1415を含む。
ハイパバイザ1410は、CPU110によって実行されるソフトウエアである。このため、以下の説明においてハイパバイザ1410内の各処理部が実行する処理は、実際には、CPU110によって実行される。
ホスト側ブリッジ1420は、ホストPC1400をスイッチファブリック130に接続するための処理(例えば、プロトコル変換等)を実行する。
図15は、本発明の第3の実施の形態のリモートI/Oシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
具体的には、図15は、ホストPC1400からデバイス170にデータを転送するために実行される一連の処理を示す。図15に示す処理のうち、図3等に示したものと同様の処理については、詳細な説明を省略する。
最初に、ドライバ1404のデータ格納処理部1406は、これから転送されるデータ、及び、そのデータが格納されるホストメモリ1408のアドレスを、ホストメモリ1408に格納するための書き込み要求を発行する(1501)。ステップ1501の書き込み要求に従ってデータ及びアドレスの格納が完了すると、ドライバ1404は、完了通知を受信する(1502)。ステップ1501及び1502は、図3のステップ301及び302と同様である。
ドライバ1404が完了通知(1502)を受信すると、DMA転送要求処理部1407は、DMA転送要求をDMAエンジン143のDMA転送処理部144に送信する(1503)。ステップ1503は、図3のステップ309と同様である。
ステップ1503のDMA転送要求はDMAエンジン143に対して送信されたものであるが、ハイパバイザ1410のDMA要求捕捉処理部1413は、このDMA転送要求(1503)を捕捉する。
次に、ハイパバイザ1410のデータ転送処理部1415は、DMA要求捕捉処理部1413が捕捉したDMA転送要求に従って、ホストメモリ1408に対する読み込み要求を発行する(1504)。その結果、これから転送されるデータ、及び、そのデータが格納されたホストメモリ1408のアドレスが、ホストメモリ1408からハイパバイザ1410に読み込まれる(1505)。ステップ1504及び1505において実行される処理は、図3のステップ304及び305においてホスト側ブリッジ120のデータ転送処理部123が実行する処理と同様である。
ハイパバイザ1410のアドレス変換処理部1411は、アドレス変換テーブル1412に基づいて、ステップ1505において読み込まれたホストメモリ1408のアドレスを、対応するブリッジメモリ142のアドレスに変換する(後述する図17のステップ1703参照)。このアドレス変換は、図3において説明したものと同様である。
次に、データ転送処理部1415は、これから転送されるデータ(すなわち、ステップ1505において読み込まれたデータ)及びアドレス変換処理部1411によって変換されたアドレスをブリッジメモリ142に格納するための書き込み要求を発行する(1506)。ステップ1506の要求に応じたデータ及びアドレスの格納が完了すると、ハイパバイザ1410が完了通知を受信する(1507)。ステップ1506及び1507において実行される処理は、図3のステップ306及び307においてホスト側ブリッジ120のデータ転送処理部123が実行する処理と同様である。
ハイパバイザ1410が完了通知(1507)を受信すると、ハイパバイザ1410のDMA転送要求処理部1414は、DMA転送要求をDMAエンジン143のDMA転送処理部144に送信する(1508)。
DMA転送要求(1508)を受信したDMA転送処理部144は、ブリッジメモリ142に対するアドレス読み込み要求を発行する(1509)。その結果、ブリッジメモリ142に格納されたアドレスが読み込まれる(1510)。ここで読み込まれるアドレスは、ステップ1506の書き込み要求の結果格納されたアドレスである。
次に、DMA転送処理部144は、ブリッジメモリ142に対するデータ読み込み要求を発行する(1511)。この読み込み要求は、ステップ1510において読み込まれたアドレスを対象としている。その結果、ブリッジメモリ142の、ステップ1510において読み込まれたアドレスから、これから転送されるデータが読み込まれる(1512)。ここで読み込まれるデータは、ステップ1506の書き込み要求の結果格納されたデータである。
次に、DMA転送処理部144は、ステップ1512において読み込まれたデータをデバイス170に送信する(1513)。ステップ1509から1513は、それぞれ、図3のステップ310から314と同様である。
以上で、ホストPC1400からデバイス170へのデータの転送が終了する。
上記のステップ1506において、データ転送処理部1415は、これから転送されるデータと、そのデータが格納されるブリッジメモリ142のアドレスとをブリッジメモリ142に書き込むことを要求する。しかし、データ転送処理部1415は、上記のようにデータ及びアドレスを書き込む代わりに、これから転送されるデータが格納されているホストメモリ1408のアドレスのみをブリッジメモリ142に書き込むことを要求してもよい。このような方法は、ブリッジメモリ142の容量が十分に大きくない場合に有効である。
この場合、ブリッジメモリ142には、アドレス変換処理部1411によって変換されていないアドレスが格納される。そして、DMA転送処理部144は、ステップ1511において、ホストメモリ1408からデータを読み込むことを要求し、ステップ1512において、ホストメモリ1408から読み込まれたデータを取得する。
次に、図15に示すデータ転送処理において、ドライバ1404及びハイパバイザ1410が実行する処理について、図16及び図17を参照して詳細に説明する。DMAエンジン143が実行する処理は、図6に示す通りであるため、説明を省略する。図16及び図17に示す処理のうち、既に他の図を参照して説明した処理については、詳細な説明を省略する。
図16は、本発明の第3の実施の形態のドライバ1404が実行する処理を示すフローチャートである。
最初に、ドライバ1404のデータ格納処理部1406が、ホストメモリ1408にデータ及びアドレスを格納する(1601)。ステップ1601は、図15におけるステップ1501及び1502に相当する。
次に、ドライバ1404のDMA転送要求処理部1407が、DMAエンジン143に対して、DMA転送要求を発行する(1602)。ステップ1602は、図15におけるステップ1503に相当する。
図17は、本発明の第3の実施の形態のハイパバイザ1410が実行する処理を示すフローチャートである。
最初に、ハイパバイザ1410のDMA要求捕捉処理部1413は、DMA転送要求を捕捉したか否かを判定する(1701)。
ステップ1701において、DMA転送要求を捕捉していないと判定された場合、ドライバ1404からDMA転送要求が送信されていない。この場合、処理はステップ1701に戻り、DMA転送要求が捕捉されるのを待つ。
一方、ステップ1701において、DMA転送要求を捕捉したと判定された場合、ドライバ1404からDMA転送要求(図15のステップ1503)が送信されている。この場合、ハイパバイザ1410のデータ転送処理部1415は、ホストメモリ1408からデータ及びアドレスを読み込む(1702)。ステップ1702は、図15のステップ1504及び1505に相当する。
次に、ハイパバイザ1410のアドレス変換処理部1411は、アドレス変換テーブル1412を参照して、アドレスを変換する(1703)。
次に、データ転送処理部1415は、データ及びステップ1703において変換されたアドレスをブリッジメモリ142に書き込む(1704)。ステップ1704は、図15のステップ1506に相当する。
次に、データ転送処理部1415は、ステップ1704の書き込みが成功したか否かを判定する(1705)。この判定は、図10のステップ1004と同様の方法で実行されてもよい。
ステップ1705において「失敗」と判定された場合、処理はステップ1704に戻り、再びデータ等の書き込みが実行される。
一方、ステップ1705において「成功」と判定された場合、ハイパバイザ1410のDMA転送要求処理部1414が、DMAエンジン143に対して、DMA転送要求を発行する(1706)。ステップ1706は、図15におけるステップ1508に相当する。
以上でハイパバイザ1410は処理を終了する。
次に、以上の本発明の第1から第3の実施の形態の効果を説明する。
図18は、従来のリモートI/Oシステムにおいて実行されるデータ転送処理を示すシーケンス図である。
具体的には、図1に示すリモートI/Oシステムに本発明が適用されていない場合に、ホストPC100からデバイス170にデータを転送するために実行される処理を示す。
最初に、ドライバ103のデータ格納処理部105は、これから転送されるデータ、及び、そのデータが格納されるホストメモリ107のアドレスを、ホストメモリ107に格納するための書き込み要求を発行する(1801)。これらの格納が完了すると、ドライバ103が完了通知を受信する(1802)。
次に、ドライバ103のDMA転送要求処理部106は、DMA転送要求をDMAエンジン143のDMA転送処理部144に送信する(1803)。
DMA転送要求(1803)を受信したDMA転送処理部144は、ホストメモリ107に対するアドレス読み込み要求を発行する(1804)。その結果、ホストメモリ107に格納されたアドレスが読み込まれる(1805)。ここで読み込まれるアドレスは、ステップ1801の書き込み要求の結果格納されたアドレスである。
次に、DMA転送処理部144は、ホストメモリ107に対するデータ読み込み要求を発行する(1806)。この読み込み要求は、ステップ1805において読み込まれたアドレスを対象としている。その結果、ホストメモリ107の、ステップ1805において読み込まれたアドレスから、これから転送されるデータが読み込まれる(1807)。ここで読み込まれるデータは、ステップ1801の書き込み要求の結果格納されたデータである。
次に、DMA転送処理部144は、ステップ1807において読み込まれたデータをデバイス170に送信する(1808)。
以上で、ホストPC100からデバイス170へのデータの転送が終了する。
図18に示すように、従来のリモートI/Oシステムにおいて、DMA転送要求(1803)、DMAエンジン143によるアドレス読み込み処理(1804、1805)、及び、DMAエンジン143によるデータ読み込み処理(1806、1807)がスイッチファブリック130を経由する。
なお、ローカルI/Oシステムにおいては、ホストPC100とデバイス140とがスイッチファブリック130を経由せずに直接接続される。このため、ローカルI/Oシステムにおいて図18と同様のデータ転送が実行される場合、上記のステップ1803から1807までの処理がスイッチファブリック130を経由しない。
図19は、本発明の実施の形態の効果の説明図である。
具体的には、図19は、データ転送のレイテンシを比較する図である。図19において、横軸は、データ転送のレイテンシ(遅延時間)を示す。図19において、レイテンシの内訳が、実線及び破線によって示される。実線は、基本処理のレイテンシ、すなわち、スイッチファブリック130を経由しない転送のレイテンシを示す。破線は、スイッチファブリック130を経由する転送のレイテンシを示す。
まず、ローカルI/Oシステムにおけるレイテンシ1910について、図18を参照しながら説明する。レイテンシ1910は、レイテンシ1911、1912、1913及び1914からなる。
レイテンシ1911は、ドライバ103がデータ及びアドレスをホストメモリ107に書き込む処理の所要時間である。具体的には、レイテンシ1911は、図18のステップ1801及び1802の所要時間である。
レイテンシ1912は、ドライバ103がDMAエンジン143に対してDMA転送要求を送信する処理の所要時間である。具体的には、レイテンシ1912は、図18のステップ1803の所要時間である。ただし、ローカルI/Oシステムにおいて、ステップ1803はスイッチファブリック130を経由しない。
レイテンシ1913は、DMAエンジン143がホストメモリ107からアドレスを読み込む処理の所要時間である。具体的には、レイテンシ1913は、図18のステップ1804及び1805の所要時間である。ただし、ローカルI/Oシステムにおいて、ステップ1804及び1805はスイッチファブリック130を経由しない。
レイテンシ1914は、DMAエンジン143がホストメモリ107からデータを読み込む処理の所要時間である。具体的には、レイテンシ1914は、図18のステップ1806及び1807の所要時間である。ただし、ローカルI/Oシステムにおいて、ステップ1806及び1807はスイッチファブリック130を経由しない。
次に、本発明が適用されないリモートI/Oシステムにおけるデータ転送のレイテンシ1920を説明する。レイテンシ1920は、レイテンシ1921、1922、1923及び1924からなる。
レイテンシ1921は、ドライバ103がデータ及びアドレスをホストメモリ107に書き込む処理の所要時間である。レイテンシ1921は、レイテンシ1911と同等である。
レイテンシ1922は、ドライバ103がDMAエンジン143に対してDMA転送要求を送信する処理の所要時間である。具体的には、レイテンシ1922は、図18のステップ1803の所要時間である。ステップ1803はスイッチファブリック130を経由する。このため、レイテンシ1922は、レイテンシ1912と同等のレイテンシ1922Aに加えて、レイテンシ1922Bを含む。レイテンシ1922Bは、DMA転送要求がスイッチファブリック130を通過するための所要時間である。
レイテンシ1923は、DMAエンジン143がホストメモリ107からアドレスを読み込む処理の所要時間である。具体的には、レイテンシ1923は、図18のステップ1804及び1805の所要時間である。ステップ1804及び1805はスイッチファブリック130を経由する。このため、レイテンシ1923は、レイテンシ1913と同等のレイテンシ1923Aに加えて、レイテンシ1923Bを含む。レイテンシ1923Bは、アドレス読み込み要求及び読み込まれたアドレスがスイッチファブリック130を通過するための所要時間である。
レイテンシ1924は、DMAエンジン143がホストメモリ107からデータを読み込む処理の所要時間である。具体的には、レイテンシ1924は、図18のステップ1806及び1807の所要時間である。ステップ1806及び1807はスイッチファブリック130を経由する。このため、レイテンシ1924は、レイテンシ1914と同等のレイテンシ1924Aに加えて、レイテンシ1924Bを含む。レイテンシ1924Bは、データ読み込み要求及び読み込まれたデータがスイッチファブリック130を通過するための所要時間である。
このように、リモートI/Oシステムにおけるレイテンシは、ローカルI/Oシステムにおけるレイテンシと比較して、要求及びデータ等がスイッチファブリック130を通過する時間(具体的には、レイテンシ1922B、1923B及び1924B)の分だけ増加する。
次に、本発明が適用されたリモートI/Oシステムにおけるデータ転送のレイテンシ1930を説明する。具体的には、レイテンシ1930は、本発明の第2の実施の形態のデータ転送におけるレイテンシである(図12参照)。レイテンシ1930は、レイテンシ1931、1932、1933及び1934からなる。
レイテンシ1931は、ドライバ1102がデータ及びアドレスをブリッジメモリ142に書き込む処理の所要時間である。具体的には、レイテンシ1931は、図12のステップ1201及び1202の所要時間である。ステップ1201及び1202はスイッチファブリック130を経由する。このため、レイテンシ1931は、レイテンシ1911と同等のレイテンシ1931Aに加えて、レイテンシ1931Bを含む。レイテンシ1931Bは、書き込み要求及び完了通知がスイッチファブリック130を通過するための所要時間である。
レイテンシ1932は、ドライバ1102がDMAエンジン143に対してDMA転送要求を送信する処理の所要時間である。具体的には、レイテンシ1932は、図12のステップ1203の所要時間である。ステップ1203はスイッチファブリック130を経由する。このため、レイテンシ1932は、レイテンシ1912と同等のレイテンシ1932Aに加えて、レイテンシ1922Bと同等のレイテンシ1932Bを含む。
レイテンシ1933は、DMAエンジン143がブリッジメモリ142からアドレスを読み込む処理の所要時間である。具体的には、レイテンシ1933は、図12のステップ1204及び1205の所要時間である。ステップ1204及び1205はスイッチファブリック130を経由しない。このため、レイテンシ1933は、ローカルI/Oシステムのレイテンシ1913と同等である。
レイテンシ1934は、DMAエンジン143がブリッジメモリ142からデータを読み込む処理の所要時間である。具体的には、レイテンシ1934は、図12のステップ1206及び1207の所要時間である。ステップ1206及び1207はスイッチファブリック130を経由しない。このため、レイテンシ1934は、ローカルI/Oシステムのレイテンシ1914と同等である。
結局、レイテンシ1920と1930とを比較すると、レイテンシ1920が、スイッチファブリック130を経由する三つのレイテンシ1922B、1923B及び1924Bを含むのに対し、レイテンシ1930は、スイッチファブリック130を経由する二つのレイテンシ1931B及び1932Bを含む。このため、レイテンシ1930は、レイテンシ1920と比較して、スイッチファブリックを経由する1回の処理の所要時間の分だけ小さくなる。
このような差が生じる理由は、次の通りである。すなわち、データを書き込む側であるドライバ1102等は、これから転送されるデータが格納されるメモリ上のアドレスを知っている。このため、ドライバ1102等は、データとアドレスを同時にメモリに書き込むことができる。
一方、データを読み込む側であるDMAエンジン143は、これから転送されるデータがメモリ上のどのアドレスに格納されているかを知らない。このため、まず、メモリの所定の領域からアドレスを読み込み、次に、読み込まれたアドレスが示す領域から、データを読み込む。このように、DMAエンジン143は、アドレスの読み込み処理とデータの読み込み処理を順次実行する必要がある。
従来は、DMAエンジン143がホストメモリ107からデータを読み込む処理がスイッチファブリック130を経由して実行された。その結果、アドレスを読み込む処理及びデータを読み込む処理がスイッチファブリック130を経由するため、それら二つの処理のレイテンシ(レイテンシ1923B及び1924B)が発生した。
一方、本発明の実施の形態によれば、デバイス140側にブリッジメモリ142が設けられる。そして、ドライバ1102等がスイッチファブリック130を経由してブリッジメモリ142にデータを書き込む処理を実行する。このとき、アドレスとデータの書き込みが同時に実行されるため、スイッチファブリックを経由する一つの処理のレイテンシ(レイテンシ1931B)が発生する。すなわち、スイッチファブリックを経由する1回の処理のレイテンシが隠蔽される。このように、本発明の実施の形態によれば、スイッチファブリック130を経由する処理の回数を削減することによって、従来の処理と比較してレイテンシを削減し、その結果、データ転送のスループットを改善することができる。
図19に示すように、本発明の実施の形態によれば、1回の転送ごとに所定の量のレイテンシが削減される。このため、粒度が小さいデータ転送が実行される場合(すなわち、サイズの小さいデータが多くの回数転送される場合)にも、スループットを改善することができる。
なお、本発明の第2の実施の形態において説明したように、図12のステップ1201において、データ又はアドレスのいずれか一方のみをブリッジメモリに書き込むこともできる。例えばアドレスのみが書き込まれる場合、データを対象とする読み込み要求(1206)、及び、読み込まれたデータ(1207)がスイッチファブリック130を経由する。この場合、図19において、データ読み込み処理のレイテンシ1934に、レイテンシ1924Bと同等のレイテンシが追加される。その結果、本発明の実施の形態のレイテンシが従来の技術のレイテンシと同等になる。
しかし、この場合、スイッチファイブリック130を経由する処理は、ブリッジメモリ142への書き込み要求(1201)、書き込み要求に対する完了通知(1202)、DMA転送要求(1203)、データ読み込み要求(1206)及び応答データ(1207)である。ここで、ステップ1201及び1202の書き込みにPosted Writeを適用することによって、ドライバ1102は、完了通知(1202)を待たずに次の処理を実行することができる。その結果、ステップ1201及び1202の処理がスイッチファブリックを経由するレイテンシを無視することができる。すなわち、図19においてレイテンシ1931Bが削減されるため、本発明の実施の形態のレイテンシの合計は、従来のレイテンシより小さくなる。ステップ1201においてデータのみが書き込まれる場合、もしくはデータ及びアドレスが書き込まれる場合も同様である。
ただし、Posted Writeを適用する場合、完了通知(1202)以外の手段によって、ステップ1201の書き込みを保証する必要がある。
図18に示す従来の技術によれば、スイッチファブリック130を経由する要求は、DMA転送要求(1803)及び読み込み要求(1805から1807)のみである。このため、従来の技術にPosted Writeを適用することによって、スイッチファブリック130を経由する処理のレイテンシを削減することはできない。
図19のレイテンシ1930は、本発明の第2の実施の形態のデータ転送(図12参照)のレイテンシを示す。一方、本発明の第1の実施の形態のデータ転送(図3参照)には、ホスト側ブリッジ120が介在する。このため、図12の処理と比較すると、図3のステップ301から305及び308の所要時間の分だけレイテンシが増加する。ただし、これらのステップはいずれもスイッチファブリック130を経由しない。さらに、第1の実施の形態のリモートI/Oシステムでは、バースト転送を実行することによって、レイテンシを改善することができる。
本発明の第1の実施の形態の変形例のデータ転送(図8参照)では、DMA転送要求がホスト側ブリッジ720から発行される。このため、変形例のデータ転送のレイテンシは、図3に示す第1の実施の形態と比較して、ステップ308の所要時間の分だけ小さくなる。さらに、第1の実施の形態の変形例によれば、他の実施の形態と比較して、ドライバ702が実行する処理が少ない。このため、第1の実施の形態の変形例を実現するためのドライバを容易に作成することができる。
本発明の第3の実施の形態のデータ転送(図15参照)では、第1の実施の形態とほぼ同じ手順が実行される。このため、第3の実施の形態によるレイテンシの改善効果は、第1の実施の形態の変形例とほぼ同じである。ただし、第3の実施の形態によれば、ハイパバイザ1410が主要な処理を実行する。このため、従来と同じドライバを、改変することなく、ドライバ1404として使用することができる。
上記は、ホストPC100とデバイス140等とがスイッチファブリック130を介して接続される場合の効果についての説明である。しかし、ホストPC100とデバイス140等とがいかなる経路を介して接続されていても、その経路を介するデータアクセス時にレイテンシが発生する場合、本発明の実施の形態を適用することによって、上記と同様の効果を期待することができる。