(57)【要約】      （修正有）【課題】ノード間ネットワーク網のトラフィック量を増大させずに、TLB先読みの実行を可能にする。【解決手段】ローカルノードは、プロセッサから、ライト又はリードのいずれかの要求に対応可能かを問い合わせる第１のメッセージとリモートノードプリキャッシュTLBを有する第１のコマンドを受信したとき、第１のメッセージとリモートノードプリキャッシュTLBとを含むリモートノード宛ての第１の送信データを送信する。さらに、第１のメッセージに対する第１の応答データの受信に応答して、プロセッサから第２のコマンドがライトを要求するとき、ライトデータのメッセージとリモートノード仮想アドレスとを含むリモートノード宛てのライト・送信データを送信する。リモートノードは、第１の送信データに応答して、リモートノードプリキャッシュTLBに対応する第１のアドレス変換エントリをメインメモリから読み出しTLBにプリキャッシュする。【選択図】図６
2019159858.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサを介さずにメインメモリにアクセスするダイレクトメモリアクセス制御部（以下DMAと称する）と、
前記メインメモリ内の仮想アドレスと実アドレスの対応を有するアドレス変換テーブル内の一部のアドレス変換エントリを格納するアドレス変換バッファ（以下TLBと称する）と、
前記プロセッサから送信されたコマンドに対する処理と受信した送信データに対する処理を制御する制御部とを有し、
前記制御部は、
前記プロセッサから、ライト及びリードのいずれかの要求に対応可能かを問い合わせる第１のメッセージとリモートノードプリキャッシュTLBを有する第１のコマンドを受信したとき、前記第１のメッセージと前記リモートノードプリキャッシュTLBとを含むリモートのコンピュータノード宛ての第１の送信データを送信し、
前記第１のメッセージに対する対応可能メッセージを含む第１の応答データの受信に応答して、前記プロセッサから、前記ライト及びリードのいずれかを要求する第２のコマンドを受信したとき、
前記第２のコマンドがライトを要求するとき、ライトデータのメッセージと前記第２のコマンド内のリモートノード仮想アドレスとを含む前記リモートのコンピュータノード宛てのライト・送信データを送信し、
前記リモートのコンピュータノードは、
前記第１の送信データに応答して、前記リモートノードプリキャッシュTLBに対応する第１のアドレス変換エントリを前記メインメモリから読み出し前記TLBにプリキャッシュし、
前記ライト・送信データに応答して、前記第１のアドレス変換エントリに基づいて、前記ライト・送信データ内のリモートノード仮想アドレスをリモートノード実アドレスに変換し、前記リモートノード実アドレスに基づいて前記メインメモリに前記ライトデータを書き込む、
ネットワークインタフェース装置。
【請求項２】
前記制御部は、
前記第１のコマンドを受信したとき、前記第１のコマンド内のローカルノードプリキャッシュTLBに対応する第２のアドレス変換エントリを、前記メインメモリから読み出し前記TLBにプリキャッシュするプリキャッシュ要求を前記DMAに依頼し、
前記第２のコマンドがライトを要求するとき、前記第２のアドレス変換エントリに基づいて、前記第２のコマンド内のローカルノード仮想アドレスをローカルノード実アドレスに変換し、前記ローカルノード実アドレスに基づいて前記メインメモリから前記ライトデータを読み出す要求を前記DMAに依頼する、
請求項１に記載のネットワークインタフェース装置。
【請求項３】
前記制御部は、
前記第２のコマンドがリードを要求するとき、前記第２のコマンド内のリモートノード仮想アドレスを含むリード・送信データを送信し、
前記リモートのコンピュータノードは、
前記リード・送信データに応答して、（１）前記第１のアドレス変換エントリに基づいて、前記リード・送信データ内のリモートノード仮想アドレスをリモートノード実アドレスに変換し、前記リモートノード実アドレスに基づいて前記メインメモリからリードデータを読み出し、（２）前記リードデータを含む第２の応答データをローカルのコンピュータノード宛てに送信する、
請求項１に記載のネットワークインタフェース装置。
【請求項４】
前記制御部は、
前記第２のコマンドがリードを要求するとき、前記第２のコマンド内のリモートノード仮想アドレスを含むリード・送信データを送信し、
前記リモートのコンピュータノードは、
前記リード・送信データに応答して、（１）前記第１のアドレス変換エントリに基づいて、前記リード・送信データ内のリモートノード仮想アドレスをリモートノード実アドレスに変換し、前記リモートノード実アドレスに基づいて前記メインメモリからリードデータを読み出し、（２）前記リードデータを含む第２の応答データをローカルのコンピュータノード宛てに送信する、
請求項２に記載のネットワークインタフェース装置。
【請求項５】
前記制御部は、
前記第２の応答データを受信したとき、前記第２のアドレス変換エントリに基づいて、前記第２のコマンド内の前記ローカルノード仮想アドレスをローカルノード実アドレスに変換し、前記ローカルノード実アドレスに基づいて前記メインメモリに前記リードデータを書き込む要求を前記DMAに依頼する、請求項４に記載のネットワークインタフェース装置。
【請求項６】
前記リモートのコンピュータノードでは、
前記第１の送信データに応答して、前記第１の送信データ内のメッセージを前記メインメモリに書き込む要求を、前記DMAに依頼し、
前記DMAは、
前記メッセージを前記メインメモリへ書込む第１の要求を、前記アドレス変換エントリを前記メインメモリから読み出して前記TLBへプリキャッシュする第２の要求よりも高い優先度で実行する、請求項１に記載のネットワークインタフェース装置。
【請求項７】
前記DMAは、
前記第１の要求に応答して、実行中のダイレクトメモリアクセスが最大値に達していない場合、前記メッセージを前記メインメモリにダイレクトメモリアクセスで書き込み、
前記第２の要求に応答して、実行中のダイレクトメモリアクセスが前記最大値より所定数少ない数に達していない場合、前記アドレス変換エントリを前記メインメモリからダイレクトメモリアクセスで読み出す、
請求項６に記載のネットワークインタフェース装置。
【請求項８】
前記制御部は、前記TLB内のアドレス変換エントリの一部を格納するTLB格納部を有し、
前記制御部は、前記アドレス変換エントリを前記メインメモリから読み出して前記TLBへプリキャッシュするとき、読み出した前記アドレス変換エントリを前記TLB格納部に格納する、請求項１に記載のネットワークインタフェース装置。
【請求項９】
ネットワークインタフェースを有するローカルのコンピュータノードと、
ネットワークインタフェースを有し、前記ローカルのコンピュータノードとネットワークを介して通信可能なリモートのコンピュータノードとを有し、
前記ローカルのコンピュータノードと前記リモートのコンピュータノードの前記ネットワークインタフェースは、
プロセッサを介さずにメインメモリにアクセスするダイレクトメモリアクセス制御部（以下DMAと称する）と、
前記メインメモリ内の仮想アドレスと実アドレスの対応を有するアドレス変換テーブル内の一部のアドレス変換エントリを格納するアドレス変換バッファ（以下TLBと称する）と、
前記プロセッサから送信されたコマンドに対する処理と受信した送信データに対する処理を制御する制御部とを有し、
前記ローカルのコンピュータノードの前記制御部は、
前記プロセッサから、ライト及びリードのいずれかの要求に対応可能かを問い合わせる第１のメッセージとリモートノードプリキャッシュTLBを有する第１のコマンドを受信したとき、前記第１のメッセージと前記リモートノードプリキャッシュTLBとを含む前記リモートのコンピュータノード宛ての第１の送信データを送信し、
前記第１のメッセージに対する対応可能メッセージを含む第１の応答データの受信に応答して、前記プロセッサから、前記ライト及びリードのいずれかを要求する第２のコマンドを受信したとき、
前記第２のコマンドがライトを要求するとき、ライトデータのメッセージと前記第２のコマンド内のリモートノード仮想アドレスとを含む前記リモートのコンピュータノード宛てのライト・送信データを送信し、
前記リモートのコンピュータノードの制御部は、
前記第１の送信データに応答して、前記リモートノードプリキャッシュTLBに対応する第１のアドレス変換エントリをメインメモリから読み出し前記TLBにプリキャッシュし、
前記ライト・送信データに応答して、前記第１のアドレス変換エントリに基づいて、前記ライト・送信データ内のリモートノード仮想アドレスをリモートノード実アドレスに変換し、前記リモートノード実アドレスに基づいて前記メインメモリに前記ライトデータを書き込む、
情報処理装置。
【請求項１０】
ネットワークインタフェースを有するローカルのコンピュータノードと、ネットワークインタフェースを有し前記ローカルのコンピュータノードとネットワークを介して通信可能なリモートのコンピュータノードとを有する情報処理装置のノード間送信データ送信方法であって、
前記ローカルのコンピュータノードと前記リモートのコンピュータノードの前記ネットワークインタフェースは、
プロセッサを介さずにメインメモリにアクセスするダイレクトメモリアクセス制御部（以下DMAと称する）と、
前記メインメモリ内の仮想アドレスと実アドレスの対応を有するアドレス変換テーブル内の一部のアドレス変換エントリを格納するアドレス変換バッファ（以下TLBと称する）と、
前記プロセッサから送信されたコマンドに対する処理と受信した送信データに対する処理を制御する制御部とを有し、
前記ノード間送信データ送信方法は、
前記ローカルのコンピュータノードの前記制御部が、
前記プロセッサから、ライト及びリードのいずれかの要求に対応可能かを問い合わせる第１のメッセージとリモートノードプリキャッシュTLBを有する第１のコマンドを受信したとき、前記第１のメッセージと前記リモートノードプリキャッシュTLBとを含む前記リモートのコンピュータノード宛ての第１の送信データを送信し、
前記第１のメッセージに対する対応可能メッセージを含む第１の応答データの受信に応答して、前記プロセッサから、前記ライト及びリードのいずれかを要求する第２のコマンドを受信したとき、
前記第２のコマンドがライトを要求するとき、ライトデータのメッセージと前記第２のコマンド内のリモートノード仮想アドレスとを含む前記リモードのコンピュータノード宛てのライト・送信データを送信し、
前記リモートのコンピュータノードの制御部が、
前記第１の送信データに応答して、前記リモートノードプリキャッシュTLBに対応する第１のアドレス変換エントリをメインメモリから読み出し前記TLBにプリキャッシュし、
前記ライト・送信データに応答して、前記第１のアドレス変換エントリに基づいて、前記ライト・送信データ内のリモートノード仮想アドレスをリモートノード実アドレスに変換し、前記リモートノード実アドレスに基づいて前記メインメモリに前記ライトデータを書き込む、
情報処理装置のノード間送信データ送信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ネットワークインタフェース装置、それを有するノードを複数有する情報処理装置及び情報処理装置のノード間送信データ送信方法に関する。
【背景技術】
【０００２】
ネットワークインタフェース装置は、コンピュータなどの情報処理装置内に設けられ、ネットワークを介して他のコンピュータとの間でのデータ転送などを制御する。ネットワークインタフェース装置は、例えば、インタフェース制御回路やダイレクトメモリアクセス制御回路等を集積した集積回路チップにより実現される。
【０００３】
複数のコンピュータのノード（以下コンピュータノード又は単にノードと称する）をネットワーク網で接続したハイパフォーマンスコンピュータ（HPC）は、複数のコンピュータノードが複雑な演算処理等を並列に実行する。複数のコンピュータノードによる並列処理では、第１のコンピュータノードが、他の第２のコンピュータノードに演算済みデータをストアしたり、第２のコンピュータノードの演算済みのデータを第１のコンピュータにロードしたりする。前者は、第１のコンピュータノードが、演算済みのライトデータをメッセージとして格納するライト・パケットを第２のコンピュータノードへ転送することで実行される。後者は、第１のコンピュータノードが、リード・パケットを第２のコンピュータノードに転送し、第２のコンピュータノードが読み出した演算済みのリードデータをメッセージとして格納する応答パケットを第１のコンピュータに転送することで実行される。
【０００４】
一方、複数のコンピュータノードの実アドレス空間はそれぞれ個別に設定され、各コンピュータノードでは、アプリケーションの仮想アドレス空間でデータの読み出し及び書込みが行われる。したがって、上記のライト・パケットによる処理では、第２のコンピュータノードで受信したライトデータをメインメモリに書き込む場合、第２のコンピュータノードは受信したライト・パケットの仮想アドレスを実アドレスに変換し、ライト・パケット内のライトデータをメインメモリに書き込む。また、上記のリード・パケットによる処理では、第１のコンピュータノードで受信したリードデータをメインメモリに書き込む場合、第１のコンピュータノードは、受信したリード・パケットの仮想アドレスを実アドレスに変換し、リード・パケット内のリードデータをメインメモリに書き込む。
【０００５】
そして、仮想アドレスを実アドレスに変換するために、各ノードのネットワークインタフェースは、メインメモリからアドレス変換テーブル内のアドレス変換に対応するアドレス変換エントリをフェッチしてアドレス変換バッファ（TLB：Translation Look-aside Buffer）に格納する必要がある。
【０００６】
以下の特許文献１の開示によれば、第１のコンピュータノードのプロセッサがリモート・ライト命令を発行すると、送信装置がTLB先読みパケットを第２のコンピュータノードに送信し、さらに、メインメモリから読み出したライトデータを格納するライト・パケットを第２のコンピュータノードに送信することが開示される。これによれば、第２のコンピュータノードはTLB先読みパケットに応答してTLBを先読みしておき、その後受信するライト・パケットの仮想アドレスをTLBを参照して実アドレスに変換する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−５０７４３号公報
【特許文献２】特開２００４−２５２８３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記の特許文献１では、リモート・ライト命令の発行に応答して、第１のコンピュータノード内の送信装置が、まずTLB先読みパケットを第２のコンピュータノードに送信し、その後ライト・パケットを送信する。そのため、第１のコンピュータノードの送信装置は、リモート・ライト命令に対して２つのパケットを第２のコンピュータノードに送信することになり、ノード間ネットワーク網のトラフィック量の増大を招く。
【０００９】
そこで，本実施の形態の第１の側面の目的は，ノード間ネットワーク網のトラフィック量を増大させずに、TLB先読みの実行を可能にするネットワークインタフェース装置、それを有するノードを複数有する情報処理装置及び情報処理装置のノード間送信データ送信方法を提供することにある。
【課題を解決するための手段】
【００１０】
本実施の形態の第１の側面は，プロセッサを介さずにメインメモリにアクセスするダイレクトメモリアクセス制御部（以下DMAと称する）と、
前記メインメモリ内の仮想アドレスと実アドレスの対応を有するアドレス変換テーブル内の一部のアドレス変換エントリを格納するアドレス変換バッファ（以下TLBと称する）と、
前記プロセッサから送信されたコマンドに対する処理と受信した送信データに対する処理を制御する制御部とを有し、
前記制御部は、
前記プロセッサから、ライト及びリードのいずれかの要求に対応可能かを問い合わせる第１のメッセージとリモートノードプリキャッシュTLBを有する第１のコマンドを受信したとき、前記第１のメッセージと前記リモートノードプリキャッシュTLBとを含むリモートのコンピュータノード宛ての第１の送信データを送信し、
前記第１のメッセージに対する対応可能メッセージを含む第１の応答データの受信に応答して、前記プロセッサから、前記ライト及びリードのいずれかを要求する第２のコマンドを受信したとき、
前記第２のコマンドがライトを要求するとき、ライトデータのメッセージと前記第２のコマンド内のリモートノード仮想アドレスとを含む前記リモートのコンピュータノード宛てのライト・送信データを送信し、
前記リモートのコンピュータノードは、
前記第１の送信データに応答して、前記リモートノードプリキャッシュTLBに対応する第１のアドレス変換エントリを前記メインメモリから読み出し前記TLBにプリキャッシュし、
前記ライト・送信データに応答して、前記第１のアドレス変換エントリに基づいて、前記ライト・送信データ内のリモートノード仮想アドレスをリモートノード実アドレスに変換し、前記リモートノード実アドレスに基づいて前記メインメモリに前記ライトデータを書き込む、
ネットワークインタフェース装置である。
【発明の効果】
【００１１】
第１の側面によれば，ノード間ネットワーク網のトラフィック量を増大させずに、TLB先読みの実行を可能にする。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態におけるHPCの概略構成を示す図である。
【図２】本実施の形態におけるコンピュータノードの構成例を示す図である。
【図３】本実施の形態におけるプロセッサが発行するコマンドとそれに対するメッセージのフォーマット例を示す図である。
【図４】ライト・パケットの場合のコマンドとパケットのフォーマット例を示す図である。
【図５】ネットワークインタフェースNW_IFの詳細な構成と主な信号の流れを示す図である。
【図６】ライト・パケットの場合のローカルノードとリモートノードそれぞれのプロセッサ及びネットワークインタフェースの動作を示すシーケンス図である。
【図７】ライト・パケットの場合のローカルノードとリモートノードそれぞれのプロセッサ及びネットワークインタフェースの動作を示すシーケンス図である。
【図８】リード・パケットの場合のコマンドとパケットのフォーマット例を示す図である。
【図９】リード・パケットの場合のローカルノードとリモートノードそれぞれのプロセッサ及びネットワークインタフェースの動作を示すシーケンス図である。
【図１０】リード・パケットの場合のローカルノードとリモートノードそれぞれのプロセッサ及びネットワークインタフェースの動作を示すシーケンス図である。
【図１１】第２の実施の形態におけるDMA制御回路の処理のフローチャートを示す図である。
【図１２】第３の実施の形態におけるノードの構成を示す図である。
【図１３】アドレス変換テーブルATTとTLBの一例を示す図である。
【発明を実施するための形態】
【００１３】
図１は、本実施の形態におけるHPCの概略構成を示す図である。HPCは、複数のコンピュータノードNODEと、それらコンピュータノード間の通信網であるネットワークNWとを有する。例えば、ネットワークNWに設けられたルータ（図示せず）を介して、各コンピュータノードがネットワークに接続される。このようなHPCにおいて、複数のコンピュータノードが演算処理を並列して実行し、第１のコンピュータノード（ローカルノード）が演算結果を第２のコンピュータノード（リモートノード）にネットワークを経由して送信し（演算結果のライト）、逆に、第１のコンピュータノードが第２のコンピュータノードの演算結果をネットワーク経由で取得する（演算結果のリード）。
【００１４】
また、あるコンピュータノード内の実アドレス空間と他のコンピュータノード内の実アドレス空間とはそれぞれ異なる。そして、あるプロセスのメモリアクセスの仮想アドレスは、それぞれのコンピュータノードで実アドレスに変換され、変換された実アドレスに基づきノード内のメインメモリなどにアクセスされる。
【００１５】
図２は、本実施の形態におけるコンピュータノードの構成例を示す図である。図２には、第１のコンピュータノードNODE_1と、第２のコンピュータノードNODE_2と、ネットワークNWとが示される。
【００１６】
第１のコンピュータノードNODE_1は、CPU（Central Processing Unit）などのプロセッサPRC_1と、DRAMなどのメインメモリM_MEMと、内部バスBUSと、ネットワークインタフェースNW_IF_1とを有する。ネットワークインタフェースは、ネットワークに接続され、他のコンピュータノードとのパケットの送受信を行う。第２のコンピュータノードNODE_2も同様の構成を有する。
【００１７】
また、両ノードのネットワークインタフェースNW_IF_1, NW_IN_2は、ネットワークインタフェース制御回路NW_IF_CNTと、パケット送信部PCK_TXと、パケット受信部PCK_RXと、メインメモリM_MEMに対してダイレクトメモリアクセスを行うDMA制御回路DMA_CNTと、アドレス変換テーブルの一部のエントリを格納するアドレス変換バッファTLB（Translation Look-aside Buffer）を有する。アドレス変換バッファTLBは、メインメモリ内のアドレス変換テーブルATTの一部のエントリを記憶する一種のキャッシュである。ネットワークインタフェースは、例えば、ネットワーク制御回路、パケット送信部、パケット受信部、DMA制御回路、TLBを有する集積回路装置（コンピュータチップ）である。
【００１８】
ノード間のパケットの送受信の動作の概略は次のとおりである。各ノードのプロセッサPRC_#（#=1,2）は、パケットの送信を指示するコマンドをネットワークインタフェースNW_IF_#に発行する。このコマンドに応答して、ネットワークインタフェースは、次のような処理を行う。以下のメッセージは、例えば通信文や通信コード、またはデータなどである。
（１）コマンドに含められたメッセージを格納するパケットを生成し、コマンドに含められた送信先ノードに送信する。
（２）コマンドに含められたメインメモリのアドレスに基づいてメインメモリ内のメッセージを取得し、そのメッセージを格納するパケットを生成し、コマンドの送信先ノードに送信する。
【００１９】
上記（１）の場合、ネットワークインタフェースはコマンド内のメッセージをパケットに格納して送信するので、メッセージ送信処理のレイテンシは短い。
【００２０】
上記（２）の場合、ネットワークインタフェースは、コマンド内のアドレスに基づいてメインメモリからメッセージをDMAで読み出す必要があり、DMA制御回路によるメッセージのDMA転送が必要となる。さらに、コマンド内のアドレスが仮想アドレスの場合、実アドレスへの変換のためのTLBのエントリもメインメモリからDMAで読み出しTLBに登録する（キャッシュする）ことが必要になる場合がある。よって、上記（２）の場合、メッセージ送信処理のレイテンシは長くなる傾向にある。
【００２１】
一方、パケットを受信したノードのネットワークインタフェースは、次のような処理を行う。
（３）受信したパケットに格納されたメッセージを予め確保したメインメモリ内の受信バッファに格納する。これによりプロセッサは、受信したメッセージを受信バッファから読み出し、必要な処理を実行する。
（４）受信したパケットに格納されたメッセージを、同パケットに格納されたメインメモリのアドレスに格納する。そして、プロセッサは、受信したメッセージに対して対応する処理を実行する。
【００２２】
上記（３）の場合、受信バッファがメインメモリ内に予め確保されるので、受信バッファの容量は限定的になる。そのため、メッセージの容量も少ないものに限定される。但し、メッセージ受信処理のレイテンシは短い。
【００２３】
上記（４）の場合、受信したパケット内のメッセージを受信パケット内のアドレスに基づいてメインメモリにDMAして書き込む。さらに、アドレスが仮想アドレスの場合、実アドレスへの変換のためのTLBをメインメモリからDMAで読み出しTLBに登録する（キャッシュする）ことが必要になる場合がある。よって、上記（４）の場合、メッセージ受信処理のレイテンシは長くなる傾向にある。
【００２４】
以上のように、ネットワークインタフェースでは、ネットワークインタフェース制御回路NW_IF_CNTが、メインメモリ内のメッセージやTLBをDMAで読み出すDMA要求DMA_RQを、DMA制御回路DMA_CNTに依頼する。DMA制御回路は、メインメモリから読み出したメッセージMSGをネットワークインタフェース制御回路に転送し、また、メインメモリから読み出したTLBのエントリをTLBに転送する。
【００２５】
さらに、ネットワークインタフェース制御回路は、仮想アドレスを実アドレスに変換するためにTLBにTLB要求TLB_RQを発行し、キャッシュヒットの場合、TLBから仮想アドレスに対応する実アドレスを取得する。キャッシュミスの場合、ネットワークインタフェース制御回路は、TLBのDMA要求DMA_RQをDMA制御回路に発行し、変換対象の仮想アドレスのTLBエントリをTLBに登録させる。
【００２６】
なお、パケットは単なる情報の形式に過ぎず、送受信する対象はパケットに限らず、フレームや単なるデータ等でも良い。以下、パケットは、送信データとも称する場合がある。
【００２７】
図１３は、アドレス変換テーブルATTとTLBの一例を示す図である。メインメモリ内のアドレス変換テーブルATTは、仮想アドレスと実アドレスの全ての対応表である。但し、仮想アドレスをインデックスとし全ての実アドレス０〜M-1が登録される。一方、TLBには、ATT内の一部のエントリが登録され、各TLBエントリは、実アドレスとそれに対応する仮想アドレスを有する。
【００２８】
TLBにTLBエントリを登録する処理は、メインメモリ内のアドレス変換テーブルATTから仮想アドレスKをインデックスとして実アドレスKを読み出し、その仮想アドレスKと実アドレスKをTLBエントリとしてTLBに登録する。TLBに空きエントリがない場合は、古いTLBエントリを追出し、新しいTLBエントリを登録する。
【００２９】
TLBにより仮想アドレスKから実アドレスKに変換する場合、TLBエントリを順番に読み出し、比較器１０とANDゲート１２により、変換対象の仮想アドレスKと一致する仮想アドレスに対応する実アドレスKを抽出する。TLB内に変換対象の仮想アドレスと一致する仮想アドレスがあればキャッシュヒット、一致する仮想アドレスがなければキャッシュミスとなり、ATTからTLBエントリを読み出して登録する必要がある。
【００３０】
前述のパケットの送信処理（１）（２）と受信処理（３）（４）では、メッセージをメインメモリからDMAで読み出したり、メインメモリにDMAで書き込んだりするDMA処理と、仮想アドレスから実アドレスに変換するためのアドレス変換テーブルATT内のアドレス変換エントリをメインメモリからDMAで読み出すDMA処理とが伴う。このようなメインメモリに対するDMA処理は、一般にレイテンシが長く、送信処理と受信処理のレイテンシを長くする原因となる。
【００３１】
［第１の実施の形態］
［コマンドとメッセージのフォーマット］
図３は、本実施の形態におけるプロセッサが発行するコマンドとそれに対するメッセージのフォーマット例を示す図である。
【００３２】
［第１のコマンドと第１のパケット］
本実施の形態によれば、プロセッサが発行する第１のコマンドCMD_1に、ライト及びリードのいずれかの要求に対応可能かを問い合わせるメッセージのフィールドF3と、ローカルノードプリキャッシュTLBのフィールドF4と、リモートノードプリキャッシュTLBのフィールドF5とを設ける。この問い合わせのメッセージは、短いビット長のメッセージである。さらに、第１のコマンドには、コマンドの種類のフィールドF1と、メッセージ送信先のリモートノードアドレスRM_ADDのフィールドF2も含まれる。
【００３３】
第１のコマンドのメッセージのフィールドF3には、受信バッファに格納可能な短いデータ長のメッセージ、例えば送信文または送信コードなどが格納される。
【００３４】
ローカルノードプリキャッシュTLBのフィールドF4は、送信元ノードであるローカルノードにアドレス変換エントリ（以下TLBエントリ）のプリキャッシュ（以下TLBプリキャッシュ）を要求するフィールドである。ローカルノードプリキャッシュTLBのフィールドF4には、TLBプリキャッシュに必要なアドレス変換テーブルATTのTLBエントリのインデックス等の情報が格納される。このインデックスに基づいて、ローカルノードのネットワークインタフェース制御回路は、ローカルノード内のメインメモリ内のATT内の当該インデックスに対応するTLBエントリをDMAで読み出しTLBに登録する。
【００３５】
リモートノードプリキャッシュTLBのフィールドF5は、送信先ノードであるリモートノードにTLBプリキャッシュを要求するフィールドであり、上記と同様にTLBエントリのインデックス等の情報が格納される。このインデックスに基づいて、リモートノードのネットワークインタフェース制御回路は、メインメモリ内のATT内のインデックスに対応するTLBエントリをDMAで読み出す。
【００３６】
一方、ネットワークインタフェース制御回路が第１のコマンドCMD_1に応答して送信する第１のパケットPCK_1は、パケット種類のフィールドF11と、パケット送信元のローカルノードアドレスLO_ADDのフィールドF12と、メッセージのフィールドF13と、リモートプリキャッシュTLBのフィールドF14とを有する。
【００３７】
リモートノードプリキャッシュTLBのフィールドF14は、第１のコマンド内のリモートノードプリキャッシュTLBが格納される。このインデックスに基づいて、リモートノードのネットワークインタフェース制御回路は、ローカルノード内のメインメモリ内のATT内のインデックスに対応するTLBエントリをDMAで読み出しTLBに登録する。
【００３８】
［第２のコマンドと第２のパケット］
第１のコマンドCMD_1の問い合わせに対して、パケットの送信先のリモートノードから「要求に対応可能」のメッセージを格納する応答パケットを受信すると、ローカルノードでは、プロセッサがリード及びライトのいずれかの要求をする第２のコマンドCMD_2を発行する。
【００３９】
第２のコマンドCMD_2のフォーマットは、コマンド種類とリモートノードアドレスRM_ADDのフィールドF21,F22に加えて、ローカルノード仮想アドレスのフィールドF23及びリモートノード仮想アドレスのフィールドF24を有する。
【００４０】
［ライトの場合］
第２のコマンドCMD_2がライト・コマンドの場合、ローカルノード仮想アドレスのフィールドF23には、パケットで転送するメッセージの内容が記憶されているローカルノードの仮想アドレスが格納される。
【００４１】
ローカルノードのネットワークインタフェース制御回路は、第１のコマンドCMD_1のローカルノードプリフェッチTLBでプリフェッチされたTLBエントリに基づいて仮想アドレスを実アドレスに変換し、その実アドレスに基づいてローカルノード内のメインメモリからメッセージの内容を読み出す。このメッセージは、受信バッファに格納できない程の大容量の（ビット長が長い）データなどである。
【００４２】
そして、ネットワークインタフェース制御回路は、読み出したメッセージを格納した第２のパケットPCK_2を生成し、リモートノードに送信する。
【００４３】
第２のパケットPCK_2のフォーマットは、パケット種類のフィールドF31とローカルノードアドレスLO_ADD及びリモートノードアドレスRM_ADDのフィールドF32に加え、読み出したメッセージのフィールドF33と、リモートノード仮想アドレスのフィールドF34を有する。
【００４４】
第２のパケットPCK_2を受信したリモートノードのネットワークインタフェース制御回路は、第１のパケットPCK_1受信時にプリキャッシュしたTLB内のTLBエントリに基づいて、第２のパケットPCK_2内のリモートノード仮想アドレスを実アドレスに変換し、メインメモリの実アドレスに第２のパケット内のメッセージ（データ）を書き込む。
【００４５】
［リードの場合］
一方、第２のコマンドCMD_2がリード・コマンドの場合、ローカルノード仮想アドレスのフィールドF23には、第２のパケットPCK_2に対するリモートノードからの応答パケット内のメッセージ（データ）を記憶するローカルノードでの仮想アドレスが格納される。
【００４６】
そして、ローカルノードのネットワークインタフェース制御回路は、メッセージを格納せずリモートノードでのリード先の仮想アドレスを格納した第２のパケットPCK_2を生成し、リモートノードに送信する。
【００４７】
第２のパケットPCK_2を受信したリモートノードのネットワークインタフェース制御回路は、第１のパケットPCK_1受信時にプリキャッシュしたTLB内のTLBエントリに基づいて、第２のパケットPCK_2内のリモートノード仮想アドレスを実アドレスに変換し、メインメモリの実アドレスに基づき第２のパケット内のメッセージ（データ）を読み出す。そして、リモートノードのネットワークインタフェース制御回路は、読み出したメッセージ(データ)を格納した応答パケットを、ローカルノードに送信する。
【００４８】
応答パケットを受信したローカルノードのネットワークインタフェース制御回路は、第１のコマンドのローカルノードプリキャッシュTLBでプリキャッシュしたTLBエントリに基づいて、第２のコマンドのローカルノード仮想アドレスを実アドレスに変換し、応答パケット内のメッセージ（データ）をメインメモリに書き込む。
【００４９】
なお、上記のパケットは、図示しないが、それぞれパケットIDをヘッダ内に格納し、応答パケットは応答対象パケットのパケットIDも格納する。
【００５０】
以下、ライト・パケットの場合とリード・パケットの場合の動作を詳述する。
【００５１】
［ライト・パケットの場合の動作］
図４は、ライト・パケットの場合のコマンドとパケットのフォーマット例を示す図である。図４の第１のコマンドCMD_1、第２のコマンドCMD_2は、図３の第１のコマンドCMD_1、第２のコマンドCMD_2と同じフォーマットである。
【００５２】
但し、図４の第１のコマンドCMD_1のコマンド種類のフィールドF1には「ライト、ショートメッセージ」が格納され、メッセージのフィールドF3には通信文または通信コードである「受信可能問い合わせ」が格納され、第１のコマンドCMD_1はライト・パケットの問い合わせパケットの送信を指示する。また、図４の第２のコマンドCMD_2のコマンド種類のフィールドF21には「ライト、ロングメッセージ」が格納され、第２のコマンドDMC_2はライト・パケットの送信を指示する。
【００５３】
一方、図４の第１のパケットPCK_1と第２のパケットPCK_2のフォーマットは、図３の第１のパケットPCK_1と第２のパケットPCK_2と同じフォーマットである。
【００５４】
但し、図４の第１のパケットPCK_1のパケット種類のフィールドF11には「ライト、ショートメッセージ、プリキャッシュTLB指定付」が格納され、メッセージのフィールドF13には「受信可能問い合わせ」が格納される。また、第２のパケットPCK_2のパケット種類のフィールドF31には「ライト、ロングメッセージ」が格納され、メッセージのフィールドF34には「データ」が格納される。
【００５５】
図５は、ネットワークインタフェースNW_IFの詳細な構成と主な信号の流れを示す図である。図５では、ネットワークインタフェース制御回路NW_IF_CNTが、プロセッサから送信されるコマンドCMDを受信し必要な処理を行うコマンド受信制御回路１０と、パケット受信部PCK_RXが受信したパケットに対する処理を行うパケット受信制御回路２０とを有する。
【００５６】
図６、図７は、ライト・パケットの場合のローカルノードとリモートノードそれぞれのプロセッサ及びネットワークインタフェースの動作を示すシーケンス図である。図６では、垂直方向が時間軸に対応する。図４，５、６、７を参照しながら、ローカルノードがリモートノードに対してメッセージのライトを実行する動作について説明する。
【００５７】
［ローカルノードNODE_1での処理］
S1：図６に示すように、まず、ローカルノードNODE_1内のプロセッサPRC_1が、図４の第１のコマンドCMD_1をネットワークインタフェースNW_IF_1に送信する（S1）。この第１のコマンドは、図４に示したとおり、コマンド種類フィールドF1に「ライト、ショートメッセージ」が、メッセージフィールドF3にメッセージとして「受信可能問い合わせ」が格納され、さらに、ローカルノードプリフェッチTLBとリモートノードプリフェッチTLBとが格納される。ここで、メッセージの「受信可能問い合わせ」とは、パケットの送信先のリモートノードが、ライトデータを受信してメインメモリに書き込む準備が整っているか否かを問い合わせることを意味する。
【００５８】
S2：ローカルノードのネットワークインタフェースNW_IF_１内のコマンド受信制御回路１０は、（１）第１のコマンドCMD_1に応答して、第１のコマンド内のメッセージの「受信可能問い合わせ」をメッセージのフィールドF13に格納した問合せ・ライト・パケットPCK_2を生成し、パケット送信部PCK_TXを介してリモートノードに送信する（S2）。問合せ・ライト・パケットPCK_2は、図４に示したとおり、パケット種類、ローカルノードアドレスLO_ADDとリモートノードアドレスRM_ADDに加えて、メッセージの「受信可能問い合わせ」と、リモートノードプリフェッチTLBとを格納する。
【００５９】
また、ローカルノードのネットワークインタフェースNW_IF_１内のコマンド受信制御回路１０は、（２）第１のコマンドCMD_1内のローカルノードプリフェッチTLBの情報（アドレス変換テーブルATTのインデックス）に基づいて、メインメモリM_MEM内のアドレス変換テーブルATTの前記インデックに対応するTLBエントリをDMAで読み出し、TLBに登録するTLBのプリキャッシュ要求TLB_DMA_RQを、DMA制御回路DMA_CNTに発行する（S2）。このTLBプリキャッシュ要求により、メインメモリ内のライトデータの仮想アドレスを実アドレスに変換するためのTLBエントリがTLBにプリキャッシュされる。
【００６０】
［リモートノードNODE_2での処理］
S3：第２のパケットである問合せ・ライト・パケットPCK_2の受信に応答して、リモートノードNODE_2内のネットワークインタフェースNW_IF_2のパケット受信制御回路２０は、（３）パケットPCK_2内のメッセージ「受信可能問い合わせ」を、予めメインメモリ内に確保した受信バッファにDMAで書き込むメッセージDMAライト要求MSG_DMA_WT_RQを、DMA制御回路に発行する（S3）。これにより、プロセッサPRC_2は、パケットPCK_2のメッセージの内容を読み出すことができる。
【００６１】
さらに、リモートノードNODE_2内のネットワークインタフェースNW_IF_2のパケット受信制御回路２０は、（４）パケットPCK_2内のリモートノードプリフェッチTLBの情報に基づいて、メインメモリM_MEM内のアドレス変換テーブルATTの前記インデックに対応するエントリをDMAで読み出し、TLBに登録するTLBのプリキャッシュ要求TLB_DMA_RQを、DMA制御回路DMA_CNTに発行する（S3）。このTLBプリキャッシュ要求により、メインメモリ内のライトデータの仮想アドレスを実アドレスに変換するためのTLBエントリがTLBにプリキャッシュされる。
【００６２】
S4：リモートノードのプロセッサPRC_2は、受信バッファのメッセージ「受信可能問い合わせ」に対し、ライト・パケットの受信に対する処理可能か否かを判定し、可能な場合、受信可能のメッセージを格納した応答パケットを送信することを命ずるコマンドをネットワークインタフェースNW_IF_2に送信する（S4）。このコマンドは、図示しないが、例えば、コマンド種類（ライトの問い合わせの応答）と、応答パケットの送信先ノードアドレス（ローカルノードNODE_1のアドレス）と、「受信可能」のメッセージとを有する。
【００６３】
S5：このコマンドに応答して、リモートノードのネットワークインタフェースNW_IF_2のコマンド受信制御回路１０は、「受信可能」のメッセージを格納した応答パケットPCK_1_Rを生成し、パケット送信部PCK_TXからローカルノードに送信する（S5）。
【００６４】
［ローカルノードNODE_1での処理］
S6：ローカルノードのネットワークインタフェース内のパケット受信制御回路２０は、リモートノードからの応答パケットPCK_1_Rの受信に応答して、応答パケット内のメッセージ「受信可能」を、メインメモリ内に予め確保した受信バッファにDMAアクセスで書き込む（S6）。
【００６５】
S7：図７に示すように、次に、応答パケット内のメッセージ「受信可能」に基づいて、ローカルノードのプロセッサPRC_1は、第２のコマンドCMD_2をネットワークインタフェースNW_IF_1に送信する（S7）。第２のコマンドCMD_2は、図４に示すとおり、コマンド種類「ライト、ロングメッセージ」と、リモートノードアドレスRM_ADDと、ローカルノード仮想アドレス及びリモートノード仮想アドレスを格納する。
【００６６】
S8：第２のコマンドに応答して、ネットワークインタフェース内のコマンド受信制御回路１０は、（５）TLBにTLB要求TLB_RQを発行し、前述のS2の（２）でプリキャッシュしたTLBエントリに基づいて、第２のコマンド内のローカルノード仮想アドレスに対応する実アドレスを取得する。さらに、コマンド受信制御回路１０は、DMA制御回路DMA_CNTにメインメモリ内の取得した実アドレスのメッセージをDMAアクセスして読み出す要求MSG_DMA_RQを発行し、メッセージ（ライトデータ）を取得する（S8）。第２のコマンドはロングメッセージの送信を命令するが、前述のS2の（２）で予めTLBエントリをTLBにプリキャッシュ済みであるので、コマンド受信制御回路１０は、ローカルノード仮想アドレスの実アドレスへの変換を短時間で完了し、メインメモリ内のメッセージを読み出すことができる。
【００６７】
さらに、コマンド受信制御回路１０は、（６）DMAアクセスで取得したメッセージ（ライトデータ）を格納したライト・パケットPCK_2を生成し、パケット送信部PCK_TXを介して、リモートノードに送信する（S8）。第２のパケットであるライト・パケットPCK_2は、図４に示すとおり、メッセージ（ライトデータ）に加えて、第２のコマンド内のリモートノード仮想アドレスを格納する。
【００６８】
［リモートノードNODE_2での処理］
S9：リモートノードのネットワークインタフェースNW_IF_2内のパケット受信制御回路２０は、前述のS3の（４）でプリキャッシュしたTLBエントリに基づいて、ライト・パケット内のリモートノード仮想アドレスに対する実アドレスを要求するTLB要求TLB_RQをTLBに発行する。これにより、パケット受信制御回路２０は、プリキャッシュしたTLBエントリに基づいてリモートノード仮想アドレスに対する実アドレスを取得し、その実アドレスに基づいてメインメモリ内にライト・パケットのメッセージ（ライトデータ）をDMAアクセスで書き込む要求MSG_MDA_WT_RQをDMA制御回路DMA_CNTに発行する（S9）。これにより、メッセージ（ライトデータ）がメインメモリに書き込まれる。
【００６９】
ここでも、前述のS3の（４）でTLBエントリがプリキャッシュ済みであるので、パケット受信制御回路２０は、リモートノード仮想アドレスから実アドレスへの変換を短時間で行うことができ、ライト処理のレイテンシを短くすることができる。
【００７０】
上記の一連の処理では、第１のパケットPCK_1にリモートノードプリキャッシュTLBを格納して、リモートノードに予めTLBエントリをプリキャッシュし、第２のパケットPCK_2に書込み先のリモートノード仮想アドレスを格納している。それにより、ローカルノードがライト処理に必要な第１のパケットと第２のパケットをリモートノードに送信し、第１のパケットによりTLBのプリキャッシュを行い、第２のパケットでのライトデータのDMA処理を高速化する。よって、ネットワーク内のトラフィック量を増やすことなく、リモートノードでのTLBのプリキャッシュを行うことができる。これに対して、前述の特許文献１では、第２コマンドに対して先読みパケットと、ライト・パケットの２つのパケットを送信している。
【００７１】
上記のライト・パケットの送信処理では、第１のコマンドに基づいてローカルノードでのTLBのプリキャッシュを行わなくても良い。例えば、第１のコマンドと第２のコマンドとの間にTLBプリキャッシュを命ずる第３のコマンドを発行しても良い。但し、第１のパケットに、リモートノードプリキャッシュTLBを格納して、リモートノードでのTLBプリキャッシュを事前に実行させることで、ライト・パケットの処理レイテンシを短くできる。
【００７２】
［リード・パケットの場合の動作］
図８は、リード・パケットの場合のコマンドとパケットのフォーマット例を示す図である。図８の第１のコマンドCMD_1、第２のコマンドCMD_2は、図３の第１のコマンドCMD_1、第２のコマンドCMD_2と同じフォーマットである。
【００７３】
但し、図８の第１のコマンドCMD_1のコマンド種類のフィールドF1には「リード、ショートメッセージ」が格納され、メッセージのフィールドF3には通信文または通信コードである「送信可能問い合わせ」が格納される。したがって、第１のコマンドCMD_1はリードの問い合わせパケットの送信を指示する。また、図８の第２のコマンドCMD_2のコマンド種類のフィールドF21には「リード」が格納され、第２のコマンドDMC_2はリード・パケットの送信を指示する。
【００７４】
一方、図８の第１のパケットPCK_1のフォーマットは、図３の第１のパケットPCK_1と同じフォーマットである。第２のパケットPCK_2のフォーマットは、図３の第２のパケットと異なり、リモートノード仮想アドレスのフィールドF33とメッセージ長（データ長）のフィールドF34を有する。
【００７５】
さらに、第２のパケットに対する応答パケットPCK_2_Rは、図３には示されていないが、「リード応答」が格納されるパケットの種類のフィールドF41と、ローカルノードアドレス及びリモートノードアドレスのフィールドF42と、メッセージフィールドF43を有する。応答パケットのメッセージは、リモートノードで読み出されたリードデータである。
【００７６】
但し、図８の第１のパケットPCK_1のパケット種類のフィールドF11には「リード、ショートメッセージ、プリキャッシュTLB指定付」が格納され、メッセージのフィールドF13には「送信可能問い合わせ」が格納される。また、第２のパケットPCK_2のパケット種類のフィールドF31には「リード」が格納される。
【００７７】
図９及び図１０は、リード・パケットの場合のローカルノードとリモートノードそれぞれのプロセッサ及びネットワークインタフェースの動作を示すシーケンス図である。図９，１０も、垂直方向が時間軸に対応する。図５、８，９，１０を参照しながら、ローカルノードがリモートノードに対してメッセージのリードを実行する動作について説明する。また、ライト・パケットと対比して主に相違する点について説明する。
【００７８】
［ローカルノードNODE_1での処理］
S11：図９において、ローカルノードNODE_1のプロセッサPRC_1は、第１のコマンドCMD_1をネットワークインタフェースNW_IF_1に送信する（S11）。第１のコマンドCMD_1は、図８で説明したとおりであり、メッセージの内容が「送信可能問合せ」で、ライト・パケットの場合の「受信可能問合せ」とは異なる。「通信可能問合せ」とは、リード・パケット送信先のリモートノードがリードデータをローカルノードに送信可能か否かを問い合わせることを意味する。
【００７９】
S12：ネットワークインタフェースNW_IF_1は、第１のコマンドCMD_1に応答して、（１）第１のパケットとして、問合せ・リード・パケットPCK_1を生成し、リモートノードNODE_2に送信する（S12）。この第１のパケットPCK_1は、図８で説明したとおりであり、メッセージの内容が「送信可能問合せ」である。それ以外は、図４のライト・パケットPCK_1と同じである。
【００８０】
さらに、ネットワークインタフェースNW_IF_1は、第１のコマンドに応答して、（２）コマンド内のローカルノードプリキャッシュTLBのフィールド内のインデックスに基づいて、メインメモリにDMAして、リードデータをメインメモリに書込む時のTLBエントリをTLBにプリキャッシュする（S12）。
【００８１】
上記のとおり、ローカルノードNODE_1での処理は、図６のライト・パケットの場合とほとんど同じであり、メッセージ内容だけが異なる。
【００８２】
［リモートノードNODE_2での処理］
S13：第１のパケットPCK_1の受信に応答して、リモートノードのネットワークインタフェースNW_IF_2は、（３）パケット内のメッセージ「送信可能問合せ」を、メインメモリ内の受信バッファにDMAで書き込む（S13）。さらに、ネットワークインタフェースNW_IF_2は、（４）パケット内のリモートノードプリキャッシュTLBに基づいて、メインメモリからリードデータを読み出す時のTLBエントリをTLBにプリキャッシュする（S13）。この処理は、図６のライト・パケットの場合の処理S3とほとんど同じである。
【００８３】
S14：リモートノードのプロセッサPRC_2は、受信したメッセージ「送信可能問合せ」に対して、リードデータを読み出して送信可能か否かをチェックし、可能であれば、「送信可能」のメッセージの送信を要求するコマンド（図示せず）をネットワークインタフェースNW_IF_2に送信する（S14）。このコマンドは、図示しないが、例えば、コマンド種類（リードの問い合わせの応答）と、応答パケットの送信先ノードアドレス（ローカルノードNODE_1のアドレス）と、「送信可能」のメッセージとを有する。
【００８４】
S15：このコマンドに応答して、リモートノードのネットワークインタフェースNW_IF_2のコマンド受信制御回路１０は、「送信可能」のメッセージを格納した応答パケットを生成し、パケット送信部PCK_TXからローカルノードに送信する（S15）。これらの処理も、図６のライト・パケットの場合の処理S4,S5とほとんど同じである。
【００８５】
［ローカルノードNODE_1での処理］
S16：この応答パケットに応答して、ネットワークインタフェースNW_IF_1は、パケット内のメッセージ「送信可能」をメインメモリ内の受信バッファにDMAで書き込む（S16）。
【００８６】
S17：図１０に示すとおり、プロセッサPRC_1は、受信バッファ内のメッセージに基づいて、リード・パケットの送信を要求する第２のコマンドCMD_2をネットワークインタフェースNW_IF_1に送信する（S17）。
【００８７】
第２のコマンドCMD_2に応答して、ネットワークインタフェースNW_IF_1は、第２のパケットとして、リード・パケットPCK_2を生成し、リモートノードに送信する（S18）。第２のパケットPCK_2は、図８で説明したとおりであり、メッセージフィールドがなく、リモートノード仮想アドレスのフィールドF33と、メッセージ長のフィールドF34を有する。
【００８８】
［リモートノードでの処理］
S19：リモートノードのネットワークインタフェースNW_IF_2は、第２のパケットPCK_2の受信に応答して、（５）処理S14の（４）でプリキャッシュしたTLBエントリでパケット内のリモートノード仮想アドレスを実アドレスに変換し、実アドレスに基づいてメインメモリ内のリードデータをDMAで読み出す（S19）。この処理では、TLBエントリがプリキャッシュ済みであるので、短時間で完了する。
【００８９】
さらに、ネットワークインタフェースNW_IF_2は、（６）リード・パケットである第２のパケットに応答する応答パケットPCK_2_Rを生成し、ローカルノードNODE_1に送信する（S19）。この応答パケットPCK_2_Rは、図８で説明したとおり、リードデータをメッセージとして格納する。
【００９０】
［ローカルノードでの処理］
S20：第２のパケットに対する応答パケットPCK_2_Rの受信に応答して、ローカルノードのネットワークインタフェースNW_IF_1は、処理S12の（２）でプリキャッシュしたTLBエントリで、ローカルノード仮想アドレスを実アドレスに変換し、実アドレスに基づいてメッセージのリードデータをDMAでメインメモリ内に書き込む（S20）。この処理も、TLBエントリがプリキャッシュ済みであるので、リードデータの書き込み処理は短時間で完了する。
【００９１】
上記のリード・パケットの送信処理では、第１のコマンドに基づいてローカルノードでのTLBのプリキャッシュを行わなくても良い。例えば、第１のコマンドと第２のコマンドとの間にTLBプリキャッシュを命ずる第３のコマンドを発行しても良い。
【００９２】
但し、第１のパケットにリモートノードプリキャッシュTLBを格納して、リモートノードでのTLBプリキャッシュを事前に実行させることで、リード・パケットの処理レイテンシを短くできる。また、ネットワークを転送されるパケットは、第１、第２のパケットと、第２のパケットに対する応答パケットであり、リモートノードでのTLBプリキャッシュの為の先読みパケットを追加する必要はない。よって、ネットワークのトラフィック量の増大は発生しない。
【００９３】
これに対して、前述の特許文献１では、第２のコマンドに応答して、先読みパケットとリード・パケットとをリモートノードに送信している。
【００９４】
［第２の実施の形態］
第１の実施の形態では、ライト・パケットの場合、リモートノードは、図６の処理S3で（３）パケット内のメッセージをDMAでメインメモリの受信バッファに書き込み、（４）パケット内のリモートノードプリキャッシュTLBに基づいてTLBエントリをDMAでメインメモリから読み出す。同様に、リード・パケットの場合、リモートノードは、図９の処理S13で同様のDMAによるメインメモリへのメッセージの書込みとTLBエントリの読み出しを行う。
【００９５】
ただし、DMAで読み出してTLBにプリキャッシュされるTLBエントリは、後続の処理でアドレス変換するときに必要である。したがって、全体のライト処理やリード処理のレイテンシ短縮のためには、TLBのプリキャッシュのためのDMA処理の優先度を下げて、受信した第１のパケットのメッセージをDMAでメインメモリの受信バッファに書き込む処理の優先度を上げるのが好ましい。
【００９６】
そこで、第２の実施の形態では、ネットワークインタフェース内のDMA制御回路DMA_CNTを改良して、TLBエントリのDMA処理よりも、メッセージDMA処理が優先されるようにする。
【００９７】
図１１は、第２の実施の形態におけるDMA制御回路の処理のフローチャートを示す図である。図５に示したとおり、DMA制御回路CMA_CNTは、DMA要求を受信して、メインメモリにDMAでアクセスする。その場合、DMA処理に必要な回路資源、例えば、DMA要求を格納するDMA要求バッファや、DMAで読み出したデータを一次的に格納するDMA受信バッファなどを確保したうえで、DMA処理を実行する。これらの資源の数は有限である。したがって、DMA制御回路は、受信したDMA要求に対して、DMA処理に必要な資源を確保できるか否かの判定を行う。確保できればDMAを実行し、確保できなければDMA要求を確保できるまで待機させる。
【００９８】
そこで、第２の実施の形態では、資源確保が可能か否かの判定処理で、TLBプリキャッシュのためのDMA処理と、メッセージ書き込みの為のDMA処理の優先度に差をつける。
【００９９】
具体的には、DMA制御回路は、DMA要求DMA_RQを受信すると（S31のYES）、DMA要求の種類を判定する（S32）。TLBプリキャッシュのDMA要求の場合は、DMA制御回路は、実行中のDMA数＋αが資源量の最大値に達しているか否かを判定し（S33）、NOであればそのDMA要求を実行し（S35）、YESであればNOになるまでそのDMA要求の実行を待機させる（S33のNO）。つまり、DMA制御回路は、利用可能な資源量がα個より多く残っていればDMA要求を実行し、残っていなければ残るまでDMA要求を待機させる。
【０１００】
メッセージのDMA要求の場合は、DMA制御回路は、実行中のDMA数が資源量の最大値に達しているか否かを判定し（S34）、NOであればそのDMA要求を実行し（S35）、YESであればNOになるまでそのDMA要求の実行を待機させる（S34のNO）。ここで、前述のαは、優先度の高いメッセージのDMA処理に必要な資源数である。この場合のメッセージはショートメッセージであるので、DMA処理に必要な資源数は「１」でよい。したがって、α＝１である。
【０１０１】
上記のDMA制御回路の処理によれば、TLBプリキャッシュのDMA処理とメッセージのDMA処理とが前後して発生した場合、TLBプリキャッシュのDMA処理を実行しても、DMA制御回路内の資源は必ずα個以上残るので、メッセージのDMA処理を確実に実行できる。よって、メッセージのDMA処理はTLBプリキャッシュのDMA処理より優先度が高くなる。
【０１０２】
［第３の実施の形態］
図１２は、第３の実施の形態におけるノードの構成を示す図である。TLBは、メインメモリ内のアドレス変換テーブルATT内の一部の複数のTLBエントリを記憶する一種のキャッシュである。そのため、DMA処理を行う場合TLBからアドレス変換に必要なTLBエントリを検出するのに検索処理が必要であり、処理のレイテンシを長くする。
【０１０３】
そこで、第３の実施の形態では、ネットワークインタフェース制御回路NW_IF_CNT内に、TLBよりも容量の小さいTLB格納部TLB_2を設ける。TLB格納部TLB_2は、TLBのエントリ数より少ないエントリだけ記憶する。したがって、TLB格納部の回路規模はそれほど大きくない。
【０１０４】
図１２に示すとおり、TLBプリキャッシュのためのDMA要求DMA_RQに応答して、DMA制御回路DMA_CNTは、メインメモリ内のアドレス変換テーブルATTからTLBエントリを読み出すと、それをTLBに格納すると共に、ネットワークインタフェース制御回路にも送信する。それに応答して、制御回路は読み出されたTLBエントリをTLB格納部TLB_2に記憶する。
【０１０５】
その後、メッセージのメインメモリからの読み出しやメッセージのメインメモリへの書込み処理のためのDMA処理が発生すると、ネットワークインタフェース制御回路NW_IF_CNTは、TLBエントリの検索をTLBとTLB格納部TLB_2に対して実行する。TLB格納部TLB_2は、少ないTLBエントリのみ格納しているので、検索処理を短時間で完了する。ネットワークインタフェース制御回路は、TLB格納部でヒットすれば、そのTLBエントリで仮想アドレスを実アドレスに変換し、DMA制御回路にメッセージのDMA要求DMA_RQを発行する。
【０１０６】
前述のライト・パケットまたはリード・パケットで説明したとおり、メッセージのDMAによるメインメモリへのライトまたはリードの処理が行われる前に、TLBプリキャッシュが実行される。したがって、メッセージのDMAによるライトまたはリード処理が発生したとき、TLBプリキャッシュで取得したTLBエントリがTLB格納部TLB_2内に格納されているため、TLB格納部でヒットすることが期待できる。そのため、DMA処理のレイテンシを短くできる。
【０１０７】
以上のとおり、上記の実施の形態によれば、第１に、第１のパケットにリモートノードプリキャッシュTLBを格納しているので、リモートノードのネットワークインタフェースが、次の第２のパケットを受信するまでの間に、TLBプリキャッシュを実行する。したがって、パケットの数を増やさずに、TLBプリキャッシュを第２のパケットを受信する前に完了または少なくとも開始することができる。それにより、ノード間メッセージ転送のレイテンシを短くできる。
【０１０８】
第２に、第１のコマンドにローカルノードプリキャッシュTLBを格納しているので、ローカルノードのネットワークインタフェースが、第２のコマンドとしてライト要求コマンドを受信するまでの間に、TLBプリキャッシュを実行する。または、第２のパケット（リード・パケット）の応答パケットを受信するまでの間に、TLBプリキャッシュを実行する。したがって、コマンドの数を増やさずに、第２のコマンドを受信する前にまたは第２のパケット（リード・パケット）の応答パケットを受信する前に、TLBプリキャッシュを完了または少なくとも開始することができる。それにより、ノード間メッセージ転送のレイテンシを短くできる。
【符号の説明】
【０１０９】
NODE_#：コンピュータノード、ノード
PRC_#：プロセッサ、CPU
M-MEM：メインメモリ
NW_IF_#：ネットワークインタフェース
NW_IF_CNT：ネットワークインタフェース制御回路
DMA_CNT：DMA制御回路
TLB：Translation Look-aside Buffer、一種のキャッシュ
ATT: Address Translation Table
（メインメモリ内のATTからTLBエントリが読み出され、TLBにキャッシュ登録される。）
CMD_#：コマンド
PCK_#：パケット、送信データ
【図１】
2019159858.tif 000003
【図２】
2019159858.tif 000004
【図３】
2019159858.tif 000005
【図４】
2019159858.tif 000006
【図５】
2019159858.tif 000007
【図６】
2019159858.tif 000008
【図７】
2019159858.tif 000009
【図８】
2019159858.tif 000010
【図９】
2019159858.tif 000011
【図１０】
2019159858.tif 000012
【図１１】
2019159858.tif 000013
【図１２】
2019159858.tif 000014
【図１３】
2019159858.tif 000015