(57)【要約】  一実施形態において、方法が提供される。一実施形態の方法は、ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取ることと、ネットワークコンポーネントが１つ以上のパケットが到着したことをＴＣＰ−Ａ（ｔｒａｎｓｐｏｒｔ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ  −  ａｃｃｅｌｅｒａｔｅｄ）ドライバに通知することと、ＴＣＰ−Ａドライバが、１つ以上のパケットのうちの少なくとも１つに対するパケット処理を実行することと、ＴＣＰ−Ａドライバが、結果としてデータ移動モジュールに１つ以上のパケットの少なくとも１つの１つ以上の対応するペイロードをリードバッファに格納させる、１つ以上の操作を実行することを提供する。
2007528074.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取ることと、
前記ネットワークコンポーネントが、前記１つ以上のパケットが到着したことをＴＣＰ−Ａ（ｔｒａｎｓｐｏｒｔ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ  −  ａｃｃｅｌｅｒａｔｅｄ）ドライバに通知することと、
ＴＣＰ−Ａドライバが、前記１つ以上のパケットのうちの少なくとも１つに対してパケット処理を実行することと、
前記ＴＣＰ−Ａドライバが、データ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる１つ以上の操作を実行することと
を備える方法。
【請求項２】
前記ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取ったことに応じて、
前記ネットワークコンポーネントは、更に、
前記１つ以上のパケットのそれぞれをヘッダおよびペイロードに分割し、
前記ヘッダおよびペイロードのそれぞれを１つ以上のポストバッファに格納する、
請求項１に記載の方法。
【請求項３】
前記ＴＣＰ−Ａドライバは、前記ヘッダのそれぞれを処理することによってパケット処理を実行し、前記方法は、現在の前記ヘッダの前記処理を完了する前に、前記１つ以上のヘッダの次のヘッダをフェッチすることを更に備える請求項２に記載の方法。
【請求項４】
データ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる１つ以上の操作を実行する前記方法は、前記１つ以上の対応するペイロードを前記リードバッファに書き込ませる要求をデータ移動モジュールに送信することを備える請求項１に記載の方法。
【請求項５】
前記ＴＣＰ−Ａドライバがデータ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる１つ以上の操作を実行する前記方法は、前記１つ以上の対応するペイロードを前記リードバッファに書き込ませるように前記データ移動モジュールをプログラムすることを備える請求項１に記載の方法。
【請求項６】
前記データ移動モジュールは、ＤＭＡ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）エンジンを備える請求項１に記載の方法。
【請求項７】
前記ＤＭＡエンジンは、チップセット上に存在する請求項６に記載の方法。
【請求項８】
前記ＤＭＡエンジンは、ホストプロセッサ上にサポートモジュールとして存在する請求項６に記載の方法。
【請求項９】
オペレーティングシステムにデータを前記ネットワークに送信させる要求を受け取ることと、
前記オペレーティングシステムが、送信されるべきデータが存在することを前記ＴＣＰ−Ａドライバに通知することと、
前記ＴＣＰ−Ａドライバが、前記データを前記ネットワークコンポーネントに送信させる、１つ以上の操作を実行することと、
前記データを受信したことに応じて、前記ネットワークコンポーネントが前記データをパケット化することによって、送信するための１つ以上のパケットを作成することと、
前記ネットワークコンポーネントが、前記１つ以上のパケットを前記ネットワークに送信することと
を更に備える請求項１に記載の方法。
【請求項１０】
ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取ることと、
前記１つ以上のパケットが到着したことをＴＣＰ−Ａ（ｔｒａｎｓｐｏｒｔ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ  −  ａｃｃｅｌｅｒａｔｅｄ）ドライバに通知することと、
を行うことできるネットワークコンポーネントと、
前記１つ以上のパケットのうちの少なくとも１つに対してパケット処理を実行できるＴＣＰ−Ａドライバと
を備え、
前記ＴＣＰ−Ａドライバは、データ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる１つ以上の操作を実行する
装置。
【請求項１１】
データを前記ネットワークに送信させる要求を受け取ることと、
データが送信される状態にあることを、前記ＴＣＰ−Ａドライバに通知することと、
を行うことができるオペレーティングシステムを更に備え、
前記ＴＣＰ−Ａドライバは、前記データを前記ネットワークコンポーネントに送信させる１つ以上の操作を実行でき、
前記ネットワークコンポーネントは、
前記データを受信したことに応じて、前記データをパケット化することによって送信するための１つ以上のパケットを作成することと、
前記１つ以上のパケットを前記ネットワークに送信することと
を行うことができる
請求項１０に記載の装置。
【請求項１２】
前記ネットワークから１つ以上のパケットを受信したことを示すネットワークコンポーネントのインジケーションを受け取ったことに応じて、
前記ネットワークコンポーネントは、更に、
前記１つ以上のパケットのそれぞれをヘッダおよびペイロードに分割することと、
前記ヘッダおよびペイロードのそれぞれを１つ以上のポストバッファに格納することと、
を行うことができる請求項１０に記載の装置。
【請求項１３】
前記ＴＣＰ−Ａドライバは、前記ヘッダのそれぞれを処理することによってパケット処理を実行し、前記ＴＣＰ−Ａドライバは、更に、現在の前記ヘッダの前記処理が完了する前に、前記１つ以上のヘッダの次のヘッダをフェッチすることができる請求項１２に記載の装置。
【請求項１４】
プロセッサのＴＣＰ−Ａ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ  −  Ａｃｃｅｌｅｒａｔｅｄ）ドライバおよびネットワークコンポーネントと通信可能になるように接続された、ＤＭＡ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）エンジンを有するチップセットと、
ネットワークから１つ以上のパケットが受信されたことを示すインジケーションを受け取ることと、
前記１つ以上のパケットが到着したことを前記ＴＣＰ−Ａ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ  −  Ａｃｃｅｌｅｒａｔｅｄ）ドライバに通知することと、
を行うことができる前記ネットワークコンポーネントと、
前記１つ以上のパケットのうちの少なくとも１つに対してパケット処理を実行することと、
データ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる、１つ以上の操作を実行することと、
を行うことができる前記プロセッサの前記ＴＣＰ−Ａドライバと
を備えるシステム。
【請求項１５】
データを前記ネットワークに送信させる要求を受け取ることと、
データが送信される状態にあることを、前記ＴＣＰ−Ａドライバに通知することと、
を行うことができる、プロセッサのオペレーティングシステムを更に備え、
前記ＴＣＰ−Ａドライバは、前記データをネットワークコンポーネントに送信させる１つ以上の操作を実行でき、
前記ネットワークコンポーネントは、
前記データを受信したことに応じて、前記データをパケット化することによって送信するための１つ以上のパケットを作成することと、
前記１つ以上のパケットを前記ネットワークに送信することと
を行うことができる請求項１４に記載のシステム。
【請求項１６】
前記ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取ったことに応じて、前記ネットワークコンポーネントは、更に、
前記１つ以上のパケットのそれぞれをヘッダおよびペイロードに分割することと、
前記ヘッダおよびペイロードのそれぞれを１つ以上のポストバッファに格納することと、
を行うことができる請求項１４に記載のシステム。
【請求項１７】
前記ＴＣＰ−Ａドライバは、前記ヘッダのそれぞれを処理することによってパケット処理を実行し、前記ＴＣＰ−Ａドライバは、更に、現在の前記ヘッダの前記処理が完了する前に、前記１つ以上のヘッダの次のヘッダをフェッチすることができる請求項１６に記載のシステム。
【請求項１８】
命令群が格納されたマシン読み取り可能な媒体であって、
前記命令群は、マシンによって実行されることにより、
ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取り、
前記ネットワークコンポーネントは、前記１つ以上のパケットが到着したことをＴＣＰ−Ａ（ｔｒａｎｓｐｏｒｔ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ  −  ａｃｃｅｌｅｒａｔｅｄ）ドライバに通知し、
ＴＣＰ−Ａドライバは、前記１つ以上のパケットのうちの少なくとも１つに対してパケット処理を実行し、
前記ＴＣＰ−Ａドライバは、データ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる、１つ以上の操作を実行する、
媒体。
【請求項１９】
前記ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取ったことに応じて、前記命令群は、更に、
前記１つ以上のパケットのそれぞれをヘッダおよびペイロードに分割し、
前記ヘッダおよびペイロードのそれぞれを１つ以上のポストバッファに格納する、
請求項１８に記載のマシン読み取り可能な媒体。
【請求項２０】
前記ＴＣＰ−Ａドライバは、前記ヘッダのそれぞれを処理することによってパケット処理を実行し、前記命令群は、更に、結果的に現在の前記ヘッダの前記処理が完了する前に前記１つ以上のヘッダの次のヘッダをフェッチする、請求項１９に記載のマシン読み取り可能な媒体。
【請求項２１】
データ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる１つ以上の操作を実行する前記命令群は、更に、前記１つ以上の対応するペイロードを前記リードバッファに書き込ませる要求をデータ移動モジュールに送信する、請求項１８に記載のマシン読み取り可能な媒体。
【請求項２２】
前記ＴＣＰ−Ａドライバに、データ移動モジュールにより前記１つ以上のパケットのうちの前記少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる、１つ以上の操作を実行させる前記命令群は、更に、結果的に前記１つ以上の対応するペイロードを前記リードバッファに書き込ませるように前記データ移動モジュールをプログラムする請求項１８に記載のマシン読み取り可能な媒体。
【請求項２３】
前記データ移動モジュールは、ＤＭＡ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）エンジンを含む請求項１８に記載のマシン読み取り可能な媒体。
【請求項２４】
前記ＤＭＡエンジンは、チップセット上に存在する請求項２４に記載のマシン読み取り可能な媒体。
【請求項２５】
前記ＤＭＡエンジンは、ホストプロセッサ上にサポートモジュールとして存在する請求項２４に記載のマシン読み取り可能な媒体。
【請求項２６】
前記命令群は、更に、
オペレーティングシステムにデータを前記ネットワークに送信させる要求を受け取り、
前記オペレーティングシステムは、送信される状態にあるデータが存在することを前記ＴＣＰ−Ａドライバに通知し、
前記ＴＣＰ−Ａドライバは、結果として前記データが前記ネットワークコンポーネントに送信される、１つ以上の操作を実行し、
前記データを受信したことに応じて、前記ネットワークコンポーネントは、前記データをパケット化することによって送信するための１つ以上のパケットを作成し、
前記ネットワークコンポーネントは、前記１つ以上のパケットを前記ネットワークに送信する
請求項１８に記載のマシン読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ＴＣＰ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）スタック処理の高速化に関する。
【背景技術】
【０００２】
ネットワークは、コンピュータシステムにとって不可欠な部分となった。しかし、ネットワーク帯域幅の進歩は、プロトコルスタックの処理に関連付けされうるオーバヘッドのために、十分に活用されていない。オーバヘッドは、ホストプロセッサキャッシュに存在しないデータへのアクセスに関連するホストプロセッサのストールだけでなく、データ移動のような遅いメモリアクセス機能を実行するためにホストプロセッサのコアプロセッシング・モジュールを使用することによるコンピュータシステムにおけるボトルネックから、結果として生じうる。プロトコルスタックは、パケットが特定のプロトコルに従う場合においてネットワークに送信されたパケットを処理するために実行されうる、手順およびプログラムのセットを指す。例えば、ＴＣＰ／ＩＰ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）パケットは、ＴＣＰ／ＩＰスタックを使用して処理されうる。
【０００３】
オーバヘッドを削減する１つの方法は、プロトコルスタック処理の分割である。例えば、ＴＣＰ／ＩＰスタック処理は、ＴＣＰ／ＩＰオフロード・エンジン（以下「ＴＯＥ」と称する）に負担させてもよい。ＴＯＥでは、ＴＣＰ／ＩＰスタックの全体が、ＮＩＣ（ネットワーク・インタフェース・カード）のようなＩ／Ｏサブシステムの、ＭＡＣ（ｍｅｄｉａ  ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ）コンポーネントのようなネットワークコンポーネントに負担させてもよい。しかし、ＴＯＥは、接続に関するコンテキストの格納に関連するメモリを要件のために、多数の接続をサポートするための拡張性に乏しい場合がある。
【０００４】
本発明の実施形態は、参照数字が同様の要素を指す添付図面を本発明の実施例として使用することにより説明され、添付図面は本発明を限定するものではない。
【図面の簡単な説明】
【０００５】
【図１】ネットワークを示す図である。
【０００６】
【図２】一実施形態によるシステムを示す図である。
【０００７】
【図３】一実施形態による方法を示すフロー図である。
【０００８】
【図４】他の実施形態による方法を示すフロー図である。
【発明を実施するための最良の形態】
【０００９】
下記の例は、本発明を図示するために説明される。下記の例は、本発明の実施形態を限定することを意図しない。このため、実施例が詳細に説明される、または、実施例のリストが提供されるが、これらの実施例は、網羅的なものとして解釈されるべきではなく、本発明の実施形態を説明または図示された実施例に限定しない。
【００１０】
図１は、本発明の実施形態が動作しうるネットワーク１００を示す図である。ネットワーク１００は、各ノードが通信媒体１０４によって互いに通信可能となるように接続された、複数のノード１０２Ａから１０２Ｎを備えてもよい。本明細書では、「通信可能となるように接続された」コンポーネントは、有線（例：銅線）または無線（例：無線周波数）の手段によって互いに通信することができるコンポーネントを意味する。ノード１０２Ａから１０２Ｎは、１つ以上のパケットをエンコードしうる媒体１０４によって、１つ以上の信号のセットを送受信してもよい。
【００１１】
本明細書では、「パケット」は、少なくとも１つの送信者から少なくとも１つの受信者に送信される１つ以上の信号によってエンコードされた、１つ以上の記号および／または値のシーケンスを意味する。本明細書では、「通信媒体」は、電磁放射が送信および／または受信されうる物理的実体を意味する。通信媒体１０４は、例えば、１つ以上の光および／または電気ケーブルを含んでもよいが、多くの代替物が可能である。例えば、通信媒体１０４は、ノード１０２Ａから１０２Ｎが１つ以上の信号のセットを無線で送受信する際に信号が通過する、空気および／または真空を含んでもよい。
【００１２】
ネットワーク１００では、１つ以上のノード１０２Ａから１０２Ｎは、例えば、１つ以上のハブ、スイッチ、および／またはルータのような１つ以上の中間装置を含んでもよく、更にまたはあるいは、１つ以上のノード１０２Ａから１０２Ｎは、１つ以上の端末装置を含んでもよい。また、更にまたはあるいは、ネットワーク１００は、１つ以上の図示されない中間装置を含んでもよく、媒体１０４は、ノード１０２Ａから１０２Ｎのうちの少なくともいくつかとこれらの中間装置のうちの１つ以上とを互いに通信可能となるように接続してもよい。当然のことながら、多くの代替方法が可能である。
【００１３】
ノード１０２Ａから１０２Ｎのうちの少なくとも１つは、図２が示すように、システム２００を備えてもよい。システム２００は、ホストプロセッサ２０２、ホストメモリ２０４、バス２０６、およびチップセット２０８を備えてもよい。（システム２００は、１つ以上のホストプロセッサ２０２、ホストメモリ２０４、バス２０６、およびチップセット２０８、または、他のタイプのプロセッサ、メモリ、およびバスを有してもよいが、説明を簡潔にするために前者が説明される。そして、この説明は、本発明の実施形態を限定することを意図しない。）ホストプロセッサ２０２、ホストメモリ２０４、バス２０６、およびチップセット２０８は、例えば、システムマザーボード２１８のような１つの回路基板に含まれてもよい。
【００１４】
ホストプロセッサ２０２は、コアプロセッシング・モジュール、および、他のシステム要素をインタフェースで接続する他のサポートモジュールを備えてもよい。例えば、サポートモジュールは、システム２００上のメモリコントローラと通信する、バスユニットを含んでもよい。ホストプロセッサ２０２は、例えば、本願の出願人から商業的に入手可能なＩｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）マイクロプロセッサを含んでもよい。当然のことながら、あるいは、ホストプロセッサ２０２は、本発明の実施形態から逸脱することなく、例えば、本願の出願人以外のソースによって製造され、および／または、本願の出願人以外のソースから商業的に入手可能なマイクロプロセッサのような、他のタイプのマイクロプロセッサを含んでもよい。
【００１５】
ホストプロセッサ２０２は、チップセット２０８と通信可能となるように接続されてもよい。チップセット２０８は、ホストプロセッサ２０２とホストメモリ２０４とを互いに接続し、ホストプロセッサ２０２およびホストメモリ２０４をバス２０６に接続する、ホストブリッジ／ハブシステムを備えてもよい。チップセット２０８は、ホストブリッジ／バスシステムをバス２０６に接続しうるＩ／Ｏブリッジ／ハブシステム（図示されない）も含んでもよい。チップセット２０８は、本願の出願人から商業的に入手可能な集積回路チップセット（例：グラフィックスメモリおよびＩ／Ｏコントローラハブチップセット）から選択される集積回路チップのような、１つ以上の集積回路チップを含んでもよい。しかし、他の１つ以上の集積回路チップが使用されてもよく、これらが代わりに使用されてもよい。
【００１６】
バス２０６は、ＰＣＩ  Ｓｐｅｃｉａｌ  Ｉｎｔｅｒｅｓｔ  Ｇｒｏｕｐ，  Ｐｏｒｔｌａｎｄ，Ｏｒｅｇｏｎ，  Ｕ．Ｓ．Ａ．から入手可能なＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）Ｌｏｃａｌ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｒｅｖｉｓｉｏｎ  ２．２，  Ｄｅｃｅｍｂｅｒ  １８，  １９９８（以下、「ＰＣＩバス」と称する）に準拠するバスを含んでもよい。あるいは、バス１０６は、共に上述のＰＣＩ  Ｓｐｅｃｉａｌ  Ｉｎｔｅｒｅｓｔ  Ｇｒｏｕｐ，  Ｐｏｒｔｌａｎｄ，  Ｏｒｅｇｏｎ，  Ｕ．Ｓ．Ａ．から入手可能なＰＣＩ−Ｘ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖ．１．０ａ，  Ｊｕｌｙ  ２４，  ２０００（以下、「ＰＣＩ−Ｘバス」と称する）、または、"Ｔｈｅ ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂａｓｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｏｆ  ｔｈｅ ＰＣＩ  Ｓｐｅｃｉａｌ  Ｉｎｔｅｒｅｓｔ  Ｇｒｏｕｐ"，  Ｒｅｖｉｓｉｏｎ  １．０ａにおいて仕様が定められているＰＣＩ−Ｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖ．ＰＣＩ−Ｅ（以下、「ＰＣＩ−Ｅ  ｂｕｓ」と称する）に準拠するバスを含んでもよい。また、あるいは、バス１０６は、他のタイプのバスシステム、および、バスシステムの他の設定を含んでもよい。
【００１７】
システム２００は、更に、回路２１６を備えてもよい。回路２１６は、ＴＣＰ−Ａ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ  −  Ａｃｃｅｌｅｒａｔｅｄ）ドライバ２２２および／またはネットワークコンポーネント２１２によって実行されるような、本明細書で説明される１つ以上の操作を実行することを目的として、１つ以上の回路を有してもよい。回路２１６は、１つ以上の操作を実行するためにハード・ワイヤードされてもよく、および／または、これらの操作を実行するためにマシン実行可能命令群を実行してもよい。例えば、回路２１６は、これらの操作を実行するために回路２１６によって実行されうる、マシン実行可能命令群２２６を格納しうるメモリ２３６を備えてもよい。いくつかのまたは全ての回路２１６は、ホストプロセッサ２０２またはチップセット２０８内に含まれるのではなく、回路カード（図示されない）、および／または、他の構造、システム、および／または、例えば、マザーボード２１８に含まれ、および／またはバス２０６と通信可能となるように接続され、システム２００内の１つ以上の他のコンポーネントに対してデータ交換を行うおよび／またはコマンドを出すデバイスに含まれてもよい。回路２１６は、例えば、１つ以上のデジタル回路、１つ以上のアナログ回路、１つ以上のステートマシン、プログラム可能な回路、および／または１つ以上のＡＳＩＣ（特定用途向け集積回路）を備えてもよい。
【００１８】
システム２００は、実行されうるマシン実行可能命令群２２６、および／または、回路２１６のような回路によってアクセス、動作、および／または、操作されうるデータを格納するために、１つ以上のメモリを更に備えてもよい。例えば、これら１つ以上のメモリは、ホストメモリ２０４またはメモリ２３６を含んでもよい。１つ以上のメモリ２０４、２３６は、例えば、リードオンリー、大容量ストレージ、ランダム・アクセスのコンピュータ読み取り可能メモリ、および／または１つ以上の他のタイプのマシン読み取り可能なメモリを含んでもよい。回路２１６によるプログラム命令群２２６の実行、および／または、データへのアクセス、動作、および／または操作は、結果として、例えば、回路２１６に、システム２００の種々のハードウェアおよび／またはソフトウェアコンポーネントによって実行されるような、本明細書において説明されるいくつかのまたは／全ての動作を実行させる。
【００１９】
例えば、マシン実行可能命令群２２６は、アプリケーション２１８の命令セット、オペレーティングシステム２２０の命令セット、ＴＣＰ−Ａドライバ２２２の命令セット、および／またはＤＭＡドライバ２２４の命令セットを含んでもよい。一実施形態では、ホストプロセッサ２０２の回路２１６は、ＴＣＰ−Ａドライバ２２２、ＤＭＡドライバ２２４、およびオペレーティングシステム２２０のために、マシン実行可能命令群２２６を実行しうる。マシン実行可能命令群２２６は、ホストプロセッサ２０２内にあるような回路２１６、および／または一般的な回路２１６によって、メモリ内で実行されうる。
【００２０】
一実施形態による方法は、図２のシステム２００に関連して図３のフロー図に示される。方法は、ブロック３００から開始し、ネットワークコンポーネント２１２が、ネットワーク１００から１つ以上のパケット２２８（１つのみ図示される）が受信されたことを示すインジケーションを受け取る、ブロック３０２に進む。パケット２２８のそれぞれは、ヘッダ２３０およびペイロード２３２を含んでもよい。パケット２２８のそれぞれに対して、ネットワークコンポーネント２１２は、パケット２２８からヘッダ２３０およびペイロード２３２を分割し、ヘッダ２３０およびペイロード２３２を１つ以上のポストバッファ２１４Ａ、２１４Ｂに格納しうる。一実施形態では、ヘッダ２３０は、ポストバッファ２１４Ａのような第１のバッファに格納され、ペイロード２３２は、ポストバッファ２１４Ｂのような第２のバッファに格納される。１つ以上のパケット２２８は、１つ以上のグループに含まれ、パケット２２８の各グループは、接続によって送信および／または受信されうる。１つ以上のパケット２２８は、例えば、アプリケーション２１８からのデータ読み込み要求に応じて、受信されうる。
【００２１】
「アプリケーション」は、ネットワークを使用する１つ以上のプログラムを指す。アプリケーション２１８は、例えば、ウェブブラウザ、ｅｍａｉｌサーバ・アプリケーション、ファイルサーバ・アプリケーション、またはデータベース・アプリケーションを含んでもよい。データ読み込み要求と併せて、アプリケーション２１８は、アプリケーション２１８が要求したデータにアクセスする、あて先リードバッファ２１４Ｃを指定しうる。データ送信要求と併せて、アプリケーション２１８は、送信されるデータをソースバッファ２１４Ｄに書き込んでもよい。
【００２２】
「ネットワークコンポーネント」は、ネットワーク上で送信および／または受信される１つ以上のパケットを処理しうる、Ｉ／Ｏ（入力／出力）サブシステム上のハードウェアおよび／またはソフトウェアの全ての組み合わせを指す。一実施形態では、Ｉ／Ｏサブシステム２３８は、例えば、ＮＩＣ（ネットワーク・インタフェース・カード）を備え、ネットワークコンポーネント２１２は、例えば、ネットワーク・プロトコルについてＯｐｅｎ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ（ＯＳＩ）モデルにおいて定義されるような、データ・リンク・レイヤのＭＡＣ（メディア・アクセス・コントロール）レイヤを備えうる。ＯＳＩモデルは、１  ｒｕｅ  ｄｅ  Ｖａｒｅｍｂe，  Ｃａｓｅ  ｐｏｓｔａｌｅ  ５６  ＣＨ−１２１１  Ｇｅｎｅｖａ  ２０，  Ｓｗｉｔｚｅｒｌａｎｄに所在する国際標準化機構（ＩＳＯ）によって定義された。
【００２３】
本明細書で使用される「接続」は、ネットワーク上の第１のノードとネットワーク上の第２のノード間の通信を促進する、論理的な経路を指す。接続は、第１のノードと第２のノード間における、１つ以上のトランザクションの通信を促進しうる。「トランザクション」は、システム２００のようなシステム上の、アプリケーション２１８のようなアプリケーションによって開始されるような、データの送信または受信要求を指す。各接続は、プロトコル・コンテキストに関連付けられてもよい。本明細書では、「プロトコル・コンテキスト」は、接続に関する情報を指す。例えば、接続に関する情報は、最後に送信／受信されたパケットのシーケンス番号、および、使用可能なメモリ量を含んでもよい。
【００２４】
ブロック３０４において、ネットワークコンポーネント２１２は、１つ以上のパケット２２８が到着したことを、ＴＣＰ−Ａドライバに通知しうる。一実施形態では、ネットワークコンポーネント２１２は、割り込み管理スキームに従ってオペレーティングシステム２２０に通知することにより、ＴＣＰ−Ａドライバ２２２に通知しうる。割り込み管理スキームは、ｎパケット受信される毎に、ネットワークコンポーネント２１２によって割り込みがアサートされる条件を指す。このように、ネットワークコンポーネント２１２がｎ個以上のパケットを受信した場合、ネットワークコンポーネント２１２は、パケットが到着したことをオペレーティングシステム２２０に通知しうる。同様に、ネットワークコンポーネント２１２がｎ個以下のパケットを受信した場合、ネットワークコンポーネント２１２は、オペレーティングシステム２２０に通知する前に、より多くのパケットが受信されるのを待つ。一実施形態では、オペレーティングシステム２２０は、パケットが処理されうる状態にあることを、ＴＣＰ−Ａドライバ２２２に通知しうる。
【００２５】
ブロック３０６において、ＴＣＰ−Ａドライバ２２２は、１つ以上のパケットのうちの少なくとも１つに対して、パケット処理を実行しうる。パケット処理は、ＴＣＰ−Ａドライバ２２２によって実行され、ポストバッファ２１４Ａからヘッダ２３０を取り出し、現在の接続に関連するプロトコル・コンテキストを判定するためにヘッダ２３０を解析し、ＴＣＰプロトコルに準拠する処理を実行する。ＴＣＰプロトコルに準拠する処理は、例えば、受信されたパケットのシーケンス番号が通信ノード間で合意された数値範囲内にあることを保証するために受信されたパケットのシーケンス番号を確認すること、パケットが通信ノード間で合意されたサイズの範囲内にあることを保証するためにペイロードサイズを確認すること、ヘッダ構造がプロトコルに準拠することを保証すること、および、タイムスタンプが期待される時間間隔内にあることを保証することを含んでもよい。
【００２６】
ＴＣＰ−Ａドライバ２２２は、現在のヘッダの処理を完了する前に、次に処理するヘッダをフェッチしうる。これは、ＴＣＰ−Ａドライバ２２２が次のヘッダに対してＴＣＰ処理を実行する状態になる前に、次のヘッダがホストプロセッサのキャッシュ（図示されない）内において使用可能になることを保証し、それによって、ホストプロセッサのストールを削減する。方法は、ブロック３０８に進む。
【００２７】
一実施形態では、ＴＣＰ−Ａドライバ２２２は、更に、パケット処理を実行する前に、パケットに関連する接続が高速化されるべきかどうかを判定する。ＴＣＰ−Ａドライバ２２２は、選択された接続を高速化してもよい。選択される接続は、例えば、長期的な接続、または、大きなデータを含む接続を含んでもよい。ＴＣＰ−Ａドライバ２２２が、ネットワーク接続が高速化されるべきであると判定した場合、ＴＣＰ−Ａドライバ２２２は、ブロック３０６において、説明されたようにパケット処理を実行しうる。ＴＣＰ−Ａドライバ２２２が、ネットワーク接続が高速化されるべきではないと判定した場合、方法は、ブロック３１８に進む。
【００２８】
ブロック３０８において、ＴＣＰ−Ａドライバ２２２は、ポストバッファ２１４Ｂに格納された１つ以上のペイロード２３２が格納されうる状態であるかどうかを、判定しうる。ペイロード２３２は、例えば、対応するヘッダの処理が成功し、かつ、リードバッファ２１４Ｃのようなリードバッファが指定された場合に、格納されうる状態になってもよい。ブロック３０８において、ペイロード２３２が格納されうる状態にない場合は、方法は、ブロック３１０に進んでもよい。一実施形態では、ＴＣＰ−Ａドライバ２２２は、常に、１つ以上のペイロード２３２が格納されうる状態であるかどうかを判定しうる。例えば、ペイロード２３２が格納されうる状態ではないと判定された場合、ＴＣＰ−Ａドライバ２２２は、再度判定する前に、一定時間待機してもよい。リードバッファ２１４Ｃが存在しないためにペイロード２３２が格納されることができない場合は、例えば、ＴＣＰ−Ａドライバ２２２は、代わりにあるいは更に、格納されうる状態にあるペイロード２３２の存在をオペレーティングシステム２２０にいつでも通知してもよい。そして、オペレーティングシステム２２０は、そして、バッファを指定してもよい、または、アプリケーション２１８にバッファを指定するように要求してもよい。１つ以上のペイロードが格納されうる状態である場合は、方法はブロック３１２に進む。
【００２９】
ブロック３１０において、ＴＣＰ−Ａドライバ２２２は、現在の割り込みに対するｎ個のパケットの処理されるべきパケット２２８が、例えば、ポストバッファ２１４Ａ内に存在するかどうかを判定しうる。処理されるべきパケット２２８がまだ存在する場合は、方法は、ブロック３０６に戻る。パケット２２８がこれ以上存在せず、かつ、まだ格納されていない１つ以上のパケット２２８が格納されうる状態である場合、方法は、ブロック３１２に進む。処理されるべきパケット２２８がこれ以上存在せず、かつ、格納されるべき以前のパケット２２８が存在しない場合、方法は、ブロック３１４に進む。
【００３０】
ブロック３１２において、ＴＣＰ−Ａドライバ２２２は、データ移動モジュールに１つ以上の対応するペイロード２３２をリードバッファ２１４Ｃのようなリードバッファに格納させる、１つ以上の操作を実行しうる。本明細書で使用される「データ移動モジュール」は、ホストプロセッサ２０２のようなホストプロセッサのコアプロセッシング・モジュールを使用することなく、データをソースからデスティネーションに移動させるモジュールを指す。データ移動モジュールは、例えば、下記に説明されるようにＤＭＡエンジンを備えてもよい。
【００３１】
一実施形態では、例えば、ＴＣＰ−Ａドライバ２２２は、ＤＭＡドライバ２２４に要求を送信してもよく、ＤＭＡドライバ２２４は、ポストバッファ２１４Ｂからリードバッファ２１４Ｃに１つ以上のペイロード２３２を書き込ませるように、要求をＤＭＡエンジン２１０に対してスケジュールしうる。他の実施形態では、ＴＣＰ−Ａドライバ２２２は、ポストバッファ２１４Ｂからリードバッファ２１４Ｃに１つ以上のペイロード２３２を書き込ませるように、ＤＭＡエンジン２１０を直接プログラムしうる。ＤＭＡドライバ２２４は、スタンドアロンなドライバ、または、ＴＣＰ−Ａドライバ２２２のような他のドライバの一部であってもよい。ＤＭＡエンジン２１０は、チップセット２０８の一部ではなく、ホストプロセッサ２０２のサポートモジュールであってもよい。データの格納にＤＭＡエンジンを使用することによって、ホストプロセッサ２０２は、結果としてホストプロセッサ２０２がコアプロセッシング・モジュールの速度と比較して非常に遅いメモリの速度で実行することになる、データ移動の実行によるオーバヘッドから解放されうる。ＤＭＡエンジン２１０のスケジュール後に、処理されるべき追加のパケット２２８が存在するかどうかを判定することを目的として、方法は、ブロック３１０に戻ってもよい。
【００３２】
ブロック３１４において、ＴＣＰ−Ａドライバ２２２は、現在の割り込みに対するペンディングＤＭＡ完了が存在するかどうかを判定してもよい。あるいは、ＴＣＰ−Ａドライバ２２２は、いつでも、ＤＭＡ完了を確認してもよい。本明細書で使用される「ペンディング完了」は、要求の完了を指す。一実施形態では、ペンディング完了は、１つ以上のペイロード２３２を書き込ませるＤＭＡエンジン２１０に対する要求の完了を指す。ブロック３１４において、現在の割り込みに対して１つ以上のペンディングＤＭＡ完了がある場合は、方法は、ブロック３１６に進む。ブロック３１４において、現在の割り込みに対してペンディングＤＭＡ完了がない場合は、方法は、ブロック３１８に進む。
【００３３】
ブロック３１６において、ＴＣＰ−Ａドライバ２２２は他のタスクを実行しうる。他のタスクは、次の割り込みにおけるパケットを探すこと、現在の割り込みに対する最後のキューされたタスクの完了の際に割り込みを発行させるようにＤＭＡエンジン２１０を設定すること、データの送信のようなその他の処理、および、ＴＣＰタイマーに関連するタスクの実行を含んでもよい。
【００３４】
ブロック３１８において、ＴＣＰ−Ａドライバ２２２は、オペレーティングシステム２２０に制御を戻してもよい。１つ以上のパケット２２８がまだ処理されていない場合は、オペレーティングシステム２２０は、ＴＣＰ−Ａドライバ２２２ではなく、パケット処理を実行することによって、および、データ転送を実行するためにホストプロセッサ２０２のコアプロセッシング・モジュールを使用することによってＴＣＰスタック処理を実行するＴＣＰドライバ（図示されない）に通知してもよい。全てのパケット２２８が処理された場合、オペレーティングシステム２２０は、次の割り込みを待つ。
【００３５】
この方法は、ブロック３２０において、終了する。
【００３６】
他の実施形態による方法は、図４に示される。この方法は、ブロック４００から開始し、オペレーティングシステム２２０がバッファ２１４Ｄに格納されたデータ２３４を送信させる要求をアプリケーション２１８から受け取る、ブロック４０２に進む。オペレーティングシステム２２０は、データ２３４に対する予備検査を実行してもよい。予備検査は、例えば、関連するプロトコル・コンテキストの取得を含んでもよい。ＴＣＰ／ＩＰ接続では、例えば、プロトコル・コンテキストは、パケットの順番を特定するためのパケットシーケンス番号、データを格納するために使用されるバッファのバッファアドレス、および再送信を行うためのタイマー／タイムスタンプ情報を含んでもよい。
【００３７】
ブロック４０４において、オペレーティングシステム２２０は、バッファ２１４Ｄから送信されるべきデータ２３４が存在することを、ＴＣＰ−Ａドライバ２２２に通知しうる。
【００３８】
ブロック４０６において、ＴＣＰ−Ａドライバ２２２は、結果としてデータ２３４がネットワークコンポーネント２１２に送信されることになる、１つ以上の操作を実行しうる。例えば、これらの１つ以上の操作は、ソースバッファ２１４Ｄからネットワークコンポーネント２１２にデータ２３４を送信させるように、ＴＣＰ−Ａドライバ２２２が、ＤＭＡエンジン２１０をプログラミングすることを含んでもよい。あるいは、ＴＣＰ−Ａドライバ２２２は、ネットワークコンポーネント２１２がキューバッファ２１４Ｅからデータ２３４を読み取る場合、キューバッファ２１４Ｅのように、ネットワークコンポーネント２１２にバッファをキューしてもよい。ソースバッファ２１４Ｄは、例えば、アプリケーション２１８によって指定されてもよく、キューバッファ２１４Ｅは、例えば、ネットワークコンポーネント２１２によって指定されてもよい。
【００３９】
一実施形態では、ＴＣＰ−Ａドライバ２２２は、データが小さい場合は、データを送信するためにＤＭＡエンジン２１０をプログラムしてもよく、ＴＣＰ−Ａドライバ２２２は、データが大きい場合は、キューバッファ２１４Ｅのように、バッファをキューしてもよい。本明細書で使用される「バッファをキューする」は、データにアクセスできるバッファが存在することを、コンポーネントに通知することを意味する。例えば、パケットの受信を確認するＴＣＰ確認パケットは、概して、比較的小さいサイズのパケットであってもよく、また、ＴＣＰ−Ａドライバ２２２によってネットワークコンポーネント２１２に送信されてもよく、データ２３４を送信するためにＴＣＰ−Ａドライバ２２２によってＤＭＡエンジン２１０をプログラムしてもよい。他の例では、大きなファイルをネットワークに送信するストレージアプリケーションのパケットは、比較的大きくてもよく、このため、バッファ２１４Ｅをキューすることによって、ＴＣＰ−Ａドライバ２２２によってネットワークコンポーネント２１２に送信されてもよい。
【００４０】
ブロック４０８において、データを受信したことに応じて、ネットワークコンポーネント２１２は、データをパケット化することによって、送信するために１つ以上のパケットを作成しうる。一実施形態では、ネットワークコンポーネント２１２は、データの分割を行うことによって、データをパケット化してもよい。「分割」は、送信することを目的として、データを小さい断片に分けることを指す。一実施形態では、データ２３４をネットワークに送信するためにＭＡＣフレームが作られる場合、ネットワークコンポーネント２１２は、ＭＡＣを備えてもよく、分割は、ｌａｒｇｅ  ｓｅｎｄ  ｏｆｆｌｏａｄと呼ばれてもよい。ネットワークコンポーネント２１２は、データをＴＣＰ−Ａドライバ２２２から直接してもよく、キューバッファ２１４Ｅにアクセスすることによってデータを受信してもよい。
【００４１】
方法は、ブロック４１０において、終了する。その後、オペレーティングシステム２２０は、完了通知をアプリケーション２１８に送信してもよい。更に、ソースバッファ２１４Ｄは、アプリケーション２１８に返還されてもよく、アプリケーションは、そのバッファを他の目的に使用してもよい。
【００４２】
本発明の実施形態は、例えば、コンピュータ、コンピュータのネットワーク、または他の電子デバイスのような１つ以上のマシンによって実行された場合、結果的として１つ以上のマシンに本発明の実施形態による動作を実行させるマシン実行可能命令群が格納された、１つ以上のマシン読み取り可能なメディアを含む、コンピュータプログラム製品として提供されてもよい。マシン読み取り可能な媒体は、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ（コンパクト・リード・オンリー・メモリ）、磁気光ディスク、ＲＯＭ（リード・オンリー・メモリ）、ＲＡＭ（ランダム・アクセス・メモリ）、ＥＰＲＯＭ（消去可能プログラマブル・リード・オンリー・メモリ）、ＥＥＰＲＯＭ（電気的消去可能リード・オンリー・メモリ）、磁気または光カード、フラッシュメモリ、またはマシン実行可能な命令群の格納に適したその他のタイプのメディア／マシン読み取り可能な媒体などを含み、しかし、これらに限定されない。
【００４３】
更に、本発明の実施形態は、通信リンク（例：モデムおよび／またはネットワーク接続）による搬送波または他の伝播媒体に埋め込まれた、および／または、変調された１つ以上のデータ信号によって、リモートコンピュータ（例：サーバ）から要求側コンピュータ（例：クライアント）に転送されるコンピュータプログラム製品として、ダウンロードされてもよい。従って、本明細書で使用されるマシン読み取り可能な媒体は、そのような搬送波を含んでもよいが、必要とはしない。
結論
【００４４】
このように、一実施形態では、方法は、ネットワークから１つ以上のパケットが受信されたことを示すネットワークコンポーネントのインジケーションを受け取ることと、ネットワークコンポーネントが１つ以上のパケットが到着したことをＴＣＰ−Ａ（ｔｒａｎｓｐｏｒｔ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ  −  ａｃｃｅｌｅｒａｔｅｄ）ドライバに通知することと、ＴＣＰ−Ａドライバが１つ以上のパケットのうちの少なくとも１つに対してパケット処理を実行することと、ＴＣＰ−Ａドライバが、データ移動モジュールにより１つ以上のパケットのうちの少なくとも１つに対応する１つ以上のペイロードをリードバッファに格納させる、１つ以上の動作を実行することを備えてもよい。
【００４５】
本発明の実施形態は、ホストプロセッサのコアプロセッシング・モジュールを使用することにより生じうる、ＴＣＰ／ＩＰ処理のオーバヘッドを大きく削減しうる。ＴＣＰ／ＩＰ処理は、データを１つのバッファから他のバッファに移動するためにＤＭＡエンジンのようなデータ移動モジュールを使用することによって、高速化されうる。ＤＭＡエンジンを使用することによってホストプロセッサのコアプロセッシング・モジュールがバイパスされうるので、遅いメモリアクセスの速度が回避されうる。更に、ホストプロセッサ上で実行されるＴＣＰ／ＩＰ処理は、ＴＯＥメモリによってコンテキスト数が制限されないので、ＴＯＥ処理よりも拡張性に優れる。
【００４６】
上述の明細書において、本発明は、本発明の特定の実施形態を参照して説明された。しかし、本発明の範囲から逸れることなく、これらの実施形態に対して種々の修正または変更がなされうることは明白である。従って、本明細書および図面は、本発明を限定するものではなく、本発明を説明するものであると理解されるべきである。
【図１】
2007528074.tif 000003
【図２】
2007528074.tif 000004
【図３】
2007528074.tif 000005
【図４】
2007528074.tif 000006
【国際調査報告】
2007528074.tif 000007
2007528074.tif 000008
2007528074.tif 000009