(57)【特許請求の範囲】
【請求項１】
転送データが格納されるメモリと、
ネットワークインタフェースと
を備え、
前記ネットワークインタフェースは、
前記転送データを含む転送パケットを生成するパケット処理部と、
前記メモリから前記転送データを読み出すＤＭＡコントローラと、
を備え、
前記パケット処理部は、前記転送データの１回目の転送あるいは再送を指示するデータ転送命令に応答して、前記転送パケットのパケットヘッダを取得し、前記ＤＭＡコントローラによって前記メモリから読み出された前記転送データに前記取得したパケットヘッダを付加することにより前記転送パケットを生成する前記パケット処理部であって、
前記ネットワークインタフェースは、
ＣＰＵによって発行される、前記転送データの転送を指示する前記データ転送命令が格納される命令キューと、
前記転送データの再送を指示する前記データ転送命令が格納される再送命令キューと、
前記命令キューあるいは前記再送命令キューから前記データ転送命令を読み出し、前記読み出したデータ転送命令を前記パケット処理部に出力し、且つ、前記読み出したデータ転送命令を前記再送命令キューに格納する命令発行部と
を更に備え、
前記データ転送命令は、前記転送データのサイズを示し、
前記命令発行部は、前記データ転送命令に基づいて、前記転送データのサイズがネットワークのＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）を超えるか否かを判定し、判定の結果、前記転送データのサイズが前記ネットワークのＭＴＵを超える場合、前記データ転送命令を複数に分割し、前記複数のデータ転送命令を個別に前記パケット処理部に出力する
再送制御システム。
【請求項２】
請求項１に記載の再送制御システムであって、
前記ネットワークインタフェースは、パケットヘッダ取得テーブルを更に備え、
前記転送データの１回目の転送を指示する前記データ転送命令を受け取った場合、前記パケット処理部は、前記データ転送命令に基づいて前記転送パケットの前記パケットヘッダを生成し、前記生成したパケットヘッダを前記パケットヘッダ取得テーブルに登録する
再送制御システム。
【請求項３】
請求項２に記載の再送制御システムであって、
前記転送データの再送を指示する前記データ転送命令を受け取った場合、前記パケット処理部は、前記パケットヘッダ取得テーブルから前記転送パケットの前記パケットヘッダを読み出す
再送制御システム。
【請求項４】
請求項２又は３に記載の再送制御システムであって、
前記転送パケットに応答するＡＣＫパケットを受け取った場合、前記パケット処理部は、前記パケットヘッダ取得テーブルから前記転送パケットの前記パケットヘッダを削除する
再送制御システム。
【請求項５】
請求項１に記載の再送制御システムであって、
前記転送パケットに応答するＡＣＫパケットを受け取った場合、前記命令発行部は、前記転送データの再送を指示する前記データ転送命令を前記再送命令キューから削除する
再送制御システム。
【請求項６】
ネットワークインタフェースにおける再送制御方法であって、
前記ネットワークインタフェースとは別に設けられたメモリに転送データが格納され、
前記ネットワークインタフェースは、
前記転送データを含む転送パケットを生成するパケット処理部と、
前記メモリから前記転送データを読み出すＤＭＡコントローラと、
ＣＰＵによって発行される、前記転送データの転送を指示するデータ転送命令が格納される命令キューと、
前記転送データの再送を指示する前記データ転送命令が格納される再送命令キューと、
命令発行部と
を備え、
前記再送制御方法は、
前記転送データの１回目の転送あるいは再送を指示するデータ転送命令に応答して、前記転送パケットのパケットヘッダを前記パケット処理部が取得するステップと、
前記ＤＭＡコントローラが前記メモリから前記転送データを読み出すステップと、
前記ＤＭＡコントローラによって読み出された前記転送データに前記取得したパケットヘッダを付加することによって、前記転送パケットを前記パケット処理部が生成するステップと、
前記命令キューあるいは前記再送命令キューから前記データ転送命令を前記命令発行部が読み出すステップと、
前記読み出されたデータ転送命令を前記命令発行部が前記パケット処理部に出力し、且つ、前記読み出したデータ転送命令を前記命令発行部が前記再送命令キューに格納するステップと、
ここで、前記データ転送命令は、前記転送データのサイズを示し、
前記データ転送命令に基づいて、前記転送データのサイズがネットワークのＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）を超えるか否かを前記命令発行部が判定するステップと、
前記判定するステップによる判定の結果、前記転送データのサイズが前記ネットワークのＭＴＵを超える場合、前記命令発行部が、前記データ転送命令を複数に分割し、前記複数のデータ転送命令を個別に前記パケット処理部に出力するステップと
を含む
再送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークインタフェースによるパケット再送制御（ｐａｃｋｅｔ  ｒｅｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ）に関する。
【背景技術】
【０００２】
パケット通信ネットワークでは、伝送中のパケットの廃棄や破壊が発生する可能性がある。一般的に、廃棄や破壊によるパケットの消失は、アプリケーション層あるいはトランスポート層で動作するプロトコルによって検知される。そして、そのようなプロトコルの制御により、消失したパケットの再送（ｒｅｔｒａｎｓｍｉｓｓｉｏｎ）が行われ、送信されるべきデータの完全性が保証される。
【０００３】
具体的には、送信装置は受信装置にパケットを送信し、受信装置はパケットの受信を契機に確認応答（ＡＣＫ：ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）パケットを送信装置に返信する。このＡＣＫパケットの受信をもって、送信装置は、送出パケットが受信装置に無事到達したことを認識する。一方、送信装置と受信装置との間のネットワーク上でパケットが消失した場合、送信装置は、当該パケットに応答するＡＣＫパケットを受け取らない。送信装置は、パケット送出後、所定の待ち時間以内にＡＣＫパケットを受け取らない場合、当該パケットを受信装置に再送する。尚、上記所定の待ち時間は、「再送タイムアウト（ＲＴＯ：Ｒｅｔｒａｎｓｍｉｓｓｉｏｎ  Ｔｉｍｅ  Ｏｕｔ）」と呼ばれている。また、このようなパケット再送制御を実施する送信装置は、ＡＣＫパケットを受け取るまで送出パケットを一時的に保管するための記憶領域を備えており、この記憶領域は、以下「再送バッファ」と参照される。
【０００４】
インターネットで用いられるＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）は、このようなパケット再送制御を行う代表的なトランスポート層のプロトコルである。
【０００５】
近年、データセンタなど、特定のシステムのネットワークに対して、ＴＣＰよりも高速に再送を行うための技術が提案されている。その理由は、次の通りである。データセンタのような環境では、数１０μｓ〜数１００μｓのオーダでパケットが相手に届く。しかしながら、ＴＣＰの場合の再送間隔は数１０ｍｓ〜数１００ｍｓのオーダであり、通信遅延と比較して極めて大きい。データセンタ等における通信効率を向上させるためには、ＴＣＰよりも高速にパケット再送を行い、パケット再送までの待ち時間を減少させることが有効なのである。
【０００６】
そのような技術の例として、非特許文献１に示されるＲ２Ｄ２（Ｒａｐｉｄ  ａｎｄ  Ｒｅｌｉａｂｌｅ  Ｄａｔａ  Ｄａｔａ  Ｄｅｌｉｖｅｒｙ）が知られている。このＲ２Ｄ２は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）やサーバに搭載されるネットワークインタフェースカード（ＮＩＣ）に、転送済みのデータをバッファリングし、ＴＣＰよりも短い間隔でデータの再送を行う。
【０００７】
また、ＴＣＰ等の通信処理機能をＮＩＣに搭載することにより通信性能を向上させる技術が、商用のＮＩＣに導入されてきている。そのような技術の例として、ＴＯＥ（ＴＣＰ  Ｏｆｆｌｏａｄ  Ｅｎｇｉｎｅ）が挙げられる。
【０００８】
上記に関連する一般的な技術として、次のものが知られている。
【０００９】
特許文献１（特開２００４−１２８７８６号公報）は、パケット再送制御装置を開示している。そのパケット再送制御装置は、ＣＰＵと、Ｉ／Ｏバスブリッジと、メモリと、ネットワークインタフェースとを備える。再送データは、パケットの形式で、すなわち、ヘッダ等が付加された状態で、メモリに格納される。このパケット再送制御装置は、メモリ上のパケットへのポインタを含んだ送信要求に従って、パケットをネットワークに転送する。より詳細には、Ｉ／Ｏバスブリッジに、ＤＭＡエンジン、送信要求キュー及び再送用ＦＩＦＯが設けられる。再送用ＦＩＦＯには、再送パケット（転送済みのパケット）に対する送信要求が蓄積される。
【００１０】
特許文献２（特開２００５−１９２２１６号公報）は、オフロードエンジンシステムを開示している。このシステムは、システムメモリ及びネットワークと通信するオフロードエンジンを備える。オフロードエンジンは、ネットワークにおいて送信されるデータの再送を管理する。より詳細には、オフロードエンジンは、プロセッサと通信し、次のような再送処理を行う。オフロードエンジンは、再送データを識別し、システムメモリから再送データを検索し、検索された再送データを再送する。
【００１１】
特許文献３（特開２００４−００７３５４号公報）は、データ転送装置を開示している。当該技術によれば、アプリケーションがメモリのユーザ空間に保持するデータを、ＯＳが管理するＯＳ空間を介すことなく、直接に計算機が送受信する。
【００１２】
特許文献４（特開２００８−１５８９１７号公報）は、ノード間転送制御装置を開示している。そのノード間転送制御装置は、ノード間のデータ転送を実行するデータ転送部と、データ転送を制御する転送制御部と、を備える。転送制御部は、データ転送におけるデータ転送経路の確保の要求を示す第１転送経路確保要求をＣＰＵから受信して、確保を実行するノード間接続装置へ出力する。また、転送制御部は、ノード間接続装置からの確保の完了を示す転送経路確保完了通知と、確保の実行中にＣＰＵがデータ転送における他の処理を実行した後に出力した第２転送経路確保要求とに基づいて、データ転送を指示する。データ転送部は、当該指示に基づいて、データ転送を実行する。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００４−１２８７８６号公報
【特許文献２】特開２００５−１９２２１６号公報
【特許文献３】特開２００４−００７３５４号公報
【特許文献４】特開２００８−１５８９１７号公報
【非特許文献】
【００１４】
【非特許文献１】Ｂｅｒｋ  Ａｔｉｋｏｇｌｕ，  Ｍｏｈａｍｍａｄ  Ａｌｉｚａｄｅｈ，  Ｊｉａ  Ｓｈｕｏ  Ｙｕｅ，  Ｂａｌａｊｉ  Ｐｒａｂｈａｋａｒ，  Ｍｅｎｄｅｌ  Ｒｏｓｅｎｂｌｕｍ，  “Ｒ２Ｄ２：  ＲＡＰＩＤ  ＡＮＤ  ＲＥＬＩＡＢＬＥ  ＤＡＴＡ  ＤＥＬＩＶＥＲＹ  ＩＮ  ＤＡＴＡ  ＣＥＮＴＥＲＳ”，  Ａｎｎｕａｌ  Ｍｅｅｔｉｎｇ  ｉｎ  Ｓｔａｎｆｏｒｄ  Ｕｎｉｖｅｒｓｉｔｙ，  Ｍａｙ，  ２０１０．
【発明の概要】
【発明が解決しようとする課題】
【００１５】
ＴＣＰよりも高速に再送制御を行う高速再送制御機能をネットワークインタフェース（ＮＩＣ）に搭載することを考える。ＮＩＣ上で再送制御を行う場合、再送バッファ用のメモリの配置に関して問題が発生する。ネットワークが高速になるにつれて再送バッファ用に大量のメモリが必要になるが、カードサイズや消費電力に制限のあるＮＩＣに大量のメモリを搭載することは現実的ではないからである。
【００１６】
その一方で、サーバやＰＣ側（以下、ホスト側と参照される）には、メモリ領域の余裕が比較的ある。そこで、ホスト上のメモリを利用して高速再送制御を行うことが考えられる。但し、その場合であっても、ホスト側になるべく負荷をかけないことが望まれる。
【００１７】
本発明の１つの目的は、ＮＩＣ上に大量のメモリを必要とせず、且つ、ホスト側にかかる負荷を抑制することができる高速再送制御技術を提供することにある。
【課題を解決するための手段】
【００１８】
本発明の１つの観点において、再送制御システムが提供される。その再送制御システムは、転送データが格納されるメモリと、ネットワークインタフェースとを備える。ネットワークインタフェースは、転送データを含む転送パケットを生成するパケット処理部と、メモリから転送データを読み出すＤＭＡコントローラとを備える。転送データの１回目の転送あるいは再送を指示するデータ転送命令に応答して、パケット処理部は、転送パケットのパケットヘッダを取得し、また、ＤＭＡコントローラによって読み出された転送データに上記取得したパケットヘッダを付加することにより転送パケットを生成する。
【００１９】
本発明の他の観点において、ネットワークインタフェースにおける再送制御方法が提供される。転送データは、ネットワークインタフェースとは別に設けられたメモリに格納される。ネットワークインタフェースは、メモリから転送データを読み出すＤＭＡコントローラを備える。本発明に係る再送制御方法は、（Ａ）転送データの１回目の転送あるいは再送を指示するデータ転送命令に応答して、転送パケットのパケットヘッダを取得するステップと、（Ｂ）ＤＭＡコントローラによって、メモリから転送データを読み出すステップと、（Ｃ）ＤＭＡコントローラによって読み出された転送データに上記取得したパケットヘッダを付加することによって、転送パケットを生成するステップと、を含む。
【発明の効果】
【００２０】
本発明に係る高速再送制御技術は、ＮＩＣ上に大量のメモリを必要とせず、且つ、ホスト側にかかる負荷を抑制することができる。
【図面の簡単な説明】
【００２１】
【図１】図１は、本発明の第１の実施の形態に係る再送制御システムの構成を示すブロック図である。
【図２】図２は、本発明の実施の形態におけるパケット送信処理を概略的に示すシーケンス図である。
【図３】図３は、本発明の実施の形態における１回目のパケット送信処理を示すシーケンス図である。
【図４】図４は、本発明の実施の形態におけるパケット再送処理を示すシーケンス図である。
【図５Ａ】図５Ａは、図３及び図４で示されたパケット送信処理を統合的に示すシーケンス図である。
【図５Ｂ】図５Ｂは、図３及び図４で示されたパケット送信処理を統合的に示すシーケンス図である。
【図６】図６は、本発明の実施の形態におけるＡＣＫパケット受信処理を示すシーケンス図である。
【図７】図７は、本発明の実施の形態におけるデータパケット受信処理を示すシーケンス図である。
【図８】図８は、図６及び図７で示されたパケット受信処理を統合的に示すシーケンス図である。
【図９】図９は、本発明の第２の実施の形態に係る再送制御システムの構成を示すブロック図である。
【図１０】図１０は、本発明の第３の実施の形態に係る再送制御システムの構成を示すブロック図である。
【図１１】図１１は、第３の実施の形態におけるパケット送信処理を説明するためのシーケンス図である。
【発明を実施するための形態】
【００２２】
添付図面を参照して、本発明の実施の形態を説明する。
【００２３】
１．第１の実施の形態
１−１．構成
図１は、本発明の第１の実施の形態に係る再送制御システム１の構成を示すブロック図である。再送制御システム１は、メモリ２、ネットワークインタフェース３、ＣＰＵ４、及びこれらを相互に接続するホストバス５を備えている。
【００２４】
メモリ２には、転送データ（再送データも含む）が格納される。より詳細には、メモリ２には、再送バッファ２０１が確保される。例えば、再送バッファ２０１は、転送データとは別に、再送データだけを格納するバッファとして確保されてもよい。これは、例えば最近のＯＳのように、ユーザとＯＳ（カーネル）でメモリ空間が異なっており、ユーザが通信を行う際に、データをカーネルのメモリ領域にコピーする必要がある際に、そのコピー先を再送バッファとすることに対応する。
【００２５】
あるいは、ＣＰＵ４がデータ転送命令をネットワークインタフェース３に発行する際に、転送データが格納されているメモリ領域を再送バッファ２０１としてロックしてもよい。この場合、ネットワークインタフェース３からデータ転送完了の通知がなされるまで、データ内容の変更や、最近のＯＳでサポートされているようなハードディスクへのスワップアウトが禁止される。ＣＰＵ４は、ネットワークインタフェース３から再送バッファ２０１のデータをアンロックする通知を受けると、再送バッファ２０１の領域をアンロックする。アンロックにより、そのメモリ領域のデータの変更や、ハードディスクへのスワップアウトが可能になる。この方式は、ユーザレベル通信のように、カーネルを経由せずに通信を行う場合に対応する。
【００２６】
ホストバス５は少なくとも、ＣＰＵ４、メモリ２、ネットワークインタフェース３を相互に接続するためのバスである。
【００２７】
ネットワークインタフェース３は、ホストバスインタフェース３０１、命令キュー３０３、命令発行部３０５、タイマ３０７、再送命令キュー３０９、パケット処理部３１１、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ３１３、パケットヘッダ取得テーブル３１５、パケット送信部３１９、パケット受信部３２１、及び動作設定レジスタ３２３を備えている。
【００２８】
ホストバスインタフェース３０１は、ホストバス５を介して、ＣＰＵ４やメモリ２と、ホストバス５に依存したデータ転送プロトコルに従ったデータの送受信を行う。ホストバス５に依存したデータ転送プロトコルとは、例えばホストバス５がＰＣＩ−Ｅｘｐｒｅｓｓであれば、ＰＣＩ−Ｅｘｐｒｅｓｓの規格に準じた信号の送受信手順、タイミング、フォーマット、などを指す。
【００２９】
動作設定レジスタ３２３は、ネットワークインタフェース３が動作する上で必要なパラメータを設定するための領域である。動作設定レジスタ３２３は、少なくとも、同じデータを何回再送するかを示す再送上限回数と、その再送の間隔を示す再送間隔と、を設定する領域を備える。
【００３０】
命令キュー３０３は、ＣＰＵ４によって発行される、転送データの転送を指示するデータ転送命令を格納するためのキューである。データ転送命令は、少なくとも、メモリ２の開始アドレスと、そのアドレスからどれだけの量のデータを転送するかを示すデータ転送サイズと、宛先ホストアドレスと、を含む。
【００３１】
尚、宛先ホストアドレスについては次の通りである。例えば、ネットワークがＩＰによってホストを識別する場合、通信相手のＩＰアドレスが宛先ホストアドレスとして用いられる。また、宛先ホストのネットワークインタフェース３がＲＤＭＡ（Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）に対応している場合、ＩＰアドレスに加えて、宛先ホストのメモリ２の領域を示す転送先アドレスを組み合わせて用いてもよい。
【００３２】
再送命令キュー３０９は、データ再送を指示するデータ転送命令を格納するためのキューである。具体的には、再送命令キュー３０９には、命令発行部３０５によって命令キュー３０３から読み出された命令が、再送命令として格納される。また、再送処理の際には、命令発行部３０５によって再送命令キュー３０９から読み出された命令が、再度、再送命令として書き込まれる。再送命令キュー３０９に格納された命令は、当該命令によって転送されたパケットの宛先ホストからのＡＣＫパケットの受信に応答して、削除される。また、再送回数が、動作設定レジスタ３２３に設定された再送上限回数に達した場合、命令発行部３０５は、その命令を再送命令キュー３０９に書き戻さない。
【００３３】
タイマ３０７は、時刻をカウントするために用いられる。例えば、タイマ３０７は、再送制御システム１が起動してからの経過時刻を保持する。あるいは、ネットワークインタフェース３がＣＰＵ４とは異なる同期信号（クロック）で動作する場合には、タイマ３０７は、その同期信号のＯｎ／Ｏｆｆの切り替え回数をカウントしてもよい。いずれにしても、実現したい再送間隔のオーダでの時刻カウントが可能である必要があり、この機能は、一般的なプロセッサにクロックカウンタという形で搭載されている。
【００３４】
命令発行部３０５は、命令キュー３０３あるいは再送命令キュー３０９に発行すべきデータ転送命令が存在している場合に、当該命令キューからデータ転送命令を読み出し、読み出したデータ転送命令をパケット処理部３１１に転送する。更に、当該データ転送命令の実行回数が再送上限回数に達していなければ、命令発行部３０５は、当該データ転送命令を再送命令キュー３０９に書き込む。
【００３５】
また、命令発行部３０５は、命令キュー３０３あるいは再送命令キュー３０９から命令を読み出し、パケット処理部３１１に当該命令を転送した際に、そのときの時刻をタイマ３０７から取得する。そして、命令発行部３０５は、当該命令を再送命令キュー３０９に書き込む際に、取得した時刻と当該命令の実行回数を同時に書き込む。そのため、再送命令キュー３０９には、命令そのものを書き込む領域のほかに、その命令が最後に実行された時刻と、実行回数を記録する領域が必要である。あるいは、ネットワークインタフェース３上にこれらの情報を記録する領域を設け、再送命令キュー３０９に格納されている命令と関連付けて情報を管理してもよい。また、命令に含まれる情報のみで命令を一意に識別することが困難な場合は、命令に命令シーケンス番号のような命令を一意に識別可能な情報を付与し、再送命令キュー３０９に書き込むことも考えられる。
【００３６】
また、命令発行部３０５は、再送命令キュー３０９に格納されている再送命令に関連付けられた時刻をチェックし、当該時刻とタイマ３０７が示す現在時刻との比較を行う。比較の結果、動作設定レジスタ３２３に設定された再送間隔以上の時間が経過していた場合、命令発行部３０５は、再送命令キュー３０９から当該再送命令を読み出し、読み出した再送命令をパケット処理部３１１に転送する。当該再送命令を再送命令キュー３０９に再度書き込む際には、命令発行部３０５は、新たにタイマ３０７から取得した時刻を共に書き込む。
【００３７】
尚、命令発行部３０５は、パケット処理部３１１に命令を転送した時刻順に、再送命令キュー３０９に再送命令を格納してもよい。この場合、命令発行部３０５は、再送命令キュー３０９の先頭の再送命令だけをチェックするだけで、再送間隔を超えた命令が存在するかどうかを確認することができる。データ転送命令の優先度などの重みに応じて、再送間隔を可変にする場合には、その重みごとに再送命令キュー３０９を分け、各再送命令キュー３０９に時刻順に命令を格納することが考えられる。また、単一の再送命令キュー３０９の場合でも、命令発行部３０５が再送命令キュー３０９に格納されている再送命令全てをチェックすることで、再送間隔を超えた命令が存在するかどうかを確認することができる。
【００３８】
パケット送信部３１９は、パケット処理部３１１が生成したパケットをネットワークに転送する機能ブロックである。
【００３９】
パケット受信部３２１は、ネットワークから受信したパケットをパケット処理部３１１に転送する機能ブロックである。
【００４０】
ＤＭＡコントローラ３１３は、メモリ２に対してデータの送受信を直接行う。ＤＭＡコントローラ３１３は、メモリ２から転送データを読み出すことができる。また、ＤＭＡコントローラ３１３は、メモリ２に受信データを書き込むことができる。
【００４１】
パケット処理部３１１は、大きく分けて２つの処理を実行する。
【００４２】
パケット処理部３１１による１つ目の処理は、転送パケットの構築（生成）である。つまり、パケット処理部３１１は、命令発行部３０５から受け取ったデータ転送命令に従って、転送データを含む転送パケットを構築（生成）し、その転送パケットをパケット送信部３１９に転送する。
【００４３】
パケット構築の際、パケット処理部３１１は、データ転送命令に含まれる開始アドレスとデータ転送サイズを参照して、ＤＭＡコントローラ３１３にデータ読み出し命令を発行する。これにより、パケット処理部３１１は、ＤＭＡコントローラ３１３を通して、転送データをメモリ２から読み出すことができる。また、パケット処理部３１１は、データ転送サイズ、宛先ホストアドレス、及び使用するネットワークプロトコルに応じたパケットヘッダを生成する。そして、パケット処理部３１１は、ＤＭＡコントローラ３１３を通して読み出した転送データにパケットヘッダを付加することにより、転送パケットを構築（生成）する。
【００４４】
ネットワークプロトコルに応じたパケットヘッダには、一般的に、宛先ホストアドレス、送信元ホストアドレス、パケットサイズ、などが含まれ、他にもネットワークプロトコルに応じた情報が格納される。これらについては、各ネットワークプロトコルの規格を参照すると、詳細な情報が得られる。
【００４５】
更に、パケットヘッダには、本実施の形態の再送制御機構を使用するパケットであることを示すフラグが含まれる。受信側ホストのネットワークインタフェースが、本実施の形態の再送制御機構を備えている場合、このフラグをチェックすることで、データを受信したことを示す通知を送信元ホストに出すことができる。受信側ホストのネットワークインタフェースが本実施の形態の再送制御機構に対応していない場合であっても、再送回数に上限を設けているため、同じデータが無限に再送されるということはない。また、上記のパケットヘッダの情報だけでパケットを一意に識別することが困難な場合は、再送制御機構が管理するパケットシーケンス番号をパケットに付与し、再送制御機構がパケットを一意に識別できるようにすることも考えられる。これらの、再送制御機構のために追加されるフラグやパケットシーケンス番号といった情報は、従来のネットワークプロトコルで定めるプロトコルヘッダの未使用フィールドや、新たに追加するフィールドに格納され得る。このパケットシーケンス番号は、１つのデータ転送命令に対して１つのパケットが対応する場合には、前述した命令シーケンス番号と同一でもよい。また、１つのデータ転送命令に対して複数のパケットが対応する場合には、異なるパケットシーケンス番号体系を用いることで、パケットを一意に識別することができる。
【００４６】
パケット処理部３１１は、パケットヘッダを新たに生成した場合、そのパケットヘッダをパケットヘッダ取得テーブル３１５に格納する。パケットヘッダ取得テーブル３１５におけるパケットヘッダの格納先アドレスは、パケットを一意に識別可能な情報を用いることにより生成される。パケットを一意に識別可能な情報の例として、データ転送命令から生成されるパケットヘッダの特定のフィールドの値を用いることや、パケットヘッダの一部、または全ての情報を用いてハッシュ値を生成し、このハッシュ値を用いることが考えられる。
【００４７】
パケット処理部３１１による２つ目の処理は、パケット受信部３２１がネットワークから受信した受信パケットを処理することである。ここで、受信パケットの種別に応じて、パケット処理部３１１の処理が異なってくる。
【００４８】
まず、受信パケットが、自ホストが送信したパケットを宛先ホストが受信したことを示すＡＣＫパケットである場合を考える。ＡＣＫパケットは、少なくとも、当該ＡＣＫパケットに対応する、自ホストが送信した転送パケットを一意に識別する情報を含む。例えば、自ホストが送信した転送パケットのパケットヘッダに含まれる宛先ホストアドレスと送信元ホストアドレスとが入れ替えられ、更に、パケットヘッダのどこかのフィールドにＡＣＫパケットであることを示すフラグが格納される。
【００４９】
ＡＣＫパケットを受信した場合、パケット処理部３１１は、このＡＣＫパケットに対応する転送パケットのパケットヘッダを、パケットヘッダ取得テーブル３１５から削除する。また、パケット処理部３１１は、命令発行部３０５に対して、ＡＣＫパケットを受信したことを、送信パケットを一意に識別する情報とともに通知する。命令発行部３０５は、この通知に応答して、再送命令キューから対応する再送命令を削除する。更に、パケット処理部３１１は、ＡＣＫパケットに対応するデータ転送命令に対応する再送バッファ２０１の領域をアンロックするための通知を、ＣＰＵ４に出す。
【００５０】
次に、受信パケットが、ネットワークに接続された他のホストから送られてきたデータパケットである場合を考える。この場合、パケット処理部３１１は、受信パケットのパケットヘッダを解析してデータの受信先アドレスを取得し、ＤＭＡコントローラ３１３を使用して当該データをメモリ２あるいはＣＰＵ４へ転送する。また、本実施の形態の再送制御機構を備えたネットワークインタフェースから送信されたパケットであることを示すフラグが立っていた場合、パケット処理部３１１は、受信パケットに応答するＡＣＫパケットを生成し、生成したＡＣＫパケットをパケット送信部１９に送信する。
【００５１】
パケットヘッダ取得テーブル３１５は、パケットヘッダを格納するためのメモリ領域である。各パケットヘッダは、パケットを一意に識別可能な情報をアクセスアドレスとして用いることによりアクセス可能である。パケットを一意に識別可能なアドレスの実現例の１つとして、ハッシュテーブルを用いる方法が考えられる。具体的には、データ転送命令や生成したパケットヘッダの情報を用いてハッシュ値を計算し、それをキーとしてテーブルにアクセスする。この場合、ハッシュ値を計算する機能がネットワークインタフェース３に必要となる。但し、パケットヘッダとデータ転送命令の双方からアドレスを生成可能なように、情報を選択することが望ましい。
【００５２】
尚、本実施の形態に係る再送制御機構は、常に有効にしておく必要は必ずしも無い。動作設定レジスタ３２３などを用いて、本実施の形態に係る再送制御機構のＯｎ／Ｏｆｆを切り換えてもよい。
【００５３】
１−２．処理フロー
次に、本実施の形態に係る再送制御システム１の動作を説明する。
【００５４】
１−２−１．パケット送信
図２は、本実施の形態におけるパケット送信処理を概略的に示すシーケンス図である。パケット送信処理では、ＣＰＵ４が、データ転送命令をネットワークインタフェース３に発行し、ネットワークインタフェース３が、メモリ２に格納された転送データをネットワークに送出する。
【００５５】
まず、ＣＰＵ４は、転送データが格納されたメモリ２のメモリ領域をロックする（図２のステップＳ４０）。
【００５６】
次に、ＣＰＵ４は、データ転送命令をネットワークインタフェース３に発行する（図２のステップＳ４１）。データ転送命令には、少なくとも、転送先ホストの識別情報、データの転送サイズ、データの転送元の情報が含まれる。
【００５７】
次に、ネットワークインタフェース３は、データ転送命令を参照して、メモリ２からデータを読み出す（図２のステップＳ３１）。その後、ネットワークインタフェース３は、データ転送命令に基づいてパケットヘッダを取得し、パケットヘッダとデータとを組み合わせることによって転送パケットを生成し、生成したパケットをネットワークに送出する（図２のステップＳ３３）。
【００５８】
図３は、ある転送パケットに関する１回目のパケット送信処理を示すシーケンス図であり、図２中のステップＳ３１〜Ｓ３３の内容を詳細に示している。
【００５９】
まず、命令発行部３０５は、転送データの１回目の転送を指示するデータ転送命令を、命令キュー３０３から読み出す（図３のステップＳ３０５１）。
【００６０】
次に、命令発行部３０５は、パケット処理部３１１に当該命令を発行する（図３のステップＳ３０５２）。
【００６１】
次に、命令発行部３０５は、タイマ３０７から時刻を取得し、取得した時刻と共に、当該命令を再送命令キュー３０９に書き込む（図３のステップＳ３０５３）。
【００６２】
パケット処理部３１１は、命令発行部３０５から受け取った命令を解釈する（図３のステップＳ３１１１）。パケット処理部３１１は、命令を解釈することで、少なくとも、転送データの格納領域を示すアドレス、送信先ホストの識別子、転送データサイズに関する情報を得る。
【００６３】
次に、パケット処理部３１１は、転送データの格納領域を示すアドレスと転送データサイズに基づいて、データ読み出し要求をＤＭＡコントローラ３１３に発行する（図３のステップＳ３１１２）。データ読み出し要求は、メモリ２から当該転送データを読み出すことを要求する。
【００６４】
また、パケット処理部３１１は、ＤＭＡコントローラ３１３がメモリ２から転送データを読み出している間に、データ転送命令に基づいてパケットヘッダを生成する（図３のステップＳ３１１３）。
【００６５】
ＤＭＡコントローラ３１３は、メモリ２から読み出した転送データをパケット処理部３１１に転送する（図３のステップＳ３１３１）。
【００６６】
次に、パケット処理部３１１は、ＤＭＡコントローラ３１３によって読み出された転送データと、ステップＳ３１１３で生成したパケットヘッダとを組み合わせることによって、転送パケットを構築する。そして、パケット処理部３１１は、生成したパケットをパケット送信部３１９に出力する（図３のステップＳ３１１４）。
【００６７】
尚、ＤＭＡコントローラ３１３のデータの読み出しに要する時間が、パケットヘッダを構築する時間よりも短い場合には、データをＤＭＡコントローラ３１３から受け取ってから、パケットヘッダを構築することや、ＤＭＡコントローラ３１３にデータ読み出し要求を発行する前にパケットヘッダを構築することも考えられる。
【００６８】
次に、パケット処理部３１１は、パケットを一意に識別する情報を生成し、パケットヘッダ取得テーブル３１５への格納先アドレスを生成する（図３のステップＳ３１１５）。
【００６９】
次に、パケット処理部３１１は、上記格納先アドレスを用いて、パケットヘッダをパケットヘッダ取得テーブル３１５に格納する（図３のステップＳ３１１６）。
【００７０】
尚、ステップＳ３１１４と、ステップＳ３１１５〜ステップＳ３１１６の処理は独立であるため、並行して実行することも可能である。
【００７１】
図４は、本実施の形態におけるパケット再送処理を示すシーケンス図である。尚、図３で示された処理と同じ処理に関しては、重複する説明を適宜省略する。
【００７２】
まず、命令発行部３０５は、再送命令キュー３０９に格納されているデータ転送命令（再送命令）が最後に実行された時刻と、タイマ３０７の現在時刻とを比較する。そして、命令発行部３０５は、それらの差が再送間隔を超えているような再送命令を再送命令キュー３０９から読み出す（図４のステップＳ３０５４）。
【００７３】
次に、命令発行部３０５は、パケット処理部３１１に再送命令を発行する（図４のステップＳ３０５２）。
【００７４】
また、当該再送命令の実行回数が上限に達していない場合、命令発行部３０５は、ステップＳ３０５４でタイマ３０７から取得した時刻とともに、再送命令を再送命令キュー３０９に再度書き込む（図４のステップＳ３０５６）。
【００７５】
パケット処理部３１１は、命令発行部３０５から受け取った再送命令を解釈し（図４のステップＳ３１１１）、ＤＭＡコントローラ３１３にデータ読み出し要求を出す（図４のステップＳ３１１２）。
【００７６】
ＤＭＡコントローラ３１３は、データ読み出し要求に対応した再送バッファ２０１から、転送データ（再送データ）を読み出し、そのデータをパケット処理部３１１に転送する（図４のステップＳ３１３１）。
【００７７】
一方、パケット処理部３１１は、データ転送命令に基づいて、パケットヘッダ取得テーブル３１５へのアクセスアドレスを生成する（図４のステップＳ３１１７）。
【００７８】
次に、パケット処理部３１１は、そのアクセスアドレスを用いてパケットヘッダ取得テーブル３１５にアクセスし、パケットヘッダを取得する（図４のステップＳ３１１８）。つまり、パケット再送処理の場合、パケット処理部３１１は、パケットヘッダ取得テーブル３１５からパケットヘッダを読み出す。
【００７９】
次に、パケット処理部３１１は、ＤＭＡコントローラ３１３によって読み出された転送データと、ステップＳ３１１８で取得したパケットヘッダとを組み合わせることによって、転送パケットを構築する。そして、パケット処理部３１１は、生成したパケットをパケット送信部３１９に出力する（図４のステップＳ３１１４）。
【００８０】
図５Ａ及び図５Ｂは、図３及び図４で示されたパケット送信処理を統合的に示すシーケンス図である。
【００８１】
まず、命令発行部３０５は、命令キュー３０３にデータ転送命令が格納されているかどうか判定する（図５ＡのステップＦ００１）。
【００８２】
命令キュー３０３にデータ転送命令が格納されていない場合（図５ＡのステップＦ００１；Ｎｏ）、命令発行部３０５は、再送命令キュー３０９に再送命令が格納されているかどうか判定する（図５ＡのステップＦ００３）。
【００８３】
再送命令キュー３０９に再送命令が格納されていない場合（図５ＡのステップＦ００３；Ｎｏ）、処理はステップＦ００１に戻る。
【００８４】
再送命令キュー３０９に再送命令が格納されている場合（図５ＡのステップＦ００３；Ｙｅｓ）、命令発行部３０５は、再送条件が満たす再送命令があるかどうかを判定する（図５ＡのステップＦ００５）。具体的には、命令発行部３０５は、再送命令キュー３０９に格納されている再送命令の中で、再送間隔以上の期間、実行されていない命令があるかどうか判定する。
【００８５】
再送条件を満たす再送命令が存在しない場合（図５ＡのステップＦ００５；Ｎｏ）、処理はステップＦ００１に戻る。
【００８６】
命令キュー３０３に命令が格納されている場合（図５ＡのステップＦ００１；Ｙｅｓ）、または、再送命令キュー３０９に再送条件を満たす再送命令が存在する場合（図５ＡのステップＦ００５；Ｙｅｓ）、命令発行部３０５は、タイマ３０７から現在時刻を取得する（図５ＡのステップＦ００７）。また、命令発行部３０５は、命令キュー３０３または再送命令キュー３０９から命令を読み出す（図５ＡのステップＦ００９）。
【００８７】
なお、ステップＦ００１の処理と、ステップＦ００３、Ｆ００５の処理を入れ替えることも可能である。つまり、命令発行部３０５は、再送命令キュー３０９のチェックを先に行い、続いて、命令キュー３０３のチェックを行ってもよい。
【００８８】
次に、命令発行部３０５は、読み出した命令を解釈する（図５ＡのステップＦ０１１）。また、パケット処理部３１１は、ＤＭＡコントローラ３１３を用いて、転送データをメモリ２から読み出す（図５ＡのステップＦ０１３）。
【００８９】
次に、パケット処理部３１１は、パケットを一意に識別する情報を生成し、パケットヘッダ取得テーブル３１５へのアクセスアドレスを生成する（図５ＢのステップＦ０１５）。
【００９０】
処理中の命令が再送命令である場合（図５ＢのステップＦ０１７；Ｙｅｓ）、パケット処理部３１１は、ステップＦ０１５で生成したアクセスアドレスを用いてパケットヘッダ取得テーブル３１５へアクセスし、パケットヘッダを取得する（図５ＢのステップＦ０２１）。
【００９１】
一方、処理中の命令が再送命令ではない場合（図５ＢのステップＦ０１７；Ｎｏ）、パケット処理部３１１は、当該命令に基づいてパケットヘッダを構築する（図５ＢのステップＦ０１９）。
【００９２】
次に、パケット処理部３１１は、パケットヘッダを転送データに付加することによって転送パケットを構築する（図５ＢのステップＦ０２３）。そして、ネットワークインタフェース３は、転送パケットをネットワークに送出する。
【００９３】
処理中の命令が再送命令である場合（図５ＢのステップＦ０２５；Ｙｅｓ）、パケット処理部３１１は、再送命令の実行回数が上限に達しているかどうか判定する（図５ＢのステップＦ０２９）。
【００９４】
再送命令の実行回数が上限に達している場合（図５ＢのステップＦ０２９；Ｙｅｓ）、パケット処理部３１１は、パケットヘッダをパケットヘッダ格納テーブル３１５から削除する（図５ＢのステップＦ０３３）。
【００９５】
一方、再送命令の実行回数が上限に達していない場合（図５ＢのステップＦ０２９；Ｎｏ）、パケット処理部３１１は、実行した命令を、ステップＦ００７で取得した時刻とともに、再送命令キュー３０９に格納する（図５ＢのステップＦ０３１）。
【００９６】
処理中の命令が再送命令でない場合（図５ＢのステップＦ０２５；Ｎｏ）、パケット処理部３１１は、パケットヘッダをパケットヘッダ取得テーブル３１５に登録する（図５ＢのステップＦ０２７）。そして、パケット処理部３１１は、実行した命令を、ステップＦ００７で取得した時刻と共に、再送命令キュー３０９に格納する（図５ＢのステップＦ０３１）。
【００９７】
尚、ステップＦ０２７の処理と、ステップＦ０１７〜ステップＦ０３１の処理は独立であるため、順序を入れ替えることも可能である。また、ステップＦ００７の処理と、ステップＦ００９〜ステップＦ０３１の処理は独立であるため、順序を入れ替えることも可能である。
【００９８】
１−２−２．パケット受信
図６は、本実施の形態におけるＡＣＫパケット受信処理を示すシーケンス図である。
【００９９】
パケット受信部３２１は、ネットワークからパケットを受信すると、当該受信パケットをパケット処理部３１１に転送する（図６のステップＳ３２１１）。
【０１００】
次に、パケット処理部３１１は、パケット処理部３２１から受け取った受信パケットの種別を判定する（図６のステップＳ３１１９）。ここでは、受信パケットはＡＣＫパケットである。
【０１０１】
次に、パケット処理部３１１は、ＡＣＫパケットに含まれる情報から、パケットヘッダ取得テーブル３１５へのアクセスアドレスを生成する（図６のステップＳ３１２０）。上述の通り、ＡＣＫパケットには、ＡＣＫパケットに対応する送出パケットを一意に識別する情報が含まれるため、その情報からパケットヘッダ取得テーブル３１５に対する適切なアクセスアドレスを取得することができる。
【０１０２】
次に、パケット処理部３１１は、上記のアクセスアドレスを参照して、ＡＣＫパケットに対応するパケットヘッダのエントリをパケットヘッダ取得テーブル３１５から削除する（図６のステップＳ３１２１）。
【０１０３】
次に、パケット処理部３１１は、ＡＣＫパケットに含まれる情報から、再送命令キュー３０９に格納されている再送命令を識別する情報を生成する（図６のステップＳ３１２２）。
【０１０４】
次に、パケット処理部３１１は、ＡＣＫパケットに対応する再送命令を削除するリクエストを、命令発行部３０５に出す（図６のステップＳ３１２３）。
【０１０５】
次に、命令発行部３０５は、パケット処理部３１１からのリクエストに従って、再送命令キュー３０９に格納されている再送命令を削除する（図６のステップＳ３０５７）。
【０１０６】
次に、パケット処理部３１１は、ＡＣＫパケットに対応するパケットの転送データが格納されている再送バッファ２０１の領域をアンロックするリクエストを、ＣＰＵ４に出す（図６のステップＳ３１２７）。
【０１０７】
次に、ＣＰＵ４は、パケット処理部３１１からのリクエストに従って、再送バッファ２０１をアンロックする（図６のステップＳ４００１）。
【０１０８】
図７は、本実施の形態におけるデータパケット受信処理を示すシーケンス図である。尚、図６で示された処理と同じ処理に関しては、重複する説明を適宜省略する。
【０１０９】
パケット受信部３２１は、ネットワークからパケットを受信すると、当該受信パケットをパケット処理部３１１に転送する（図７のステップＳ３２１１）。
【０１１０】
次に、パケット処理部３１１は、パケット処理部３２１から受け取った受信パケットの種別を判定する（図７のステップＳ３１１９）。ここでは、受信パケットはデータパケットである。
【０１１１】
次に、パケット処理部３１１は、受信先メモリ領域のアドレスとパケットヘッダに含まれるサイズを参照して、ＤＭＡコントローラ３１３にデータ転送リクエストを出す（図７のステップＳ３１２４）。受信先メモリ領域のアドレスは、ネットワークインタフェース３がＲＤＭＡ通信に対応している場合には、パケットヘッダに含まれていることが多い。この場合、ネットワークインタフェース３自身で受信先メモリ領域のアドレスを管理する必要はない。一方、そうでない場合であっても、例えば、ＯＳによって、ネットワークインタフェース３のドライバをロードした際などに、メモリ２の領域を割り当てられるため、そのメモリ領域の開始アドレスや、サイズ、使用状況などをネットワークインタフェース３で管理することで、受信先メモリ領域のアドレスを取得することができる。
【０１１２】
ＤＭＡコントローラ３１３は、パケット処理部３１１からのリクエストに従って、受信データをメモリ２に転送する（図７のステップＳ３１３２）。
【０１１３】
次に、パケット処理部３１１は、パケットヘッダに含まれる情報に基づいて、受信パケットに応答するＡＣＫパケットを生成する（図７のステップＳ３１２５）。ＡＣＫパケットには、少なくとも、ＡＣＫパケットであることを示すフラグと、送信側ホストでどのパケットを送信したのかを一意に識別するのに必要な情報を含む。
【０１１４】
次に、パケット処理部３１１は、ＡＣＫパケットをパケット送信部３１９に転送し、パケット送信部３１９はネットワークにＡＣＫパケットを送出する（図７のステップＳ３１２６）。
【０１１５】
図８は、図６及び図７で示されたパケット受信処理を統合的に示すシーケンス図である。
【０１１６】
まず、パケット受信部３２１は、ネットワークからパケットを受信したかどうか判定する（図８のステップＦ１０１）。
【０１１７】
パケット受信部３２１がネットワークからパケットを受信していない場合（図８のステップＦ１０１；Ｎｏ）、処理はステップＦ１０１に戻る。
【０１１８】
パケット受信部３２１がネットワークからパケットを受信すると（図８のステップＦ１０１；Ｙｅｓ）、パケット処理部３１１は、受信パケットの種別を判定する（図８のステップＦ１０３）。
【０１１９】
受信パケットがデータパケットである場合（図８のステップＦ１０３；データパケット）、パケット処理部３１１は、そのデータパケットが本実施の形態に係る再送制御システムに対応したものかどうか判定する（図８のステップＦ１０５）。
【０１２０】
当該データパケットが本実施の形態に係る再送制御システムに対応していない場合（図８のステップＦ１０５；Ｎｏ）、ネットワークインタフェース３は、そのデータパケットを受信先メモリ領域に転送する（図８のステップＦ１１１）。
【０１２１】
当該データパケットが本実施の形態に係る再送制御システムに対応している場合（図８のステップＦ１０５；Ｙｅｓ）、パケット処理部３１１は、パケットヘッダに含まれる情報に基づいてＡＣＫパケットを生成する（図８のステップＦ１０７）。そして、ネットワークインタフェース３は、生成したＡＣＫパケットをデータパケットの送信元に返信し（図８のステップＦ１０９）、また、受信データパケットを受信先メモリ領域に転送する（図８のステップＦ１１１）。
【０１２２】
尚、ステップＦ１０７〜Ｆ１０９の処理と、ステップＦ１１１の処理は独立であるため、順序を入れ替えることも可能である。
【０１２３】
一方、受信パケットがＡＣＫパケットである場合（図８のステップＦ１０３；ＡＣＫパケット）、パケット処理部３１１は、ＡＣＫパケットに含まれる情報に基づいて、パケットヘッダ取得テーブル３１５へのアクセスアドレスを生成する（図８のステップＦ１１３）。
【０１２４】
次に、パケット処理部３１１は、ステップＦ１１３で生成したアクセスアドレスを用いて、パケットヘッダ取得テーブル３１５に格納されているパケットヘッダを削除する（図８のステップＦ１１５）。
【０１２５】
また、パケット処理部３１１は、ＡＣＫパケットに含まれる情報に基づいて、再送命令キュー３０９に格納されている再送命令を一意に識別する情報を生成する（図８のステップＦ１１７）。尚、上記のステップＦ１１３で生成されたアドレスをそのまま利用可能である場合は、ステップＦ１１７を実行する必要はない。
【０１２６】
次に、パケット処理部３１１は、ステップＦ１１７で生成した情報を用いて、再送命令キュー３０９に格納されている再送命令を削除する（図８のステップＦ１１９）。
【０１２７】
次に、ネットワークインタフェース３は、受信したＡＣＫパケットに対応する転送パケットの転送データが格納されている再送バッファ２０１の領域をアンロックする（図８のステップＦ１２１）。
【０１２８】
１−３．効果
以上に説明されたように、本実施の形態によれば、ネットワークインタフェース３とは異なるホスト側のメモリ２を利用することにより、高速再送制御が実現される。つまり、ネットワークインタフェース３上に大量のメモリを搭載しなくても、高速再送制御を実現することが可能である。
【０１２９】
更に、本実施の形態に係る高速再送制御において、ＣＰＵ４は一連の再送処理にはほとんど介在しない。従って、高速再送制御によってＣＰＵ４にかかる負荷が軽減される。本実施の形態に係る高速再送制御は、ＣＰＵ４で稼動する他のアプリケーションに対して影響を与えない。
【０１３０】
本実施の形態は、例えば、ネットワークで互いに接続されたＰＣやサーバから構成されるデータセンタなどのコンピュータシステムに適用可能である。
【０１３１】
２．第２の実施の形態
図９は、本発明の第２の実施の形態に係る再送制御システム１の構成を示すブロック図である。第１の実施の形態と重複する説明は適宜省略される。
【０１３２】
第２の実施の形態では、ネットワークインタフェース３の上記命令発行部３０５が、命令分割発行部３２５に置き換えられている。この命令分割発行部３２５は、必要に応じて、データ転送命令を複数に分割する。より詳細には、命令分割発行部３２５は、命令キュー３０３に格納されたデータ転送命令に含まれるデータサイズと、ネットワークのＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）とを比較する。転送データのサイズがＭＴＵを超えている場合、命令分割発行部３２５は、当該データ転送命令を複数に分割し、それら複数のデータ転送命令のそれぞれを個別にパケット処理部３１１に出力する。また、命令分割発行部３２５は、分割後のパケット転送命令を再送命令キュー３０９に書き込む。
【０１３３】
このように、第２の実施の形態は、ＣＰＵ４から発行されるデータ転送要求で指定される転送サイズが１つのパケットに収まらないような場合であっても、ＣＰＵ４に負荷をかけることなく高速再送制御を実現可能である。
【０１３４】
比較例として、上記の特許文献１や特許文献２の場合を考える。転送データのサイズがネットワークのＭＴＵを超える場合、転送データを分割し、分割したデータそれぞれにパケットヘッダを付加する必要がある。そのため、転送データを別のメモリ領域にコピーする必要があるが、これはホスト側に負荷をかけるという問題点を生ずる。また、一般に、ＣＰＵの性能向上に比べて、メモリの性能向上の速度は遅く、データコピーの遅延も無視できない問題である。さらに、ホスト側のメモリ領域を余分に必要とするという問題点がある。
【０１３５】
一方、本実施の形態によれば、データ転送命令が複数に分割される。また、パケットヘッダは、ネットワークインタフェース３において生成され、あるいは、管理される。そして、分割後のそれぞれのデータ転送命令に応答して、ネットワークインタフェース３において転送データとパケットヘッダとが組み合わされる。このとき、分割後のそれぞれのデータ転送命令に応答して、転送データをメモリ２から読み出すだけでよい。転送データの分割は不要であり、転送データを分割するために別の記憶領域にコピーする必要はない。従って、転送データのサイズがＭＴＵを超えている場合であっても、ＣＰＵ４に負荷をかけることなく、高速再送制御を実現可能である。
【０１３６】
３．第３の実施の形態
図１０は、本発明の第３の実施の形態に係る再送制御システム１の構成を示すブロック図である。既出の実施の形態と重複する説明は適宜省略される。
【０１３７】
第３の実施の形態によれば、ネットワークインタフェース３に再送データ取得テーブル３２７が追加される。再送データ取得テーブル３２７は、再送バッファ２０１と同様に、再送データを格納するためのバッファである。
【０１３８】
図１１は、第３の実施の形態におけるパケット送信処理を説明するためのシーケンス図である。図１１に示される処理は、図５ＡのステップＦ０１１とステップＦ０１３との間に挿入される。
【０１３９】
命令発行部３０５は、読み出した命令を解釈する（図１１のステップＦ０１１）。
【０１４０】
パケット処理部３１１は、現在のデータ転送命令に対応する再送データが、再送データ取得テーブル３２７に存在するかどうか判定する（図１１のステップＦ０１２ａ）。この判定に際し、パケット処理部３１１は、データ転送命令に基づいて、再送データ取得テーブル３２７へのアクセスアドレスを生成する。このアドレスは、再送データを一意に識別することができるものであり、パケットヘッダ取得テーブル３１５へのアクセスアドレスと同様となる。
【０１４１】
再送データが再送データ取得テーブル３２７に存在する場合（図１１のステップＦ０１２ａ；Ｙｅｓ）、パケット処理部３１１は、再送データ取得テーブル３２７から再送データを取得する（図１１のステップＦ０１２ｂ）。更に、パケット処理部３１１は、パケットヘッダ取得テーブル３１５からパケットヘッダを取得する（図１１のステップＦ０２１）。ここで、再送データに対応するパケットヘッダは一意に定まるため、パケットヘッダ取得テーブル３１５へのアクセスアドレスは、ステップＦ０１２ａにおける再送データ取得テーブル３２７へのアクセスアドレスと同一であってもよい。以降の処理は、図５ＢのＦ０２１以降の処理と同様である。ただし、図５ＢのステップＦ０３３の際に、再送データ取得テーブル３２７から再送データを削除する処理が追加される。
【０１４２】
一方、再送データが再送データ取得テーブル３２７に存在しない場合（図１１のステップＦ０１２ａ；Ｎｏ）、処理は、上記のステップＦ０１３に進む。
【０１４３】
再送データ取得テーブル３２７の利用方法として、優先度の高いパケット、データサイズが小さいパケットなどを格納することが考えられる。再送データ取得テーブル３２７は、ネットワークインタフェース３に搭載されるため、再送バッファ２０１ほど大きな容量を確保することは困難であると考えられるが、再送バッファ２０１から再送データを読み出すよりも低遅延に再送データを取得することができる。そのため、優先度の高いパケットを格納することで、当該パケットについては、低遅延な再送を実現できる。また、容量の関係から、サイズの大きなパケットを再送データ取得テーブル３２７に格納すると、格納できるパケット数が少なくなる。そのため、サイズがある一定値以下の再送データを再送データ取得テーブル３２７に格納するようにすることで、多くのパケットを格納することが可能になる。また、一般に、通信遅延が問題となるのは、転送データサイズが小さい場合であり、この点でも再送データ取得テーブルにサイズの小さな再送データを格納することは理にかなっている。この場合、動作設定レジスタ３２３に、再送データ取得テーブル３２７を利用する最大データサイズを設定するといったことが必要になる。
【０１４４】
再送データ取得テーブル３２７の容量が足りなくなった場合は、データサイズや優先度に関わらず、再送バッファ２０１が利用されるとよい。
【０１４５】
再送データ取得テーブル３２７に再送データを書き込むタイミングの例として、図５ＡのステップＦ０１３にて、転送データをメモリ２から読み出すと同時に、その転送データを再送データ取得テーブル３２７に書き込むことが考えられる。その際、パケットの優先度やサイズに応じて再送データ取得テーブル３２７と再送バッファ２０１を使い分ける場合には、どちらを使用するか判定処理を行う。
【０１４６】
再送データ取得テーブル３２７に格納されている再送データは、図５ＢのステップＦ０３３に加えて、図８のステップＦ１１５を実行する際にも削除される。
【０１４７】
本実施の形態によれば、ネットワークインタフェース３に再送データ取得テーブル３２７を設けることで、より低遅延な再送処理を実現することが可能である。
【０１４８】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【０１４９】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１５０】
（付記１）
転送データが格納されるメモリと、
ネットワークインタフェースと
を備え、
前記ネットワークインタフェースは、
前記転送データを含む転送パケットを生成するパケット処理部と、
前記メモリから前記転送データを読み出すＤＭＡコントローラと
を備え、
前記転送データの１回目の転送あるいは再送を指示するデータ転送命令に応答して、前記パケット処理部は、前記転送パケットのパケットヘッダを取得し、また、前記ＤＭＡコントローラによって読み出された前記転送データに前記取得したパケットヘッダを付加することにより前記転送パケットを生成する
再送制御システム。
【０１５１】
（付記２）
付記１に記載の再送制御システムであって、
前記ネットワークインタフェースは、パケットヘッダ取得テーブルを更に備え、
前記転送データの１回目の転送を指示する前記データ転送命令を受け取った場合、前記パケット処理部は、前記データ転送命令に基づいて前記転送パケットの前記パケットヘッダを生成し、前記生成したパケットヘッダを前記パケットヘッダ取得テーブルに登録する
再送制御システム。
【０１５２】
（付記３）
付記２に記載の再送制御システムであって、
前記転送データの再送を指示する前記データ転送命令を受け取った場合、前記パケット処理部は、前記パケットヘッダ取得テーブルから前記転送パケットの前記パケットヘッダを読み出す
再送制御システム。
【０１５３】
（付記４）
付記２又は３に記載の再送制御システムであって、
前記転送パケットに応答するＡＣＫパケットを受け取った場合、前記パケット処理部は、前記パケットヘッダ取得テーブルから前記転送パケットの前記パケットヘッダを削除する
再送制御システム。
【０１５４】
（付記５）
付記１乃至４のいずれか一項に記載の再送制御システムであって、
前記ネットワークインタフェースは、
ＣＰＵによって発行される、前記転送データの転送を指示する前記データ転送命令が格納される命令キューと、
前記転送データの再送を指示する前記データ転送命令が格納される再送命令キューと、
前記命令キューあるいは前記再送命令キューから前記データ転送命令を読み出し、前記読み出したデータ転送命令を前記パケット処理部に出力し、且つ、前記読み出したデータ転送命令を前記再送命令キューに格納する命令発行部と
を更に備える
再送制御システム。
【０１５５】
（付記６）
付記５に記載の再送制御システムであって、
前記転送パケットに応答するＡＣＫパケットを受け取った場合、前記命令発行部は、前記転送データの再送を指示する前記データ転送命令を前記再送命令キューから削除する
再送制御システム。
【０１５６】
（付記７）
付記５又は６に記載の再送制御システムであって、
前記データ転送命令は、前記転送データのサイズを示し、
前記転送データのサイズがネットワークのＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）を超える場合、前記命令発行部は、前記データ転送命令を複数に分割し、前記複数のデータ転送命令を個別に前記パケット処理部に出力する
再送制御システム。
【０１５７】
（付記８）
ネットワークインタフェースにおける再送制御方法であって、
転送データは、前記ネットワークインタフェースとは別に設けられたメモリに格納され、
前記ネットワークインタフェースは、前記メモリから前記転送データを読み出すＤＭＡコントローラを備え、
前記再送制御方法は、
前記転送データの１回目の転送あるいは再送を指示するデータ転送命令に応答して、転送パケットのパケットヘッダを取得するステップと、
前記ＤＭＡコントローラによって、前記メモリから前記転送データを読み出すステップと、
前記ＤＭＡコントローラによって読み出された前記転送データに前記取得したパケットヘッダを付加することによって、前記転送パケットを生成するステップと
を含む
再送制御方法。
【０１５８】
本出願は、２０１１年３月２８日に出願された日本国特許出願２０１１−０６９８２６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１５９】
１  再送制御システム
２  メモリ
２０１  再送バッファ
３  ネットワークインタフェース
３０１  ホストバスインタフェース
３０３  命令キュー
３０５  命令発行部
３０７  タイマ
３０９  再送命令キュー
３１１  パケット処理部
３１３  ＤＭＡコントローラ
３１５  パケットヘッダ取得テーブル
３１９  パケット送信部
３２１  パケット受信部
３２３  動作設定レジスタ
３２５  命令分割発行部
３２７  再送データ取得テーブル
４  ＣＰＵ
５  ホストバス
【図１】
0005880551.tif 000002
【図２】
0005880551.tif 000003
【図３】
0005880551.tif 000004
【図４】
0005880551.tif 000005
【図５Ａ】
0005880551.tif 000006
【図５Ｂ】
0005880551.tif 000007
【図６】
0005880551.tif 000008
【図７】
0005880551.tif 000009
【図８】
0005880551.tif 000010
【図９】
0005880551.tif 000011
【図１０】
0005880551.tif 000012
【図１１】
0005880551.tif 000013