(57)【特許請求の範囲】
【請求項１】
ＤＭＡコントローラを有する複数のノードがバスにより接続された情報処理システムにおける該各ＤＭＡコントローラにおいて、
自ノードのファームウェアからメッセージ送信依頼を受けると、該ファームウェアから渡される、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを示す情報であって、該メッセージ送信後に該送信先ノードから該メッセージに対する応答メッセージが送られてくることが決められているメッセージは該送信先ノードから送信される完了応答の受信を待つ必要無いメッセージであることを示す該情報から、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを判定し、該完了応答の受信が必要無いものであると判定した場合には、該メッセージを前記バスを介して送信先ノードのＤＭＡコントローラに送信すると共に、該送信先ノードから送信される完了応答を受信することを待たずに、前記自ノードのファームウェアに対して完了通知するデータ転送制御手段を有することを特徴とするＤＭＡコントローラ。
【請求項２】
前記ファームウェアは、前記メッセージ送信依頼において、前記メッセージと共に、該メッセージのディスクリプタとして、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを示すフラグ情報を含むディスクリプタを前記データ転送制御手段に渡し、
前記データ転送制御手段は、該フラグ情報を参照することで、前記送信先ノードから送信される完了応答の受信が必要なものであるか否かを判定することを特徴とする請求項１記載のＤＭＡコントローラ。
【請求項３】
複数のノードがバスにより接続された情報処理システムにおける該各ノードにおいて、
自ノードのファームウェアからメッセージ送信依頼を受けると、該ファームウェアから渡される、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを示す情報であって、該メッセージ送信後に該送信先ノードから該メッセージに対する応答メッセージが送られてくることが決められているメッセージは該送信先ノードから送信される完了応答の受信を待つ必要無いメッセージであることを示す該情報から、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを判定し、該完了応答の受信が必要無いものであると判定した場合には、該メッセージを前記バスを介して送信先ノードのＤＭＡコントローラに送信すると共に、該送信先ノードから送信される完了応答を受信することを待たずに、前記自ノードのファームウェアに対して完了通知するＤＭＡコントローラを有することを特徴とするノード。
【請求項４】
ＤＭＡコントローラを有する複数のノードがバスにより接続された情報処理システムにおける該各ＤＭＡコントローラによるデータ転送制御方法であって、
自ノードのファームウェアからメッセージ送信依頼を受けると、該ファームウェアから渡される、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを示す情報であって、該メッセージ送信後に該送信先ノードから該メッセージに対する応答メッセージが送られてくることが決められているメッセージは該送信先ノードから送信される完了応答の受信を待つ必要無いメッセージであることを示す該情報から、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを判定し、該完了応答の受信が必要無いものであると判定した場合には、該メッセージを前記バスを介して送信先ノードのＤＭＡコントローラに送信すると共に、該送信先ノードから送信される完了応答を受信することを待たずに、前記自ノードのファームウェアに対して完了通知することを特徴とするデータ転送制御方法。
【請求項５】
ＤＭＡコントローラを有する複数のノードがバスにより接続された情報処理システムにおける該各ＤＭＡコントローラのコンピュータに、
自ノードのファームウェアからメッセージ送信依頼を受けると、該ファームウェアから渡される、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを示す情報であって、該メッセージ送信後に該送信先ノードから該メッセージに対する応答メッセージが送られてくることが決められているメッセージは該送信先ノードから送信される完了応答の受信を待つ必要無いメッセージであることを示す該情報から、該メッセージが送信先ノードから送信される完了応答の受信が必要なものであるか否かを判定し、該完了応答の受信が必要無いものであると判定した場合には、該メッセージを前記バスを介して送信先ノードのＤＭＡコントローラに送信すると共に、該送信先ノードから送信される完了応答を受信することを待たずに、前記自ノードのファームウェアに対して完了通知する機能を実現させる為のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ダイレクトメモリアクセス制御技術に係り、任意のノード間での情報転送を行う技術に関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、メモリとメモリとの間、又はメモリと入出力デバイス（Ｉ／Ｏデバイス）との間のデータ転送を、効率良く行うことは、コンピュータシステムの性能を高める為に重要な事項であり、その為の技術としてＤＭＡ(Direct Memory Access)が知られている。ＤＭＡは、コンピュータシステム内のデータ転送の制御を、中央処理装置（ＣＰＵ）の代わりに実行するものであり、ＤＭＡ制御回路と呼ばれる専用のハードウェアが、ＣＰＵからの命令に基づいてデータ転送を制御する仕組みとなっている。【０００３】
ＤＭＡコントローラに係る技術としては、例えば、特許文献１記載のように、マスタプロセッサ（ＭＰ）と複数のプロセッサエレメント（ＰＥ）やＤＭＡコントローラ等を有し、ＭＰから各ＤＭＡコントローラやＰＥへのコマンドを複数まとめて発行することができ、先に送ったコマンドに対する応答を待たずに次のコマンドを発行することができることが記載されている。【０００４】
また、特許文献２には、メモリ部（ＭＥＭ部）に格納されたプログラム（ファームウェア）により通信制御処理を行うＣＰＵ部と、通信インタフェース−ＭＥＭ部間のデータ転送を、プログラム（ＣＰＵ）を介さずにダイレクト・メモリ・アクセスにより行うＤＭＡ部とを有する通信制御処理装置において、ファームウェアの処理を監視する監視部を設け、上記ＤＭＡ部は監視部により指示されたデータをトレースデータ格納部に転送するように構成することが開示されている。更に詳しくは、ファームウェア格納部に格納された複数の各処理モジュールに対してそれぞれラベルを付与し、処理モジュールは実行時に自モジュールに付加されたラベルを監視部に通知する。そして、監視部は、通知されたラベルを保持して監視を行い、異常発生が検出されると、ラベルに対応する処理モジュールの詳細データを、トレースデータ格納部に転送させるようにＤＭＡ部を制御する。【０００５】
また、特許文献３には、レジスタ結合のマルチプロセッサ・システムにおけるプロセッサ間データ転送制御方式に関して、送信側と受信側とでフレームサイズが異なる場合に、送信側の最終フレームのデータがレジスタ部に転送され、送信側から受信側にＥＮＤ通知を行ってデータ転送完了の処理を行い、受信側もＥＮＤ通知によりデータ転送完了の処理を行うと、レジスタ部に最後のデータが残ってしまう為、通常のデータ転送処理とは別のプログラムを実行する必要が生じるという問題を解決するものである。【０００６】
この問題を解決する為に、特許文献３では、送信側のダイレクトメモリアクセス制御部が、レジスタ部へ最終データを転送したときの完了信号と、受信側のダイレクトメモリアクセス制御部からのＡＣＫとの論理積を、割込制御部に加える送信完了信号とする。割込制御部は、この送信完了信号より、プロセッサに割込信号を加える。【０００７】
また、近年、例えば上位装置に対して入出力装置を接続する為のＩ／Ｏインタフェースとして、PCI_Expressアーキテクチャが注目されている。
【特許文献１】特開２００２−１６３２３９号公報
【特許文献２】特開平７−９３２３３号公報
【特許文献３】特開平５−３３４２６０号公報
【０００８】
ここで、近年、例えばＲＡＩＤ等において、上記PCI_Expressアーキテクチャを採用することが考えられている。【０００９】
RAIDは、Redundant Arrays of InexpensiveDisksまたはRedundant Arrays of Independent Disksの略であり、高速化や安全性の向上を目的に、複数のストレージ（ハードディスク等）をまとめて１台のハードディスクとして管理するというストレージ冗長化の技術である。【００１０】
図８に、上記PCI_Expressアーキテクチャを採用したＲＡＩＤを含む情報処理システムの一例を示す。
図示の情報処理システムは、ＲＡＩＤを構成する複数のストレージ・モジュール５０が、PCI_Expressのシリアルバス７０とPCI_Expressスイッチ８０を介して、相互に接続されている。PCI_Expressスイッチ８０は、各シリアルバスを接続する各ポート（不図示）を有し、任意のポート間のパケットルーティングを行う。【００１１】
各ストレージモジュール５０は、ストレージ（ハードディスク等）５３と、このストレージ５３と接続したノード５１を有する。ノード５１は、上記PCI_Expressのシリアルバス７０とPCI_Expressスイッチ８０を介して、他のストレージ・モジュール５０との間でデータ送受信を行う。【００１２】
また、各ストレージ・モジュール５０は、各々、ＣＡ（チャンネルアダプタ）５２を介して任意のホストコンピュータ６０と接続しており、ホストコンピュータ６０から、任意の要求（例えばデータ更新要求）を受けると、この要求に応じて、自己のストレージ５３に対するデータ更新等を行うと共に、例えばミラーリング先のストレージ・モジュール５０に対してデータ転送を行って、同様のデータ更新を行わせる。【００１３】
以下、この様にホストコンピュータからの要求を受けたノードをローカルノードと呼び、例えばミラーリング先のようにデータ転送先のノードを、リモートノードと呼ぶものとする。【００１４】
各ノードは、不図示のＣＰＵとローカルメモリとＤＭＡコントローラを有する。ＣＰＵは、その内部に実装されたファームウェアによって、各種処理を実行するものであり、ファームウェアは、例えば上記ホストコンピュータからの要求があると、受取ったデータを一時的にローカルメモリに格納すると共にＤＭＡコントローラを起動することで、上記データ転送処理をＤＭＡコントローラに依頼する。【００１５】
ここで、ファームウェアは、上記データをローカルメモリに格納する際に、ディスクリプタを発行する。すなわち、一般に、ＣＰＵがＤＭＡコントローラに対して任意のデータの転送を依頼する際には、ＣＰＵは、ＣＰＵ配下のローカルメモリに、転送を依頼するデータを格納すると共に、このローカルメモリ上に、ＤＭＡコントローラが利用する転送制御情報（転送元アドレス、転送先アドレス、転送データサイズ等）が入っているディスクリプタを展開する。その後、ＣＰＵはＤＭＡコントローラを起動する。ＤＭＡコントローラは、起動すると、自律的に、まず、上記ディスクリプタをリードして転送制御情報を解析し、転送元アドレス（ローカルメモリにおける上記データの格納位置）に格納されている上記データを、上記データサイズ分読み出して、転送先ノードへと送信する。このデータとしては、転送すべきデータ（上記更新データ等；以下、ＤＡＴＡと表記する）以外にも各種メッセージがある。【００１６】
図９は、図８の構成におけるノード間のデータ転送シーケンス図である。
まず、図９のデータ転送シーケンスに示すように、任意のＤＡＴＡの転送処理は、実際にＤＡＴＡを転送する処理の前後に、ローカルノード−リモードノード間で各種メッセージ送受信を行う。ローカルノードのファームウェア１０１は、１つのメッセージをＤＭＡコントローラ１０２によって送信させる毎に、このメッセージとディスクリプタとをローカルメモリに格納してからＤＭＡコントローラ１０２を起動することで、当該メッセージの送信をＤＭＡコントローラ１０２に依頼する。これより、ＤＭＡコントローラ１０２は、ディスクリプタを読出し・解析することで（ディスクリプタの格納位置は決まっている）、上記メッセージをリモートノードに転送する。これは、リモートノード側においても同様である。また、メッセージ送信の場合だけでなく、ＤＡＴＡ送信の場合も同様である。【００１７】
図示のメッセージ“cmd”は、リモートノードへのリソース（メモリ）確保要求であり、メッセージ“adr”は、リモートノードからの確保メモリアドレス通知である。これらデータ転送前のメッセージ送受信が正常に終了したら、ＤＡＴＡ転送が行われる。更に、ＤＡＴＡ転送後にも所定のメッセージ交換を行う。すなわち、図示のメッセージ“done”は、リモートノードに対するデータ転送終結通知であり、メッセージ“cmp”は、リモートノードからのデータ受信完了通知である。【００１８】
図９において、リモートノードのＤＭＡコントローラ１１２は、上記メッセージ“cmd”を受信すると、自ノードのファームウェア１１１（ＣＰＵ）に対してメッセージ“cmd”の受信を通知すると共に（正確には、メッセージ“cmd”をローカルメモリに格納して、ファームウェア１１１に対して割込みを行う）、ローカルノードのＤＭＡコントローラ１０２に対して完了応答を返信する。ローカルノードのＤＭＡコントローラ１０２は、完了応答を受けると、自ノードのファームウェア１０１に対して完了通知する（割込みを行う）。ローカルノードのファームウェア１０１は、上記ＤＭＡ起動から完了通知を受けるまでの間、割込み待ち状態となり、他の処理を行えない。【００１９】
また、上記リモートノードのＤＭＡコントローラ１１２からメッセージ“cmd”の受信通知を受けたリモートノードのファームウェア１１１は、このメッセージ“cmd”に応じた所定のファームウェア処理（上記例ではリソース（メモリ）確保処理）を実行したら、このメッセージ“cmd”に対する返信メッセージ“adr”の送信を、ＤＭＡコントローラ１１２に依頼する。すなわち、メッセージ“adr”とそのディスクリプタをローカルメモリに格納して、ＤＭＡコントローラ１１２を起動する。起動されたＤＭＡコントローラ１１２は、上記メッセージ“adr”をローカルノードに送信し、これに対する完了応答を受けると、自ノードのファームウェア１１１に対して完了通知する（割込みを行う）。リモートノードのファームウェア１１１は、上記ＤＭＡ起動から完了通知を受けるまでの間、割込み待ち状態となり、他の処理を行えない。【００２０】
図９に示すメッセージ“done”やメッセージ“cmp”の送信に関しても、上記と同様に、ファームウェアは、ＤＭＡ起動から割込みを受けるまでの間、割込み待ち状態となり、他の処理を行えない。【００２１】
上記の様に、何れのノードにおいても、メッセージ送信をＤＭＡコントローラに依頼してから（ＤＭＡ起動から）完了通知を受けるまでの間（例えばＭＡＸ２（ｍｓ）程度）、割込み待ち状態となり、他の処理を行えないが、従来では、これは特に問題にはならなかった。【００２２】
すなわち、従来では、図１０（ａ）に示すように、ＣＰＵの性能上、送信したメッセージに対する完了応答を受信するまでの時間（上記割込み待ち状態の時間）よりも、ＣＰＵ（ファームウェア）が別タスクに移行可能となるまでの時間の方が大きい為、上記割込み待ち状態の時間は、装置性能上のネックとはならなかった。【００２３】
しかしながら、近年、ＣＰＵの性能が向上した為に、図１０（ｂ）に示すように、ファームウェアが別タスクに移行可能となるまでの時間が大幅に短縮された。しかしながら、ファームウェアは、上記の通り、完了通知を受けるまでは他の処理（別タスク）に移行できない為、上記割込み待ち状態の時間が、装置性能上のネックとなってきた。【００２４】
この問題は、PCI_Expressアーキテクチャを用いる場合に限らず、従来のシリアルインタフェースであっても起こるし、またパラレルインタフェースであっても起こり得る。
本発明の課題は、ファームウェアから見たレイテンシを改善するものであって、特にデータ転送前後に行われるメッセージ交換の際、送信したメッセージの種類によっては、応答を待つことなく擬似的に応答をファームウェアに通知することで、応答待ち時間を減少させて別処理を実行させることが可能となるＤＭＡコントローラ、そのプログラム等を提供することである。
【発明の開示】
【００２５】
本発明のＤＭＡコントローラは、ＤＭＡコントローラを有する複数のノードがバスにより接続された情報処理システムにおける該各ＤＭＡコントローラにおいて、自ノードのファームウェアからメッセージ送信依頼を受けると、該メッセージが送信先ノードからの完了応答が必要なものであるか否かを判定し、該完了応答が必要無いものであると判定した場合には、該メッセージを前記バスを介して送信先ノードのＤＭＡコントローラに送信すると共に、該送信先ノードからの完了応答を待たずに、前記自ノードのファームウェアに対して完了通知するデータ転送制御手段を有するように構成する。
【００２６】
この様に、送信先ノードからの完了応答を待たずに、ＤＭＡコントローラが擬似的に完了応答があった旨をファームウェアに通知することで、ファームウェアは、別の処理に移ることが出来る。
【００２７】
例えば、前記送信先ノードからの完了応答が必要無いメッセージは、該メッセージ送信後に、前記送信先ノードから何らかのメッセージが送られてくることが決められているメッセージである。従って、前記送信先ノードからの返信メッセージを受信したことを以って、上記送信したメッセージが送信先ノードに届いた旨を間接的に判断できる。もし、上記メッセージ送信から一定時間経過しても返信メッセージを受信しなかった場合には、そのときにエラー処理を行えばよい。
【００２８】
この様に、本発明のＤＭＡコントローラによれば、ファームウェアの処理効率を向上させることができる。
【図面の簡単な説明】
【００２９】
【図１】本例の情報処理システムにおけるノードの構成図である。
【図２】ノード間のデータ（メッセージ）送受信プロセスを説明する為の図（その１）である。
【図３】ノード間のデータ（メッセージ）送受信プロセスを説明する為の図（その２）である。
【図４】（ａ）は各種メッセージのデータ転送シーケンス、（ｂ）は各種メッセージの機能や“データ転送先からのレスポンスの要否”を一覧で示す図である。
【図５】本例のディスクリプタのイメージ図である。
【図６】本例のＤＭＡコントローラの動作フローである。
【図７】本例のデータ転送シーケンスの一例である。
【図８】従来のＲＡＩＤ等の構成例である。
【図９】従来のデータ転送シーケンスの一例である。
【図１０】（ａ）、（ｂ）は従来の問題点を説明する為の図である。
【発明を実施するための最良の形態】
【００３０】
以下、図面を参照して本発明の実施の形態について説明する。
尚、本実施の形態の説明では、ＤＭＡコントローラ間の接続にPCI_Expressアーキテクチャを用いる場合を例にして説明するが、本発明は、従来の任意のシリアルインタフェースやパラレルインタフェースを用いる構成であっても適用可能である。【００３１】
図１は、本例の情報処理システムにおけるノードの構成図である。
本例の情報処理システム全体の構成は、図８で説明した従来の構成と略同様である。図１には、図８の様な情報処理システムにおける各ノードの構成例を示すものである。【００３２】
図１に示すノード１０は、ＣＰＵ１１、メモリ１２、メモリハブ１３、及びＤＭＡコントローラ１４を有する。
メモリ１２は、ＣＰＵ１１配下のローカルメモリであり、ＣＰＵ１１は、メモリハブ１３を介してメモリ１２へのデータ・リード／ライトを行う。ＤＭＡコントローラ１４も、メモリハブ１３を介してメモリ１２へのデータ・リード／ライトを行う。以下の説明では、メモリハブ１３に関しては特に言及しないが、メモリ１２に対するデータ・リード／ライトは、常にメモリハブ１３に介して行っている。【００３３】
ＣＰＵ１１に実装されるファームウェアは、任意のデータのデータ転送をＤＭＡコントローラ１４に依頼する場合には、この転送させるデータをメモリ１２に格納すると共に上述したディスクリプタをメモリ１２上に展開する。ＤＭＡコントローラ１４の転送制御部１４ａは、このディスクリプタを参照して、このディスクリプタの情報に基づいて、上記データを、例えばPCI_Express等によるシリアルバス１、スイッチ２等を介して、任意の他のノード３に転送する。尚、上述した通り、上記データとしては、実データ（ＤＡＴＡ）以外にも、各種メッセージがあり、実データ（ＤＡＴＡ）転送処理の前後に、所定のメッセージ交換を実行する。尚、転送制御部１４ａは、ＤＭＡコントローラのメッセージチャネル（ＭＳＣＨ）ブロックに、本発明の機能が追加されたものである。【００３４】
他のノード３（データ転送先のノード等）も、ノード１０と同じ構成である。
以上述べた動作自体は、従来と略同様であるが、本例では、送信依頼する（メモリ１２に格納する）データがメッセージである場合には、そのディスクリプタに“データ転送先からのレスポンスを待つ必要があるもの”であるか否かを示す情報（フラグ等）が含まれており、ＤＭＡコントローラ１４の転送制御部１４ａが、このフラグを参照して、後述する転送制御処理を実行する点が、従来とは異なる。すなわち、転送するメッセージの種類によっては、ＤＭＡコントローラ１４は、データ転送先からのレスポンスを待たずに、擬似的にファームウェアに対して完了通知する点が、従来とは異なる。【００３５】
実データ（ＤＡＴＡ）転送処理自体は本発明の特徴には関係ないので、以下の説明では、基本的にはメッセージを送受信する場合について説明する。
図２に、複数のノードがPCI_Expressのようなシリアルインタフェースを用いて相互に接続された、ＲＡＩＤ等の情報処理システム全体の構成例を示す。この全体構成自体は、図８で説明した従来の構成と略同様であり、ここでは、各ノードについてはファームウェア（ＣＰＵ１１）とＤＭＡコントローラ１４のみを示している。【００３６】
図２に示す構成の基本的な動作については、図８で既に説明してあるので、ここでは簡単に説明すると、任意のノードのＤＭＡコントローラは、自ノードのファームウェアから任意のメッセージ送信を依頼されると、メッセージ転送先ノードのＤＭＡコントローラに対して、シリアルバス１、スイッチ２を介して、このメッセージ（ＭＳＧ）を送信する。【００３７】
尚、以下の説明では、図３に示すように、この様なデータ送信元のノードをローカル側ノード２０、データ送信先のノードをリモート側ノード３０と呼ぶものとする。また、図３に示すように、ローカル側ノード２０におけるＤＭＡコントローラ、その転送制御部、及びファームウェアには、それぞれ符号２２、２２ａ、２１を付すものとする。同様に、リモート側ノード３０におけるＤＭＡコントローラ、その転送制御部、及びファームウェアには、それぞれ符号３２、３２ａ、３１を付すものとする。【００３８】
リモート側ノード３０のＤＭＡコントローラ３２の転送制御部３２ａは、上記メッセージ（ＭＳＧ）を受信すると、自ノードのファームウェア３１への通知（割込み）を行うと共に、ローカル側ノード２０に対して完了応答を返信する。ローカル側ノード２０のＤＭＡコントローラ２２の転送制御部２２ａは、この完了応答を受信すると、自ノードのファームウェア２１へ完了通知（割込み）する。但し、本例では、ローカル側ノード２０のＤＭＡコントローラ２２の転送制御部２２ａは、上記送信したメッセージの種類によっては、上記完了応答を待たずに直ちに、自ノードのファームウェア２１への完了通知を行うようにする。これによって、ファームウェア２１の割込み待ち時間を減らすことができ、別処理に移ることができるようになる。【００３９】
また、リモート側ノード３０のファームウェア３１は、上記メッセージに対する応答メッセージを作成・送信するが、この場合にも、リモート側のＤＭＡコントローラ３２の転送制御部３２ａは、上記と同様、応答メッセージの種類によっては、完了応答を待たずに直ちに、自ノードのファームウェア３１への完了通知を行う。【００４０】
図４（ａ）に、上記ローカル側ノード２０−リモート側ノード３０間で送受信するメッセージの具体例を示す。
図４（ａ）には、ある実データ（ＤＡＴＡ）のデータ送信に伴う各種メッセージのデータ転送シーケンスの具体例を示す。【００４１】
図示の例では、まず、ローカル側ノード２０がリモート側ノード３０に対してメッセージ“cmd”を送信し、これに対してリモート側ノード３０が応答メッセージ“adr”を返信する。ローカル側ノード２０は、応答メッセージ“adr”を正常に受信できたら、実データ（ＤＡＴＡ）を転送する。その後、ローカル側ノード２０はリモート側ノード３０に対してメッセージ“done”を送信し、これに対してリモート側ノード３０が応答メッセージ“cmp”を返信する。ローカル側ノード２０が応答メッセージ“cmp”を正常に受信できたら、当該データ送信処理は完了する。【００４２】
図４（ｂ）に、図４（ａ）に示す各種メッセージの機能と、上記“データ転送先からのレスポンスの要否”を一覧で示す。
図４（ａ）に示したメッセージの種類は、cmd、adr、done、及びcmpの４種類である。これら各種メッセージ・タイプの機能は、既に従来で説明してあり、図４（ｂ）に示す通りである。すなわち、cmpは、ローカルノードからリモートノードに対するリソース（メモリ）確保要求である。adrは、リモートノードから返信されてくる、確保したメモリアドレスの通知である。doneは、ローカルノードからリモートノードに対するデータ転送終結通知である。cmpは、リモードノードから返信されてくる、データ受信完了通知である。【００４３】
ここで、データ転送シーケンスの最終メッセージである“cmp”以外のメッセージは、このメッセージを送信先ノードが正常に受信できた場合には、送信先からメッセージが返信されてくるものであるので、この返信メッセージを受信することにより、間接的に、当該メッセージが送信先ノードに到達したことが確認できる。これより、この例では、図４（ｂ）に示す通り、“cmp”以外のメッセージは全て、レスポンスが不要であり、“cmp”のみはレスポンスが必要となる。【００４４】
この様に、各メッセージ種類毎に、レスポンスが必要か否かは予め分かっているので、予めファームウェアに図４（ｂ）に示す情報を持たせておくことで、ファームウェアからＤＭＡコントローラに対して、レスポンスが必要か否かを知らせることができる。すなわち、本例では、メモリ１２上に格納されたデータがメッセージである場合には、図５に示すように、上記メモリ１２上に展開するディスクリプタには、このメッセージの種類と、レスポンスが必要か否かを示すフラグ（終了割込みタイミングを示すフラグビット）が含まれている。勿論、ディスクリプタには、従来通り、データ（メッセージ）格納位置やそのサイズの情報も含まれているが、ここでは省略して示す。【００４５】
例えば、ファームウェアは、メモリ１２のデータ格納領域にメッセージ“cmd”を格納したときには、このメッセージ“cmd”に対応するディスクリプタをメモリ１２上に展開する。このディスクリプタには、メッセージ“cmd”の格納位置（先頭アドレス）とデータサイズ等の情報が含まれているので、ＤＭＡコントローラ１４の転送制御部１４ａは、後述する図６の処理のように、ディスクリプタを読み出して解析することで、メッセージ“cmd”を読出して送信することができる。そして、本例では更に、ディスクリプタに含まれる上記フラグによって、このメッセージ“cmp”に対するレスポンスを待つか否かを判定できる。【００４６】
ＣＰＵ１１（ファームウェア）は、ディスクリプタをメモリ１２上に展開する際に、メモリ１２に格納したメッセージのタイプに応じて、ディスクリプタのフラグをセット又はリセットする。ここでは、レスポンスが必要ない場合には、フラグをセット（ＯＮ）する。【００４７】
その後、ＤＭＡコントローラ１４の転送制御部１４ａは、ＣＰＵ１１（ファームウェア）によって起動されると、図６に示す処理を実行する。
図６に示す処理は、ハードウェアによって実現してもよいし、ソフトウェアによって実現してもよい。ハードウェアで実現する場合には、従来のハードウェア構成に、上記フラグを参照して、フラグがＯＦＦであって場合には従来通りの動作を行い、フラグがＯＮであった場合にはメッセージ送信後直ちにファームウェアに対する割込みを発生させる回路構成が加わるだけである。【００４８】
ここでは、図６に示す処理は、ソフトウェアによって実現するものとして説明する。ソフトウェアによって実現する場合には、ＤＭＡコントローラは、不図示のＣＰＵとメモリを有しており、このメモリに図６に示す処理を実現する為のプログラムが格納されており、このプログラムをＣＰＵが読み出して実行する。図６のデータ転送処理を実現する機能部が転送制御部１４ａに相当する。【００４９】
図６に示すデータ転送処理は、ＤＭＡコントローラがファームウェアによって起動される毎に実行される。尚、ここでは、ローカル側ノード２０がリモート側ノード３０に対してメッセージ送信する場合を例にして説明するが、リモート側ノード３０がローカル側ノード２０に対して応答メッセージを送信する場合も同様の処理を行う。【００５０】
図６において、ＤＭＡコントローラ２２の転送制御部２２ａは、まず、メモリからディスクリプタを読み出して（ステップＳ１１）、このディスクリプタを解析することで（ステップＳ１２）、メモリからメッセージを読み出して（ステップＳ１３）、リモート側ノード３０に対して当該メッセージを送信する（ステップＳ１４）。また、上記ディスクリプタの解析の際にフラグをチェックしており（ステップＳ１５）、フラグがＯＮであった場合には、リモード側ノード３０からの完了応答を待つことなく、直ちに、ファームウェア２１に対して完了通知を行う（ステップＳ１７）。一方、フラグがＯＦＦであった場合には、リモード側ノード３０からの完了応答を待ち（ステップＳ１６）、完了応答を受信したら、ファームウェア２１に対して完了通知を行う（ステップＳ１７）。【００５１】
この様な転送制御を行うことで、ローカル側ノード２０−リモート側ノード３０間のデータ転送シーケンスは、例えば図７に示す様になる。
図７において、ローカル側ノード２０のファームウェア２１（ＣＰＵ）がＤＭＡコントローラ２２を起動すると、ＤＭＡコントローラ２２は、ディスクリプタを参照して、メッセージ“cmd”をリモート側ノード３０に送信すると共に、このメッセージ“cmd”に対応する上記フラグがＯＮであることから、リモート側ノード３０からの完了応答を待つことなく、ファームウェア２１に対する割込み（完了通知）を実行する。これによって、ファームウェア２１は、例えば別の他ノードに対する処理等を実行することができる。その後、ＤＭＡコントローラ２２は、リモート側ノード３０からの完了応答を受信したら、これを破棄する。【００５２】
一方、上記メッセージ“cmd”を受信したリモート側ノード３０のＤＭＡコントローラ３２は、上記完了応答を行うと共に、自ノード３０のファームウェア３１に対して割込み（メッセージ“cmd”受信の通知）を行う。これよりリモート側ノード３０のファームウェア３１は、メッセージ“cmd”に応じた所定の処理を実行し、応答メッセージ“adr”送信の為の処理を実行後、ＤＭＡコントローラ３２を起動する。ＤＭＡコントローラ３２は、ディスクリプタを参照して、メッセージ“adr”をローカル側ノード２０に送信すると共に、このメッセージ“adr”に対応する上記フラグがＯＮであることから、ローカル側ノード２０からの完了応答を待つことなく、ファームウェア３１に対する割込み（完了通知）を実行する。【００５３】
これより、ファームウェア３１は、上記ファームウェア２１の場合と同様、別の処理に移ることができる。
上記メッセージ“adr”を受信したＤＭＡコントローラ２２は、ファームウェア２１に対する割込み（メッセージ“adr”受信の通知）を実行し、その後ＤＡＴＡ転送が行われることになる。しかし、もし、何等かの理由で、上記メッセージ“cmd”送信依頼してから所定時間経過しても、メッセージ“adr”を受信しなかった場合には、ファームウェア２１はタイムアウト検出することになる。この様に、データ転送シーケンスとして、あるメッセージの送信に対して、送信先から応答メッセージが返信されることが決まっている場合には、応答メッセージが送られてこないことを以って、当該送信したメッセージが相手先に届いていない、と間接的に判断できる。【００５４】
それ故、送信したメッセージを相手先が正常に受信した場合でも相手先からの応答メッセージが無いケースを除いて、すなわち送信したメッセージがデータ転送シーケンスの最後のメッセージである場合（上記例ではcmp）を除いて、完了応答を待たずに（メッセージを投げっぱなしで）擬似的にファームウェアに対して割込みを行い、上記タイムアウト検出等によるエラー処理は後回しとしても、特に問題はない。【００５５】
図７において、メッセージ“done”に関しても、上記メッセージ“cmd”等と同様、上記フラグがＯＮであることから、ＤＭＡコントローラ２２は、リモート側ノード３０からの完了応答を待つことなく、ファームウェア２１に対する割込みを実行する。【００５６】
一方、図示のデータ転送シーケンス中の最後のメッセージであるメッセージ“cmp”の場合には、ＤＭＡコントローラ３２は、上記フラグがＯＦＦになっていることから、ローカル側ノード２０に対してメッセージ“cmp”を送信したら、完了応答を待ち、完了応答を受信したら、ファームウェア３１に対して割込み（完了通知）を行うことになる。【００５７】
以上説明したように、本例のＤＭＡコントローラによれば、特にデータ転送前後に行われるメッセージ交換の際、送信したメッセージの種類によっては、応答を待つことなく擬似的に応答をファームウェアに通知することで、応答待ち時間を減少させて別処理を実行させることが可能となる。よって、ファームウェアは、応答が来るまでの無駄な待ち時間を減らし、処理効率を向上させることができる。
【図１】
0004658122.tif 000002
【図２】
0004658122.tif 000003
【図３】
0004658122.tif 000004
【図４】
0004658122.tif 000005
【図５】
0004658122.tif 000006
【図６】
0004658122.tif 000007
【図７】
0004658122.tif 000008
【図８】
0004658122.tif 000009
【図９】
0004658122.tif 000010
【図１０】
0004658122.tif 000011