(57)【要約】【課題】デバイス依存性、ドライアバソフトウェア依存性の無いプリフェッチ方法を擁する低遅延データ転送方式を提供する。【解決手段】ローカルメモリ側データ転送装置１が、単純にアドレスをインクリメントしてローカルメモリからデータを取り込んでリモートメモリ側データ転送装置２のキャッシュメモリ６に蓄える。キャッシュメモリ６にローカルメモリと一致しないデータが蓄えられないように、ローカルメモリ側の書き換えロックがはずされて次の転送命令がくるのに相当する、ローカルメモリ−リモートメモリ間の転送のラウンドトリップタイム経過ごとに、キャッシュをクリアする。または、ローカルメモリ側からの、指定されたアドレスのデータ転送を通知する信号を受信したときに、キャッシュをクリアする。【選択図】図１
2008112403.tif 000002
【特許請求の範囲】
【請求項１】
ローカルメモリとリモートメモリとの間に配置されるデータ転送装置であって、
前記ローカルメモリのデータをプリフェッチする手段と、
プリフェッチしたデータをキャッシュするキャッシュメモリと、
前記リモートメモリとのハンドシェーク制御をしながらキャッシュしたデータを前記リモートメモリに転送する手段と、
所定の条件下で前記キャッシュメモリにキャッシュした前記データを消去するキャッシュクリア手段と、を有するデータ転送装置。
【請求項２】
請求項１に記載のデータ転送装置において、前記ローカルメモリのデータをプリフェッチする手段は、プリフェッチ機能の可否並びに、いくつ先のアドレスまでプリフェッチするかを規定する制御手段と、
現在読んでいるデータのアドレスから、前記制御手段で指定されたアドレスまでを、前記ローカルメモリから先に読み込んでデータを取得する手段と、で構成されることを特徴とするデータ転送装置。
【請求項３】
請求項１又は２に記載のデータ転送装置において、前記条件は、前記キャッシュメモリから前記リモートメモリ側へのデータ転送時からの、前記ローカルメモリと前記リモートメモリとの間の往復のデータ転送にかかる時間の経過であり、前記キャッシュクリア手段は該時間の経過を契機にキャッシュをクリアすることを特徴とするデータ転送装置。
【請求項４】
請求項１又は２に記載のデータ転送装置において、前記条件は、前記ローカルメモリ側からの、コピーコマンド、ライトコマンド、リードコマンドのいずれか１つのコマンドの受信であり、前記キャッシュクリア手段は該信号の受信を契機にキャッシュをクリアすることを特徴とするデータ転送装置。
【請求項５】
ローカルメモリとリモートメモリとの間にキャッシュメモリが配置されるデータ転送装置のデータ転送方法であって、
前記ローカルメモリのデータをプリフェッチし、プリフェッチしたデータを前記キャッシュメモリにキャッシュし、前記リモートメモリとのハンドシェーク制御をしながらキャッシュしたデータをリモートメモリに転送し、所定の条件下で前記キャッシュメモリにキャッシュしたデータを消去することを特徴とするデータ転送方法。
【請求項６】
請求項５に記載のデータ転送方法において、前記条件は、前記キャッシュメモリから前記リモートメモリ側へのデータ転送時からの、前記ローカルメモリと前記リモートメモリとの間の往復のデータ転送にかかる時間の経過であり、該時間の経過を契機にキャッシュをクリアすることを特徴とするデータ転送方法。
【請求項７】
請求項５に記載のデータ転送方法において、前記条件は、前記ローカルメモリ側からの、コピーコマンド、ライトコマンド、リードコマンドのいずれか１つのコマンドの受信であり、該信号の受信を契機にキャッシュをクリアするデータ転送方法。
【請求項８】
ＣＰＵとローカルメモリとを含むコンピュータと、リモートメモリとＩ／Ｏデバイスとを含み、前記コンピュータに接続されるＩ／Ｏモジュールと、前記コンピュータ内、前記Ｉ／Ｏモジュール内、又は前記コンピュータと前記Ｉ／Ｏモジュールとの間に設けられるＤＭＡコントローラと、を備えたコンピュータ装置であって、
前記ローカルメモリのデータをプリフェッチする手段を前記コンピュータに備え、
プリフェッチした前記データをキャッシュするキャッシュメモリと、前記リモートメモリとのハンドシェーク制御をしながらキャッシュしたデータを前記リモートメモリに転送する手段と、キャッシュしたデータをキャッシュ後に、所定の条件下でキャッシュしたデータを消去するキャッシュクリア手段とを前記Ｉ／Ｏモジュールに備えたコンピュータ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置、データ転送方法及びコンピュータ装置に関し、特にローカルメモリとリモートメモリ間のデータ転送装置、データ転送方法及びコンピュータ装置に関する。
【背景技術】
【０００２】
従来、この種のデータ転送装置は、コンピュータ装置において、メインメモリ側に存在するローカルメモリと、対向するハードディスク、ネットワークインターフェースカードなどのI/Oデバイス側、あるいは別のコンピュータ側に存在するリモートメモリとの間で、CPUの介在なしにデータの転送を行う。これをＤＭＡ（Direct Memory Access）と言い、特に、コンピュータ間の場合をＲＤＭＡ（Remote DMA）と呼ぶ（例えば、特許文献１参照。）。
【０００３】
この時、コンピュータとＩ／Ｏモジュール間のデータ読み出しと当該データ転送にかかる時間を隠蔽して、データ転送効率をあげるために、キャッシュ、ならびに、プリフェッチが用いられる。キャッシュは、一度読み出したデータをキャッシュメモリにためておき、次に同じアドレスに読み出しがかかった時にはＡＣＫに対して、ローカルメモリまで読みに行かずに、キャッシュメモリに蓄えられたデータを返す。この場合、キャッシュ内に読み出しデータが存在するとヒット件数が増え、転送性能が向上するために、なるべく大きなキャッシュを備えて、キャッシュクリアは減らす方向でチューニングを行うことで実効的な転送性能が向上する。そのために、キャッシュされたデータのヒット率をモニターして、ヒット率が低いデータからクリアしていくというような手段がとられており、ヒット率モニター用のカウンタ、など、回路規模が大きくなる問題がある。
【０００４】
さらに、一度読み出したデータだけではなく、新規なデータについてはプリフェッチにより、あらかじめキャッシュメモリに蓄えておくプリフェッチを用いたキャッシュ方法がある。それは、適当な手法により、後に読み出しに行くデータを予測して、それをあらかじめキャッシュメモリまで運んで蓄えておく。キャッシュ後にＡＣＫが到達し、それがキャッシュに蓄えられたデータ、アドレスにヒットした場合には、そこからリモートメモリへとデータを転送できるため、データを読みに行くプロセスと、データがキャッシュメモリまで送られる時間を隠蔽することができる。
【０００５】
プリフェッチに関する従来の技術では、特許文献２にあるように、ＤＭＡ開始時に連続転送かどうかを見て、連続転送なら先読みする、あるいは、特許文献１にあるように、ＤＭＡキューにはいっているコマンドを先に読み込んで、当該アドレスを先に読み出すというような手段がもちいられている。これらの手法はデータを「キューバッファにためて」、「中身を見て」、「どのようなプリフェッチを行うかを決める」ため、Ｉ／Ｏモジュール個々の機能に依存するため、Ｉ／Ｏモジュール制御用のデバイスドライバソフトウェアまで介在させて動作を解析してプリフェッチを行う必要がある。一方、データのコンテキストまで見てプリフェッチするデータ、クリアするデータを決めなくてはならない場合にも、コンテキストを見るためにデバイスドライバソフトウェアの介在が必要となる。
本発明に関連する従来技術としては、特許文献４にはネットワークサーバのデータキャッシュ部にキャッシュデータを格納し、規定保持時間後にキャッシュデータの無効化を行うことの記載（段落番号（００３３）等）があり、特許文献５には主記録装置上の命令やデータの写しを格納する２つのキャッシュメモリのうち、命令フェッチ用キャッシュメモリがキャンセル要求によりデータを削除することの記載（第２頁右上欄第１８行〜左下欄２行）があり、特許文献６にはＤＭＡによりデータを先行読み出しし、バッファーにデータを格納することの記載（段落番号（００２２）、（００２３））がある。
【特許文献１】特開２００５−０３８２１８号公報
【特許文献２】特開２００６−０９９３５８号公報
【特許文献３】特開２００６−０７２８３２号公報
【特許文献４】特開２００１−１７５５２７号公報
【特許文献５】特開平０１−３０５４３０号公報
【特許文献６】特開平０９−２９３０４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記従来の技術の第１の問題点は、プリフェッチ動作が、あるＩ／Ｏモジュールの、あるＯＳのバージョンとの組み合わせで実現できても、違うＩ／Ｏモジュールや、同じ種類のＩ／ＯモジュールでもＯＳのバージョンが異なっただけで、動作しなくなる可能性があることである。その理由は、プリフェッチするデータまたは、キャッシュからクリアするデータの選択時にデバイス依存性があるためである。それは「キューにためて」、「中身を見て」どのようなプリフェッチを行うかを決めるため、Ｉ／Ｏデバイスの個々の機能に依存すると同時に、データのコンテキストまで見てプリフェッチするデータ、クリアするデータを決めなくてはならないからである。すなわち、デバイス依存性が出てしまう課題があると同時に、コンテキストを見るために、デバイスドライバソフトウェアまで介在させて動作を解析してプリフェッチを行う必要がある。そのため、ハードウェア、あるいはデバイスドライバソフトウェアにデバイス個々の作りこみが必要となり、汎用性に乏しいことである。
【０００７】
第２の問題点は、上記のようなプリフェッチ、キャッシュ動作を行うための回路の実装において、ある程度大きな回路規模が必要となることである。その理由は、見極め用のキュー、中身（ペイロード）をみるための高速回路、プリフェッチするかどうかを決める判別回路など、複雑なロジック回路が必要なことにある。
【０００８】
第３の問題点は、キューバッファを置くために、そこでの遅延が発生することである。
【０００９】
（発明の目的）
本発明の目的は、個々のＩ／Ｏデバイス、ＣＰＵ/ＯＳに依存しないプリフェッチ、キャッシュ回路を提供することにある。
【００１０】
また、本発明の他の目的は、回路規模の小さなプリフェッチ、キャッシュ回路を提供することにある。
【課題を解決するための手段】
【００１１】
本発明のデータ転送装置は、データ転送元のローカルメモリと転送先のリモートメモリ間に介在して、現在読み出し中のアドレスの先を読み出してキャッシュメモリに蓄える。その際にデータの中身やコマンドの先読みなどは行わない。その替わりに、キャッシュされたデータは、そのローカルメモリとのコヒーレンシィーが物理的、あるいは論理的に保障される条件を満たさなくなるとすぐに廃棄されるキャッシュクリア手段を有する。
【００１２】
このような構成を採用し、簡単な動作でプリフェッチとキャッシュクリアを行うことで、本発明の目的を達成することができる。
【発明の効果】
【００１３】
本発明の第１の効果は、ローカルメモリとリモートメモリ間に距離があっても転送能力の劣化を補えることである。
【００１４】
その理由は、プリフェッチにより、あらかじめリモートメモリの近くまでデータを運んでおいて、距離に起因するハンドシェーク処理の遅延を隠蔽できるからである。
【００１５】
第２の効果は、Ｉ／Ｏデバイス、あるいはＯＳによる依存性がないということである。このため、どのような環境で、どのようなデバイスを用いてもデータ転送の効率化が期待できる。
【００１６】
その理由は、プリフェッチするデータの選択に、データの中身やキューの中身を見る、と、いうデバイス個々の構成に関わる動作や、デバイスドライバの動作に限定をかけるような動作がないためである。
【００１７】
第３の効果は、小型のＩＣに組み込める程度に回路規模が小さくなることである。これにより、小型の安価で低消費電力の装置が構成可能である。
【００１８】
その理由は中身を見る必要がないため、中身のモニターのための回路、プリフェッチ判定回路、バッファー回路などの回路規模が小さくてすむからである。
【発明を実施するための最良の形態】
【００１９】
次に、発明を実施するための最良の形態について図面を参照して詳細に説明する。ここでは、コンピュータ装置において、メインメモリ側に存在するローカルメモリと、対向するハードディスク、ネットワークインターフェースカードなどのI/Oデバイス側との間でCPUの介在なしにデータの転送を行う場合について説明するが、１つのコンピュータのメインメモリ側に存在するローカルメモリと別のコンピュータ側に存在するリモートメモリとの間で、CPUの介在なしにデータの転送を行う場合にも適用可能である。
【００２０】
［第１の実施形態］
図２を参照すると、本実施形態のデータ転送装置はローカルメモリ側データ転送装置１とリモートメモリ側データ転送装置２より構成される。それぞれの詳細な構成は後述する。
【００２１】
最初に図２〜図６を用いて全体の動作を説明する。本実施形態は、両者の間にある程度の遅延の原因となる距離やネットワーク機器が存在している場合に、その遅延による転送効率の劣化を補償する動作を行う。本実施形態ではDMAコントローラ１０８がＩ／Ｏモジュール１０７側にある場合について説明する。本実施形態も、従来例と同じく、ローカルメモリ１０３とリモートメモリ１０９の間で、ＡｃｋやＣｏｍｐｌｅｔｅｏｎなどのハンドシェーク用のデータの交換を行うのを待っている間に、相手側のメモリからデータを先にキャッシュメモリ１１０まで運んでおく、一般にプリフェッチと呼ばれている技術を用いることで、遅延を減らし、データ転送効率を向上させることができる。
【００２２】
最初に図３を用いてプリフェッチをしない場合の動作を説明する。コンピュータ１０１からＩ／Ｏモジュール１０７へローカルメモリ１０３にあるデータをノースブリッジ（North Bridge）（メモリ制御用チップセット）１０４、サウスブリッジ(South Bridge)（Ｉ／Ｏ制御用チップセット）１０５、及び、ＰＣＩバス１０６を経由してＤＭＡ転送する。その場合のフロー（ステップＳ１〜Ｓ７）を順に説明する。コンピュータ１０１のローカルメモリ（Local Memory）１０３にあるデータをＩ／Ｏモジュール(Input/Output Module)１０７のリモートメモリ１０９へ書き込み（ＷＲＩＴＥ）する場合について述べる。
【００２３】
最初にＣＰＵ１０２上で走るＯＳ(Operating System)からＤＭＡコントローラ(DMA Controller)１０８へＷＲＩＴＥの動作の起動がかけられ、書き込みたいデータのローカルメモリ１０３のアドレスが通知される（ステップＳ１）。ＤＭＡコントローラ１０８はリモートメモリ１０９へデータを書き込む領域が存在するかなどの書き込み準備が整っているかを確認する（ステップＳ２）。リモートメモリ１０９は書き込み準備が整ったら“ＡＣＫ（Acknowledgment）”を返す（ステップＳ３）。ＤＭＡコントローラ１０８はこれをうけて、ローカルメモリ１０３上の指定されたアドレスにあるデータを読みに行く（ステップＳ４）。ローカルメモリ１０３から当該データとともに読み込み完了の“ｃｏｍｐｌｅｔｉｏｎ”が送られる（ステップＳ５）。そのデータとアドレスはキャッシュメモリに保存されるとともに、リモートメモリ１０９へ送られる（ステップＳ６）。最終的にはこのデータはハードディスクやネットワークインターフェースなどのＩ／Ｏデバイス１１１へ引き取られる（ステップＳ７）。これらの一連の動作は、実際にはローカルメモリ側データ転送装置１とリモートメモリ側データ転送装置２が間に介在するが、両者はコンピュータ１０１、並びにＩ／Ｏモジュール１０７からはソフトウェア的には見えない存在となっている。
【００２４】
次にプリフェッチを行う本実施形態の動作フローについて述べる。図４、図５を用いて説明する。最初にＣＰＵ１０２上で走るＯＳからＤＭＡコントローラ１０８へＷＲＩＴＥの動作の起動がかけられ、書き込みたいデータのローカルメモリ１０３のアドレスが通知される（ステップＳ１）。ＤＭＡコントローラ１０８はリモートメモリ１０９へデータを書き込む領域が存在するかなどの書き込み準備が整っているかを確認する（ステップＳ２）。リモートメモリ１０９は書き込み準備が整ったら“ＡＣＫ”を返す（ステップＳ３）。ＤＭＡコントローラ１０８はこれをうけて、ローカルメモリ１０３上の指定されたアドレスにあるデータを読みに行く（ステップＳ４）。ここまでの動作については、ローカルメモリ側データ転送装置１、リモートメモリ側データ転送装置２ともに、入力されたデータをそのまま相手側へ引き継ぐだけの動作を行う。
【００２５】
ＤＭＡコントローラ１０８からの読込み（ＲＥＡＤ）コマンドを受け取ったリモートメモリ側データ転送装置２は、そのコマンドをローカルメモリ側へ転送すると同時に、そのＲＥＡＤ用アドレスに続くＮバイトのメモリ領域も読み取るように、ローカルメモリ側データ転送装置１へ指示を送る（ステップＳ１４）。この指示を受け取ったローカルメモリ側データ転送装置１は、ローカルメモリ１０３から、指定されたアドレスにあるデータから始めてＮ番目のアドレスのデータまで、順次読込む（ステップＳ１６、Ｓ１７）。この際、ローカルメモリ側のサウスブリッジ（Ｉ／Ｏ制御用チップセット）１０５とのＤＭＡに関するハンドシェークプロセス、具体的には、Ｎ番目のデータまでのアドレス指定とそのＲＥＡＤコマンドのＮ回にわたる発行はローカルメモリ側データ転送装置１が自律的に行う。同時に、読み取ったデータをリモートメモリ側データ転送装置２へ転送する（ステップＳ１５）。
【００２６】
このデータを受け取ったリモートメモリ側データ転送装置２は、それらのデータを内部のキャッシュメモリに格納する。図６に示すように、格納したデータにヒットするアドレスのREADコマンドがDMAコントローラ１０８から発行されると（ステップＳ１８）、ローカルメモリ１０３までデータを読みに行く替わりに、自身のキャッシュメモリに格納してあるデータを返す（ステップＳ１９）。これにより、READコマンドがリモートメモリ側データ転送装置２からＩ／Ｏ制御用チップセット１０５へ届き、データがローカルメモリ１０３からリモートメモリ側データ転送装置２まで送られる遅延が軽減される。
【００２７】
一方、キャッシュメモリに格納された後にローカルメモリ１０３上の当該メモリが書き換えられて、両者が一致しない状況を考慮することが求められる。一般に、Ｉ／Ｏ制御用チップセット１０５、あるいはＣＰＵ１０２で動くＯＳは、DMA転送を起動中は、その完了を通知するCompletionコマンドがDMAコントローラ１０８から到着するまでは、DMA転送したデータが書き換わらないようにロックしている。したがって、キャッシュの不一致が起きる可能性があるのは、一旦ＤＭＡが終了し、かつ、その次以降のプロセスで、偶然にキャッシュされているのと同じアドレスのメモリへのＲＥＡＤコマンドが発行された場合である。
【００２８】
図７に例を示す。最初のトランザクションで５個分先のアドレスのデータまでをキャッシュしたとする。ところが実際にＤＭＡコントローラから要求されたのは３個分までで、そこで、一旦ＤＭＡが終了し、completionが発行されたとする。Completionの発行により、ローカルメモリのロックがはずれ、他のプロセスにより、当該領域のメモリが書き換えられたとする。その後、キャッシュされているアドレス領域のローカルメモリのデータをＩ／Ｏモジュール側から読みに行くと、キャッシュメモリにヒットするため、書き換わる前に格納されたデータが読み出されてしまう。
【００２９】
このキャッシュ不一致を失くすための動作については、ローカルメモリ側データ転送装置１とリモートメモリ側データ転送装置２の構成とともに図１を用いて説明する。
【００３０】
ローカルメモリ側データ転送装置１は読込みアドレス管理部３とローカルメモリ読込み部４で構成され、ポートＣでローカル側のＩ／Ｏ制御用チップセットと、ポートＡ、Ｂでリモート側メモリ転送装置２とそれぞれ接続される。
【００３１】
一方、リモートメモリ側データ転送装置２はポートＡ、Ｂでローカルメモリ側データ転送装置１と、ポートＤでＤＭＡコントローラ１０８と接続される。ポートＡ、Ｂについては、機能上は分かれているが、実際にはパケットとして、同じ物理媒体を通すことで、ハードウェアリソース量を低減している。制御系としては、プリフェッチの制御を行うプリフェッチ制御部５、並びにキャッシュのクリアを制御するキャッシュクリア管理部８、キャッシュクリア管理部８への時間出力を行うタイマ７の各ブロックがある。データ系としては、プリフェッチデータを蓄えるキャッシュメモリ６、リモートメモリ書込み部１１を含んで構成される。
【００３２】
ローカル側のサウスブリッジ（Ｉ／Ｏ制御用チップセット）１０５経由で、リモート側のＤＭＡコントローラ１０８へＷＲＩＴＥのＤＭＡが発行されると、ローカルメモリ側データ転送装置１とリモートメモリ側データ転送装置２をスルーして、Ｉ／Ｏモジュール１０７内のＤＭＡコントローラ１０８へ送られる。ＤＭＡコントローラ１０８はリモートメモリ１０７の書き込み準備が整っていることを確認して、ローカルメモリ１０３に対してアドレスを指定してＲＥＡＤコマンドを発行する。リモートメモリ側データ転送装置２では、プリフェッチ制御部５において、プリフェッチ機能がＯＮであれば、ローカルメモリ側データ転送装置１へ向けて、プリフェッチ開始の指示といくつまで、アドレスを増やして先読みするかを伝える（インクリメント数を伝える）。それを受けたローカルメモリ側データ転送装置１のローカルメモリ読込み部４では、通常のローカルメモリ１０３に対するハンドシェークを行いながら、データを読み込み、リモートメモリ側データ転送装置２へと転送を行う。通常は、あらたにＲＥＡＤコマンドが到着するまでは、ローカルメモリ１０３の読込みは行われないが、本実施形態では、引き続き、指定された数（インクリメント数）だけ、読込みを行う。この読込みアドレスの指定は、読み込みアドレス管理部３が行う。読込んだデータは随時、リモートメモリ側データ転送装置２へと転送される。
【００３３】
リモートメモリ側データ転送装置２では、ポートＢに到着したデータについて、リモートメモリ書込み部１１から、リモートメモリ側とハンドシェークしながらリモートメモリ１０９へと転送される。一方、プリフェッチデータである場合には、プリフェッチデータ格納用のキャッシュメモリ６へ格納される。リモートメモリ側のＤＭＡコントローラ１０８から、新たにＲＥＡＤ要求が到着して、キャッシュにヒットした場合には、ＲＥＡＤ要求はローカルメモリ側へは送られずにキャッシュメモリ６にあるデータがＤＭＡコントローラ１０８へ返される。
【００３４】
キャッシュされたデータがローカルメモリ側にあるデータと不一致を起こす可能性がおきるのは、先に説明した通り、ＤＭＡ  ＷＲＩＴＥの完了の通知がリモートメモリ側のＤＭＡコントローラ１０８からローカルメモリ側のチップセットからＯＳに到着してローカルメモリのロックがはずされた後になる。すなわち、ローカルメモリのロックがはずれるまでには、リモート側からローカル側へとデータが転送される、片道分の時間がかかる。さらに、その後、次のトランザクションがローカルメモリ側から発行されてＤＭＡコントローラを起動して当該メモリアドレス領域のＲＥＡＤのコマンドを発行してリモートメモリ側データ転送装置がそれを受け付けるまでに、ローカルメモリ側からリモートメモリ側へデータが転送される片道分の時間がかかる。したがって、直近にキャッシュメモリからリモートメモリ側のＤＭＡコントローラへデータを送った時を起点にタイマ７で時間を測定すると、最低でも、ローカルメモリとリモートメモリとの間の転送の往復時間（Round Trip Time（ＲＴＴ））以上の時間がかかることになる。
【００３５】
この時間を利用して、タイマ７で時間を測定して、キャッシュクリア管理部８がキャッシュされたデータ（プリフェッチデータ）をすべてクリアしてしまえば、キャッシュに存在するデータとローカルメモリ側の当該データの不一致が起こらないことが保証される。
【００３６】
つまり、キャッシュメモリ６へプリフェッチデータが格納され、ＤＭＡコントローラ１０８から、新たにＲＥＡＤ要求が到着して、キャッシュにヒットした場合には、ＲＥＡＤ要求はローカルメモリ側へは送られずにキャッシュメモリ６にあるデータがＤＭＡコントローラ１０８へ返されるが、この時を起点にしてタイマ７でＲＴＴ時間が過ぎたことを検出した場合に、キャッシュクリア管理部８がキャッシュメモリにあるプリフェッチデータをすべてクリアする。
図３の例では、ＤＭＡコントローラがＩ／Ｏデバイス側に存在するが、コンピュータ側に存在する場合やブリッジとして両者の間に存在する場合もある。
【００３７】
次に、図８を用いて具体的な実施例を説明する。
【００３８】
ローカルメモリ側データ転送装置１は読込みアドレス管理部３とローカルメモリ読込み部４で構成され、ポートＣでローカル側のサウスブリッジ（Ｉ／Ｏ制御用チップセット）１０５と、ポートＡ、Ｂでリモートメモリ側データ転送装置２とそれぞれ接続される。
【００３９】
一方、リモートメモリ側データ転送装置２はポートＡ、Ｂでローカルメモリ側データ転送装置１と、ポートＤでＤＭＡコントローラ１０８と接続される。ポートＡ、Ｂについては、機能上は分かれているが、実際にはパケットとして、同じ物理媒体を通すことで、ハードウェアリソース量を低減している。制御系としては、プリフェッチの制御を行うプリフェッチ制御部５、並びにキャッシュのクリアを制御するキャッシュクリア管理部８、キャッシュクリア管理部８への時間出力を行うタイマ７の各ブロックがある。データ系としては、プリフェッチしたデータとそれ以外を分けるフィルタ（セレクタ）９、スルーするデータが通っていくデータバイパス用バッファ１０、プリフェッチデータを蓄えるキャッシュメモリ６、リモートメモリ書込み部１１を含んで構成される。
【００４０】
ローカル側のサウスブリッジ（Ｉ／Ｏ制御用チップセット）１０５経由で、リモート側のＤＭＡコントローラ１０８へＷＲＩＴＥのＤＭＡが発行されると、ローカルメモリ側データ転送装置１とリモートメモリ側データ転送装置２をスルーして、Ｉ／Ｏモジュール１０７内のＤＭＡコントローラ１０８へ送られる。ＤＭＡコントローラ１０８はリモートメモリ１０９の書き込み準備が整っていることを確認して、ローカルメモリ１０３に対してアドレスを指定してＲＥＡＤコマンドを発行する。リモートメモリ側データ転送装置２では、プリフェッチ制御部５において、プリフェッチ機能がＯＮであれば、ローカルメモリ側データ転送装置１へ向けて、プリフェッチ開始の指示といくつまで、アドレスを増やして先読みするかを伝える。それを受けたローカルメモリ側データ転送装置１では、通常のローカルメモリ１０３に対するハンドシェークを行いながら、データを読み込み、リモートメモリ側データ転送装置２へと転送を行う。通常は、あらたにＲＥＡＤコマンドが到着するまでは、ローカルメモリ１０３の読込みは行われないが、本実施形態では、引き続き、指定された数だけ、読込みを行う。この読込みアドレスの指定は、読み込みアドレス管理部３が行う。読込んだデータは随時、リモートメモリ側データ転送装置２へと転送される。
【００４１】
リモートメモリ側データ転送装置２では、ポートＢに到着したデータについて、プリフェッチデータかどうかをフィルタ９で確認する。プリフェッチデータで無い場合にはデータバイパス用バッファ１０を通してスルーしてリモートメモリ書込み部１１から、リモートメモリ側とハンドシェークしながらリモートメモリ１０９へと転送される。一方、プリフェッチデータである場合には、プリフェッチデータ格納用のキャッシュメモリ６へ格納される。リモートメモリ側のＤＭＡコントローラ１０８から、新たにＲＥＡＤ要求が到着して、キャッシュメモリ６にヒットした場合には、ＲＥＡＤ要求はローカルメモリ側へは送られずにキャッシュメモリ６にあるデータがＤＭＡコントローラ１０８側へ返される。
【００４２】
キャッシュされたデータがローカルメモリ側にあるデータと不一致を起こす可能性がおきるのは、先に説明した通り、ＤＭＡ  ＷＲＩＴＥの完了の通知がリモートメモリ側のＤＭＡコントローラ１０８からローカルメモリ側のチップセットからＯＳに到着してローカルメモリのロックがはずされた後になる。すなわち、ローカルメモリのロックがはずれるまでには、リモート側からローカル側へとデータが転送される、片道分の時間がかかる。さらに、その後、次のトランザクションがローカルメモリ側から発行されてＤＭＡコントローラを起動して当該メモリアドレス領域のＲＥＡＤのコマンドを発行してリモートメモリ側データ転送装置がそれを受け付けるまでに、ローカルメモリ側からリモートメモリ側へデータが転送される片道分の時間がかかる。したがって、直近にキャッシュメモリからリモートメモリ側のＤＭＡコントローラへデータを送った時を起点にタイマ７で時間を測定すると、最低でも、ローカルとリモートとの間の転送の往復時間（Round Trip Time（ＲＴＴ））以上の時間がかかることになる。
【００４３】
この時間を利用して、タイマ７で時間を測定して、キャッシュクリア管理部８がキャッシュをすべてクリアしてしまえば、キャッシュに存在するデータとローカルメモリ側の当該データの不一致が起こらないことが保証される。
【００４４】
［第２の実施形態］
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【００４５】
図９を参照すると、コマンド検出器１２はローカルメモリ１０３側から送られてくるデータの中でＷＲＩＴＥコマンドだけを検知するフィルタ機能を有する。直近にプリフェッチを行ったＤＭＡ転送について、それが終了して完了通知がＤＭＡコントローラ１０８から発行されて、サウスブリッジ（Ｉ／Ｏ制御用チップセット）１０５とＯＳがＤＭＡを終了した後でないと、次のＤＭＡ転送は行われない。また、不一致の可能性のあるデータをキャシュメモリ６からリモートメモリ１０９へフェッチしていく可能性があるのは、Ｉ／Ｏ側からＲＥＡＤが起動された場合、すなわち、ＣＰＵ側（ローカルメモリ側）からＷＲＩＴＥが起動された場合である。したがって、ＣＰＵ側（ローカルメモリ側）から到達するライト（ＷＲＩＴＥ）コマンドを検出した時点で、キャッシュをクリアすれば、不一致の可能性のあるデータをキャッシュからフェッチしていくことは起きない。すなわちコマンド検出器１２がポートＢのローカルＣＰＵ側からのライト（ＷＲＩＴＥ）コマンドを検出し、その検出信号に基づいてキャッシュクリア管理部８がキャッシュメモリ６へ、キャッシュメモリ６のプリフェッチデータをすべてクリアすることで、キャッシュの不一致の危険のあるデータをリモート側で読込む事態が回避される。
【００４６】
なお、本実施形態ではコンピュータ１０１のローカルメモリ１０３にあるデータをＩ／Ｏモジュール１０７のリモートメモリ１０９へ書き込み（ＷＲＩＴＥ）する場合について述べ、キャッシュメモリ６へプリフェッチデータが格納された後に、コマンド検出器１２がローカルメモリ１０３からのライト（ＷＲＩＴＥ）コマンドを検出した場合にプリフェッチデータをクリアしている。しかしながら、これに限られず、コマンド検出器１２がローカルメモリ１０３からのコピー（ＣＯＰＹ）コマンドを検出した場合にプリフェッチデータをクリアしてもよい。また、コマンド検出器１２がローカルメモリ１０３からのリード（ＲＥＡＤ）コマンドを検出した場合にプリフェッチデータをクリアしてもよい。つまり、ライトコマンド、コピーコマンド、リードコマンドのいずれかを検出した場合にプリフェッチデータをクリアすればよい。
【００４７】
本発明の第２の実施の形態は、第１の実施の形態の効果に加えて、タイマのセット/リセットの管理が不要となり回路の簡単化という効果も有する。
【００４８】
なお、本実施形態と第１の実施形態との構成とを組み合わせた構成とすることもできる。つまり図１に示したタイマ７とコマンド検出器１２を両方設け、ＲＴＴ分が経過したデータについてキャッシュをクリアするか、ライト（ＷＲＩＴＥ）コマンド等のコマンドを検出したときにプリフェッチデータをクリアするかを実行することができる。
以上、本発明の代表的な実施形態について説明したが、本実施形態は種々の変形が可能であり、本願の請求の範囲によって定義される本発明の精神及び範囲から逸脱しないかぎり、置換、変更が可能である。
【産業上の利用可能性】
【００４９】
本発明は、ＤＭＡ転送を行う機器に適用できる。特に、ローカルメモリ−リモートメモリ間の距離が長く、データ転送に時間がかかる機器に適用できる。
【図面の簡単な説明】
【００５０】
【図１】本発明のデータ転送装置の第１の実施の形態のブロック図である。
【図２】図１のデータ転送装置を用いたコンピュータ装置のブロック図である。
【図３】図２のコンピュータ装置の動作を説明するためのブロック図である。
【図４】図２のコンピュータ装置の動作を説明するためのブロック図である。
【図５】図２のコンピュータ装置の動作を説明するためのブロック図である。
【図６】図２のコンピュータ装置の動作を説明するためのブロック図である。
【図７】本発明の課題を説明するためのブロック図である。
【図８】図１の内部の詳細を説明するためのブロック図である。
【図９】本発明のデータ転送装置の第２の実施の形態のブロック図である。
【符号の説明】
【００５１】
１    ローカルメモリ側データ転送装置
２    リモートメモリ側データ転送装置
３    読込みアドレス管理部
４    ローカルメモリ読込み部
５    プリフェッチ制御部
６    キャッシュメモリ
７    タイマ
８    キャッシュクリア管理部
９    フィルタ（セレクタ）
１０    データバイパス用バッファー
１１    リモートメモリ書込み部
１２    コマンド検出器
【図１】
2008112403.tif 000003
【図２】
2008112403.tif 000004
【図３】
2008112403.tif 000005
【図４】
2008112403.tif 000006
【図５】
2008112403.tif 000007
【図６】
2008112403.tif 000008
【図７】
2008112403.tif 000009
【図８】
2008112403.tif 000010
【図９】
2008112403.tif 000011