(57)【要約】【課題】ホスト・プロセッサからプロトコル処理をオフロードするネットワーク・アダプタ内の複数の改善を提供すること。【解決手段】具体的に言うと、オフロード・ネットワーク・アダプタを利用するシステムでの接続確立を改善する機構を提供する。接続確立機構は、接続確立と接続状態情報の維持とをオフロード・ネットワーク・アダプタにオフロードする能力を提供する。接続確立および状態情報維持のこのオフロードの結果として、ホスト・システムとオフロード・ネットワーク・アダプタとの間で必要な通信の数を減らすことができる。さらに、オフロード・ネットワーク・アダプタへのこれらの機能のオフロードは、既知のコンピューティング・システムに存在する断片的な通知ではなく、確立された通信および状態情報のホストへのバルク通知を可能にする。【選択図】図４
2008507201.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムの間でデータ通信接続を確立する方法であって、
第１データ処理システムのホスト・システム内で、第２データ処理システムとの接続を確立する要求を受け取ることと、
前記要求を前記第１データ処理システムに関連するオフロード・ネットワーク・アダプタに転送することと、
前記オフロード・ネットワーク・アダプタ内で、前記第２データ処理システムとの前記接続を確立することと、
前記接続が前記オフロード・ネットワーク・アダプタ内で確立された後に、前記確立された接続について前記ホスト・システムに知らせることと
を含む方法。
【請求項２】
前記要求をオフロード・ネットワーク・アダプタに転送することが、
前記受け取られた要求に基づいて接続確立要求記述子を生成することと、
前記接続確立要求記述子を前記ホスト・システム内の入出力アクセス可能メモリの予約済み部分に書き込むことと
を含む、請求項１に記載の方法。
【請求項３】
前記第２データ処理システムとの前記接続を確立することが、
前記オフロード・ネットワーク・アダプタ内で、前記接続を記述するデータ構造を生成することと、
前記接続に関する状態情報を前記データ構造に保管することと
を含む、請求項１に記載の方法。
【請求項４】
前記確立された接続について前記ホスト・システムに知らせることが、
接続完了応答記述子を生成することと、
前記接続完了応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込むことと
を含む、請求項１に記載の方法。
【請求項５】
前記要求が、複数の接続を確立する要求であり、前記要求を前記第１データ処理システムに関連するオフロード・ネットワーク・アダプタに転送することが、
確立されるべき前記複数の接続内の接続のそれぞれを識別する接続要求記述子を生成することと、
前記接続要求記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込むことと
を含む、請求項１に記載の方法。
【請求項６】
前記接続が前記オフロード・ネットワーク・アダプタ内で確立された後に、前記確立された接続について前記ホスト・システムに知らせることが、
遅延判断基準が満足されているかどうかを判定することと、
前記遅延判断基準が満足されている場合に、接続完了応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込むことと
を含む、請求項１に記載の方法。
【請求項７】
前記遅延判断基準が、最後の接続完了応答記述子が入出力アクセス可能メモリの前記予約済み部分に書き込まれて以降に確立された所定の個数の接続と、接続を介して到着する所定の量のデータと、受信データ内で検出される所定のデータ・パターンと、最後の接続完了応答記述子が入出力アクセス可能メモリの前記予約済み部分に書き込まれて以降の所定の長さの時間とのうちの少なくとも１つである、請求項６に記載の方法。
【請求項８】
前記接続に関する状態情報を前記オフロード・ネットワーク・アダプタから前記ホスト・システムに移行すること
をさらに含む、請求項１に記載の方法。
【請求項９】
前記接続に関する状態情報を前記オフロード・ネットワーク・アダプタから前記ホスト・システムに移行することが、
前記接続の状態を識別する接続属性応答記述子を生成することと、
前記接続属性応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込むことと
を含む、請求項８に記載の方法。
【請求項１０】
第２データ処理システムとの接続を確立する前記要求が、リスン要求であり、前記第２データ処理システムとの前記接続を確立することが、指定されたポート番号について受信された接続要求を識別することを含む、請求項１に記載の方法。
【請求項１１】
データ処理システムの間でデータ通信接続を確立する、コンピュータ可読媒体内のコンピュータ・プログラム製品であって、
第１データ処理システムのホスト・システム内で、第２データ処理システムとの接続を確立する要求を受け取る第１命令と、
前記要求を前記第１データ処理システムに関連するオフロード・ネットワーク・アダプタに転送する第２命令と、
前記オフロード・ネットワーク・アダプタ内で、前記第２データ処理システムとの前記接続を確立する第３命令と、
前記接続が前記オフロード・ネットワーク・アダプタ内で確立された後に、前記確立された接続について前記ホスト・システムに知らせる第４命令と
を含むコンピュータ・プログラム製品。
【請求項１２】
前記要求をオフロード・ネットワーク・アダプタに転送する前記第２命令が、
前記受け取られた要求に基づいて接続確立要求記述子を生成する命令と、
前記接続確立要求記述子を前記ホスト・システム内の入出力アクセス可能メモリの予約済み部分に書き込む命令と
を含む、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１３】
前記第２データ処理システムとの前記接続を確立する前記第３命令が、
前記オフロード・ネットワーク・アダプタ内で、前記接続を記述するデータ構造を生成する命令と、
前記接続に関する状態情報を前記データ構造に保管する命令と
を含む、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１４】
前記確立された接続について前記ホスト・システムに知らせる前記第４命令が、
接続完了応答記述子を生成する命令と、
前記接続完了応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む命令と
を含む、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１５】
前記要求が、複数の接続を確立する要求であり、前記要求を前記第１データ処理システムに関連するオフロード・ネットワーク・アダプタに転送する前記第２命令が、
確立されるべき前記複数の接続内の接続のそれぞれを識別する接続要求記述子を生成する命令と、
前記接続要求記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む命令と
を含む、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１６】
前記接続が前記オフロード・ネットワーク・アダプタ内で確立された後に、前記確立された接続について前記ホスト・システムに知らせる前記第４命令が、
遅延判断基準が満足されているかどうかを判定する命令と、
前記遅延判断基準が満足されている場合に、接続完了応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む命令と
を含む、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１７】
前記遅延判断基準が、最後の接続完了応答記述子が入出力アクセス可能メモリの前記予約済み部分に書き込まれて以降に確立された所定の個数の接続と、接続を介して到着する所定の量のデータと、受信データ内で検出される所定のデータ・パターンと、最後の接続完了応答記述子が入出力アクセス可能メモリの前記予約済み部分に書き込まれて以降の所定の長さの時間とのうちの少なくとも１つである、請求項１６に記載のコンピュータ・プログラム製品。
【請求項１８】
前記接続に関する状態情報を前記オフロード・ネットワーク・アダプタから前記ホスト・システムに移行する第５命令
をさらに含む、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１９】
前記接続に関する状態情報を前記オフロード・ネットワーク・アダプタから前記ホスト・システムに移行する前記第５命令が、
前記接続の状態を識別する接続属性応答記述子を生成する命令と、
前記接続属性応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む命令と
を含む、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２０】
第２データ処理システムとの接続を確立する前記要求が、リスン要求であり、前記第２データ処理システムとの前記接続を確立する前記第３命令が、指定されたポート番号について受信された接続要求を識別する命令を含む、請求項１１に記載のコンピュータ・プログラム製品。
【請求項２１】
データ処理システムの間でデータ通信接続を確立するシステムであって、
第１データ処理システムのホスト・システム内で、第２データ処理システムとの接続を確立する要求を受け取る手段と、
前記要求を前記第１データ処理システムに関連するオフロード・ネットワーク・アダプタに転送する手段と、
前記オフロード・ネットワーク・アダプタ内で、前記第２データ処理システムとの前記接続を確立する手段と、
前記接続が前記オフロード・ネットワーク・アダプタ内で確立された後に、前記確立された接続について前記ホスト・システムに知らせる手段と
を含むシステム。
【請求項２２】
前記要求をオフロード・ネットワーク・アダプタに転送する前記手段が、
前記受け取られた要求に基づいて接続確立要求記述子を生成する手段と、
前記接続確立要求記述子を前記ホスト・システム内の入出力アクセス可能メモリの予約済み部分に書き込む手段と
を含む、請求項２１に記載のシステム。
【請求項２３】
前記第２データ処理システムとの前記接続を確立する前記手段が、
前記オフロード・ネットワーク・アダプタ内で、前記接続を記述するデータ構造を生成する手段と、
前記接続に関する状態情報を前記データ構造に保管する手段と
を含む、請求項２１に記載のシステム。
【請求項２４】
前記確立された接続について前記ホスト・システムに知らせる前記手段が、
接続完了応答記述子を生成する手段と、
前記接続完了応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む手段と
を含む、請求項２１に記載のシステム。
【請求項２５】
前記要求が、複数の接続を確立する要求であり、前記要求を前記第１データ処理システムに関連するオフロード・ネットワーク・アダプタに転送する前記手段が、
確立されるべき前記複数の接続内の接続のそれぞれを識別する接続要求記述子を生成する手段と、
前記接続要求記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む手段と
を含む、請求項２１に記載のシステム。
【請求項２６】
前記接続が前記オフロード・ネットワーク・アダプタ内で確立された後に、前記確立された接続について前記ホスト・システムに知らせる前記手段が、
遅延判断基準が満足されているかどうかを判定する手段と、
前記遅延判断基準が満足されている場合に、接続完了応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む手段と
を含む、請求項２１に記載のシステム。
【請求項２７】
前記遅延判断基準が、最後の接続完了応答記述子が入出力アクセス可能メモリの前記予約済み部分に書き込まれて以降に確立された所定の個数の接続と、接続を介して到着する所定の量のデータと、受信データ内で検出される所定のデータ・パターンと、最後の接続完了応答記述子が入出力アクセス可能メモリの前記予約済み部分に書き込まれて以降の所定の長さの時間とのうちの少なくとも１つである、請求項２６に記載のシステム。
【請求項２８】
前記接続に関する状態情報を前記オフロード・ネットワーク・アダプタから前記ホスト・システムに移行する手段
をさらに含む、請求項２１に記載のシステム。
【請求項２９】
前記接続に関する状態情報を前記オフロード・ネットワーク・アダプタから前記ホスト・システムに移行する前記手段が、
前記接続の状態を識別する接続属性応答記述子を生成する手段と、
前記接続属性応答記述子を前記ホスト・システムの入出力アクセス可能メモリの予約済み部分に書き込む手段と
を含む、請求項２８に記載のシステム。
【請求項３０】
第２データ処理システムとの接続を確立する前記要求が、リスン要求であり、前記第２データ処理システムとの前記接続を確立する前記手段が、指定されたポート番号について受信された接続要求を識別する手段を含む、請求項２１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的には改善されたデータ処理システムに関する。より具体的には、本発明は、オフロード・ネットワーク・アダプタ内の接続確立動作をサポートする方法および装置を対象とする。
【背景技術】
【０００２】
既知のシステムでは、オペレーティング・システムは、バッファの２つのキューを有するネットワーク・インターフェースを提供することによって、データ転送だけに関して普通のネットワーク・インターフェースと通信する。バッファの第１のキューは、送信のために読み取られるホスト・メモリ内のできあいのデータ・パケットをポイントする記述子からなる。バッファの第２のキューは、処理のために受信されたホスト・メモリ内の未処理のデータ・パケットを書き込まれたバッファをポイントする記述子を含む。ネットワーク・インターフェースは、キューが物理メモリ内のどこにあるかをネットワーク・インターフェースに知らせるメモリ・マップド入出力インターフェースを提供し、データ・パケットが到着した時にどの割込みを生成すべきかなど、一部の制御情報用のインターフェースを提供する。
【０００３】
普通のネットワーク・インターフェースのネットワーク・プロトコル処理は、完全にホスト内で実行され、データ・パケットだけが送信のためにネットワーク・アダプタに供給される。しかし、ネットワーク・リンク速度は、マイクロプロセッサ性能の向上よりすばやく向上してきた。その結果、ホスト・プロセッサは、大量のＴＣＰ／ＩＰプロトコル処理、順序はずれのデータ・パケットの再組立、リソース集中型のメモリ・コピー、および割込みという重荷を負うようになる。一部の高速ネットワークでは、ホスト・プロセッサは、それが実行しているアプリケーションよりも多くの処理をネットワーク・トラフィック処理に捧げなければならない。したがって、データ・パケットは、ホスト内で、ネットワーク速度より低い速度で処理される。
【０００４】
この問題に対処するために、最近は、ＴＣＰ／ＩＰプロトコルの処理をホスト・プロセッサからネットワーク・アダプタ上のハードウェアにオフロードすることが強調されてきた。そのようなネットワーク・アダプタは、時々インテリジェント・ネットワーク・アダプタまたはＴＣＰ／ＩＰオフロード・エンジン（ＴＯＥ）と呼ばれるが、ネットワーク・プロセッサおよびファームウェア、特殊化されたＡＳＩＣ、またはこの両方の組合せを用いて実施することができる。これらのネットワーク・アダプタは、アプリケーション性能が高まるようにホスト・プロセッサ処理をオフロードするだけではなく、ｉＳＣＳＩストレージ・エリア・ネットワーク（ＳＡＮ）応用例および高性能ネットワーク接続ストレージ（ＮＡＳ）応用例など、新しいタイプのネットワークおよびデバイスとの通信も可能にする。
【特許文献１】米国特許出願第１０／８９０９７８号（整理番号ＹＯＲ９２００４０１４５ＵＳ１）
【特許文献２】米国特許出願第１０／８９１１９６号（整理番号ＹＯＲ９２００４０１４６ＵＳ１）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
これらのネットワーク・アダプタは、データ・パケットのＴＣＰ／ＩＰプロトコル処理をオフロードするが、ネットワーク上の通信に必要な処理の多くが、まだホスト・システム内で維持されている。たとえば、ホスト・システムは、それでも、接続を確立し、確立された接続のそれぞれの状態情報を維持し、メモリ管理を処理するなどの責任を負う。したがって、ホスト・システムは、まだ、ホスト・システム内で実行されなければならないこれらの動作に起因して、さらに、ホスト・システム内でこれらの動作を実行するためにホスト・システムとネットワーク・アダプタとの間で必要な通信の量に起因して、プロセッサ負荷を経験する。したがって、ホスト・システムに対する処理負荷が最小にされ、より多くの処理がネットワーク・アダプタ内で実行されるようにネットワーク・アダプタの動作を改善する装置および方法を有することが有益であろう。
【課題を解決するための手段】
【０００６】
本発明は、以下ではオフロード・ネットワーク・アダプタと称する、ホスト・プロセッサからプロトコル処理をオフロードするネットワーク・アダプタでの複数の改善を提供する。具体的に言うと、本発明は、オフロード・ネットワーク・アダプタを利用するシステム内でメモリ管理および最適化を処理する機構を提供する。さらに、本発明は、オフロード・ネットワーク・アダプタを利用するシステム内での接続確立を改善する機構を提供する。さらに、本発明は、オフロード・ネットワーク・アダプタを利用するシステム内でデータ・パケットの受信を処理する改善された機構を提供する。
【０００７】
本発明の一態様は、接続確立と接続状態情報の維持とをオフロード・ネットワーク・アダプタにオフロードする能力である。接続確立および状態情報維持のこのオフロードの結果として、ホスト・システムとオフロード・ネットワーク・アダプタとの間で必要な通信の数を減らすことができる。さらに、オフロード・ネットワーク・アダプタにこれらの機能をオフロードすることによって、既知のコンピューティング・システムに存在する断片的な通知ではなく、確立された接続および状態情報のホスト・システムへのバルク通知が可能になる。
【０００８】
接続確立のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでのメモリ管理を改善する。本発明によるメモリ管理は、データのバッファリングされた送信およびバッファリングされた受信と、データのゼロ・コピー送信およびゼロ・コピー受信との両方を可能にする。さらに、本発明は、任意の個数の属性に基づいて指定された接続の間で共用できるＤＭＡバッファのグループ化を可能にする。本発明は、さらに、部分的送信バッファ動作および部分的受信バッファ動作、ＤＭＡ要求をバルクでホスト・システムに通信できるようにするためのＤＭＡ要求の遅延、およびホスト・システムへのデータの優先転送の機構を可能にする。
【０００９】
接続確立およびメモリ管理のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでの受信データの処理を改善する。本発明のオフロード・ネットワーク・アダプタに、そのオフロード・ネットワーク・アダプタがホスト・システムへのデータ受信の通知を異なる形で遅延させることを可能にする論理を含めることができる。ホスト・システムへのデータ・パケット受信の通知を遅延させることの利点は、最初のパケットの直後に到着する可能性がある複数のデータ・パケットを、たとえば単一の通知に集約する可能性である。連続的なデータ・パケット到着を有するストリームを与えられて、値を、通知遅延についてセットすることができ、この値を、通信ソケットごとにホスト・システムについて構成することができる。
【００１０】
本発明の上記および他の特徴および利点は、好ましい実施形態の次の詳細な説明で説明され、あるいは、その説明に鑑みて当業者に明白になる。
【００１１】
本発明の特徴を表すと思われる新規の特徴を、添付の特許請求の範囲に示す。しかし、本発明自体ならびに本発明の使用の好ましい態様、さらなる目的、および利点は、添付図面と共に読まれる時に、例示的実施形態の次の詳細な説明への参照によって最もよく理解されるであろう。
【発明を実施するための最良の形態】
【００１２】
本発明は、オフロード・ネットワーク・アダプタすなわち、ネットワーク・プロトコル処理の一部またはすべてを実行し、したがって処理をホストからオフロードするネットワーク・アダプタの動作を改善する装置および方法を対象とする。本発明は、オフロード・ネットワーク・アダプタに関するので、本発明は、１つまたは複数のネットワークを有する分散データ処理システムと共に使用するのに特に適する。図１〜３は、本発明の諸態様を実施できるそのような分散データ処理環境の例として提供される。図１〜３が、例示的であるのみであり、これらの例示的環境に対する多数の修正を、本発明の趣旨および範囲から逸脱せずに行えることを諒解されたい。
【００１３】
ここで図面を参照すると、図１には、本発明を実施できるデータ処理システムのネットワークの絵図表現が示されている。ネットワーク・データ処理システム１００は、本発明を実施できるコンピュータのネットワークである。ネットワーク・データ処理システム１００には、ネットワーク１０２が含まれ、ネットワーク１０２は、ネットワーク・データ処理システム１００内で一緒に接続されたさまざまなデバイスおよびコンピュータの間の通信リンクを提供するのに使用される媒体である。ネットワーク１０２には、ワイヤ、無線通信リンク、または光ファイバ・ケーブルなどの接続を含めることができる。
【００１４】
図示の例では、サーバ１０４は、ストレージ・ユニット１０６と共にネットワーク１０２に接続される。さらに、クライアント１０８、１１０、および１１２が、ネットワーク１０２に接続される。これらのクライアント１０８、１１０、および１１２は、たとえば、パーソナル・コンピュータまたはネットワーク・コンピュータとすることができる。図示の例では、サーバ１０４は、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータをクライアント１０８〜１１２に供給する。クライアント１０８、１１０、および１１２は、サーバ１０４に対するクライアントである。ネットワーク・データ処理システム１００には、図示されていない追加のサーバ、クライアント、および他のデバイスを含めることができる。図示の例では、ネットワーク・データ処理システム１００は、互いに通信するのに伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）プロトコル・スイートを使用するネットワークおよびゲートウェイの全世界の集合を表す、ネットワーク１０２を伴うインターネットである。インターネットの心臓部には、データおよびメッセージをルーティングする数千台の商用コンピュータ・システム、政府コンピュータ・システム、教育コンピュータ・システム、および他のコンピュータ・システムからなる主要なノードまたはホスト・コンピュータの間の高速データ通信リンクのバックボーンがある。もちろん、ネットワーク・データ処理システム１００を、たとえばイントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、または広域ネットワーク（ＷＡＮ）など、複数の異なるタイプのネットワークとして実施することもできる。図１は、例として意図されており、本発明のアーキテクチャ的限定として意図されてはいない。
【００１５】
図２を参照すると、図１のサーバ１０４などのサーバとして実施できるデータ処理システムのブロック図が、本発明の好ましい実施形態に従って示されている。データ処理システム２００は、システム・バス２０６に接続された複数のプロセッサ２０２および２０４を含む対称型マルチプロセッサ（ＳＭＰ）システムとすることができる。その代わりに、単一プロセッサ・システムを使用することができる。システム・バス２０６には、メモリ・コントローラ／キャッシュ２０８も接続され、メモリ・コントローラ／キャッシュ２０８は、ローカル・メモリ２０９へのインターフェースを提供する。入出力バス・ブリッジ２１０は、システム・バス２０６に接続され、入出力バス２１２へのインターフェースを提供する。メモリ・コントローラ／キャッシュ２０８および入出力バス・ブリッジ２１０を、図示のように一体化することができる。
【００１６】
入出力バス２１２に接続されたＰｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス・ブリッジ２１４は、ＰＣＩローカル・バス２１６へのインターフェースを提供する。複数のモデムを、ＰＣＩローカル・バス２１６に接続することができる。通常のＰＣＩバス実装は、４つのＰＣＩ拡張スロットまたはアドイン・コネクタをサポートする。図１のクライアント１０８〜１１２への通信リンクは、アドイン・コネクタを介してＰＣＩローカル・バス２１６に接続されたモデム２１８およびネットワーク・アダプタ２２０を介して提供することができる。
【００１７】
追加のＰＣＩバス・ブリッジ２２２および２２４は、追加のＰＣＩローカル・バス２２６および２２８のインターフェースを提供し、ＰＣＩローカル・バス２２６および２２８から、追加のモデムまたはネットワーク・アダプタをサポートすることができる。この形では、データ処理システム２００は、複数のネットワーク・コンピュータへの接続を可能にする。メモリ・マップド・グラフィックス・アダプタ２３０およびハード・ディスク２３２も、直接または間接のいずれかで、図示のように入出力バス２１２に接続することができる。
【００１８】
当業者は、図２に示されたハードウェアを変更できることを諒解するであろう。たとえば、光ディスク・ドライブおよび類似物などの他の周辺デバイスも、図示のハードウェアに加えてまたはその代わりに使用することができる。図示の例は、本発明に関するアーキテクチャ的限定を暗示することを意図されたものではない。
【００１９】
図２に示されたデータ処理システムは、たとえば、拡張対話式エグゼクティブ（ＡＩＸ）（Ｒ）オペレーティング・システムまたはＬＩＮＵＸ（Ｒ）オペレーティング・システムを走行させる、米国ニューヨーク州アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社の製品であるＩＢＭ  ｅＳｅｒｖｅｒ  ｐＳｅｒｉｅｓ（Ｒ）システムとすることができる。
【００２０】
次に図３を参照すると、本発明を実施できるデータ処理システムを示すブロック図が示されている。データ処理システム３００は、クライアント・コンピュータの例である。データ処理システム３００は、ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）ローカル・バス・アーキテクチャを使用する。図示の例は、ＰＣＩバスを使用するが、Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）およびＩｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）などの他のバス・アーキテクチャを使用することができる。プロセッサ３０２およびメイン・メモリ３０４は、ＰＣＩブリッジ３０８を介してＰＣＩローカル・バス３０６に接続される。ＰＣＩブリッジ３０８には、プロセッサ３０２用の一体化されたメモリ・コントローラおよびキャッシュ・メモリを含めることもできる。ＰＣＩローカル・バス３０６への追加の接続を、直接構成要素相互接続を介してまたはアドイン・ボードを介して行うことができる。図示の例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ３１０、Ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ（ＳＣＳＩ）ホスト・バス・アダプタ３１２、および拡張バス・インターフェース３１４が、直接構成要素相互接続によってＰＣＩローカル・バス３０６に接続される。対照的に、オーディオ・アダプタ３１６、グラフィックス・アダプタ３１８、およびオーディオ／ビデオ・アダプタ３１９は、拡張スロットに挿入されるアドイン・ボードによってＰＣＩローカル・バス３０６に接続される。拡張バス・インターフェース３１４は、キーボードおよびマウス・アダプタ３２０、モデム３２２、および追加メモリ３２４の接続を提供する。ＳＣＳＩホスト・バス・アダプタ３１２は、ハード・ディスク・ドライブ３２６、テープ・ドライブ３２８、およびＣＤ−ＲＯＭドライブ３３０の接続を提供する。通常のＰＣＩローカル・バス実装は、３つまたは４つのＰＣＩ拡張スロットまたはアドイン・コネクタをサポートする。
【００２１】
オペレーティング・システムは、プロセッサ３０２上で稼動し、図３のデータ処理システム３００内のさまざまな構成要素を調整し、その制御を提供するのに使用される。オペレーティング・システムは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ社から入手できるＷｉｎｄｏｗｓ（Ｒ）  ＸＰ（Ｒ）などの市販オペレーティング・システムとすることができる。Ｊａｖａ（Ｒ）などのオブジェクト指向プログラミング・システムが、オペレーティング・システムとあいまって稼動し、データ処理システム３００上で実行されるＪａｖａ（Ｒ）プログラムまたはＪａｖａ（Ｒ）アプリケーションからオペレーティング・システムへの呼出しを提供することができる。「Ｊａｖａ（Ｒ）」は、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．社の商標である。オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムの命令は、ハード・ディスク・ドライブ３２６などのストレージ・デバイスに置かれ、プロセッサ３０２による実行のためにメイン・メモリ３０４にロードすることができる。
【００２２】
当業者は、図３のハードウェアを実装に応じて変更できることを諒解するであろう。フラッシュ読取専用メモリ（ＲＯＭ）、同等の不揮発性メモリ、または光ディスク・ドライブおよび類似物などの他の内蔵ハードウェアまたは周辺デバイスを、図３に示されたハードウェアに加えてまたはその代わりに使用することができる。また、本発明のプロセスを、マルチプロセッサ・データ処理システムに適用することができる。
【００２３】
もう１つの例として、データ処理システム３００を、あるタイプのネットワーク通信インターフェースに頼らずにブート可能になるように構成された独立型システムとすることができる。もう１つの例として、データ処理システム３００を、携帯情報端末（ＰＤＡ）デバイスとすることができ、このＰＤＡは、オペレーティング・システム・ファイルまたはユーザ生成データあるいはその両方を保管する不揮発性メモリを提供するためにＲＯＭまたはフラッシュＲＯＭあるいはその両方を用いて構成される。
【００２４】
図３に示された例および上で説明した例は、アーキテクチャ的限定を暗示することを意図されたものではない。たとえば、データ処理システム３００を、ＰＤＡの形をとることの他に、ノートブック・コンピュータまたはハンド・ヘルド・コンピュータとすることもできる。データ処理システム３００を、キオスクまたはウェブ・アプライアンスとすることもできる。
【００２５】
次に図４に移ると、本発明の好ましい実施形態によるネットワーク・アダプタの図が示されている。ネットワーク・アダプタ４００は、図２のネットワーク・アダプタ２２０、図３のＬＡＮアダプタ３１０などとして実施することができる。図示のように、ネットワーク・アダプタ４００には、イーサネット（Ｒ）・インターフェース４０２、データ・バッファ４０４、およびＰＣＩバス・インターフェース４０６が含まれる。これらの３つの構成要素は、ネットワークとデータ処理システムのバスとの間の経路を提供する。イーサネット（Ｒ）・インターフェース４０２は、データ処理システムに接続されたネットワークへのインターフェースを提供する。ＰＣＩバス・インターフェース４０６は、ＰＣＩローカル・バス２１６または３０６などのバスへのインターフェースを提供する。データ・バッファ４０４は、ネットワーク・アダプタ４００を介して送信され、受信されるデータを保管するのに使用される。このデータ・バッファには、追加ストレージを提供するＳＲＡＭインターフェースへの接続も含まれる。
【００２６】
ネットワーク・アダプタ４００には、電気的消去可能プログラム可能読取専用メモリ（ＥＥＰＲＯＭ）インターフェース４０８、レジスタ／構成／状況／制御ユニット４１０、発振器４１２、および制御ユニット４１４も含まれる。ＥＥＰＲＯＭインターフェース４０８は、ＥＥＰＲＯＭチップへのインターフェースを提供し、このＥＥＰＲＯＭチップには、ネットワーク・アダプタ４００の命令および他の構成情報を含めることができる。異なるパラメータおよびセッティングを、ＥＥＰＲＯＭインターフェース４０８を介してＥＥＰＲＯＭチップに保管することができる。レジスタ／構成／状況／制御ユニット４１０は、ネットワーク・アダプタ４００上のプロセスを構成し、実行するのに使用される情報を保管する場所を提供する。たとえば、タイマのタイマ値を、これらのレジスタに保管することができる。さらに、異なるプロセスの状況情報を、このユニット内に保管することもできる。発振器４１２は、ネットワーク・アダプタ４００上でプロセスを実行するためのクロック信号を供給する。
【００２７】
制御ユニット４１４は、ネットワーク・アダプタ４００によって実行される異なるプロセスおよび機能を制御する。制御ユニット４１４は、さまざまな形をとることができる。たとえば、制御ユニット４１４を、プロセッサまたは特定用途向け集積チップ（ＡＳＩＣ）とすることができる。これらの例では、データのフロー制御を管理するのに使用される本発明のプロセスが、制御ユニット４１４によって実行される。プロセッサとして実施される場合に、これらのプロセスの命令を、ＥＥＰＲＯＭインターフェース４０８を介して、関連するチップに保管することができる。
【００２８】
データは、イーサネット（Ｒ）・インターフェース４０２を介して受信動作で受信される。このデータは、ＰＣＩバス・インターフェース４０６を介するデータ処理システムへの転送のためにデータ・バッファ４０４に保管される。逆に、データは、ＰＣＩバス・インターフェース４０６を介して送信のためにホスト・システムから受け取られ、データ・バッファ４０４に保管される。
【００２９】
普通のデータ処理システムでは、ネットワーク・アダプタを介してホストに／から送られるデータの処理は、そのホスト・システム内で実行される。図５に、ＴＣＰ／ＩＰプロトコル・スタック内でのデータ・パケットの普通の処理が実行される形を示す。図５に示されているように、アプリケーション５１０は、オペレーティング・システム５２０およびネットワーク・アダプタ５３０を介してデータを送信し、受信する。ＴＣＰ／ＩＰプロトコル・スタックを介するデータの処理は、送信のためにフォーマットされたデータ・パケットを生成し、またはデータ・パケット内のデータを抽出し、適当なアプリケーション５１０にルーティングするのいずれかのためにＴＣＰ／ＩＰプロトコル処理を実行するオペレーティング・システム５２０を用いて実行される。これらの動作は、ホスト・システム上でソフトウェアで実行される。
【００３０】
フォーマットされたデータ・パケットは、ネットワーク・アダプタ５３０を介してハードウェアで送信／受信される。ネットワーク・アダプタ５３０は、メディア・アクセス制御層および物理層からのデータ・パケットを操作する。メディア・アクセス制御層は、ネットワーク上の物理伝送媒体へのアクセスを制御するサービスである。ＭＡＣ層機能性は、ネットワーク・アダプタに組み込まれ、各ネットワーク・アダプタを識別する一意の通し番号を含む。物理層は、ネットワーク媒体上のビットの伝送に関するサービスを提供する層である。
【００３１】
図５に示されているように、普通のネットワーク・インターフェースでは、データがネットワークを介してホスト・システムから送信される時に、そのデータは、まず、ユーザ空間内のアプリケーション・バッファ５４０から、ピン止めされたカーネル・バッファ５５０にコピーされ、ネットワーク・アダプタ・キュー５６０内のエントリが、送信のためにそのデータをネットワーク・アダプタ５３０にキューイングするために生成される。データが、ホスト・システム上のアプリケーション５１０のためにネットワークから受信される時には、そのデータ・パケットが、直接メモリ・アクセス（ＤＭＡ）動作を使用してカーネル・バッファ５５０に書き込まれる。次に、このデータは、後に、アプリケーションがｒｅｃｅｉｖｅ（）を呼び出す時に、ホストによってアプリケーション・バッファ５４０にコピーされる。
【００３２】
図６に、オフロード・ネットワーク・アダプタがＴＣＰ／ＩＰプロトコル・スタックでデータ・パケットを処理する形を示す。図６に示されているように、普通はホスト・システムのオペレーティング・システム６２０内で実行されるＴＣＰおよびＩＰの処理が、移動され、その結果、オフロード・ネットワーク・アダプタ６３０内で実行されるようになる。その結果、ホスト・システムによって実行される処理が減らされ、アプリケーション６１０をより効率的に実行できるようになる。
【００３３】
既知のオフロード・ネットワーク・アダプタを用いると、上で図５に関して説明したバッファリングされた送信およびバッファリングされた受信は、ＴＣＰ／ＩＰスタックの処理がオフロード・ネットワーク・アダプタ６３０にシフトされた場合であっても、まだ必要である。すなわち、図６に示されているように、ホスト・システムからデータ・パケットを送信するために、データは、まず、ユーザ空間内のアプリケーション・バッファ６４０からカーネル・バッファ６５０にコピーされ、ここで、ネットワーク・アダプタによる処理のためにネットワーク・アダプタ・キュー６６０内にキューイングされる。同様に、受信されたデータ・パケットについて、そのデータは、カーネル・バッファ６５０にＤＭＡ転送され、後に、ユーザ空間内のアプリケーション・バッファ６４０にコピーされる。
【００３４】
したがって、上の普通の場合と同様に、既知のオフロード・ネットワーク・アダプタでは、まだ、ユーザ空間のアプリケーション・バッファ６４０とカーネル空間のカーネル・バッファ６５０との間でデータをコピーする必要がある。そのようなコピー動作は、受信または送信されるすべてのデータ・パケットについて、ホスト・システム内で実行されなければならない。そのようなコピー動作に関連するオーバーヘッドは、アプリケーションを実行するためのホスト・プロセッサの可用性を減らす。
【００３５】
さらに、データ・パケットのＴＣＰ／ＩＰプロトコル処理を、オフロード・ネットワーク・アダプタ６３０にオフロードすることができるが、実際の接続確立および確立された接続ごとの状態情報の維持は、それでも、ホスト・システム、たとえばオペレーティング・システム６２０の責任である。すなわち、ホスト・システムは、まだ、アウトバウンド接続およびインバウンド接続を確立するのに必要な動作を実行しなければならない。さらに、ホストは、接続ごとにホスト・システム内に保管される状態情報を維持できるようにするために、各接続の状態が変化した時にネットワーク・アダプタとメッセージを交換しなければならない。
【００３６】
その結果、ホスト・システムからネットワーク・アダプタへのＴＣＰ／ＩＰプロトコル処理のオフロードは、コンピューティング・システムの性能を改善してきたが、そのようなオフロード・ネットワーク・アダプタ・システムでメモリが管理される形を改善することと、接続確立がオフロードされ、ホストとネットワーク・アダプタとの間のメッセージングが最小限になるように接続が確立される形を改善することとによって、追加の改善を得ることができる。さらに、ネットワーク・アダプタとホスト・システムとの間の相互作用が最小にされるようにデータがオフロード・ネットワーク・アダプタで受信される形を改善することによって、ネットワーク・アダプタの動作の改善を得ることができる。
【００３７】
本発明は、ホスト・システムとネットワーク・アダプタとの間の相互作用が最小にされるようにオフロード・ネットワーク・アダプタの動作を改善する機構を提供する。本発明は、ホスト・システムのオペレーティング・システムとオフロード・ネットワーク・アダプタとの間の改善されたインターフェースを提供する。このインターフェースには、制御部分とデータ部分とが含まれる。このインターフェースは、このインターフェースの制御部分とデータ部分の両方を含む明示的データ構造と共に使用されるバッファのキューを利用する。このインターフェースの制御部分は、ホスト・システムがオフロード・ネットワーク・アダプタに指示することを可能にし、オフロード・ネットワーク・アダプタがホスト・システムに指示することを可能にする。たとえば、ホスト・システムは、どのポート番号をリスンするかについてネットワーク・インターフェースに指示することができ、オフロード・ネットワーク・アダプタは、新しい接続の確立、データの受信などについてホスト・システムに指示することができる。このインターフェースのデータ部分は、送信用と受信用の両方の、確立された接続でのデータの転送の機構を提供する。このインターフェースの制御部分は、接続を制御する普通のソケット・アプリケーション・プログラミング・インターフェース（ＡＰＩ）、たとえば、ｓｏｃｋｅｔ（）、ｂｉｎｄ（）、ｌｉｓｔｅｎ（）、ｃｏｎｎｅｃｔ（）、ａｃｃｅｐｔ（）、ｓｅｔｓｏｃｋｏｐｔ（）などを使用することによって呼び出すことができる。このインターフェースのデータ部分は、データの送信または受信に関するソケットＡＰＩ、たとえば、ｓｅｎｄ（）、ｓｅｎｄｔｏ（）、ｗｒｉｔｅ（）、ｗｒｉｔｅｖ（）、ｒｅａｄ（）、ｒｅａｄｖ（）などによって呼び出すことができる。
【００３８】
図７は、本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを使用するホスト・システムとオフロード・ネットワーク・アダプタとの間の通信を示す例示的な図である。オフロード・ネットワーク・アダプタ・プログラミング・インターフェースは、主に直接メモリ・アクセス（ＤＭＡ）動作または複数のＤＭＡに基づく、ホスト・システム上の入出力アクセス可能メモリの予約済み部分に要求記述子および応答記述子を書き込み、読み取るための、ホスト・システムとオフロード・ネットワーク・アダプタとの間の通信インターフェースを提供する。
【００３９】
図７に示されているように、ホスト・システム７１０は、オフロード・ネットワーク・アダプタ７３０へまたはこれからのいずれかのデータ転送の要求を実行依頼し、オフロード・ネットワーク・アダプタ７３０は、その要求の成功または失敗の通知によって応答する。要求および応答は、要求記述子および応答記述子と呼ばれるデータ構造にパッケージ化される。これらの記述子は、ホスト・システム７１０上の入出力アクセス可能メモリ７２０内の２つの物理領域に書き込まれ、これらの物理領域から読み取られる。これらの領域は、入力記述子テーブル７２２および出力記述子テーブル７２４と呼ばれ、プロデューサ−コンシューマの形で使用される。
【００４０】
入力記述子テーブル７２２は、オフロード・ネットワーク・アダプタ７３０によって読み取られ、制御インターフェース要求およびデータ・インターフェース要求を実行依頼するためにホスト・システム７１０によって書き込まれる。出力記述子テーブル７２４は、ホスト・システム７１０によって読み取られ、オフロード・ネットワーク・アダプタ７３０によって書き込まれ、オフロード・ネットワーク・アダプタ７３０は、出力記述子テーブル７２４を使用して、以前の要求の結果を示し、データ到着についてホスト・システム７１０に通知する。
【００４１】
ホスト・システム７１０とオフロード・ネットワーク・アダプタ７３０の両方が、入力記述子テーブル７２２および出力記述子テーブル７２４から読み取り、これらに書き込むが、ホスト・システム７１０とオフロード・ネットワーク・アダプタ７３０は、同一の形でこれらの記述子にアクセスするのではない。ホスト・システム７１０は、普通のメモリ読取およびメモリ書込を使用して、入力記述子テーブル７２２および出力記述子テーブル７２４にアクセスする。しかし、オフロード・ネットワーク・アダプタは、ＤＭＡ動作を使用して、記述子の任意の組を入力記述子テーブル７２２および出力記述子テーブル７２４との間でコピーする。
【００４２】
普通のネットワーク・アダプタと同様に、ホスト・システム７１０は、たとえばポーリングまたは受信割込みのいずれかによって、オフロード・ネットワーク・アダプタ７３０から出力記述子テーブル７２４内の新しい応答記述子について知らされることができる。すなわち、データ・パケットがオフロード・ネットワーク・アダプタ内で受信され、下でより詳細に説明するように、ホスト・システム７１０へのデータ・パケットの到着の通知に関する、ある判断基準が満足される時に、応答記述子を、オフロード・ネットワーク・アダプタ７３０によって生成し、出力記述子テーブル７２４に書き込むことができる。次に、出力記述子テーブル７２４内の新しい記述子を示す割込みを、オペレーティング・システム７１５によって受け取ることができる。その代わりに、ホスト・システム７１０が、新しい記述子について出力記述子テーブル７２４を周期的にポーリングすることができる。出力記述子テーブル７２４にオーバーフローの恐れがある場合には、オフロード・ネットワーク・アダプタ７３０は、その状況をホスト・システム７１０に通知するために、ホスト・システム７１０に割込みを送出することができる。
【００４３】
本発明の１つの例示的実施形態では、入力記述子テーブル７２２および出力記述子テーブル７２４に書き込まれる記述子は、２５６ビット／３２バイトであり、記述子オーナー（１ビット）、記述子タイプ（５ビット）、記述子内容（２５０ビット）という形で構造化される。オーナー・ビットは、入力記述子テーブル７２２および出力記述子テーブル７２４内の記述子のプロデューサ／コンシューマ関係に使用される。言い換えると、通信する２つの構成要素すなわちホスト・オペレーティング・システムおよびオフロード・ネットワーク・アダプタがあるので、プロデューサ／コンシューマ関係が存在する。単一ビットを使用して、記述子の所有権を表すことができる。たとえば、「１」は、ホストが生成した記述子を表すことができ、「ゼロ」は、オフロード・ネットワーク・アダプタが生成した記述子を表すことができ、あるいは、逆も同様である。
【００４４】
記述子タイプは、その記述子に関連する動作または要求あるいはその両方を識別する。たとえば、要求記述子は、バッファ送信、バッファ使用可能、接続要求、終了要求、リスン要求、取消要求、接続属性制御、およびネットワーク・アダプタ属性制御というタイプのうちの１つからなるものとすることができる。
【００４５】
バッファ送信記述子タイプは、送信されるデータを保管するバッファを割り振る要求に関連し、バッファ、使用される接続識別子、および後で説明するＡＳＡＰビットの値を識別する。バッファ使用可能記述子タイプは、受信されたデータを保管するバッファを割り振る要求に関連し、受信されたデータを保管するバッファおよびそれを介してデータが受信される接続識別子を識別する。接続要求記述子タイプは、指定されたローカル・ポートおよびプロトコルで接続を開始する要求に関連する。終了要求記述子タイプは、指定された接続を切断する要求に関連する。リスン要求記述子タイプは、ポートおよびプロトコルで接続を受信するつもりがあることを示す要求に関連する。取消要求記述子タイプは、以前に実行要求された送信、接続、またはリスン要求を取り消す要求に関連する。接続属性制御記述子タイプは、接続属性を得るかセットする要求に関連する。ネットワーク・アダプタ属性制御記述子タイプは、ネットワーク・アダプタ全体の属性を得るかセットする要求に関連する。
【００４６】
応答記述子も、さまざまなタイプを有することができる。たとえば、応答記述子は、バッファ受信、バッファ使用可能、接続到着、接続完了、リスン応答、終了応答、取消応答、接続属性、およびネットワーク・アダプタ属性というタイプのうちの１つとすることができる。バッファ受信記述子タイプは、使用可能なデータを有するバッファを識別し、そのデータが関する接続を識別する。バッファ使用可能記述子タイプは、ＤＭＡが完了したことと、送信バッファが使用可能であることを識別する。接続到着記述子タイプは、新しい接続が到着していることをホストに通知し、接続識別子を含む。接続完了記述子タイプは、接続要求が成功したまたは失敗したことをホストに通知する。リスン応答記述子タイプは、実行依頼されたリスン要求の成功／失敗を示す。終了応答記述子タイプは、実行依頼されたクローズ要求の成功／失敗を示す。取消応答記述子タイプは、実行依頼された取消要求の成功／失敗を示す。接続属性記述子タイプは、古い接続属性値または新しい値成功／失敗を示す。ネットワーク・アダプタ属性記述子タイプは、古いネットワーク・アダプタ属性値または新しいネットワーク・アダプタ属性値成功／失敗を示す。
【００４７】
本発明の１つの例示的実施形態で、バッファ送信要求記述子、バッファ使用可能要求記述子、バッファ受信応答記述子、およびバッファ使用可能応答記述子の記述子内容フィールドは、すべて、次のフィールドを用いてフォーマットされる。
Ｂａｓｅ        ６４ビット  バッファの基底物理アドレス
Ｌｅｎ          ３２ビット  バイト単位のバッファの長さ
Ｃｏｎｎ  ＩＤ  ６４ビット  ネットワーク・アダプタによって与えられる一意の接続識別子
ＡＳＡＰ        １ビット    できる限り早くＤＭＡを行う要求（後で述べる）
Ｍｏｄｉｆｙ    １ビット    このバッファが変更されているかどうかを示す（後で述べる）
【００４８】
接続ＩＤ（Ｃｏｎｎ  ＩＤ）は、接続を一意に識別する値であり、接続要求に対する応答でおよび接続到着に関する応答として、オフライン・ネットワーク・アダプタによって供給される。接続ＩＤ０（ゼロ）は、「接続なし」を意味するために予約済みである。これは、たとえば、あるバッファをすべての接続（たとえば、まだＩＤを有しない受動的に受け入れられる接続上のデータ）に使用できることを示すのに使用される。特定の接続に関連付けられていないバッファを、「バルク・バッファ」と呼ぶ。
【００４９】
ＡＳＡＰフィールドおよびｍｏｄｉｆｙフィールドは、バッファ送信要求記述子のためにのみ使用される。ＡＳＡＰビットは、できる限り早くこのバッファをＤＭＡ転送させる望みを示す。ｍｏｄｉｆｙビットは、この特定のバッファが、最後にオフロード・ネットワーク・アダプタに提示された時以降に変更されているか否かをオフロード・ネットワーク・アダプタに通知するためのものである。これによって、オフロード・ネットワーク・アダプタは、ローカル・メモリ内にこのバッファのコピーを既に有するか否かを判定でき、したがって、可能な場合にＤＭＡ転送を避けられるようになる。
【００５０】
制御記述子は、制御バッファを記述し、この制御バッファには、可変個数の任意長属性タプルが含まれる。制御記述子、内容要求、終了要求、リスン要求、取消要求、およびこれらのめいめいの応答の記述子内容フィールドは、すべて、次のフィールドを用いてフォーマットされる。
Ｎｕｍｂｅｒ    ８ビット    制御バッファ内の属性タプルの個数
Ｂａｓｅ        ６４ビット  制御バッファの基底物理アドレス
Ｌｅｎ          ３２ビット  バイト単位の制御バッファの長さ
Ｃｏｎｎ  ＩＤ  ６４ビット  一意の接続識別子
【００５１】
接続属性要求、オフロード・ネットワーク・アダプタ属性要求、およびこれらのめいめいの応答の制御バッファおよび記述子内容フィールドは、すべて、次のフィールドを用いてフォーマットされる。
Ｇｅｔ／Ｓｅｔ      １ビット    属性が取り出されるのか更新されるのかを示す
Ａｔｔｒｉｂｕｔｅ  １５ビット  読取／書込に関して属性を識別する
Ｌｅｎｇｔｈ        ３２ビット  属性データの長さ
Ｖａｌｕｅ          不適用      実際の属性値。長さは前のフィールドによって指定される。
【００５２】
上の制御記述子は、できる限り一般的であることを意図されている。制御記述子によって指定できる属性の量に起因して、これらのすべてを本明細書で示すことはできない。ネットワーク・インターフェース制御属性の例には、ＩＰアドレス、ドメイン名、およびルーティング情報が含まれる。接続ごとの制御属性の例には、受信ウィンドウ・サイズ、Ｎａｇｌｅアルゴリズム・セッティング、およびＳＡＣＫサポートが含まれる。
【００５３】
本発明を用いると、オフロード・ネットワーク・アダプタ７３０は、本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを利用するための、オフロード・ネットワーク・アダプタ７３０のファームウェア、ＡＳＩＣなどの中の論理を有する。すなわち、オフロード・ネットワーク・アダプタ７３０は、要求記述子を認識し、その要求記述子および対応するデータを処理する論理と、出力記述子テーブル７２４に書き込まれる応答記述子を生成する論理とを有する。同様に、ホスト・システムの、オペレーティング・システム７１５、オペレーティング・システム７１５によってロードされるデバイス・ドライバ、または類似物は、入力記述子テーブル７２２に書き込まれる要求記述子を生成し、出力記述子テーブル７２４から読み取られる応答記述子を認識する論理と、その応答記述子および対応するデータを処理する論理とを有する。
【００５４】
本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースの記述子を使用するホスト・システムとネットワーク・アダプタとの間の相互作用の全般的な概要を与えたので、次の説明では、このインターフェースが、オフロード・ネットワーク・アダプタを使用して、改善された接続確立、メモリ管理、およびデータの受信をどのように容易にするかを示す。
【００５５】
接続確立
本発明の一態様は、接続確立と接続状態情報の維持とをオフロード・ネットワーク・アダプタにオフロードする能力である。接続確立および状態情報維持のこのオフロードの結果として、ホスト・システムとオフロード・ネットワーク・アダプタとの間で必要な通信の数を減らすことができる。さらに、後で述べるように、オフロード・ネットワーク・アダプタへのこれらの機能のオフロードは、既知のコンピューティング・システムに存在する断片的な通知ではなく、ホスト・システムへの確立された接続および状態情報のバルク通知を可能にする。
【００５６】
図８は、本発明の１つの例示的実施形態による、通信接続を確立する時のホスト・システムとオフロード・ネットワーク・アダプタとの間の通信の例示的な図である。図８に示されているように、アウトバウンド接続の確立は、接続が確立されることを要求する、アプリケーション８０５からの要求のオペレーティング・システム８１５による受取によって開始される。その結果、オペレーティング・システム８１５は、接続要求記述子を生成し、これを入力記述子テーブル８２２に書き込む。この接続要求記述子および関連する制御バッファには、要求された接続を確立するのに必要な情報のすべてが含まれる。たとえば、制御バッファおよび接続要求記述子には、ＡＦ＿ＩＮＥＴ情報、ＳＯＣＫ＿ＳＴＲＥＡＭ情報、ＩＰ  ＶＥＲＳＩＯＮ情報、ならびにリモート接続およびローカル接続を参照する接続識別子を含めることができる。
【００５７】
オフロード・ネットワーク・アダプタ８３０は、入力記述子テーブル８２２から接続要求記述子を読み取り、次に、オフロード・ネットワーク・アダプタ８３０内の接続確立論理８３２が、この接続要求記述子内で受け取られた情報に基づいて、接続の確立を試みる。接続要求記述子に基づく接続の確立には、接続のソケット記述子すなわち、ホスト・システムおよびリモート・コンピューティング・デバイスのソケットを記述するデータ構造を確立することと、接続識別子を接続に関連付けることと、その接続用のバッファをオフロード・ネットワーク・アダプタ８３０内で割り振ることとが含まれる。すなわち、オフロード・ネットワーク・アダプタは、普通のシステム呼出しｃｏｎｎｅｃｔ（）、ｓｅｔｓｏｃｋｏｐｔ（）、ｂｉｎｄ（）、ａｃｃｅｐｔ（）などに関連する動作を実行することができる。接続が確立された時または、持続時間タイムアウト状態などのエラー状態に出会った時に限って、ホスト・システム８１０は、接続確立動作の結果の状況について知らされる。
【００５８】
この応答は、出力記述子テーブル８２４への１つまたは複数の応答記述子の書込とすることができる。たとえば、接続完了記述子を、オフロード・ネットワーク・アダプタ８３０によって生成し、出力記述子テーブル８２４に書き込んで、これによって、接続が確立されたことをホスト・システム８１０に知らせることができる。
【００５９】
インバウンド接続の確立は、わずかに異なる形で実行される。アプリケーションが、特定のポートで接続について「リスン」する能力を要求する場合に、オペレーティング・システム８１５は、リスン要求記述子を入力記述子テーブル８２２に書き込むことができる。このリスン要求記述子は、リスンされるポートと、接続がリスンされるプロトコルとを識別する。次に、オフロード・ネットワーク・アダプタ８３０の接続確立論理８３２が、入力記述子テーブル８２２からこのリスン要求記述子を読み取り、適当な着呼ソケット接続で接続を確立するのに必要な動作を実行する。これには、たとえば、普通のａｃｃｅｐｔ（）システム呼出しおよびｂｉｎｄ（）システム呼出しに似た動作を実行することであるが、これらをオフロード・ネットワーク・アダプタ８３０内で実行することを含めることができる。接続が確立されるかエラー状態に出会う（持続時間タイムアウト状態など）時に限って、ホスト・システム８１０は、接続の結果の状況について知らされる。既知の「オフロード」実施態様では、ホスト・システムは、接続確立の各段階で相互作用する。本発明は、接続するか接続をリスンする高水準コマンドを発行し、接続が確立されるかタイムアウトまたはエラー状態に出会った時にのみ応答する。
【００６０】
接続が確立された時に、その接続に関する情報は、オフロード・ネットワーク・アダプタのメモリ８３４内の接続状態データ構造内で維持される。この状態情報は、確立された接続を介してデータを送信し、受信するのに使用される。この状態情報は、後で述べるように、ホスト・システム８１０によって維持される接続状態情報を更新するのに使用することもできる。
【００６１】
上の説明からわかるように、オフロード・ネットワーク・アダプタ内で接続確立動作を実行することと、本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを使用することとの主要な結果の１つは、ホスト・システムとネットワーク・アダプタとの間の通信が、接続の確立中に最小にされることである。その結果、ホスト・システムが処理すべきメッセージがより少なくなる。これは、ホスト・システムが、それに関する多数の接続が確立され、切断されるサーバ・コンピューティング・システムである時に特に重要である。
【００６２】
上で述べたように、本発明の一実施形態では、ホスト・システムは、接続が確立されたかエラー状態に出会った後に、接続の状況について知らされることができる。したがって、結果として、接続完了応答記述子は、接続が確立されるか接続を確立する試みが失敗するたびに、出力記述子テーブル８２４に書き込まれる。出力記述子テーブル８２４への各接続完了応答記述子の書込と共に、割込みを生成し、オペレーティング・システム８１５に送って、新しい応答記述子が処理のために出力記述子テーブル８２４内に存在することをホスト・システム８１０に知らせることができる。
【００６３】
接続完了応答記述子が出力記述子テーブル８２４に書き込まれる回数を最小にし、したがって、割込みが生成され、ホスト・システム８１０に送られる回数を最小にするために、本発明は、出力記述子テーブル８２４への接続完了応答記述子の書込を複数の異なる形で遅延させることができる。ホストへの接続確立状況の通知を遅延させることの利点は、複数の接続を単一の通知に集約する可能性である。この形では、同一の接続または異なる接続に関する複数の完了応答記述子を、一緒に「バッチ化」し、オフロード・ネットワーク・アダプタとホスト・システムとの間の１回のトランザクションでホスト・システムに供給することができる。
【００６４】
たとえば、構成可能な遅延値を、確立されたソケット接続の速度、接続要求が受け取られる速度、または類似物に基づいてセットすることができる。この遅延値は、集合体内の各接続の状況を指定する接続完了応答記述子を生成する前にオフロード・ネットワーク・アダプタ８３０のメモリに累積できる接続確立情報の集合体の量を識別することができる。この値は、オフロード・ネットワーク・アダプタ８３０上のメモリに保管することができる。
【００６５】
この遅延値は、静的にまたは動的に判定することができ、接続の確立と接続完了応答記述子を使用するホスト・システムへの通知との間の時間の所定の長さ、受け取られた接続確立状況更新すなわち接続確立動作の成功／失敗の個数、または類似物の形とすることができる。遅延値が動的に判定される場合には、遅延値は、たとえば、ある時間期間にわたって受け取られた接続の割合または量、ソケット接続タイミングのヒストリカル観察、または類似物に基づいて判定することができる。たとえば、特定のソケット受信接続が、１０ミリ秒にわたって１０個の接続要求のバーストを有し、その後、１０秒間静止する場合に、ホスト・システムへの通知全体を減らすために、１０個の接続が行われるまでホスト・システムへのすべての通知を遅延させることが賢明である可能性がある。１秒のタイムアウト機能を使用して、追加のソケット接続を待つことができる。
【００６６】
いつ接続完了応答記述子を出力記述子テーブル８２４に書き込むかを決定するもう１つのオプションは、オフロード・ネットワーク・アダプタ８３０が、確立された接続のデータ到着まで待つことである。この形では、オフロード・ネットワーク・アダプタ８３０は、ホスト・システム８１０による処理のためにデータが受信されるまで、確立された接続に関する情報をメモリ内で維持する。その受信の時に、接続完了応答記述子を出力記述子テーブル８２４に書き込んで、接続の確立についてホスト・システム８１０に知らせることができ、その後、バッファ受信応答記述子を出力記述子テーブル８２４に書き込んで、確立された接続を介するデータの受信を示すことができる。
【００６７】
本発明のもう１つの実施形態では、出力記述子テーブル８２４を介するホスト・システムへの通知を、特定のデータ・パターンが接続を介して受信されるまで遅延させることができる。これらの特定のデータ・パターンは、たとえば、特定のＨＴＴＰ  ＧＥＴ要求、単一の単位として処理できるデータのシーケンスの終りを示すために事前に決定された特定のメタ・タグ、または類似物とすることができる。
【００６８】
このデータ・パターンが、確立された接続を介して受信されたならば、オフロード・ネットワーク・アダプタ８３０は、接続完了応答記述子を出力記述子テーブル８２４に書き込んで、そのデータ・パターンが受信されるまでの時間期間中に成功して確立されたか失敗したすべての接続を識別することができる。この形では、ホスト・システム８１０は、ホスト・システム８１０が、処理すべき特定のデータを有するまで、新しい接続の確立について知らされない。言い換えると、ホスト・システムは、ホスト・システムが行うべき特定の何かが現れるまで、処理すべき記述子で悩まされることがない。その「何か」は、検索されるデータ・パターンによって定義される。
【００６９】
したがって、本発明は、確立された接続または接続確立時の失敗の通知の集約を可能にし、その結果、ホスト・システムに送られる通知の数が最小にされる。これによって、ホスト・システムによって実行されなければならない処理の量が減り、ホスト・システムが、そのホスト・システム上で稼動するアプリケーションを処理するためにそのリソースを使用することが可能になる。
【００７０】
本発明を用いると、接続確立がオフロード・ネットワーク・アダプタ８３０によって実行されるので、確立された接続の状態は、オフロード・ネットワーク・アダプタ８３０のメモリ内で維持される。しかし、フェールオーバー、ネットワーク・エラー状態の場合に、またはルーティング判断を行うために、ホスト・システム８１０がこの状態情報を有することが必要である場合がある。したがって、本発明は、オフロード・ネットワーク・アダプタ８３０内で維持される確立された接続に関する状態情報をホスト・システム８１０に移行させる機構を提供する。
【００７１】
本発明の１つの例示的実施形態では、接続属性応答記述子を周期的に生成し、出力記述子テーブル８２４に書き込むことができる。この接続属性応答記述子は、接続のそれぞれの現在の状態を識別する。ホスト・システム８１０は、出力記述子テーブル８２４への接続属性応答記述子の追加について、オペレーティング・システム８１５に割込みを送ることによって知らされる。次に、ホスト・システム８１０は、その接続属性応答記述子を読み取り、処理し、ホスト・システムの接続状態情報が更新されるようにする。したがって、ホスト・システム８１０には、更新された情報が与えられ、この情報によって、ホスト・システム８１０は、ルーティング判断を行い、ネットワーク・エラーまたはフェールオーバーの場合に適当な動作を実行することができる。
【００７２】
したがって、本発明は、接続確立中のホスト・システムとオフロード・ネットワーク・アダプタとの間の通信が最小にされるように、接続確立をオフロード・ネットワーク・アダプタにオフロードする機構を提供する。これは、ホスト・システムが、単一の接続要求記述子内でオフロード・ネットワーク・アダプタにバルク接続確立要求を送ることを可能にすることができ、その後は、たとえば、所定の個数の接続が確立される、所定の量のデータがある接続で到着する、所定の長さの時間が経過する、所定のデータ・パターンが受信されるなど、ある判断基準が満足されるまで、オフロード・ネットワーク・アダプタによるホスト・システムとのさらなる通信は、不要である。同様に、ホスト・システムは、オフロード・ネットワーク・アダプタに、特定のポートで接続をリスンするように指示し、その後、これらの接続を受け入れ、バインドすることができる。その結果、ホスト・システムは、１つのリスン要求記述子を送ることができ、やはり、リスンされるポートでの接続の確立に関して所定の判断基準が満足されるまで、通信されない。さらに、本発明は、接続状態情報をオフロード・ネットワーク・アダプタに保管し、ルーティング判断での使用のためおよびネットワーク・エラーまたはフェールオーバーの場合にこの状態情報をホストに移行する機構を提供する。
【００７３】
図９および１０は、本発明の１つの例示的実施形態による、本発明の要素の動作の概要を示す流れ図である。これらの流れ図および下で説明する他の流れ図の各ブロックおよび流れ図のブロックの組合せを、コンピュータ・プログラム命令によって実施できることを理解されたい。これらのコンピュータ・プログラム命令は、機械を作るためにプロセッサまたは他のプログラム可能データ処理装置に供給することができ、このプロセッサまたは他のプログラム可能データ処理装置で実行される命令が、流れ図の１つまたは複数のブロックで指定された機能を実施する手段を作成するようになる。これらのコンピュータ・プログラム命令は、プロセッサまたは他のプログラム可能データ処理装置が特定の形で機能するように指示することができるコンピュータ可読メモリまたは記憶媒体に保管することもでき、コンピュータ可読メモリまたは記憶媒体に保管された命令が、流れ図の１つまたは複数のブロックで指定された機能を実施する命令手段を含む製造品を作るようになる。
【００７４】
したがって、流れ図のブロックは、指定された機能を実行する手段の組合せ、指定された機能を実行するステップの組合せ、および指定された機能を実行するプログラム命令手段をサポートする。流れ図の各ブロックおよび流れ図のブロックの組合せを、指定された機能またはステップを実行する特殊目的ハードウェアベース・コンピュータ・システムによって、または特殊目的ハードウェアとコンピュータ命令との組合せによって実施できることも理解されたい。
【００７５】
図９は、オフロード・ネットワーク・アダプタを使用して接続を確立する時の本発明のホスト・システムの例示的動作の概要を示す流れ図である。図９に示されているように、この動作は、アプリケーションから接続確立要求を受け取ることによって開始される（ステップ９１０）。この接続確立要求は、たとえば、特定の接続を確立する要求、または特定のポートで接続についてリスンする要求とすることができる。接続確立要求記述子を、入力記述子テーブルに書き込む（ステップ９２０）。この接続確立要求記述子は、たとえば、接続要求記述子またはリスン要求記述子とすることができる。
【００７６】
この動作は、次に、オフロード・ネットワーク・アダプタからの接続確立動作の完了に関する応答を待つ（ステップ９３０）。「待つ」とは、応答が受け取られるまで、この接続に関してホスト・システムによってさらなる動作が実行されないことを意味する。明らかに、ホスト・システムは、この「待つ」が発生している間に、他の動作を実行している。
【００７７】
応答が受け取られたかどうかに関する判定を行う（ステップ９４０）。そうでない場合には、接続確立要求がタイムアウトしたかどうかに関する判定を行う（ステップ９５０）。そうでない場合には、この動作は、ステップ９３０に戻り、待つことを継続する。接続確立要求がタイムアウトしている場合には、取消要求記述子を入力記述子テーブルに書き込み（ステップ９６０）、この動作は終了する。
【００７８】
応答が受け取られる場合には、接続完了応答記述子を出力記述子テーブルから読み取る（ステップ９７０）。次に、ホスト・システムによって接続完了応答記述子を処理し（ステップ９８０）、この動作は終了する。
【００７９】
ステップ９２０で入力記述子テーブルに書き込まれた最初の接続確立要求記述子が、複数の接続の確立を指定するすなわち、バルク接続確立要求である場合があることに留意されたい。したがって、本発明を用いると、ホストは、このバルク接続要求を実行するために入力記述子テーブルとの１つのトランザクションを行うだけでよく、これらの接続を確立するのに必要な処理のすべてが、オフロード・ネットワーク・アダプタにオフロードされる。同様に、最初の接続確立要求識別子が、「リスン」要求識別子である場合には、オフロード・ネットワーク・アダプタがポートをリスンしている間に多数の接続が確立される場合があるが、これらの接続の確立を開始するために、ホスト・システムによって１つのトランザクションだけが実行される。
【００８０】
図１０は、本発明の１つの例示的実施形態に従って接続を確立する時のオフロード・ネットワーク・アダプタの例示的動作の概要を示す流れ図である。図１０に示されているように、この動作は、入力記述子テーブルから接続確立要求記述子を読み取る（ステップ１０１０）ことによって開始される。接続確立動作を実行して、ソケット記述子、接続識別子、および類似物を生成して、接続確立要求記述子で識別された接続を確立する（ステップ１０２０）。確立された接続のそれぞれに関する状態情報を、ホスト・システムへの以前の通知以降にどの接続が確立され、どの接続が失敗したかを識別する情報と一緒にメモリに保管する（ステップ１０３０）。
【００８１】
接続完了応答記述子の書込に関する遅延判断基準が満足されたかどうかに関する判定を行う（ステップ１０４０）。上で述べたように、遅延判断基準は、多数の異なる形をとることができる。たとえば、遅延判断基準は、ホスト・システムに送られた最後の通知以降に確立された接続の個数、接続のうちの１つを介して到着する所定の量のデータ、受信された指定されたデータ・パターン、ホスト・システムへの最後の通知以降の所定の長さの時間、および類似物とすることができる。
【００８２】
遅延判断基準が満足されない場合には、この動作は、ステップ１０２０に戻り、接続の確立を継続し、状態情報および接続確立情報がメモリ内で維持される。遅延判断基準が満足されている場合には、ホスト・システムへの最後の通知以降に確立された接続および確立に失敗した接続を識別する接続完了応答記述子を生成し、出力記述子テーブルに書き込む（ステップ１０５０）。この動作は、その後、終了する。
【００８３】
したがって、本発明は、オフロード・ネットワーク・アダプタを使用して接続を確立する改善された機構を提供する。本発明のこの態様は、ホスト・システムとオフロード・ネットワーク・アダプタとの間の通信が最小にされ、その結果、ホスト・システムとオフロード・ネットワーク・アダプタとの間の最小限の量の相互作用だけを用いて多数の接続を確立できるようになるという点で、バルク接続確立に特によく適する。これによって、ホスト・システムが、そのリソースをアプリケーションの実行および他の有用な作業の実行に集中するために解放される。
【００８４】
メモリ管理
接続確立のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでのメモリ管理を改善する。本発明によるメモリ管理は、データのバッファリングされた送信およびバッファリングされた受信と、データのゼロ・コピー送信およびゼロ・コピー受信との両方を可能にする。さらに、本発明は、任意の個数の属性に基づいて指定された接続の間で共用できるＤＭＡバッファのグループ化を可能にする。本発明は、さらに、部分的送信バッファ動作および部分的受信バッファ動作、ＤＭＡ要求をバルクでホスト・システムに通信できるようにするためのＤＭＡ要求の遅延、およびホスト・システムへのデータの優先転送の機構を可能にする。
【００８５】
オフロード・ネットワーク・アダプタ・プログラミング・インターフェースは、ソケット・インターフェースなどの普通のユーザレベル・アプリケーション・プログラム・インターフェース（ＡＰＩ）ならびにユーザ・メモリへのより直接のアクセスを可能にするより新しいＡＰＩをサポートする。本発明のオフロード・アーキテクチャは、データのバッファリングされた送信およびバッファリングされた受信と、データのゼロ・コピー送信およびゼロ・コピー受信との両方を可能にする。オフロード・ネットワーク・アダプタの観点から、バッファリングされた伝送およびゼロ・コピー伝送は、ほとんど同一に処理される。この２タイプのデータ転送が区別される形は、ホスト・システムがオフロード・ネットワーク・アダプタをどのように利用するかに基づく。
【００８６】
図１１は、データのバッファリングされた送信およびバッファリングされた受信が利用される、本発明によるメモリ管理機構を示す例示的な図である。この説明において、ホスト・システム１１１０と別のコンピューティング・デバイス（図示せず）との間の接続が、上で述べた機構を介して確立されていると仮定する。この接続を参照するｒｅａｄ（）呼出しが行われる時に、アプリケーション・バッファ１１３０を、この接続のために確立することができる。オペレーティグ・システム１１５０には、さらに、ピン止めされたカーネル・バッファ１１４０が含まれ、このピン止めされたカーネル・バッファ１１４０を、さまざまな接続のデータを受け取るバルク・バッファと呼ぶことができ、このピン止めされたカーネル・バッファ１１４０には、ネットワーク・アダプタまたは特定の接続バッファ、たとえばアプリケーション・バッファ１１３０に送られる前にデータが書き込まれる。ピン止めされたカーネル・バッファ１１４０は、接続発行時に作成され、データがある接続に送られる前にその接続についてアプリケーション・バッファ１１３０がポストされていない時に使用される。データが送られる前にアプリケーション・バッファ１１３０がポストされる場合には、そのアプリケーション・バッファを使用してデータを受け取ることができる。その代わりに、後で述べるように、アプリケーション・バッファ１１３０とピン止めされたカーネル・バッファ１１４０の両方を、いくつかのバッファリングされた伝送の実施形態で使用することができる。
【００８７】
図１１に示されているように、ホスト・システム１１１０が、オフロード・ネットワーク・アダプタ１１２０を介して別のコンピューティング・デバイスにデータを送信することを望む時に、ホスト・システム１１１０は、そのデータをユーザ空間内のアプリケーション・バッファ１１３０からオペレーティング・システム・カーネル空間内のオペレーティグ・システム１１５０のピン止めされたカーネル・バッファ１１４０にコピーする。このピン止めされたカーネル・バッファ１１４０は、１つまたは複数の確立された接続についてオフロード・ネットワーク・アダプタ１１２０からおよびアプリケーション・バッファ１１３０からデータを受け取るバルク・バッファである。したがって、ホスト・システム１１１０は、複数の接続が現在オープンされている場合に複数のアプリケーション・バッファ１１３０を有することができ、これらの接続のデータは、ピン止めされたカーネル・バッファ１１４０を介して送信／受信されることができる。
【００８８】
この形では、データは、オフロード・ネットワーク・アダプタ１１２０によって送信のためにキューイングされる。次に、ホスト・システム１１１０は、送信用のデータを有するものとしてピン止めされたカーネル・バッファ１１４０を識別するバッファ送信要求記述子を入力記述子テーブルにポストすることができる。次に、オフロード・ネットワーク・アダプタ１１２０は、入力記述子テーブル内のこのバッファ送信要求記述子に応答して、ピン止めされたカーネル・バッファ１１４０からデータを読み取ることができ、そのデータをネットワーク（図示せず）を介して宛先コンピューティング・デバイスに送信することができる。その後、オフロード・ネットワーク・アダプタ１１２０は、そのデータの送信が完了したことを示すバッファ使用可能応答識別子を出力記述子テーブルにポストすることができる。したがって、バッファリングされた送信機構を使用するデータの送信を用いると、本発明は、送信のためにアプリケーション・バッファ１１３０からピン止めされたカーネル・バッファ１１４０にデータをコピーする。
【００８９】
バッファリングされた受信は、類似する形で働く。バッファリングされた受信動作では、オフロード・ネットワーク・アダプタ１１２０は、直接メモリ・アクセス（ＤＭＡ）動作を実行して、データをオフロード・ネットワーク・アダプタ１１２０からピン止めされたカーネル・バッファ１１４０に送る。ホスト・システム１１１０によって入力記述子テーブルにポストされるバッファ使用可能要求記述子に応答して、オフロード・ネットワーク・アダプタ１１２０は、出力記述子テーブルにバッファ受信応答記述子をポストすることができる。次に、ホスト・システム１１１０は、出力記述子テーブルからそのバッファ受信応答記述子を読み取ることができ、ｒｅａｄ（）ソケット呼出しを呼び出して、データをピン止めされたカーネル・バッファ１１４０からユーザ空間内のアプリケーション・バッファ１１３０にコピーすることができる。
【００９０】
バッファリングされた転送は、アプリケーション・バッファ１１３０からピン止めされたカーネル・バッファ１１４０におよびその逆にデータを転送するために実行しなければならないデータ・コピー動作の数のゆえに、最適より遅くなる傾向がある。しかし、バッファリングされた転送は、２つの利点をもたらす。データが、ホスト・カーネル・メモリ内すなわちピン止めされたカーネル・バッファ１１４０内に保たれるので、オフロード・ネットワーク・アダプタ１１２０に対するメモリ圧力が減る。というのは、送信される直前になるまで、バッファをオフロード・ネットワーク・アダプタ１１２０にＤＭＡ転送する必要がなくなるからである。さらに、フェールオーバーを達成するのがより簡単である。というのは、オフロード・ネットワーク・アダプタ１１２０が故障した場合に、データが、それでも、別のネットワーク・アダプタを介する送信のために、ホスト・システムのピン止めされたカーネル・バッファ内で使用可能であるからである。
【００９１】
本発明のアーキテクチャは、さらに、オフロード・ネットワーク・アダプタとホスト・システムとの間のデータのゼロ・コピー伝送の機構を提供する。用語「ゼロ・コピー」は、ホスト・システムによるメモリ対メモリ・コピーの除去を指す。図１２は、本発明の１つの例示的実施形態によるゼロ・コピー動作を示す例示的な図である。ホスト・システム１２１０へ／からデータを伝送するために、ホスト・システム１２１０は、ユーザ・アプリケーションをブロックし、そのアプリケーション・バッファ１２３０をピン止めすることができる。次に、ホスト・システム１２１０は、オフロード・ネットワーク・アダプタ１２２０を呼び出して、データをアプリケーション・バッファ１２３０へ／から直接にオフロード・ネットワーク・アダプタ１２２０から／へＤＭＡ転送する。
【００９２】
現在のシステムでは、確立された接続から読み取るために、アプリケーションは、３つの引数を有するｒｅａｄ（）ソケット呼出しを呼び出す。第１引数は、使用されるソケット記述子を指定し、第２引数は、アプリケーション・バッファ１２３０のアドレスを指定し、第３引数は、そのバッファの長さを指定する。ｒｅａｄは、そのソケットに到着したデータ・バイトを抽出し、それらのバイトをユーザのバッファ区域、たとえばアプリケーション・バッファ１２３０にコピーする。ユーザのバッファ区域におさまるものより少ないデータが到着している場合には、ｒｅａｄ（）は、すべてのデータを抽出し、見つかったバイト数を返す。
【００９３】
本発明によるシステム内のゼロ・コピーを用いると、アプリケーション・バッファ１２３０すなわちＤＭＡバッファの作成は、記述子通信パケットを生成させ、ホスト・システム１２１０からオフロード・ネットワーク・アダプタ１２２０に送らせ、たとえば、バッファ使用可能要求記述子通信パケットを生成し、入力記述子テーブルにポストすることができる。この記述子は、アプリケーション・バッファ１２３０およびその属性を記述し、アプリケーション・バッファ１２３０を、接続された通信の接続情報に関連付ける。アプリケーション・バッファがオフロード・ネットワーク・アダプタ１２２０から使用可能であり、ｒｅａｄ（）ソケット呼出しが実行される時に、ＤＭＡ動作が、データをオフロード・ネットワーク・アダプタ１２２０からアプリケーション・バッファ１２３０に転送するために実行される。次に、ｒｅａｄ（）呼出し完了通知に必要なＤＭＡデータ属性を記述した、オフロード・ネットワーク・アダプタ１２２０からの応答記述子が、作成され、たとえば、バッファ使用可能応答記述子を生成し、ホスト・システムの入力記述子テーブルにポストすることができる。
【００９４】
オフロード・ネットワーク・アダプタ１２２０が、その機能を実行する際に使用するために、各オープンされている接続の情報をメモリ内で維持することに留意されたい。この情報には、オープンされている接続に関連するアプリケーション・バッファの識別ならびに他の接続固有情報を含めることができる。次に、この情報は、オフロード・ネットワーク・アダプタ１２２０が、それ自体とホスト・システム１２１０上のアプリケーションとの間でデータを通信する必要がある時に使用される。
【００９５】
したがって、本発明を用いると、オフロード・ネットワーク・アダプタは、直接メモリ・アクセス動作を使用して、データをユーザ空間内のアプリケーション・バッファに直接に送ることができる。それを行う際に、ピン止めされたカーネル・バッファからアプリケーション・バッファへのデータのコピーが回避される。もちろん、本発明は、どちらのモードでも、すなわち、バッファリングされた送信／受信またはゼロ・コピー送信／受信で動作することができ、あるいは、両方のモードを交換可能にもしくはほぼ同時に使用することができる。すなわち、あるデータを、ホスト・システムとオフロード・ネットワーク・アダプタとの間でバッファリングされた送信／受信を使用して転送することができ、他のデータを、ゼロ・コピー送信／受信を使用して転送することができる。たとえば、アプリケーションｒｅａｄ（）呼出しがソケット上のめいめいのデータの受信に先立つ時に、必ずゼロ・コピー送信／受信を使用することができる。この形では、アプリケーション・バッファは、確立された接続でデータを受信するために事前にポストされる。ｒｅａｄ（）呼出しが、ソケット上のデータの受信に先立たない場合には、バッファリングされた送信／受信を使用することができる。
【００９６】
好ましい実施形態では、ゼロ・コピー送信／受信が、ホスト・システムへ／からデータを送信／受信する好ましい形である。しかし、ゼロ・コピー送信／受信が可能でない状況が生じる場合がある。たとえば、アプリケーション・バッファの使用可能メモリを超えようとしている場合、またはアプリケーション・バッファが使用可能でない場合に、オフロード・ネットワーク・アダプタは、直接メモリ・アクセス動作を使用してアプリケーション・バッファに直接にデータを送ることができない可能性がある。その結果、共用バッファへのデータのバッファリングされた送信が必要になる場合がある。
【００９７】
本発明のオフロード・ネットワーク・アダプタは、任意の個数の属性に基づいて指定された接続の間で共用できるアプリケーション・バッファをグループ化する能力を有する。好ましい実施形態では、アプリケーション・バッファのグループ化は、接続ポート番号に基づく。すなわち、すべてが同一のポート番号を使用するアプリケーション・バッファは、アプリケーション・バッファを共用することができる。たとえば、ウェブをサービスするシナリオで、ポートごとに複数の接続がある場合がある。一例が、ウェブ・サーバのＴＣＰ／ＩＰポート８０である。ポート８０を介して情報を要求する数千個のクライアントＨＴＴＰ接続がある場合がある。ポート８０に割り振られたバッファをグループ化することができる、すなわち、ポート８０に入ってくるこれらの情報要求を処理するために、割り振られたバッファのプールを確立することができる。
【００９８】
送信動作でのアプリケーション・バッファの共用は、ブロードキャスト・タイプ接続またはマルチキャスト・タイプ接続に基づくホスト・システムのデータの再利用を可能にする。すなわち、データは、共用アプリケーション・バッファに１回だけ書き込まれる必要があるが、これらのアプリケーション・バッファを共用する複数の接続上で送信することができる。受信されたデータに関するアプリケーション・バッファの共用は、少ない帯域幅要件またはトラフィックの過渡的バーストを有するアクティブ接続用のメモリのより効率的な使用を可能にする。すなわち、複数の接続がそれら自体の専用の個々のアプリケーション・バッファを有する必要がある（この場合に、バッファ用のメモリの多くが、低帯域幅接続または過渡的バースト接続について未使用になる可能性がある）場合より小さい共用アプリケーション・バッファを共用することができる。さらに、アプリケーション・バッファの共用は、別々のアプリケーションおよびプロセスが、受信されたデータを共用することを可能にする。
【００９９】
図１３は、本発明の１つの例示的実施形態による共用バッファ配置を示す例示的な図である。図示の例では、３つのプロセスＸ、Ｙ、およびＺが、現在、ホスト・システム１３１０上で稼動している。５つの接続Ａ、Ｂ、Ｃ、Ｄ、およびＥが、確立されており、対応するアプリケーション・バッファ１３５０〜１３７０が、これらの接続のためにホスト・システム１３１０メモリ内で確立されている。アプリケーション・バッファ１３５０および１３６０は、その中にＤＭＡ動作を使用してデータを直接に送ることができる個々のアプリケーション・バッファである。その代わりに、データを、上で述べたように、バッファリングされた送信／受信動作の一部として、ピン止めされたカーネル・バッファ１３３０を使用してこれらのアプリケーション・バッファ１３５０〜１３６０にコピーすることができる。
【０１００】
アプリケーション・バッファ１３７０は、接続Ｃ、Ｄ、およびＥの間で共用される共用アプリケーション・バッファである。たとえば、接続Ｃ、Ｄ、およびＥのすべてが、そのソケット接続に同一のポート番号を使用する場合があり、低帯域幅接続である場合があり、したがって、バッファ空間を共用することができる。その代わりに、接続Ｃ、Ｄ、およびＥを、データのマルチキャストまたはブロードキャストのためにアプリケーション・バッファ１３７０を共用することになるマルチキャスト・グループまたはブロードキャスト・グループの一部とすることができる。
【０１０１】
図１３に示されているように、データのバッファリングされた送信／受信転送が利用される時に、データは、まず、ＤＭＡ動作を使用して、オフロード・ネットワーク・アダプタ１３２０からホスト・システム１３１０のオペレーティング・システム１３４０内のピン止めされたカーネル・バッファ１３３０に送られる。ホスト・システム１３１０が出力記述子テーブル内にバッファ使用可能要求記述子をポストすることに応答して、オフロード・ネットワーク・アダプタ１３２０は、バッファ受信応答記述子を入力記述子テーブルにポストする。次に、ホスト・システム１３１０は、ｒｅａｄ（）を呼び出して、データをピン止めされたカーネル・バッファ１３３０から接続Ｃ、Ｄ、およびＥ用の共用されるアプリケーション・バッファ１３７０にコピーすることができる。これらの共用されるアプリケーション・バッファ１３７０から、データを、共用されるアプリケーション・バッファ１３７０を共用する１つまたは複数のプロセスによって読み込むことができる。たとえば、プロセスＺが、共用されるアプリケーション・バッファ１３７０からデータを読み込むことができる。接続Ｃ、Ｄ、またはＥでデータをリスンするすべてのプロセスが、これらの動作を実行して、その接続上のデータをピン止めされたカーネル・バッファ１３３０から共用されるアプリケーション・バッファ１３７０に読み込むことができる。
【０１０２】
その代わりに、個々のアプリケーション・バッファ１３５０および１３６０と同様に、接続Ｃ、Ｄ、およびＥのデータを、オフロード・ネットワーク・アダプタ１３２０から共用されるアプリケーション・バッファ１３７０に直接にＤＭＡ転送することができる。この形では、本発明のゼロ・コピー実施態様は、複数の接続からの送信／受信のためのデータを保持するのに、共用されるアプリケーション・バッファ１３７０を利用することができる。
【０１０３】
共用されるアプリケーション・バッファ１３７０が特に有用である１つの例は、アプリケーションがデータを受け取るアプリケーション・バッファを確立する前に、オフロード・ネットワーク・アダプタ１３２０がホスト・システム１３１０にデータをＤＭＡ転送する必要がある時である。たとえば、これは、データが、所定の閾値を超えてオフロード・ネットワーク・アダプタ１３２０で受信され続け、オフロード・ネットワーク・アダプタが、メモリ不足の危険に陥る可能性がある時に発生し得る。そのようなシナリオが存在し得ると仮定すると、ホスト・メモリ内の共用されるアプリケーション・バッファ１３７０へのデータの中間コピーは、この状況を軽減するのを助けるはずである。すなわち、データを、アプリケーション・バッファ１３５０などの専用接続アプリケーション・バッファではなく、オープンされている接続のすべてのための共用されるアプリケーション・バッファ１３７０にコピーすることができる。
【０１０４】
したがって、ホスト・システムとオフロード・ネットワーク・アダプタとの間のゼロ・コピー・データ転送に関連する利点に加えて、本発明は、接続バッファによって使用されるホスト・システム・メモリの量を最小にし、オフロード・ネットワーク・アダプタ・メモリ・オーバーフローの場合にデータを処理する機構を提供し、専用接続バッファに割り振られる未使用ホスト・システム・メモリを回避するために、接続がそれによってバッファを共用できる機構をも提供する。
【０１０５】
上のメモリ管理機構のほかに、本発明は、確立された接続の部分的受信バッファおよび部分的送信バッファも提供する。本発明の「部分的受信バッファおよび部分的送信バッファ」機能性は、アプリケーション用のデータを既に受信／送信したバッファに受信データを付加する、本発明の能力を指す。２つの別々のバッファが割り振られるのではなく、バッファが、アプリケーション・データ転送のために再利用される。
【０１０６】
図１４に、本発明の１つの例示的実施形態による部分的受信／送信バッファが動作する形を示す。部分的受信／送信バッファを用いる場合に、ホスト・システム１４１０は、特定の接続のために割り振られたアプリケーション・バッファ１４３０についてオフロード・ネットワーク・アダプタ１４２０に知らせる。たとえば、バッファ使用可能要求記述子を、入力記述子テーブルにポストすることができる。この形では、ホスト・システム１４１０は、アプリケーション・バッファ１４３０の所有権をオフロード・ネットワーク・アダプタ１４２０に引き渡す。
【０１０７】
次に、オフロード・ネットワーク・アダプタ１４２０は、接続を介してデータを受信し、そのデータをホスト・システム１４１０上のアプリケーション・バッファ１４３０にＤＭＡ転送する。次に、オフロード・ネットワーク・アダプタ１４２０は、バッファ受信応答記述子を出力記述子テーブルにポストすることができる。図示の例では、アプリケーション・バッファ１４３０にＤＭＡ転送されるデータは、アプリケーション・バッファ１４３０を部分的に満たすのに十分なものに過ぎない。
【０１０８】
アプリケーション・バッファ１４３０でのデータの到着についてホスト・システム１４１０に知らせる際に、ネットワーク・インターフェースは、この「部分的」アプリケーション・バッファ１４３０の制御をホスト・システム１４１０に引き渡す。最初のバッファの残りのすべての部分は、まだオフロード・ネットワーク・アダプタ１４２０の制御の下にある。Ｒｅａｄ（）呼出しのセマンティクスは、応答内に「バイト・オフセット」値を追加することを必要とする。ホスト・システム１４１０内のアプリケーションは、返されたデータのオフセット＋長さが元々のアプリケーション・バッファ１４３０の全長と等しい時に、アプリケーション・バッファ１４３０の完全な制御がホスト・システム１４１０に返されたことを知る。データのオフセット＋長さが元々のアプリケーション・バッファ１４３０の全長と等しくない場合には、まだ、オフロード・ネットワーク・アダプタ１４２０がそのバッファの部分的制御を維持している。その代わりに、アプリケーション・バッファ１４３０のデータの最後の転送を示す追加フィールドを設けることができる。これがアプリケーション・バッファ１４３０のデータの最後の転送である場合に、制御は、ホスト・システム１４１０に返されており、オフロード・ネットワーク・アダプタ１４２０は、アプリケーション・バッファ１４３０の部分的制御を維持しない。
【０１０９】
その後、追加データがその接続を介して受信される場合に、オフロード・ネットワーク・アダプタ１４２０は、この追加データをホスト・システム１４１０上の同一のアプリケーション・バッファ１４３０にＤＭＡ転送することができ、そのデータがアプリケーション・バッファ１４３０内に付加されるようになる。次に、ホスト・システム１４１０は、出力記述子テーブル内の別のバッファ受信応答記述子のポストを介するなど、オフロード・ネットワーク・アダプタ１４２０によって、追加データがその接続に関して到着していることを知らされる。
【０１１０】
上で説明した機構を用いると、ネットワーク・パケット・サイズがホスト・メモリ・バッファ・サイズと等しくない場合に、フラグメンテーションが問題になる場合がある。しかし、大きい連続する仮想バッファがアプリケーション使用のために設けられる場合には、仮想連続空間プリファレンスを保つためにバッファ・フラグメントを使用することができる。これは、仮想メモリ上のバッファを連結するという追加の雑用からアプリケーションを助ける。
【０１１１】
たとえば、データが転送される４メガバイトのアプリケーション・バッファを提供する、アプリケーションのＲｅａｄ（）呼出しを検討されたい。これは、たとえば、大きいデータ・ファイルまたは表示のためのマルチメディア・ストリームの受信に備えたものとすることができる。オフロード・ネットワーク・アダプタは、このデータのうちの１５００バイト部分を、ネットワークから受信された時にアプリケーション・バッファに直接に返すことができる。この配置は、このデータを連続した仮想（アプリケーション）空間で受け取ることを可能にし、アプリケーション側でのデータの再組立という追加の複雑さを省く。
【０１１２】
その一方で、オフロード・ネットワーク・アダプタ１４２０は、アプリケーション・バッファが大きい連続仮想バッファの一部でない時にフラグメンテーションを許容して、受信データの配置を最適化することを選択することができる。フラグメンテーションの許容は、オフロード・ネットワーク・アダプタ１４２０からホスト・システム１４１０へおよびその逆に渡されるバッファの個数を減らすのを助ける可能性がある。したがって、データのゼロ・コピー転送、データのバッファリングされた転送、および共用バッファを許容することのほかに、本発明は、さらに、接続による使用のために割り振られるバッファの個数を最小にするために、部分的に充てんされたバッファを再利用する機構を提供する。
【０１１３】
上で説明したように、オフロード・ネットワーク・アダプタが、それ自体とホスト・システムとの間で通信し、データを転送する形は、ＤＭＡ動作を介するものである。通信の確立と同様に、オフロード・ネットワーク・アダプタは、オフロード・ネットワーク・アダプタおよびホスト・システムに／からデータを転送する時にこれらのＤＭＡ動作を遅延させることができ、その結果、データのバルク転送を達成できるようになる。すなわち、オフロード・ネットワーク・アダプタは、必ずしも、ホスト・システムがデータ転送を要求するや否やＤＭＡ要求を開始するのではない。オフロード・ネットワーク・アダプタが適当と考える時に、オフロード・ネットワーク・アダプタは、送られるデータに対していつＤＭＡ動作を開始するかを判断することができる。
【０１１４】
たとえば、オフロード・ネットワーク・アダプタは、接続を介して送信すべき十分なデータをそのオフロード・ネットワーク・アダプタのメモリ内に既に有する場合に、その接続を介するデータの転送のためのＤＭＡ動作を遅延させることができる。オフロード・ネットワーク・アダプタは、さまざまな判断基準、たとえば、帯域幅と遅延との積の現在の推定値、輻輳ウィンドウ、そのオフロード・ネットワーク・アダプタで使用可能なメモリ、および類似物に基づいて、何がデータの「十分な」量を構成するかを決定することができる。オフロード・ネットワーク・アダプタは、公平なキューイング、接続に関連するアプリケーションに関連するサービス品質、サービスの区別など、他の可能な判断基準に基づいて判断を行うこともできる。
【０１１５】
たとえば、アプリケーションのＲｅａｄ（）呼出しが、データが転送される４メガバイトのアプリケーション・バッファを提供する場合を検討されたい。オフロード・ネットワーク・アダプタは、このデータのうちの１５００バイト部分を、ネットワークから受信された時にバッファに直接に返すことができる。オフロード・ネットワーク・アダプタは、そのアプリケーションが、バルク・データ転送に備えて非常に大きいバッファを設けたことを認識することができ、その後、追加パケットの受信に備えて、ネットワークから受信される複数の１５００バイト・パケットをバッチ化することができる。バルク転送での１５００バイト・パケットの個数は、ホスト・システムとオフロード・ネットワーク・アダプタとの間の接続の特性の関数になるはずである。一例として、ＰＣＩ−Ｅｘｐｒｅｓｓなどのより新しいテクノロジは、データのより大きいブロック、たとば６４Ｋを、より以前のＰＣＩ  ２．１バス相互接続より効率的に移動することができる。
【０１１６】
前に述べたように、データが、送信のためにアプリケーション・バッファに置かれる時に、バッファ送信要求記述子を、入力記述子テーブルにポストすることができる。このバッファ送信要求記述子には、そのデータの送信が優先されるか否かを示すａｓ  ｓｏｏｎ  ａｓ  ｐｏｓｓｉｂｌｅ（できる限り早く、ＡＳＡＰ）ビットを含めることができる。ＡＳＡＰビットのセッティングは、さらに、ＤＭＡ動作を遅延させるかどうか、およびどれだけ遅延させるかを決定する際にオフロード・ネットワーク・アダプタによって利用される判断基準とすることができる。もちろん、可能な時には必ず、オフロード・ネットワーク・アダプタは、このＡＳＡＰビットのセッティングを介するデータの優先送信に関するホスト・システムの要求を尊重することを試みなければならない。
【０１１７】
ＤＭＡ動作は、プロセッサ・サイクル、必要なメモリ・リソース、および類似物に関する、固定されたセットアップ・コストならびにバイトあたりの転送コストを有する傾向がある。入出力バスをよりよく利用し、バイトあたりのコストに関するセットアップ・コストを減らすために、オフロード・ネットワーク・アダプタは、ＤＭＡ転送に関する２つの要求が物理メモリの隣接領域に関するものであることを認識することによって、ＤＭＡ転送を集約することができる。ホスト・システムは、たとえば、１接続あたりの大きいアプリケーション・バッファを割り振ることと、アプリケーション・バッファのサブセットに増分的に書き込むことと、それ相応にメモリの隣接サブセットに関する要求を生成することとによって、このプロセスを促進することを試みることができる。オフロード・ネットワーク・アダプタは、これらのサブセットを隣接するものとして認識し、これらのＤＭＡ転送を集約することができる。
【０１１８】
一例として、記述子キューには、ＤＭＡ転送のアドレスおよび長さの詳細な情報が含まれる。ＤＭＡ動作を実行する前の隣接する記述子の検査によって、続くＤＭＡ要求が、単純に現在の要求の継続である、すなわち、メモリの隣接部分を対象とすることが示される場合がある。そうである場合に、両方のＤＭＡ転送を、行われる必要があるその両方のＤＭＡ動作を参照する単一の組み合わされた要求によって満足することができる。これは、これらのＤＭＡ転送のバルク通知を提供することによって、ホスト・システムとオフロード・ネットワーク・アダプタとの間のＤＭＡ転送要求処理のオーバーヘッドを減らす。
【０１１９】
本発明は、十分な個数のＤＭＡデータ転送が存在するようになるまで、ＤＭＡデータ転送を「蓄える」ことができる。「十分」を判定する判断基準は、上で述べたように変更することができる。十分な個数のＤＭＡデータ転送が、実行の準備ができたならば、本発明は、これらのＤＭＡデータ転送が行われる順序を決定する優先順位機構を使用する。したがって、本発明の１つの例示的実施形態で、ＤＭＡ動作は、オフロード・ネットワーク・アダプタによって、優先順位機構に基づいてリオーダされ、その結果、長時間停止している接続および高優先順位の接続を優先できるようになる。
【０１２０】
図１５に、本発明の１つの例示的実施形態による例示的なＤＭＡ転送順序意思決定プロセスを示す。図１５に示されているように、３つの接続すなわち接続Ａ、Ｂ、およびＣが確立されている。これらの接続は、Ａ、Ｂ、およびＣというセマンティック優先順位順序付けを与えられており、Ａが、最上位のまたは優先される接続である。この優先順位順序付けは、たとえば、ユーザまたはホスト・システムによってアプリケーションまたはアプリケーション接続に割り当てられた優先順位に基づいて決定することができる。前に述べたように、オフロード・ネットワーク・アダプタは、確立された接続に関する情報を保管することができる。この優先順位情報は、オフロード・ネットワーク・アダプタ内で接続情報の一部として保管することができ、接続情報の残りと一緒にホスト・システムに複製することができる。この形では、優先順位情報は、ＤＭＡ動作の順序付けを決定する際に使用するために、オフロード・ネットワーク・アダプタとホスト・システムの両方から使用可能にされる。
【０１２１】
図示の時に、すべての接続が、接続Ａ、Ｂ、およびＣを介して送信すべき十分なデータをオフロード・ネットワーク・アダプタ１５２０上に有する。行う必要がある決定は、送信のためにアプリケーション・バッファ１５３０、１５４０、および１５５０からオフロード・ネットワーク・アダプタ・バッファ１５６０、１５７０、および１５８０にデータをＤＭＡ転送する順序に対するものである。
【０１２２】
本発明を用いると、データのバルク転送は、送信動作とデータの送信に使用可能なアプリケーション・バッファ１５３０〜１５５０のアドレスとを記述した記述子のグループを入力記述子テーブル１５９０に保管することによって容易にされる。オフロード・ネットワーク・アダプタは、接続の指定された優先順位に基づいて、入力記述子テーブル１５９０内の記述子のリストをリオーダする。
【０１２３】
記述子のリストのリオーダは、１つの例示的実施形態で、当初に、現在データが長時間停止している接続に基づいて実行される。すなわち、ある接続が、データが長時間停止している、すなわち、データが所定の時間期間の間のその接続を介して伝送されていない場合に、その接続を介する伝送に関するデータに関連する記述子が、記述子のリスト内で最初に順序付けられる。その後、記述子は、接続に関連する優先順位に基づいてリオーダされる。
【０１２４】
したがって、図示の例によれば、入力記述子テーブル１５９０のエントリすなわち、接続Ａ、Ｂ、およびＣのバッファ送信要求記述子は、オフロード・ネットワーク・アダプタ１５２０によって読み取られ、リオーダされ、その結果、記述子のリオーダされたリストは、Ａ１、Ａ２、Ａ３、Ｂ１、Ｂ２、Ｂ３、Ｃ１、Ｃ２、Ｃ３という順序を有するようになる。次に、データが、この順序でアプリケーション・バッファ１５３０〜１５５０から読み込まれ、優先順位が接続Ａに与えられるようにオフロード・ネットワーク・アダプタ・バッファ１５６０〜１５８０に保管される。
【０１２５】
したがって、本発明は、さらに、アプリケーション・バッファ、バッファ送信要求記述子、入力記述子テーブル、およびホスト・システムとオフロード・ネットワーク・アダプタとの間のＤＭＡ動作を使用するデータのバルク転送の機構を提供する。この形では、ＤＭＡ動作を遅延することができ、その結果、ホスト・システムで稼動するアプリケーションの断片的な割込みでではなく、バルクでＤＭＡ動作を実行できるようになる。
【０１２６】
図１６は、本発明の１つの例示的実施形態の諸態様によるホスト・システムおよびオフロード・ネットワーク・アダプタを使用してデータを送信する時の例示的な動作の概要を示す流れ図である。図１６に示されているように、この動作は、アプリケーションによってオペレーティング・システムに送られる、データを送信する要求（ステップ１６１０）から開始される。次に、このデータをアプリケーション・バッファからピン止めされたカーネル・バッファにコピーする（ステップ１６２０）。次に、バッファ送信記述子を入力記述子テーブルにポストする（ステップ１６３０）。
【０１２７】
次に、オフロード・ネットワーク・アダプタは、ＤＭＡ動作を介して、入力記述子テーブルの次のエントリを読み取る（ステップ１６４０）。この説明において、次のエントリは、バッファ送信記述子であると仮定する。入力記述子テーブルをバルク転送リストに保管し（ステップ１６５０）、遅延判断基準が満足されているかどうかに関する判定を行う（ステップ１６６０）。そうでない場合には、この動作はステップ１６４０に戻って、入力記述子テーブル内の次のエントリを読み取る。しかし、遅延判断基準が満足されている場合には、接続のうちのいずれかが長時間停止しているかどうかおよび接続優先順位に関する判定に基づいて、バルク転送リストを再編成する（ステップ１６７０）。
【０１２８】
上で述べたように、この判定の一部として、バッファ送信記述子が、ＡＳＡＰビットがセットされていることを示すかどうかを判定することができる。そうである場合には、遅延判断基準は、満足されていると判定され、可能な場合には、データの送信が即座に実行される。
【０１２９】
その後、データを、ＤＭＡ動作を介して、ピン止めされたカーネル・バッファから読み取り、バルク転送リストの再編成から決定された順序でオフロード・ネットワーク・アダプタによって送信する（ステップ１６８０）。次に、バッファ使用可能応答記述子を出力記述子テーブルにポストすることができ、この出力記述子テーブルが、ホスト・システム内で読み取られて、オフロード・ネットワーク・アダプタによるデータの送信が確認される（ステップ１６９０）。この動作は、その後、終了する。
【０１３０】
図１７は、本発明の１つの例示的実施形態の諸態様によるホスト・システムとオフロード・ネットワーク・アダプタとの間でのデータのゼロ・コピー転送を実行する時の例示的な動作の概要を示す流れ図である。図１７に示されているように、この動作は、確立された接続を介してオフロード・ネットワーク・アダプタ内でデータを受信する（ステップ１７１０）ことによって開始される。次に、オフロード・ネットワーク・アダプタは、バッファ受信応答記述子を出力記述子テーブルにポストする（ステップ１７２０）。ホスト・システムは、出力記述子テーブル内の次のエントリを読み取る（ステップ１７３０）。この説明において、出力記述子テーブル内の次のエントリは、バッファ受信応答記述子であると仮定する。次に、出力記述子テーブル・エントリを、バルク転送リストに保管することができる（ステップ１７４０）。
【０１３１】
遅延判断基準が満足されているかどうかに関する判定を行う（ステップ１７５０）。そうでない場合には、この動作はステップ１７３０に戻る。遅延判断基準が満足されている場合には、接続が長時間停止しているかどうかおよび接続優先順位に基づいて、バルク転送リストをリオーダする（ステップ１７６０）。次に、データを、バルク転送リストのリオーダから決定された順序で、ＤＭＡ動作を使用して、データが存在する各接続に関連するアプリケーション・バッファに直接に転送する（ステップ１７７０）。次に、ホスト・システムは、完了したＤＭＡ動作ごとに、入力記述子テーブルにバッファ使用可能応答記述子をポストすることができる（ステップ１７８０）。この動作は、その後、終了する。
【０１３２】
ＤＭＡ動作を使用してデータが送られるアプリケーション・バッファに、１つまたは複数の共用アプリケーション・バッファを含めることができることを諒解されたい。したがって、１つまたは複数の共用アプリケーション・バッファを共用するさまざまな接続について受信されたデータを、その共用アプリケーション・バッファにＤＭＡ転送することができ、アプリケーションは、その共用アプリケーション・バッファからデータを取り出すことができる。これは、図１６で説明したデータ送信動作にもあてはまる、すなわち、そこからデータが送信されるアプリケーション・バッファを、共用アプリケーション・バッファとすることができる。
【０１３３】
したがって、本発明は、アプリケーション・バッファを共用し、データのバルク転送を達成できるようにホスト・システムとオフロード・ネットワーク・アダプタとの間の通信を遅延させ、ホスト・システムとオフロード・ネットワーク・アダプタとの間でデータのゼロ・コピー転送を行う機構を提供する。さらに、本発明は、それに送られたデータを既に有する同一のアプリケーション・バッファにデータを転送できるようにする部分的バッファ・データ転送の機構を提供する。
【０１３４】
受信データの処理
接続確立およびメモリ管理のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでの受信データの処理を改善する。上で述べたように、本発明のオフロード・ネットワーク・アダプタには、オフロード・ネットワーク・アダプタがホスト・システムへのデータ受信の通知を異なる形で遅延させることを可能にする論理を含めることができる。ホスト・システムへのデータ・パケット受信の通知を遅延させることの利点は、最初の１つの直後に到着する可能性がある複数のデータ・パケットを、たとえば単一の通知に集約する可能性である。連続するデータ・パケット到着を有するストリームを与えられて、通知遅延に関する値をセットすることができ、この値を、通信ソケットごとにホスト・システムについて構成可能とすることができる。
【０１３５】
この遅延値は、静的にまたは動的にセットすることができる。たとえば、遅延値を、ソケット接続で受信されたデータのヒストリカル観察を介する、ある時間期間にわたって受信されたデータの速度または量に基づいてセットすることができる。一例を、特定の受信接続が、１０ミリ秒にわたってデータの１０個のパケットのバーストで動作し、その後、１０秒間静止する場合に、ホスト・システムへの通知全体を減らすために、パケット到着のすべての通知を１０ミリ秒だけ遅延させることが賢明である可能性があることとすることができる。
【０１３６】
代替案では、ホスト・システムがアプリケーション・バッファを接続にポストしている速度を、監視し、この遅延値を動的にセットするための基礎として使用することができる。ホストが、特定の速度で、たとえば１０ミリ秒おきに１回、アプリケーション・バッファをポストする場合に、オフロード・ネットワーク・アダプタからホスト・システムへのデータのゼロ・コピー転送のためにバッファが使用可能であることを保証するために、データ到着通知を１０ミリ秒だけ遅延させることが意味をなすはずである。
【０１３７】
もう１つの代替案として、ホスト・システムがデータ到着通知の後に接続のための新しいバッファをポストする速度を、監視し、この遅延値をセットするための基礎として使用することができる。これは、ホスト・システムが特定の接続からのデータを消費する速度を示す。たとえば、ホスト・システムが、あるバッファ内のデータを消費し、使用のためにオフロード・ネットワーク・アダプタにそのバッファをポストするのに１０ミリ秒を要する場合がある。したがって、１０ミリ秒の通知遅延は、オフロード・ネットワーク・アダプタとホスト・システムとの間のデータのゼロ・コピー転送用のデータ・バッファの置換を保証するのに賢明である可能性がある。
【０１３８】
もう１つの代替案として、バッファ受信ポスト遅延の時間メトリックではなく、データの量を使用することができる。この場合に、遅延値は、データ・パケットの受信についてホスト・システムに通知する前に、ある量のデータが受信されるのを待つようにセットされる。データの量は、接続のセットアップでのオプションとしてホスト・システムによって静的に、またはヒストリカル観察に基づいてオフロード・ネットワーク・アダプタによって動的に、セットすることができる。遅延値のセッティングを決定する他の方法および機構を、本発明の趣旨および範囲から逸脱せずに使用することができる。
【０１３９】
遅延の量を決定するのにどの代替実施形態が選択されるかにかかわりなく、最初のデータ到着とホスト・システムへのそのデータ到着の最終的な通知との間の最大遅延を識別するために、最大遅延値をオフロード・ネットワーク・アダプタ内で維持することができる。これは、データの到着とホスト・システムへのデータのその到着の通知との間に過度の遅延がないことを保証する。遅延値、最大遅延値、および遅延値を決定するのに必要な他の情報は、遅延値をセットする際の使用のためおよびオフロード・ネットワーク・アダプタからホスト・システムへの通知をどれほど長く遅延させるかを決定するために、オフロード・ネットワーク・アダプタ上のメモリに保管することができる。
【０１４０】
本発明の動作の前の説明では、上で述べた１つまたは複数の代替案に従って決定された遅延値と、最大遅延値とが、遅延判断基準が満足されるかどうかの判定で利用される。たとえば、遅延判断基準が満足されるかどうかを判定する時に、最初のデータ・パケットの受信からのタイミング遅延の比較を、遅延値と比較することができる。タイミング遅延が、遅延値と一致するかこれを超えたならば、データ・パケットのバルク転送を、オフロード・ネットワーク・アダプタからホスト・システムへまたはその逆に行うことができる。同様に、遅延値が、データの量に関して提示される場合に、そこから最初のデータ・パケットが受信された接続を介して受信されたデータの量を、遅延値と比較して、データの量が遅延値でセットされたデータの量と一致しまたはこれを超えるかどうかを判定することができる。そうである場合には、オフロード・ネットワーク・アダプタからホスト・システムへまたはその逆のデータのバルク転送を、ホスト・システムまたはオフロード・ネットワーク・アダプタに送られたバルク・データ受信通知、たとえば入力記述子テーブルまたは出力記述子テーブルのいずれかにポストされたバッファ受信応答記述子を介して開始することができる。
【０１４１】
現在の非インテリジェント・ホスト−ネットワーク・アダプタ・システムでは、すべてのデータが、ホストのオペレーティング・システム層内の非接続固有アプリケーション・バッファのプールを通過する。接続固有アプリケーション・バッファへのデータのゼロ・コピー転送が、本発明の機構を使用して可能であるならば、本発明は、接続固有のアプリケーション・バッファまたは共用アプリケーション・バッファが、データ受信のためにアプリケーションによって現在ポストされていない時の事例に関する判断プロセスを提供する。デフォルトで、接続固有のアプリケーション・バッファまたは共用アプリケーション・バッファが接続に割り振られていない場合に、本発明の判断プロセスは、非接続固有アプリケーション・バッファのプールからのバッファを使用して、オフロード・ネットワーク・アダプタからアプリケーションにデータを転送する。
【０１４２】
しかし、本発明を用いると、ホスト・システムが供給した構成パラメータを、供給することができ、接続固有バッファが存在しない場合に、オフロード・ネットワーク・アダプタは、非接続固有アプリケーション・バッファを使用するのではなく、接続固有アプリケーション・バッファが割り振られるまで待つことができる。このパラメータは、オフロード・ネットワーク・アダプタのメモリに保管することができ、システムのデフォルト挙動をオーバーライドするのに使用することができ、その結果、オフロード・ネットワーク・アダプタは、データがホスト・システムにＤＭＡ転送される前に、接続固有アプリケーション・バッファが接続のために割り振られるまで待つようになる。この待機は、接続固有アプリケーション・バッファが割り振られる、または最大待機時間に一致するかこれを超えるのいずれかまで行うことができる。最大待機時間に一致するかこれを超える場合には、接続のためにオフロード・ネットワーク・アダプタに保管されたデータを、非接続固有アプリケーション・バッファにＤＭＡ転送することができる。
【０１４３】
非接続固有アプリケーション・バッファを使用するというデフォルト挙動をオーバーライドするために事前定義のホスト供給の構成パラメータをセットするのではなく、ホスト・システムが接続固有アプリケーション・バッファを供給することのヒストリカル・データに基づいて、接続固有アプリケーション・バッファを待つかどうか、接続固有バッファをどれほど長く待つか、または接続固有アプリケーション・バッファを待たないかを判定することを可能にする論理を、オフロード・ネットワーク・アダプタ自体に与えることができる。
【０１４４】
たとえば、ホスト・システムは、ヒストリカル・データで観察される時間枠の時間の１００％で、ゼロ・コピー動作用の接続固有アプリケーション・データを供給している場合がある。すなわち、最後のｘ回のデータ転送で、接続固有アプリケーション・バッファが、これらのデータ転送を容易にするために、１００％の時間で利用された。その結果、接続固有アプリケーション・バッファを待つという上の動作を実行することができる。
【０１４５】
しかし、ヒストリカル・データが、１００％の時間にデータ転送が接続固有アプリケーション・バッファを使用して実行されはしなかったことを示す場合には、接続固有アプリケーション・バッファが利用された時間のパーセンテージが所定の閾値量未満であるかどうかに関する判定を行う。そうである場合には、オフロード・ネットワーク・アダプタは、接続固有バッファが割り振られるのを待たず、非接続固有アプリケーション・バッファを利用することができる。代替案では、オフロード・ネットワーク・アダプタが接続固有アプリケーション・バッファを待つ時間の長さを、パーセンテージ値が所定の閾値未満であるかどうかに基づいて減らすことができる。データ転送が継続される時に、オフロード・ネットワーク・アダプタ内で維持されるヒストリカル・データを、各データ転送と共に移動する時間ウィンドウとすることができる。したがって、より多くのデータ転送が接続固有アプリケーション・バッファを使用して実行される時に、パーセンテージ値を、所定の閾値を超えて増やすことができ、システムは、接続固有アプリケーション・バッファが割り振られるのを待つことに戻るか、接続固有アプリケーション・バッファに関する最初の待ち時間に戻ることができる。
【０１４６】
本発明の例示的実施形態のもう１つの態様では、非接続固有アプリケーション・バッファを、オフロード・ネットワーク・アダプタからホスト・システムへのデータのＤＭＡ転送で使用するためにプールから選択しなければならない場合に、本発明は、データを送るべき非接続固有アプリケーション・バッファを選択する、オフロード・ネットワーク・アダプタ内の論理を提供する。この論理は、バッファ・プール内のさまざまな非接続固有アプリケーション・バッファの特性のそれぞれを調べ、オフロード・ネットワーク・アダプタからホスト・システムに転送されるデータに関する最良一致をもたらすバッファを選択する。バッファに関する情報は、ホスト・システムまたはオフロード・ネットワーク・アダプタあるいはその両方で維持される接続情報から得ることができる。
【０１４７】
たとえば、オフロード・ネットワーク・アダプタが、バッファ・プールからの非接続固有アプリケーション・バッファを使用しなければならないと判定する時に、オフロード・ネットワーク・アダプタは、プール内のバッファに関する特性情報をホスト・システムから読み込む。この特性情報は、たとえば、バッファのサイズ、バッファの速度、ホスト・プロセッサ・アーキテクチャ内のバッファの配置などとすることができる。これらの特性に基づいて、オフロード・ネットワーク・アダプタは、オフロード・ネットワーク・アダプタからホスト・システムへデータを転送するのに使用するための最良の候補であるバッファをプールから選択する。
【０１４８】
一例として、選択プロセスがそれに対して調整される特性としてバッファ・サイズをとりあげると、バッファ・プールに、異なるサイズを有する、使用可能な複数の非接続固有アプリケーション・バッファがある場合がある。ある量のデータをホスト・システムに転送しなければならないと仮定して、オフロード・ネットワーク・アダプタは、そのデータを複数のバッファにまき散らすのではなく、そのデータを完全に含むのに十分なサイズを有する非接続固有アプリケーション・バッファをそのバッファ・プールから選択するはずである。上で述べた他の特性を、類似する形で使用して、特定のデータ転送に関する使用に最良のバッファを判定することができる。
【０１４９】
図１８は、本発明の１つの例示的実施形態の諸態様による、データを送るべきアプリケーション・バッファを判定する例示的動作の概要を示す流れ図である。図１８に示されているように、この動作は、オフロード・ネットワーク・アダプタで、ホスト・システムに転送されるデータを受け取る（ステップ１８１０）ことによって開始される。受け取られたデータが向けられる接続のために接続固有アプリケーション・バッファが割り振られているかどうかに関する判定を行う（ステップ１８２０）。そうである場合には、ＤＭＡ動作を使用して、そのデータを、割り振られている接続固有アプリケーション・バッファに送り（ステップ１８３０）、この動作は終了する。
【０１５０】
データを向けられる接続固有アプリケーション・バッファが、接続のために割り振られていない場合（ステップ１８２０）には、待機パラメータがセットされているかどうかに関する判定を行う（ステップ１８４０）。そうである場合には、待機閾値を超えているかどうかに関する判定を行う（ステップ１８５０）。そうでない場合には、この動作は、ステップ１８２０にループ・バックし、待機閾値を超えるまで、または接続固有アプリケーション・バッファが割り振られるまでループし続ける。
【０１５１】
待機閾値を超えている（ステップ１８５０）または待機パラメータがセットされていない（ステップ１８４０）場合には、バッファ・プール内の非接続固有アプリケーション・バッファに関する特性情報をホスト・システムから取り出す（ステップ１８６０）。次に、取り出された特性情報に基づいてこのプールから非接続固有アプリケーション・バッファを選択する（ステップ１８７０）。次に、ＤＭＡ動作を使用して、選択された非接続固有アプリケーション・バッファに直接にデータを転送し（ステップ１８８０）、この動作は終了する。
【０１５２】
追加の設計は、ＤＭＡ配置に対するオプションとして、Ｌ３キャッシュ・アーキテクチャへの直接データ配置を可能にすることができる。すなわち、ホスト・システムによって提供されるキャッシュ注入（ｃａｃｈｅ  ｉｎｊｅｃｔｉｏｎ）機構および仮想アドレスを使用して、データをＬ３キャッシュにプッシュすることができる。アプリケーション・バッファ内のデータのＤＭＡ配置の代わりにまたはこれに加えて、すばやく処理される必要があるデータを、即座の処理のためにＬ３キャッシュに供給することができる。
【０１５３】
特定のデータをＬ３キャッシュに注入すべきか否かを判断できる多数の形がある。たとえば、データをＬ３キャッシュに注入すべきかどうかの判定を、接続ごとにホスト・システムによって確立される明示的構成情報に基づくものとすることができる。代替案では、この判定を、キャッシュ・オーバーフロー状況がありそうであるかどうかを判定するために最近にＬ３キャッシュにどれほどのデータが既に注入されているかを監視することに基づくものとすることができる。Ｌ３キャッシュへのデータの注入が利益を得るかどうか、またはキャッシュ・オーバーフローを引き起こすかどうかを判定する他の機構も、使用することができる。
【０１５４】
上で述べたように、このタイプのメモリ管理機構は、ウェブ要求／応答トラフィックなど、即座のＣＰＵの注意を必要とする、ある種のトラフィックに好ましい可能性がある。ＩＳＣＳＩデータなど、ファイル・システムのためにプリフェッチされる他のタイプのデータは、しばらく必要でない場合があるので、ＤＭＡとしてより好都合である可能性がある。このパラメータは、ネットワーク読取の要求の出所または構成パラメータに基づいて識別することができる。
【０１５５】
上で説明した代替実施形態が、Ｌ３キャッシュへのデータの注入に言及したが、この実施形態が、Ｌ３キャッシュと共に使用されることに限定されないことを諒解されたい。Ｌ３は、多数の既知のアーキテクチャで物理アドレス・マッピングを有するので、この例示的実施形態では好ましい。これは、データを入出力デバイスから直接に移動することの設計における複雑さを減らす。しかし、ＩｎｆｉｎｉＢａｎｄなどのシステム・エリア・ネットワークのＲＤＭＡネットワーク・アダプタなど、新生のネットワーク・アダプタでは、ユーザ・アドレスを供給することができ、このユーザ・アドレスは、仮想アドレス可能Ｌ３キャッシュならびにメモリ階層内の他のすべてのキャッシュへのデータ注入を可能にする。さらに、実アドレスから仮想アドレスへのアドレス変換を行うことができ、これによって、すべてのタイプのキャッシュに必要なアドレスが供給される。したがって、例示的な代替実施形態の機構を、システムの特定のアーキテクチャに応じて、任意のレベルのキャッシュに適用することができる。
【０１５６】
本発明のもう１つの態様では、オフロード・ネットワーク・アダプタに、データ・バッファの、別々ではあるが順序通りのセグメントを再組立する論理を含めることができる。オフロード・ネットワーク・アダプタによって生成されつつある記述子を、その記述子を出力記述子テーブルにポストする前に検査して、移動されるデータが、連続する物理アドレス空間へのものであるかどうかを調べることができる。メモリ内の連続する物理アドレスを識別する複数の記述子が生成される場合には、複数の記述子を出力記述子テーブルにポストするのではなく、転送されるデータをオフロード・ネットワーク・アダプタ内で組み合わせることができ、単一の組み合わされた記述子を使用して、各データ転送を識別することができる。たとえば、ＴＣＰ／ＩＰセグメントを、適当なサイズのバッファ（たとえば、４Ｋページ整列されたデータ）に再組立し、バルクでホスト・システムに通信することができる。これは、ホスト・システムでのより簡単なデータ・バッファ管理およびより高い効率をもたらす。これは、潜在的に、これらの複数の接続をサービスするのに必要なバッファの個数を減らすことができる。
【０１５７】
本発明の例示的実施形態のもう１つの態様では、オフロード・ネットワーク・アダプタに、受信パケット内のデータを検査するがそのデータを消費しない論理が与えられる。ｒｅｃｅｉｖｅ呼出しは、受信されたデータ・パケットの一部、たとえばヘッダのコピーをホスト・アプリケーションに供給できる「ｐｅｅｋ」オプションを指定することができる。これは、ホスト・アプリケーションが、ヘッダ・データを検査し、ペイロードをどのように消費できるかを判断することを可能にすることができる。一例として、アプリケーションが、ヘッダ識別子によってタグ付けされた異なるタイプのデータを受信することを期待している場合がある。これは、ヘッダおよびペイロード・データが可変長である場合に特に有用である。プログラムは、単に、すべてのヘッダの最大長について「ｐｅｅｋ」して、ヘッダ情報を調べることができる。ヘッダをｐｅｅｋすることは、プログラムが、所期のプログラム・ストリームに基づいてデータ・パケットのペイロードが送られるアプリケーション・バッファを決定することを可能にすることができる。
【０１５８】
したがって、オフロード・ネットワーク・アダプタ内で接続について「ｐｅｅｋ」オプションがセットされている場合には、ホスト・アプリケーションが、どのタイプのデータが受信されつつあり、どのソケットすなわち接続を介してデータ・パケット・ペイロードが伝送されるかを判定する時に、受信データ・パケットのヘッダのコピーがホスト・アプリケーションに供給される。たとえば、アプリケーションは、ビデオ・データおよびオーディオ・データについて別々の接続を有する場合がある。ヘッダから、そのアプリケーションは、データ・パケットのペイロード内のデータのタイプを判定できる場合がある。データがビデオ・データである場合には、ｐｅｅｋ動作は、そのデータ・パケット・ペイロードを第１接続に関連するアプリケーション・バッファにＤＭＡ転送しなければならないとホスト・アプリケーションが指定することを可能にする。データがオーディオ・データである場合には、ｐｅｅｋ動作は、そのデータ・パケット・ペイロードを第２接続に関連するアプリケーション・バッファにＤＭＡ転送しなければならないとホスト・アプリケーションが指定することを可能にする。
【０１５９】
このｐｅｅｋ動作を補完するために、オフセット付きでデータを読み取るオプションが提供される。この形では、データ・パケットのペイロードを、ｐｅｅｋされたヘッダから簡単に分離することができる。すなわち、ホスト・アプリケーションは、ヘッダの実際のサイズを知っているので、データ・パケットを処理する時にヘッダをスキップする際に使用するために、オフセットを生成し、保管することができる。これは、ヘッダが、ｐｅｅｋ動作で指定されるバイト数より小さい時に最も有用である。
【０１６０】
本発明を、完全に機能するデータ処理システムの文脈で説明してきたが、本発明のプロセスを、命令のコンピュータ可読媒体の形およびさまざまな形で配布できることと、本発明が、配布の実行に実際に使用される信号担持媒体の特定のタイプに関わりなく同等に適用されることとを当業者が諒解するであろうことに留意することが重要である。コンピュータ可読媒体の例に、フロッピ・ディスク、ハード・ディスク・ドライブ、ＲＡＭ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどの記録可能型媒体、ならびに、ディジタル通信リンクと、アナログ通信リンクと、たとえばラジオ周波数伝送および光波伝送などの伝送形式を使用する有線または無線の通信リンクとなどの伝送型媒体が含まれる。コンピュータ可読媒体は、特定のデータ処理システムでの実際の使用のためにデコードされるコーディングされたフォーマットの形をとることができる。
【０１６１】
本発明の説明は、例示および説明のために提示されたものであって、網羅的であることまたは開示された形の発明に制限されることを意図されたものではない。多数の修正形態および変形形態が、当業者に明白になるであろう。この実施形態は、本発明および実用的応用例の原理を最もよく説明するため、および、企図される特定の使用に適するさまざまな修正を伴うさまざまな実施形態のために当業者が本発明を理解することを可能にするために選択され、説明されたものである。
【図面の簡単な説明】
【０１６２】
【図１】本発明の諸態様を実施できる分散データ処理システムを示す例示的な図である。
【図２】本発明の諸態様を実施できるサーバ・コンピューティング・デバイスを示す例示的な図である。
【図３】本発明の諸態様を実施できるクライアント・コンピューティング・デバイスを示す例示的な図である。
【図４】本発明の１つの例示的実施形態によるネットワーク・アダプタを示す例示的な図である。
【図５】普通のネットワーク・インターフェース・カードを利用するシステムでのＴＣＰ／ＩＰ処理を示す図である。
【図６】ＴＣＰ／ＩＰオフロード・エンジンまたはオフロード・ネットワーク・アダプタを利用するシステムでのＴＣＰ／ＩＰ処理を示す図である。
【図７】本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースに関する本発明の１つの例示的実施形態の諸態様を示す例示的な図である。
【図８】オフロード・ネットワーク・アダプタおよびオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを使用する接続の確立に関する本発明の１つの例示的実施形態の諸態様を示す例示的な図である。
【図９】オフロード・ネットワーク・アダプタを使用して接続を確立する時の本発明のホスト・システムの例示的動作の概要を示す流れ図である。
【図１０】本発明の１つの例示的実施形態に従って接続を確立する時のオフロード・ネットワーク・アダプタの例示的動作の概要を示す流れ図である。
【図１１】データのバッファリングされた送信およびバッファリングされた受信が利用される、本発明によるメモリ管理機構を示す例示的な図である。
【図１２】本発明の１つの例示的実施形態によるゼロ・コピー動作を示す例示的な図である。
【図１３】本発明の１つの例示的実施形態による共用バッファ配置を示す例示的な図である。
【図１４】本発明の１つの例示的実施形態による部分的受信／送信バッファが動作する形を示す図である。
【図１５】本発明の１つの例示的実施形態による例示的なＤＭＡ転送順序意思決定プロセスを示す図である。
【図１６】本発明の１つの例示的実施形態の諸態様によるホスト・システムおよびオフロード・ネットワーク・アダプタを使用してデータを送信する時の例示的な動作の概要を示す流れ図である。
【図１７】本発明の１つの例示的実施形態の諸態様によるホスト・システムとオフロード・ネットワーク・アダプタとの間でのデータのゼロ・コピー転送を実行する時の例示的な動作の概要を示す流れ図である。
【図１８】本発明の１つの例示的実施形態の諸態様による、データを送るべきアプリケーション・バッファを判定する例示的動作の概要を示す流れ図である。
【図１】
2008507201.tif 000003
【図２】
2008507201.tif 000004
【図３】
2008507201.tif 000005
【図４】
2008507201.tif 000006
【図５】
2008507201.tif 000007
【図６】
2008507201.tif 000008
【図７】
2008507201.tif 000009
【図８】
2008507201.tif 000010
【図９】
2008507201.tif 000011
【図１０】
2008507201.tif 000012
【図１１】
2008507201.tif 000013
【図１２】
2008507201.tif 000014
【図１３】
2008507201.tif 000015
【図１４】
2008507201.tif 000016
【図１５】
2008507201.tif 000017
【図１６】
2008507201.tif 000018
【図１７】
2008507201.tif 000019
【図１８】
2008507201.tif 000020
【国際調査報告】
2008507201.tif 000021
2008507201.tif 000022
2008507201.tif 000023
2008507201.tif 000024
2008507201.tif 000025