JP2008507030A - ネットワーク・プロトコル処理のオフロードにおいてメモリ管理をサポートする装置および方法 - Google Patents

ネットワーク・プロトコル処理のオフロードにおいてメモリ管理をサポートする装置および方法 Download PDF

Info

Publication number
JP2008507030A
JP2008507030A JP2007521465A JP2007521465A JP2008507030A JP 2008507030 A JP2008507030 A JP 2008507030A JP 2007521465 A JP2007521465 A JP 2007521465A JP 2007521465 A JP2007521465 A JP 2007521465A JP 2008507030 A JP2008507030 A JP 2008507030A
Authority
JP
Japan
Prior art keywords
buffer
data
network adapter
host system
descriptor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007521465A
Other languages
English (en)
Other versions
JP2008507030A5 (ja
JP4886685B2 (ja
Inventor
フレイムス、ダグラス、エム
フー、エルバート、ヴィー
ムラズ、ロナルド
ナハム、エリック、エム
プラダン、プラサント
サフー、サンビット
トレーシー、ジョン、エム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2008507030A publication Critical patent/JP2008507030A/ja
Publication of JP2008507030A5 publication Critical patent/JP2008507030A5/ja
Application granted granted Critical
Publication of JP4886685B2 publication Critical patent/JP4886685B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • G06F13/30Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal with priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Systems (AREA)
  • Communication Control (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】ホスト・プロセッサからプロトコル処理をオフロードするネットワーク・アダプタ内の複数の改善を提供すること。
【解決手段】具体的に言うと、オフロード・ネットワーク・アダプタを利用するシステム内でメモリ管理および最適化を処理する機構を提供する。このメモリ管理機構は、バッファリングされた送信およびバッファリングされた受信とゼロ・コピー送信およびゼロ・コピー受信の両方を可能にする。さらに、このメモリ管理機構は、任意の個数の属性に基づいて指定された接続の間で共用できるDMAバッファのグループ化を可能にする。このメモリ管理機構は、さらに、部分的送信バッファ動作および部分的受信バッファ動作、DMA要求をバルクでホスト・システムに通信できるようにするためのDMA要求の遅延、およびホスト・システムへのデータの優先転送を可能にする。
【選択図】図4

Description

本発明は、全般的には改善されたデータ処理システムに関する。より具体的には、本発明は、オフロード・ネットワーク・アダプタ内のメモリ管理動作をサポートする方法および装置を対象とする。
既知のシステムでは、オペレーティング・システムは、バッファの2つのキューを有するネットワーク・インターフェースを提供することによって、データ転送だけに関して普通のネットワーク・インターフェースと通信する。バッファの第1のキューは、送信のために読み取られるホスト・メモリ内のできあいのデータ・パケットをポイントする記述子からなる。バッファの第2のキューは、処理のために受信されたホスト・メモリ内の未処理のデータ・パケットを書き込まれたバッファをポイントする記述子を含む。ネットワーク・インターフェースは、キューが物理メモリ内のどこにあるかをネットワーク・インターフェースに知らせるメモリ・マップド入出力インターフェースを提供し、データ・パケットが到着した時にどの割込みを生成すべきかなど、一部の制御情報用のインターフェースを提供する。
普通のネットワーク・インターフェースのネットワーク・プロトコル処理は、完全にホスト内で実行され、データ・パケットだけが送信のためにネットワーク・アダプタに供給される。しかし、ネットワーク・リンク速度は、マイクロプロセッサ性能の向上よりすばやく向上してきた。その結果、ホスト・プロセッサは、大量のTCP/IPプロトコル処理、順序はずれのデータ・パケットの再組立、リソース集中型のメモリ・コピー、および割込みという重荷を負うようになる。一部の高速ネットワークでは、ホスト・プロセッサは、それが実行しているアプリケーションよりも多くの処理をネットワーク・トラフィック処理に捧げなければならない。したがって、データ・パケットは、ホスト内で、ネットワーク速度より低い速度で処理される。
この問題に対処するために、最近は、TCP/IPプロトコルの処理をホスト・プロセッサからネットワーク・アダプタ上のハードウェアにオフロードすることが強調されてきた。そのようなネットワーク・アダプタは、時々インテリジェント・ネットワーク・アダプタまたはTCP/IPオフロード・エンジン(TOE)と呼ばれるが、ネットワーク・プロセッサおよびファームウェア、特殊化されたASIC、またはこの両方の組合せを用いて実施することができる。これらのネットワーク・アダプタは、アプリケーション性能が高まるようにホスト・プロセッサ処理をオフロードするだけではなく、iSCSIストレージ・エリア・ネットワーク(SAN)応用例および高性能ネットワーク接続ストレージ(NAS)応用例など、新しいタイプのネットワークおよびデバイスとの通信も可能にする。
米国特許出願第10/891196号(整理番号YOR920040146US1) 米国特許出願第10/890710号(整理番号YOR920040147US1)
これらのネットワーク・アダプタは、データ・パケットのTCP/IPプロトコル処理をオフロードするが、ネットワーク上の通信に必要な処理の多くが、まだホスト・システム内で維持されている。たとえば、ホスト・システムは、それでも、接続を確立し、確立された接続のそれぞれの状態情報を維持し、メモリ管理を処理するなどの責任を負う。したがって、ホスト・システムは、まだ、ホスト・システム内で実行されなければならないこれらの動作に起因して、さらに、ホスト・システム内でこれらの動作を実行するためにホスト・システムとネットワーク・アダプタとの間で必要な通信の量に起因して、プロセッサ負荷を経験する。したがって、ホスト・システムに対する処理負荷が最小にされ、より多くの処理がネットワーク・アダプタ内で実行されるようにネットワーク・アダプタの動作を改善する装置および方法を有することが有益であろう。
本発明は、以下ではオフロード・ネットワーク・アダプタと称する、ホスト・プロセッサからプロトコル処理をオフロードするネットワーク・アダプタでの複数の改善を提供する。具体的に言うと、本発明は、オフロード・ネットワーク・アダプタを利用するシステム内でメモリ管理および最適化を処理する機構を提供する。さらに、本発明は、オフロード・ネットワーク・アダプタを利用するシステム内での接続確立を改善する機構を提供する。さらに、本発明は、オフロード・ネットワーク・アダプタを利用するシステム内でデータ・パケットの受信を処理する改善された機構を提供する。
本発明の一態様は、接続確立と接続状態情報の維持とをオフロード・ネットワーク・アダプタにオフロードする能力である。接続確立および状態情報維持のこのオフロードの結果として、ホスト・システムとオフロード・ネットワーク・アダプタとの間で必要な通信の数を減らすことができる。さらに、オフロード・ネットワーク・アダプタにこれらの機能をオフロードすることによって、既知のコンピューティング・システムに存在する断片的な通知ではなく、確立された接続および状態情報のホスト・システムへのバルク通知が可能になる。
接続確立のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでのメモリ管理を改善する。本発明によるメモリ管理は、データのバッファリングされた送信およびバッファリングされた受信と、データのゼロ・コピー送信およびゼロ・コピー受信との両方を可能にする。さらに、本発明は、任意の個数の属性に基づいて指定された接続の間で共用できるDMAバッファのグループ化を可能にする。本発明は、さらに、部分的送信バッファ動作および部分的受信バッファ動作、DMA要求をバルクでホスト・システムに通信できるようにするためのDMA要求の遅延、およびホスト・システムへのデータの優先転送の機構を可能にする。
接続確立およびメモリ管理のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでの受信データの処理を改善する。本発明のオフロード・ネットワーク・アダプタに、そのオフロード・ネットワーク・アダプタがホスト・システムへのデータ受信の通知を異なる形で遅延させることを可能にする論理を含めることができる。ホスト・システムへのデータ・パケット受信の通知を遅延させることの利点は、最初のパケットの直後に到着する可能性がある複数のデータ・パケットを、たとえば単一の通知に集約する可能性である。連続的なデータ・パケット到着を有するストリームを与えられて、値を、通知遅延についてセットすることができ、この値を、通信ソケットごとにホスト・システムについて構成することができる。
本発明の上記および他の特徴および利点は、好ましい実施形態の次の詳細な説明で説明され、あるいは、その説明に鑑みて当業者に明白になる。
本発明の特徴を表すと思われる新規の特徴を、添付の特許請求の範囲に示す。しかし、本発明自体ならびに本発明の使用の好ましい態様、さらなる目的、および利点は、添付図面と共に読まれる時に、例示的実施形態の次の詳細な説明への参照によって最もよく理解されるであろう。
本発明は、オフロード・ネットワーク・アダプタすなわち、ネットワーク・プロトコル処理の一部またはすべてを実行し、したがって処理をホストからオフロードするネットワーク・アダプタの動作を改善する装置および方法を対象とする。本発明は、オフロード・ネットワーク・アダプタに関するので、本発明は、1つまたは複数のネットワークを有する分散データ処理システムと共に使用するのに特に適する。図1〜3は、本発明の諸態様を実施できるそのような分散データ処理環境の例として提供される。図1〜3が、例示的であるのみであり、これらの例示的環境に対する多数の修正を、本発明の趣旨および範囲から逸脱せずに行えることを諒解されたい。
ここで図面を参照すると、図1には、本発明を実施できるデータ処理システムのネットワークの絵図表現が示されている。ネットワーク・データ処理システム100は、本発明を実施できるコンピュータのネットワークである。ネットワーク・データ処理システム100には、ネットワーク102が含まれ、ネットワーク102は、ネットワーク・データ処理システム100内で一緒に接続されたさまざまなデバイスおよびコンピュータの間の通信リンクを提供するのに使用される媒体である。ネットワーク102には、ワイヤ、無線通信リンク、または光ファイバ・ケーブルなどの接続を含めることができる。
図示の例では、サーバ104は、ストレージ・ユニット106と共にネットワーク102に接続される。さらに、クライアント108、110、および112が、ネットワーク102に接続される。これらのクライアント108、110、および112は、たとえば、パーソナル・コンピュータまたはネットワーク・コンピュータとすることができる。図示の例では、サーバ104は、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータをクライアント108〜112に供給する。クライアント108、110、および112は、サーバ104に対するクライアントである。ネットワーク・データ処理システム100には、図示されていない追加のサーバ、クライアント、および他のデバイスを含めることができる。図示の例では、ネットワーク・データ処理システム100は、互いに通信するのに伝送制御プロトコル/インターネット・プロトコル(TCP/IP)プロトコル・スイートを使用するネットワークおよびゲートウェイの全世界の集合を表す、ネットワーク102を伴うインターネットである。インターネットの心臓部には、データおよびメッセージをルーティングする数千台の商用コンピュータ・システム、政府コンピュータ・システム、教育コンピュータ・システム、および他のコンピュータ・システムからなる主要なノードまたはホスト・コンピュータの間の高速データ通信リンクのバックボーンがある。もちろん、ネットワーク・データ処理システム100を、たとえばイントラネット、ローカル・エリア・ネットワーク(LAN)、または広域ネットワーク(WAN)など、複数の異なるタイプのネットワークとして実施することもできる。図1は、例として意図されており、本発明のアーキテクチャ的限定として意図されてはいない。
図2を参照すると、図1のサーバ104などのサーバとして実施できるデータ処理システムのブロック図が、本発明の好ましい実施形態に従って示されている。データ処理システム200は、システム・バス206に接続された複数のプロセッサ202および204を含む対称型マルチプロセッサ(SMP)システムとすることができる。その代わりに、単一プロセッサ・システムを使用することができる。システム・バス206には、メモリ・コントローラ/キャッシュ208も接続され、メモリ・コントローラ/キャッシュ208は、ローカル・メモリ209へのインターフェースを提供する。入出力バス・ブリッジ210は、システム・バス206に接続され、入出力バス212へのインターフェースを提供する。メモリ・コントローラ/キャッシュ208および入出力バス・ブリッジ210を、図示のように一体化することができる。
入出力バス212に接続されたPeripheral component interconnect(PCI)バス・ブリッジ214は、PCIローカル・バス216へのインターフェースを提供する。複数のモデムを、PCIローカル・バス216に接続することができる。通常のPCIバス実装は、4つのPCI拡張スロットまたはアドイン・コネクタをサポートする。図1のクライアント108〜112への通信リンクは、アドイン・コネクタを介してPCIローカル・バス216に接続されたモデム218およびネットワーク・アダプタ220を介して提供することができる。
追加のPCIバス・ブリッジ222および224は、追加のPCIローカル・バス226および228のインターフェースを提供し、PCIローカル・バス226および228から、追加のモデムまたはネットワーク・アダプタをサポートすることができる。この形では、データ処理システム200は、複数のネットワーク・コンピュータへの接続を可能にする。メモリ・マップド・グラフィックス・アダプタ230およびハード・ディスク232も、直接または間接のいずれかで、図示のように入出力バス212に接続することができる。
当業者は、図2に示されたハードウェアを変更できることを諒解するであろう。たとえば、光ディスク・ドライブおよび類似物などの他の周辺デバイスも、図示のハードウェアに加えてまたはその代わりに使用することができる。図示の例は、本発明に関するアーキテクチャ的限定を暗示することを意図されたものではない。
図2に示されたデータ処理システムは、たとえば、拡張対話式エグゼクティブ(AIX)(R)オペレーティング・システムまたはLINUX(R)オペレーティング・システムを走行させる、米国ニューヨーク州アーモンクのInternational Business Machines Corporation社の製品であるIBM eServer pSeries(R)システムとすることができる。
次に図3を参照すると、本発明を実施できるデータ処理システムを示すブロック図が示されている。データ処理システム300は、クライアント・コンピュータの例である。データ処理システム300は、peripheral component interconnect(PCI)ローカル・バス・アーキテクチャを使用する。図示の例は、PCIバスを使用するが、Accelerated Graphics Port(AGP)およびIndustry Standard Architecture(ISA)などの他のバス・アーキテクチャを使用することができる。プロセッサ302およびメイン・メモリ304は、PCIブリッジ308を介してPCIローカル・バス306に接続される。PCIブリッジ308には、プロセッサ302用の一体化されたメモリ・コントローラおよびキャッシュ・メモリを含めることもできる。PCIローカル・バス306への追加の接続を、直接構成要素相互接続を介してまたはアドイン・ボードを介して行うことができる。図示の例では、ローカル・エリア・ネットワーク(LAN)アダプタ310、Small computer system interface(SCSI)ホスト・バス・アダプタ312、および拡張バス・インターフェース314が、直接構成要素相互接続によってPCIローカル・バス306に接続される。対照的に、オーディオ・アダプタ316、グラフィックス・アダプタ318、およびオーディオ/ビデオ・アダプタ319は、拡張スロットに挿入されるアドイン・ボードによってPCIローカル・バス306に接続される。拡張バス・インターフェース314は、キーボードおよびマウス・アダプタ320、モデム322、および追加メモリ324の接続を提供する。SCSIホスト・バス・アダプタ312は、ハード・ディスク・ドライブ326、テープ・ドライブ328、およびCD−ROMドライブ330の接続を提供する。通常のPCIローカル・バス実装は、3つまたは4つのPCI拡張スロットまたはアドイン・コネクタをサポートする。
オペレーティング・システムは、プロセッサ302上で稼動し、図3のデータ処理システム300内のさまざまな構成要素を調整し、その制御を提供するのに使用される。オペレーティング・システムは、Microsoft Corporation社から入手できるWindows(R) XP(R)などの市販オペレーティング・システムとすることができる。Java(R)などのオブジェクト指向プログラミング・システムが、オペレーティング・システムとあいまって稼動し、データ処理システム300上で実行されるJava(R)プログラムまたはJava(R)アプリケーションからオペレーティング・システムへの呼出しを提供することができる。「Java(R)」は、Sun Microsystems,Inc.社の商標である。オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムの命令は、ハード・ディスク・ドライブ326などのストレージ・デバイスに置かれ、プロセッサ302による実行のためにメイン・メモリ304にロードすることができる。
当業者は、図3のハードウェアを実装に応じて変更できることを諒解するであろう。フラッシュ読取専用メモリ(ROM)、同等の不揮発性メモリ、または光ディスク・ドライブおよび類似物などの他の内蔵ハードウェアまたは周辺デバイスを、図3に示されたハードウェアに加えてまたはその代わりに使用することができる。また、本発明のプロセスを、マルチプロセッサ・データ処理システムに適用することができる。
もう1つの例として、データ処理システム300を、あるタイプのネットワーク通信インターフェースに頼らずにブート可能になるように構成された独立型システムとすることができる。もう1つの例として、データ処理システム300を、携帯情報端末(PDA)デバイスとすることができ、このPDAは、オペレーティング・システム・ファイルまたはユーザ生成データあるいはその両方を保管する不揮発性メモリを提供するためにROMまたはフラッシュROMあるいはその両方を用いて構成される。
図3に示された例および上で説明した例は、アーキテクチャ的限定を暗示することを意図されたものではない。たとえば、データ処理システム300を、PDAの形をとることの他に、ノートブック・コンピュータまたはハンド・ヘルド・コンピュータとすることもできる。データ処理システム300を、キオスクまたはウェブ・アプライアンスとすることもできる。
次に図4に移ると、本発明の好ましい実施形態によるネットワーク・アダプタの図が示されている。ネットワーク・アダプタ400は、図2のネットワーク・アダプタ220、図3のLANアダプタ310などとして実施することができる。図示のように、ネットワーク・アダプタ400には、イーサネット(R)・インターフェース402、データ・バッファ404、およびPCIバス・インターフェース406が含まれる。これらの3つの構成要素は、ネットワークとデータ処理システムのバスとの間の経路を提供する。イーサネット(R)・インターフェース402は、データ処理システムに接続されたネットワークへのインターフェースを提供する。PCIバス・インターフェース406は、PCIローカル・バス216または306などのバスへのインターフェースを提供する。データ・バッファ404は、ネットワーク・アダプタ400を介して送信され、受信されるデータを保管するのに使用される。このデータ・バッファには、追加ストレージを提供するSRAMインターフェースへの接続も含まれる。
ネットワーク・アダプタ400には、電気的消去可能プログラム可能読取専用メモリ(EEPROM)インターフェース408、レジスタ/構成/状況/制御ユニット410、発振器412、および制御ユニット414も含まれる。EEPROMインターフェース408は、EEPROMチップへのインターフェースを提供し、このEEPROMチップには、ネットワーク・アダプタ400の命令および他の構成情報を含めることができる。異なるパラメータおよびセッティングを、EEPROMインターフェース408を介してEEPROMチップに保管することができる。レジスタ/構成/状況/制御ユニット410は、ネットワーク・アダプタ400上のプロセスを構成し、実行するのに使用される情報を保管する場所を提供する。たとえば、タイマのタイマ値を、これらのレジスタに保管することができる。さらに、異なるプロセスの状況情報を、このユニット内に保管することもできる。発振器412は、ネットワーク・アダプタ400上でプロセスを実行するためのクロック信号を供給する。
制御ユニット414は、ネットワーク・アダプタ400によって実行される異なるプロセスおよび機能を制御する。制御ユニット414は、さまざまな形をとることができる。たとえば、制御ユニット414を、プロセッサまたは特定用途向け集積チップ(ASIC)とすることができる。これらの例では、データのフロー制御を管理するのに使用される本発明のプロセスが、制御ユニット414によって実行される。プロセッサとして実施される場合に、これらのプロセスの命令を、EEPROMインターフェース408を介して、関連するチップに保管することができる。
データは、イーサネット(R)・インターフェース402を介して受信動作で受信される。このデータは、PCIバス・インターフェース406を介するデータ処理システムへの転送のためにデータ・バッファ404に保管される。逆に、データは、PCIバス・インターフェース406を介して送信のためにホスト・システムから受け取られ、データ・バッファ404に保管される。
普通のデータ処理システムでは、ネットワーク・アダプタを介してホストに/から送られるデータの処理は、そのホスト・システム内で実行される。図5に、TCP/IPプロトコル・スタック内でのデータ・パケットの普通の処理が実行される形を示す。図5に示されているように、アプリケーション510は、オペレーティング・システム520およびネットワーク・アダプタ530を介してデータを送信し、受信する。TCP/IPプロトコル・スタックを介するデータの処理は、送信のためにフォーマットされたデータ・パケットを生成し、またはデータ・パケット内のデータを抽出し、適当なアプリケーション510にルーティングするのいずれかのためにTCP/IPプロトコル処理を実行するオペレーティング・システム520を用いて実行される。これらの動作は、ホスト・システム上でソフトウェアで実行される。
フォーマットされたデータ・パケットは、ネットワーク・アダプタ530を介してハードウェアで送信/受信される。ネットワーク・アダプタ530は、メディア・アクセス制御層および物理層からのデータ・パケットを操作する。メディア・アクセス制御層は、ネットワーク上の物理伝送媒体へのアクセスを制御するサービスである。MAC層機能性は、ネットワーク・アダプタに組み込まれ、各ネットワーク・アダプタを識別する一意の通し番号を含む。物理層は、ネットワーク媒体上のビットの伝送に関するサービスを提供する層である。
図5に示されているように、普通のネットワーク・インターフェースでは、データがネットワークを介してホスト・システムから送信される時に、そのデータは、まず、ユーザ空間内のアプリケーション・バッファ540から、ピン止めされたカーネル・バッファ550にコピーされ、ネットワーク・アダプタ・キュー560内のエントリが、送信のためにそのデータをネットワーク・アダプタ530にキューイングするために生成される。データが、ホスト・システム上のアプリケーション510のためにネットワークから受信される時には、そのデータ・パケットが、ダイレクト・メモリ・アクセス(DMA)動作を使用してカーネル・バッファ550に書き込まれる。次に、このデータは、後に、アプリケーションがreceive()を呼び出す時に、ホストによってアプリケーション・バッファ540にコピーされる。
図6に、オフロード・ネットワーク・アダプタがTCP/IPプロトコル・スタックでデータ・パケットを処理する形を示す。図6に示されているように、普通はホスト・システムのオペレーティング・システム620内で実行されるTCPおよびIPの処理が、移動され、その結果、オフロード・ネットワーク・アダプタ630内で実行されるようになる。その結果、ホスト・システムによって実行される処理が減らされ、アプリケーション610をより効率的に実行できるようになる。
既知のオフロード・ネットワーク・アダプタを用いると、上で図5に関して説明したバッファリングされた送信およびバッファリングされた受信は、TCP/IPスタックの処理がオフロード・ネットワーク・アダプタ630にシフトされた場合であっても、まだ必要である。すなわち、図6に示されているように、ホスト・システムからデータ・パケットを送信するために、データは、まず、ユーザ空間内のアプリケーション・バッファ640からカーネル・バッファ650にコピーされ、ここで、ネットワーク・アダプタによる処理のためにネットワーク・アダプタ・キュー660内にキューイングされる。同様に、受信されたデータ・パケットについて、そのデータは、カーネル・バッファ650にDMA転送され、後に、ユーザ空間内のアプリケーション・バッファ640にコピーされる。
したがって、上の普通の場合と同様に、既知のオフロード・ネットワーク・アダプタでは、まだ、ユーザ空間のアプリケーション・バッファ640とカーネル空間のカーネル・バッファ650との間でデータをコピーする必要がある。そのようなコピー動作は、受信または送信されるすべてのデータ・パケットについて、ホスト・システム内で実行されなければならない。そのようなコピー動作に関連するオーバーヘッドは、アプリケーションを実行するためのホスト・プロセッサの可用性を減らす。
さらに、データ・パケットのTCP/IPプロトコル処理を、オフロード・ネットワーク・アダプタ630にオフロードすることができるが、実際の接続確立および確立された接続ごとの状態情報の維持は、それでも、ホスト・システム、たとえばオペレーティング・システム620の責任である。すなわち、ホスト・システムは、まだ、アウトバウンド接続およびインバウンド接続を確立するのに必要な動作を実行しなければならない。さらに、ホストは、接続ごとにホスト・システム内に保管される状態情報を維持できるようにするために、各接続の状態が変化した時にネットワーク・アダプタとメッセージを交換しなければならない。
その結果、ホスト・システムからネットワーク・アダプタへのTCP/IPプロトコル処理のオフロードは、コンピューティング・システムの性能を改善してきたが、そのようなオフロード・ネットワーク・アダプタ・システムでメモリが管理される形を改善することと、接続確立がオフロードされ、ホストとネットワーク・アダプタとの間のメッセージングが最小限になるように接続が確立される形を改善することとによって、追加の改善を得ることができる。さらに、ネットワーク・アダプタとホスト・システムとの間の相互作用が最小にされるようにデータがオフロード・ネットワーク・アダプタで受信される形を改善することによって、ネットワーク・アダプタの動作の改善を得ることができる。
本発明は、ホスト・システムとネットワーク・アダプタとの間の相互作用が最小にされるようにオフロード・ネットワーク・アダプタの動作を改善する機構を提供する。本発明は、ホスト・システムのオペレーティング・システムとオフロード・ネットワーク・アダプタとの間の改善されたインターフェースを提供する。このインターフェースには、制御部分とデータ部分とが含まれる。このインターフェースは、このインターフェースの制御部分とデータ部分の両方を含む明示的データ構造と共に使用されるバッファのキューを利用する。このインターフェースの制御部分は、ホスト・システムがオフロード・ネットワーク・アダプタに指示することを可能にし、オフロード・ネットワーク・アダプタがホスト・システムに指示することを可能にする。たとえば、ホスト・システムは、どのポート番号をリスンするかについてネットワーク・インターフェースに指示することができ、オフロード・ネットワーク・アダプタは、新しい接続の確立、データの受信などについてホスト・システムに指示することができる。このインターフェースのデータ部分は、送信用と受信用の両方の、確立された接続でのデータの転送の機構を提供する。このインターフェースの制御部分は、接続を制御する普通のソケット・アプリケーション・プログラミング・インターフェース(API)、たとえば、socket()、bind()、listen()、connect()、accept()、setsockopt()などを使用することによって呼び出すことができる。このインターフェースのデータ部分は、データの送信または受信に関するソケットAPI、たとえば、send()、sendto()、write()、writev()、read()、readv()などによって呼び出すことができる。
図7は、本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを使用するホスト・システムとオフロード・ネットワーク・アダプタとの間の通信を示す例示的な図である。オフロード・ネットワーク・アダプタ・プログラミング・インターフェースは、主にダイレクト・メモリ・アクセス(DMA)動作または複数のDMAに基づく、ホスト・システム上の入出力アクセス可能メモリの予約済み部分に要求記述子および応答記述子を書き込み、読み取るための、ホスト・システムとオフロード・ネットワーク・アダプタとの間の通信インターフェースを提供する。
図7に示されているように、ホスト・システム710は、オフロード・ネットワーク・アダプタ730へまたはこれからのいずれかのデータ転送の要求を実行依頼し、オフロード・ネットワーク・アダプタ730は、その要求の成功または失敗の通知によって応答する。要求および応答は、要求記述子および応答記述子と呼ばれるデータ構造にパッケージ化される。これらの記述子は、ホスト・システム710上の入出力アクセス可能メモリ720内の2つの物理領域に書き込まれ、これらの物理領域から読み取られる。これらの領域は、入力記述子テーブル722および出力記述子テーブル724と呼ばれ、プロデューサ−コンシューマの形で使用される。
入力記述子テーブル722は、オフロード・ネットワーク・アダプタ730によって読み取られ、制御インターフェース要求およびデータ・インターフェース要求を実行依頼するためにホスト・システム710によって書き込まれる。出力記述子テーブル724は、ホスト・システム710によって読み取られ、オフロード・ネットワーク・アダプタ730によって書き込まれ、オフロード・ネットワーク・アダプタ730は、出力記述子テーブル724を使用して、以前の要求の結果を示し、データ到着についてホスト・システム710に通知する。
ホスト・システム710とオフロード・ネットワーク・アダプタ730の両方が、入力記述子テーブル722および出力記述子テーブル724から読み取り、これらに書き込むが、ホスト・システム710とオフロード・ネットワーク・アダプタ730は、同一の形でこれらの記述子にアクセスするのではない。ホスト・システム710は、普通のメモリ読取およびメモリ書込を使用して、入力記述子テーブル722および出力記述子テーブル724にアクセスする。しかし、オフロード・ネットワーク・アダプタは、DMA動作を使用して、記述子の任意の組を入力記述子テーブル722および出力記述子テーブル724との間でコピーする。
普通のネットワーク・アダプタと同様に、ホスト・システム710は、たとえばポーリングまたは受信割込みのいずれかによって、オフロード・ネットワーク・アダプタ730から出力記述子テーブル724内の新しい応答記述子について知らされることができる。すなわち、データ・パケットがオフロード・ネットワーク・アダプタ内で受信され、下でより詳細に説明するように、ホスト・システム710へのデータ・パケットの到着の通知に関する、ある判断基準が満足される時に、応答記述子を、オフロード・ネットワーク・アダプタ730によって生成し、出力記述子テーブル724に書き込むことができる。次に、出力記述子テーブル724内の新しい記述子を示す割込みを、オペレーティング・システム715によって受け取ることができる。その代わりに、ホスト・システム710が、新しい記述子について出力記述子テーブル724を周期的にポーリングすることができる。出力記述子テーブル724にオーバーフローの恐れがある場合には、オフロード・ネットワーク・アダプタ730は、その状況をホスト・システム710に通知するために、ホスト・システム710に割込みを送出することができる。
本発明の1つの例示的実施形態では、入力記述子テーブル722および出力記述子テーブル724に書き込まれる記述子は、256ビット/32バイトであり、記述子オーナー(1ビット)、記述子タイプ(5ビット)、記述子内容(250ビット)という形で構造化される。オーナー・ビットは、入力記述子テーブル722および出力記述子テーブル724内の記述子のプロデューサ/コンシューマ関係に使用される。言い換えると、通信する2つの構成要素すなわちホスト・オペレーティング・システムおよびオフロード・ネットワーク・アダプタがあるので、プロデューサ/コンシューマ関係が存在する。単一ビットを使用して、記述子の所有権を表すことができる。たとえば、「1」は、ホストが生成した記述子を表すことができ、「ゼロ」は、オフロード・ネットワーク・アダプタが生成した記述子を表すことができ、あるいは、逆も同様である。
記述子タイプは、その記述子に関連する動作または要求あるいはその両方を識別する。たとえば、要求記述子は、バッファ送信、バッファ使用可能、接続要求、終了要求、リスン要求、取消要求、接続属性制御、およびネットワーク・アダプタ属性制御というタイプのうちの1つからなるものとすることができる。
バッファ送信記述子タイプは、送信されるデータを保管するバッファを割り振る要求に関連し、バッファ、使用される接続識別子、および後で説明するASAPビットの値を識別する。バッファ使用可能記述子タイプは、受信されたデータを保管するバッファを割り振る要求に関連し、受信されたデータを保管するバッファおよびそれを介してデータが受信される接続識別子を識別する。接続要求記述子タイプは、指定されたローカル・ポートおよびプロトコルで接続を開始する要求に関連する。終了要求記述子タイプは、指定された接続を切断する要求に関連する。リスン要求記述子タイプは、ポートおよびプロトコルで接続を受信するつもりがあることを示す要求に関連する。取消要求記述子タイプは、以前に実行要求された送信、接続、またはリスン要求を取り消す要求に関連する。接続属性制御記述子タイプは、接続属性を得るかセットする要求に関連する。ネットワーク・アダプタ属性制御記述子タイプは、ネットワーク・アダプタ全体の属性を得るかセットする要求に関連する。
応答記述子も、さまざまなタイプを有することができる。たとえば、応答記述子は、バッファ受信、バッファ使用可能、接続到着、接続完了、リスン応答、終了応答、取消応答、接続属性、およびネットワーク・アダプタ属性というタイプのうちの1つとすることができる。バッファ受信記述子タイプは、使用可能なデータを有するバッファを識別し、そのデータが関する接続を識別する。バッファ使用可能記述子タイプは、DMAが完了したことと、送信バッファが使用可能であることを識別する。接続到着記述子タイプは、新しい接続が到着していることをホストに通知し、接続識別子を含む。接続完了記述子タイプは、接続要求が成功したまたは失敗したことをホストに通知する。リスン応答記述子タイプは、実行依頼されたリスン要求の成功/失敗を示す。終了応答記述子タイプは、実行依頼されたクローズ要求の成功/失敗を示す。取消応答記述子タイプは、実行依頼された取消要求の成功/失敗を示す。接続属性記述子タイプは、古い接続属性値または新しい値成功/失敗を示す。ネットワーク・アダプタ属性記述子タイプは、古いネットワーク・アダプタ属性値または新しいネットワーク・アダプタ属性値成功/失敗を示す。
本発明の1つの例示的実施形態で、バッファ送信要求記述子、バッファ使用可能要求記述子、バッファ受信応答記述子、およびバッファ使用可能応答記述子の記述子内容フィールドは、すべて、次のフィールドを用いてフォーマットされる。
Base 64ビット バッファの基底物理アドレス
Len 32ビット バイト単位のバッファの長さ
Conn ID 64ビット ネットワーク・アダプタによって与えられる一意の接続識別子
ASAP 1ビット できる限り早くDMAを行う要求(後で述べる)
Modify 1ビット このバッファが変更されているかどうかを示す(後で述べる)
接続ID(Conn ID)は、接続を一意に識別する値であり、接続要求に対する応答でおよび接続到着に関する応答として、オフライン・ネットワーク・アダプタによって供給される。接続ID0(ゼロ)は、「接続なし」を意味するために予約済みである。これは、たとえば、あるバッファをすべての接続(たとえば、まだIDを有しない受動的に受け入れられる接続上のデータ)に使用できることを示すのに使用される。特定の接続に関連付けられていないバッファを、「バルク・バッファ」と呼ぶ。
ASAPフィールドおよびmodifyフィールドは、バッファ送信要求記述子のためにのみ使用される。ASAPビットは、できる限り早くこのバッファをDMA転送させる望みを示す。modifyビットは、この特定のバッファが、最後にオフロード・ネットワーク・アダプタに提示された時以降に変更されているか否かをオフロード・ネットワーク・アダプタに通知するためのものである。これによって、オフロード・ネットワーク・アダプタは、ローカル・メモリ内にこのバッファのコピーを既に有するか否かを判定でき、したがって、可能な場合にDMA転送を避けられるようになる。
制御記述子は、制御バッファを記述し、この制御バッファには、可変個数の任意長属性タプルが含まれる。制御記述子、内容要求、終了要求、リスン要求、取消要求、およびこれらのめいめいの応答の記述子内容フィールドは、すべて、次のフィールドを用いてフォーマットされる。
Number 8ビット 制御バッファ内の属性タプルの個数
Base 64ビット 制御バッファの基底物理アドレス
Len 32ビット バイト単位の制御バッファの長さ
Conn ID 64ビット 一意の接続識別子
接続属性要求、オフロード・ネットワーク・アダプタ属性要求、およびこれらのめいめいの応答の制御バッファおよび記述子内容フィールドは、すべて、次のフィールドを用いてフォーマットされる。
Get/Set 1ビット 属性が取り出されるのか更新されるのかを示す
Attribute 15ビット 読取/書込に関して属性を識別する
Length 32ビット 属性データの長さ
Value 不適用 実際の属性値。長さは前のフィールドによって指定される。
上の制御記述子は、できる限り一般的であることを意図されている。制御記述子によって指定できる属性の量に起因して、これらのすべてを本明細書で示すことはできない。ネットワーク・インターフェース制御属性の例には、IPアドレス、ドメイン名、およびルーティング情報が含まれる。接続ごとの制御属性の例には、受信ウィンドウ・サイズ、Nagleアルゴリズム・セッティング、およびSACKサポートが含まれる。
本発明を用いると、オフロード・ネットワーク・アダプタ730は、本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを利用するための、オフロード・ネットワーク・アダプタ730のファームウェア、ASICなどの中の論理を有する。すなわち、オフロード・ネットワーク・アダプタ730は、要求記述子を認識し、その要求記述子および対応するデータを処理する論理と、出力記述子テーブル724に書き込まれる応答記述子を生成する論理とを有する。同様に、ホスト・システムの、オペレーティング・システム715、オペレーティング・システム715によってロードされるデバイス・ドライバ、または類似物は、入力記述子テーブル722に書き込まれる要求記述子を生成し、出力記述子テーブル724から読み取られる応答記述子を認識する論理と、その応答記述子および対応するデータを処理する論理とを有する。
本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースの記述子を使用するホスト・システムとネットワーク・アダプタとの間の相互作用の全般的な概要を与えたので、次の説明では、このインターフェースが、オフロード・ネットワーク・アダプタを使用して、改善された接続確立、メモリ管理、およびデータの受信をどのように容易にするかを示す。
接続確立
本発明の一態様は、接続確立と接続状態情報の維持とをオフロード・ネットワーク・アダプタにオフロードする能力である。接続確立および状態情報維持のこのオフロードの結果として、ホスト・システムとオフロード・ネットワーク・アダプタとの間で必要な通信の数を減らすことができる。さらに、後で述べるように、オフロード・ネットワーク・アダプタへのこれらの機能のオフロードは、既知のコンピューティング・システムに存在する断片的な通知ではなく、ホスト・システムへの確立された接続および状態情報のバルク通知を可能にする。
図8は、本発明の1つの例示的実施形態による、通信接続を確立する時のホスト・システムとオフロード・ネットワーク・アダプタとの間の通信の例示的な図である。図8に示されているように、アウトバウンド接続の確立は、接続が確立されることを要求する、アプリケーション805からの要求のオペレーティング・システム815による受取によって開始される。その結果、オペレーティング・システム815は、接続要求記述子を生成し、これを入力記述子テーブル822に書き込む。この接続要求記述子および関連する制御バッファには、要求された接続を確立するのに必要な情報のすべてが含まれる。たとえば、制御バッファおよび接続要求記述子には、AF_INET情報、SOCK_STREAM情報、IP VERSION情報、ならびにリモート接続およびローカル接続を参照する接続識別子を含めることができる。
オフロード・ネットワーク・アダプタ830は、入力記述子テーブル822から接続要求記述子を読み取り、次に、オフロード・ネットワーク・アダプタ830内の接続確立論理832が、この接続要求記述子内で受け取られた情報に基づいて、接続の確立を試みる。接続要求記述子に基づく接続の確立には、接続のソケット記述子すなわち、ホスト・システムおよびリモート・コンピューティング・デバイスのソケットを記述するデータ構造を確立することと、接続識別子を接続に関連付けることと、その接続用のバッファをオフロード・ネットワーク・アダプタ830内で割り振ることとが含まれる。すなわち、オフロード・ネットワーク・アダプタは、普通のシステム呼出しconnect()、setsockopt()、bind()、accept()などに関連する動作を実行することができる。接続が確立された時または、持続時間タイムアウト状態などのエラー状態に出会った時に限って、ホスト・システム810は、接続確立動作の結果の状況について知らされる。
この応答は、出力記述子テーブル824への1つまたは複数の応答記述子の書込とすることができる。たとえば、接続完了記述子を、オフロード・ネットワーク・アダプタ830によって生成し、出力記述子テーブル824に書き込んで、これによって、接続が確立されたことをホスト・システム810に知らせることができる。
インバウンド接続の確立は、わずかに異なる形で実行される。アプリケーションが、特定のポートで接続について「リスン」する能力を要求する場合に、オペレーティング・システム815は、リスン要求記述子を入力記述子テーブル822に書き込むことができる。このリスン要求記述子は、リスンされるポートと、接続がリスンされるプロトコルとを識別する。次に、オフロード・ネットワーク・アダプタ830の接続確立論理832が、入力記述子テーブル822からこのリスン要求記述子を読み取り、適当な着呼ソケット接続で接続を確立するのに必要な動作を実行する。これには、たとえば、普通のaccept()システム呼出しおよびbind()システム呼出しに似た動作を実行することであるが、これらをオフロード・ネットワーク・アダプタ830内で実行することを含めることができる。接続が確立されるかエラー状態に出会う(持続時間タイムアウト状態など)時に限って、ホスト・システム810は、接続の結果の状況について知らされる。既知の「オフロード」実施態様では、ホスト・システムは、接続確立の各段階で相互作用する。本発明は、接続するか接続をリスンする高水準コマンドを発行し、接続が確立されるかタイムアウトまたはエラー状態に出会った時にのみ応答する。
接続が確立された時に、その接続に関する情報は、オフロード・ネットワーク・アダプタのメモリ834内の接続状態データ構造内で維持される。この状態情報は、確立された接続を介してデータを送信し、受信するのに使用される。この状態情報は、後で述べるように、ホスト・システム810によって維持される接続状態情報を更新するのに使用することもできる。
上の説明からわかるように、オフロード・ネットワーク・アダプタ内で接続確立動作を実行することと、本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを使用することとの主要な結果の1つは、ホスト・システムとネットワーク・アダプタとの間の通信が、接続の確立中に最小にされることである。その結果、ホスト・システムが処理すべきメッセージがより少なくなる。これは、ホスト・システムが、それに関する多数の接続が確立され、切断されるサーバ・コンピューティング・システムである時に特に重要である。
上で述べたように、本発明の一実施形態では、ホスト・システムは、接続が確立されたかエラー状態に出会った後に、接続の状況について知らされることができる。したがって、結果として、接続完了応答記述子は、接続が確立されるか接続を確立する試みが失敗するたびに、出力記述子テーブル824に書き込まれる。出力記述子テーブル824への各接続完了応答記述子の書込と共に、割込みを生成し、オペレーティング・システム815に送って、新しい応答記述子が処理のために出力記述子テーブル824内に存在することをホスト・システム810に知らせることができる。
接続完了応答記述子が出力記述子テーブル824に書き込まれる回数を最小にし、したがって、割込みが生成され、ホスト・システム810に送られる回数を最小にするために、本発明は、出力記述子テーブル824への接続完了応答記述子の書込を複数の異なる形で遅延させることができる。ホストへの接続確立状況の通知を遅延させることの利点は、複数の接続を単一の通知に集約する可能性である。この形では、同一の接続または異なる接続に関する複数の完了応答記述子を、一緒に「バッチ化」し、オフロード・ネットワーク・アダプタとホスト・システムとの間の1回のトランザクションでホスト・システムに供給することができる。
たとえば、構成可能な遅延値を、確立されたソケット接続の速度、接続要求が受け取られる速度、または類似物に基づいてセットすることができる。この遅延値は、集合体内の各接続の状況を指定する接続完了応答記述子を生成する前にオフロード・ネットワーク・アダプタ830のメモリに累積できる接続確立情報の集合体の量を識別することができる。この値は、オフロード・ネットワーク・アダプタ830上のメモリに保管することができる。
この遅延値は、静的にまたは動的に判定することができ、接続の確立と接続完了応答記述子を使用するホスト・システムへの通知との間の時間の所定の長さ、受け取られた接続確立状況更新すなわち接続確立動作の成功/失敗の個数、または類似物の形とすることができる。遅延値が動的に判定される場合には、遅延値は、たとえば、ある時間期間にわたって受け取られた接続の割合または量、ソケット接続タイミングのヒストリカル観察、または類似物に基づいて判定することができる。たとえば、特定のソケット受信接続が、10ミリ秒にわたって10個の接続要求のバーストを有し、その後、10秒間静止する場合に、ホスト・システムへの通知全体を減らすために、10個の接続が行われるまでホスト・システムへのすべての通知を遅延させることが賢明である可能性がある。1秒のタイムアウト機能を使用して、追加のソケット接続を待つことができる。
いつ接続完了応答記述子を出力記述子テーブル824に書き込むかを決定するもう1つのオプションは、オフロード・ネットワーク・アダプタ830が、確立された接続のデータ到着まで待つことである。この形では、オフロード・ネットワーク・アダプタ830は、ホスト・システム810による処理のためにデータが受信されるまで、確立された接続に関する情報をメモリ内で維持する。その受信の時に、接続完了応答記述子を出力記述子テーブル824に書き込んで、接続の確立についてホスト・システム810に知らせることができ、その後、バッファ受信応答記述子を出力記述子テーブル824に書き込んで、確立された接続を介するデータの受信を示すことができる。
本発明のもう1つの実施形態では、出力記述子テーブル824を介するホスト・システムへの通知を、特定のデータ・パターンが接続を介して受信されるまで遅延させることができる。これらの特定のデータ・パターンは、たとえば、特定のHTTP GET要求、単一の単位として処理できるデータのシーケンスの終りを示すために事前に決定された特定のメタ・タグ、または類似物とすることができる。
このデータ・パターンが、確立された接続を介して受信されたならば、オフロード・ネットワーク・アダプタ830は、接続完了応答記述子を出力記述子テーブル824に書き込んで、そのデータ・パターンが受信されるまでの時間期間中に成功して確立されたか失敗したすべての接続を識別することができる。この形では、ホスト・システム810は、ホスト・システム810が、処理すべき特定のデータを有するまで、新しい接続の確立について知らされない。言い換えると、ホスト・システムは、ホスト・システムが行うべき特定の何かが現れるまで、処理すべき記述子で悩まされることがない。その「何か」は、検索されるデータ・パターンによって定義される。
したがって、本発明は、確立された接続または接続確立時の失敗の通知の集約を可能にし、その結果、ホスト・システムに送られる通知の数が最小にされる。これによって、ホスト・システムによって実行されなければならない処理の量が減り、ホスト・システムが、そのホスト・システム上で稼動するアプリケーションを処理するためにそのリソースを使用することが可能になる。
本発明を用いると、接続確立がオフロード・ネットワーク・アダプタ830によって実行されるので、確立された接続の状態は、オフロード・ネットワーク・アダプタ830のメモリ内で維持される。しかし、フェールオーバー、ネットワーク・エラー状態の場合に、またはルーティング判断を行うために、ホスト・システム810がこの状態情報を有することが必要である場合がある。したがって、本発明は、オフロード・ネットワーク・アダプタ830内で維持される確立された接続に関する状態情報をホスト・システム810に移行させる機構を提供する。
本発明の1つの例示的実施形態では、接続属性応答記述子を周期的に生成し、出力記述子テーブル824に書き込むことができる。この接続属性応答記述子は、接続のそれぞれの現在の状態を識別する。ホスト・システム810は、出力記述子テーブル824への接続属性応答記述子の追加について、オペレーティング・システム815に割込みを送ることによって知らされる。次に、ホスト・システム810は、その接続属性応答記述子を読み取り、処理し、ホスト・システムの接続状態情報が更新されるようにする。したがって、ホスト・システム810には、更新された情報が与えられ、この情報によって、ホスト・システム810は、ルーティング判断を行い、ネットワーク・エラーまたはフェールオーバーの場合に適当な動作を実行することができる。
したがって、本発明は、接続確立中のホスト・システムとオフロード・ネットワーク・アダプタとの間の通信が最小にされるように、接続確立をオフロード・ネットワーク・アダプタにオフロードする機構を提供する。これは、ホスト・システムが、単一の接続要求記述子内でオフロード・ネットワーク・アダプタにバルク接続確立要求を送ることを可能にすることができ、その後は、たとえば、所定の個数の接続が確立される、所定の量のデータがある接続で到着する、所定の長さの時間が経過する、所定のデータ・パターンが受信されるなど、ある判断基準が満足されるまで、オフロード・ネットワーク・アダプタによるホスト・システムとのさらなる通信は、不要である。同様に、ホスト・システムは、オフロード・ネットワーク・アダプタに、特定のポートで接続をリスンするように指示し、その後、これらの接続を受け入れ、バインドすることができる。その結果、ホスト・システムは、1つのリスン要求記述子を送ることができ、やはり、リスンされるポートでの接続の確立に関して所定の判断基準が満足されるまで、通信されない。さらに、本発明は、接続状態情報をオフロード・ネットワーク・アダプタに保管し、ルーティング判断での使用のためおよびネットワーク・エラーまたはフェールオーバーの場合にこの状態情報をホストに移行する機構を提供する。
図9および10は、本発明の1つの例示的実施形態による、本発明の要素の動作の概要を示す流れ図である。これらの流れ図および下で説明する他の流れ図の各ブロックおよび流れ図のブロックの組合せを、コンピュータ・プログラム命令によって実施できることを理解されたい。これらのコンピュータ・プログラム命令は、機械を作るためにプロセッサまたは他のプログラム可能データ処理装置に供給することができ、このプロセッサまたは他のプログラム可能データ処理装置で実行される命令が、流れ図の1つまたは複数のブロックで指定された機能を実施する手段を作成するようになる。これらのコンピュータ・プログラム命令は、プロセッサまたは他のプログラム可能データ処理装置が特定の形で機能するように指示することができるコンピュータ可読メモリまたは記憶媒体に保管することもでき、コンピュータ可読メモリまたは記憶媒体に保管された命令が、流れ図の1つまたは複数のブロックで指定された機能を実施する命令手段を含む製造品を作るようになる。
したがって、流れ図のブロックは、指定された機能を実行する手段の組合せ、指定された機能を実行するステップの組合せ、および指定された機能を実行するプログラム命令手段をサポートする。流れ図の各ブロックおよび流れ図のブロックの組合せを、指定された機能またはステップを実行する特殊目的ハードウェアベース・コンピュータ・システムによって、または特殊目的ハードウェアとコンピュータ命令との組合せによって実施できることも理解されたい。
図9は、オフロード・ネットワーク・アダプタを使用して接続を確立する時の本発明のホスト・システムの例示的動作の概要を示す流れ図である。図9に示されているように、この動作は、アプリケーションから接続確立要求を受け取ることによって開始される(ステップ910)。この接続確立要求は、たとえば、特定の接続を確立する要求、または特定のポートで接続についてリスンする要求とすることができる。接続確立要求記述子を、入力記述子テーブルに書き込む(ステップ920)。この接続確立要求記述子は、たとえば、接続要求記述子またはリスン要求記述子とすることができる。
この動作は、次に、オフロード・ネットワーク・アダプタからの接続確立動作の完了に関する応答を待つ(ステップ930)。「待つ」とは、応答が受け取られるまで、この接続に関してホスト・システムによってさらなる動作が実行されないことを意味する。明らかに、ホスト・システムは、この「待つ」が発生している間に、他の動作を実行している。
応答が受け取られたかどうかに関する判定を行う(ステップ940)。そうでない場合には、接続確立要求がタイムアウトしたかどうかに関する判定を行う(ステップ950)。そうでない場合には、この動作は、ステップ930に戻り、待つことを継続する。接続確立要求がタイムアウトしている場合には、取消要求記述子を入力記述子テーブルに書き込み(ステップ960)、この動作は終了する。
応答が受け取られる場合には、接続完了応答記述子を出力記述子テーブルから読み取る(ステップ970)。次に、ホスト・システムによって接続完了応答記述子を処理し(ステップ980)、この動作は終了する。
ステップ920で入力記述子テーブルに書き込まれた最初の接続確立要求記述子が、複数の接続の確立を指定するすなわち、バルク接続確立要求である場合があることに留意されたい。したがって、本発明を用いると、ホストは、このバルク接続要求を実行するために入力記述子テーブルとの1つのトランザクションを行うだけでよく、これらの接続を確立するのに必要な処理のすべてが、オフロード・ネットワーク・アダプタにオフロードされる。同様に、最初の接続確立要求識別子が、「リスン」要求識別子である場合には、オフロード・ネットワーク・アダプタがポートをリスンしている間に多数の接続が確立される場合があるが、これらの接続の確立を開始するために、ホスト・システムによって1つのトランザクションだけが実行される。
図10は、本発明の1つの例示的実施形態に従って接続を確立する時のオフロード・ネットワーク・アダプタの例示的動作の概要を示す流れ図である。図10に示されているように、この動作は、入力記述子テーブルから接続確立要求記述子を読み取る(ステップ1010)ことによって開始される。接続確立動作を実行して、ソケット記述子、接続識別子、および類似物を生成して、接続確立要求記述子で識別された接続を確立する(ステップ1020)。確立された接続のそれぞれに関する状態情報を、ホスト・システムへの以前の通知以降にどの接続が確立され、どの接続が失敗したかを識別する情報と一緒にメモリに保管する(ステップ1030)。
接続完了応答記述子の書込に関する遅延判断基準が満足されたかどうかに関する判定を行う(ステップ1040)。上で述べたように、遅延判断基準は、多数の異なる形をとることができる。たとえば、遅延判断基準は、ホスト・システムに送られた最後の通知以降に確立された接続の個数、接続のうちの1つを介して到着する所定の量のデータ、受信された指定されたデータ・パターン、ホスト・システムへの最後の通知以降の所定の長さの時間、および類似物とすることができる。
遅延判断基準が満足されない場合には、この動作は、ステップ1020に戻り、接続の確立を継続し、状態情報および接続確立情報がメモリ内で維持される。遅延判断基準が満足されている場合には、ホスト・システムへの最後の通知以降に確立された接続および確立に失敗した接続を識別する接続完了応答記述子を生成し、出力記述子テーブルに書き込む(ステップ1050)。この動作は、その後、終了する。
したがって、本発明は、オフロード・ネットワーク・アダプタを使用して接続を確立する改善された機構を提供する。本発明のこの態様は、ホスト・システムとオフロード・ネットワーク・アダプタとの間の通信が最小にされ、その結果、ホスト・システムとオフロード・ネットワーク・アダプタとの間の最小限の量の相互作用だけを用いて多数の接続を確立できるようになるという点で、バルク接続確立に特によく適する。これによって、ホスト・システムが、そのリソースをアプリケーションの実行および他の有用な作業の実行に集中するために解放される。
メモリ管理
接続確立のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでのメモリ管理を改善する。本発明によるメモリ管理は、データのバッファリングされた送信およびバッファリングされた受信と、データのゼロ・コピー送信およびゼロ・コピー受信との両方を可能にする。さらに、本発明は、任意の個数の属性に基づいて指定された接続の間で共用できるDMAバッファのグループ化を可能にする。本発明は、さらに、部分的送信バッファ動作および部分的受信バッファ動作、DMA要求をバルクでホスト・システムに通信できるようにするためのDMA要求の遅延、およびホスト・システムへのデータの優先転送の機構を可能にする。
オフロード・ネットワーク・アダプタ・プログラミング・インターフェースは、ソケット・インターフェースなどの普通のユーザレベル・アプリケーション・プログラム・インターフェース(API)ならびにユーザ・メモリへのより直接のアクセスを可能にするより新しいAPIをサポートする。本発明のオフロード・アーキテクチャは、データのバッファリングされた送信およびバッファリングされた受信と、データのゼロ・コピー送信およびゼロ・コピー受信との両方を可能にする。オフロード・ネットワーク・アダプタの観点から、バッファリングされた伝送およびゼロ・コピー伝送は、ほとんど同一に処理される。この2タイプのデータ転送が区別される形は、ホスト・システムがオフロード・ネットワーク・アダプタをどのように利用するかに基づく。
図11は、データのバッファリングされた送信およびバッファリングされた受信が利用される、本発明によるメモリ管理機構を示す例示的な図である。この説明において、ホスト・システム1110と別のコンピューティング・デバイス(図示せず)との間の接続が、上で述べた機構を介して確立されていると仮定する。この接続を参照するread()呼出しが行われる時に、アプリケーション・バッファ1130を、この接続のために確立することができる。オペレーティグ・システム1150には、さらに、ピン止めされたカーネル・バッファ1140が含まれ、このピン止めされたカーネル・バッファ1140を、さまざまな接続のデータを受け取るバルク・バッファと呼ぶことができ、このピン止めされたカーネル・バッファ1140には、ネットワーク・アダプタまたは特定の接続バッファ、たとえばアプリケーション・バッファ1130に送られる前にデータが書き込まれる。ピン止めされたカーネル・バッファ1140は、接続発行時に作成され、データがある接続に送られる前にその接続についてアプリケーション・バッファ1130がポストされていない時に使用される。データが送られる前にアプリケーション・バッファ1130がポストされる場合には、そのアプリケーション・バッファを使用してデータを受け取ることができる。その代わりに、後で述べるように、アプリケーション・バッファ1130とピン止めされたカーネル・バッファ1140の両方を、いくつかのバッファリングされた伝送の実施形態で使用することができる。
図11に示されているように、ホスト・システム1110が、オフロード・ネットワーク・アダプタ1120を介して別のコンピューティング・デバイスにデータを送信することを望む時に、ホスト・システム1110は、そのデータをユーザ空間内のアプリケーション・バッファ1130からオペレーティング・システム・カーネル空間内のオペレーティグ・システム1150のピン止めされたカーネル・バッファ1140にコピーする。このピン止めされたカーネル・バッファ1140は、1つまたは複数の確立された接続についてオフロード・ネットワーク・アダプタ1120からおよびアプリケーション・バッファ1130からデータを受け取るバルク・バッファである。したがって、ホスト・システム1110は、複数の接続が現在オープンされている場合に複数のアプリケーション・バッファ1130を有することができ、これらの接続のデータは、ピン止めされたカーネル・バッファ1140を介して送信/受信されることができる。
この形では、データは、オフロード・ネットワーク・アダプタ1120によって送信のためにキューイングされる。次に、ホスト・システム1110は、送信用のデータを有するものとしてピン止めされたカーネル・バッファ1140を識別するバッファ送信要求記述子を入力記述子テーブルにポストすることができる。次に、オフロード・ネットワーク・アダプタ1120は、入力記述子テーブル内のこのバッファ送信要求記述子に応答して、ピン止めされたカーネル・バッファ1140からデータを読み取ることができ、そのデータをネットワーク(図示せず)を介して宛先コンピューティング・デバイスに送信することができる。その後、オフロード・ネットワーク・アダプタ1120は、そのデータの送信が完了したことを示すバッファ使用可能応答識別子を出力記述子テーブルにポストすることができる。したがって、バッファリングされた送信機構を使用するデータの送信を用いると、本発明は、送信のためにアプリケーション・バッファ1130からピン止めされたカーネル・バッファ1140にデータをコピーする。
バッファリングされた受信は、類似する形で働く。バッファリングされた受信動作では、オフロード・ネットワーク・アダプタ1120は、ダイレクト・メモリ・アクセス(DMA)動作を実行して、データをオフロード・ネットワーク・アダプタ1120からピン止めされたカーネル・バッファ1140に送る。ホスト・システム1110によって入力記述子テーブルにポストされるバッファ使用可能要求記述子に応答して、オフロード・ネットワーク・アダプタ1120は、出力記述子テーブルにバッファ受信応答記述子をポストすることができる。次に、ホスト・システム1110は、出力記述子テーブルからそのバッファ受信応答記述子を読み取ることができ、read()ソケット呼出しを呼び出して、データをピン止めされたカーネル・バッファ1140からユーザ空間内のアプリケーション・バッファ1130にコピーすることができる。
バッファリングされた転送は、アプリケーション・バッファ1130からピン止めされたカーネル・バッファ1140におよびその逆にデータを転送するために実行しなければならないデータ・コピー動作の数のゆえに、最適より遅くなる傾向がある。しかし、バッファリングされた転送は、2つの利点をもたらす。データが、ホスト・カーネル・メモリ内すなわちピン止めされたカーネル・バッファ1140内に保たれるので、オフロード・ネットワーク・アダプタ1120に対するメモリ圧力が減る。というのは、送信される直前になるまで、バッファをオフロード・ネットワーク・アダプタ1120にDMA転送する必要がなくなるからである。さらに、フェールオーバーを達成するのがより簡単である。というのは、オフロード・ネットワーク・アダプタ1120が故障した場合に、データが、それでも、別のネットワーク・アダプタを介する送信のために、ホスト・システムのピン止めされたカーネル・バッファ内で使用可能であるからである。
本発明のアーキテクチャは、さらに、オフロード・ネットワーク・アダプタとホスト・システムとの間のデータのゼロ・コピー伝送の機構を提供する。用語「ゼロ・コピー」は、ホスト・システムによるメモリ対メモリ・コピーの除去を指す。図12は、本発明の1つの例示的実施形態によるゼロ・コピー動作を示す例示的な図である。ホスト・システム1210へ/からデータを伝送するために、ホスト・システム1210は、ユーザ・アプリケーションをブロックし、そのアプリケーション・バッファ1230をピン止めすることができる。次に、ホスト・システム1210は、オフロード・ネットワーク・アダプタ1220を呼び出して、データをアプリケーション・バッファ1230へ/から直接にオフロード・ネットワーク・アダプタ1220から/へDMA転送する。
現在のシステムでは、確立された接続から読み取るために、アプリケーションは、3つの引数を有するread()ソケット呼出しを呼び出す。第1引数は、使用されるソケット記述子を指定し、第2引数は、アプリケーション・バッファ1230のアドレスを指定し、第3引数は、そのバッファの長さを指定する。readは、そのソケットに到着したデータ・バイトを抽出し、それらのバイトをユーザのバッファ区域、たとえばアプリケーション・バッファ1230にコピーする。ユーザのバッファ区域におさまるものより少ないデータが到着している場合には、read()は、すべてのデータを抽出し、見つかったバイト数を返す。
本発明によるシステム内のゼロ・コピーを用いると、アプリケーション・バッファ1230すなわちDMAバッファの作成は、記述子通信パケットを生成させ、ホスト・システム1210からオフロード・ネットワーク・アダプタ1220に送らせ、たとえば、バッファ使用可能要求記述子通信パケットを生成し、入力記述子テーブルにポストすることができる。この記述子は、アプリケーション・バッファ1230およびその属性を記述し、アプリケーション・バッファ1230を、接続された通信の接続情報に関連付ける。アプリケーション・バッファがオフロード・ネットワーク・アダプタ1220から使用可能であり、read()ソケット呼出しが実行される時に、DMA動作が、データをオフロード・ネットワーク・アダプタ1220からアプリケーション・バッファ1230に転送するために実行される。次に、read()呼出し完了通知に必要なDMAデータ属性を記述した、オフロード・ネットワーク・アダプタ1220からの応答記述子が、作成され、たとえば、バッファ使用可能応答記述子を生成し、ホスト・システムの入力記述子テーブルにポストすることができる。
オフロード・ネットワーク・アダプタ1220が、その機能を実行する際に使用するために、各オープンされている接続の情報をメモリ内で維持することに留意されたい。この情報には、オープンされている接続に関連するアプリケーション・バッファの識別ならびに他の接続固有情報を含めることができる。次に、この情報は、オフロード・ネットワーク・アダプタ1220が、それ自体とホスト・システム1210上のアプリケーションとの間でデータを通信する必要がある時に使用される。
したがって、本発明を用いると、オフロード・ネットワーク・アダプタは、ダイレクト・メモリ・アクセス動作を使用して、データをユーザ空間内のアプリケーション・バッファに直接に送ることができる。それを行う際に、ピン止めされたカーネル・バッファからアプリケーション・バッファへのデータのコピーが回避される。もちろん、本発明は、どちらのモードでも、すなわち、バッファリングされた送信/受信またはゼロ・コピー送信/受信で動作することができ、あるいは、両方のモードを交換可能にもしくはほぼ同時に使用することができる。すなわち、あるデータを、ホスト・システムとオフロード・ネットワーク・アダプタとの間でバッファリングされた送信/受信を使用して転送することができ、他のデータを、ゼロ・コピー送信/受信を使用して転送することができる。たとえば、アプリケーションread()呼出しがソケット上のめいめいのデータの受信に先立つ時に、必ずゼロ・コピー送信/受信を使用することができる。この形では、アプリケーション・バッファは、確立された接続でデータを受信するために事前にポストされる。read()呼出しが、ソケット上のデータの受信に先立たない場合には、バッファリングされた送信/受信を使用することができる。
好ましい実施形態では、ゼロ・コピー送信/受信が、ホスト・システムへ/からデータを送信/受信する好ましい形である。しかし、ゼロ・コピー送信/受信が可能でない状況が生じる場合がある。たとえば、アプリケーション・バッファの使用可能メモリを超えようとしている場合、またはアプリケーション・バッファが使用可能でない場合に、オフロード・ネットワーク・アダプタは、ダイレクト・メモリ・アクセス動作を使用してアプリケーション・バッファに直接にデータを送ることができない可能性がある。その結果、共用バッファへのデータのバッファリングされた送信が必要になる場合がある。
本発明のオフロード・ネットワーク・アダプタは、任意の個数の属性に基づいて指定された接続の間で共用できるアプリケーション・バッファをグループ化する能力を有する。好ましい実施形態では、アプリケーション・バッファのグループ化は、接続ポート番号に基づく。すなわち、すべてが同一のポート番号を使用するアプリケーション・バッファは、アプリケーション・バッファを共用することができる。たとえば、ウェブをサービスするシナリオで、ポートごとに複数の接続がある場合がある。一例が、ウェブ・サーバのTCP/IPポート80である。ポート80を介して情報を要求する数千個のクライアントHTTP接続がある場合がある。ポート80に割り振られたバッファをグループ化することができる、すなわち、ポート80に入ってくるこれらの情報要求を処理するために、割り振られたバッファのプールを確立することができる。
送信動作でのアプリケーション・バッファの共用は、ブロードキャスト・タイプ接続またはマルチキャスト・タイプ接続に基づくホスト・システムのデータの再利用を可能にする。すなわち、データは、共用アプリケーション・バッファに1回だけ書き込まれる必要があるが、これらのアプリケーション・バッファを共用する複数の接続上で送信することができる。受信されたデータに関するアプリケーション・バッファの共用は、少ない帯域幅要件またはトラフィックの過渡的バーストを有するアクティブ接続用のメモリのより効率的な使用を可能にする。すなわち、複数の接続がそれら自体の専用の個々のアプリケーション・バッファを有する必要がある(この場合に、バッファ用のメモリの多くが、低帯域幅接続または過渡的バースト接続について未使用になる可能性がある)場合より小さい共用アプリケーション・バッファを共用することができる。さらに、アプリケーション・バッファの共用は、別々のアプリケーションおよびプロセスが、受信されたデータを共用することを可能にする。
図13は、本発明の1つの例示的実施形態による共用バッファ配置を示す例示的な図である。図示の例では、3つのプロセスX、Y、およびZが、現在、ホスト・システム1310上で稼動している。5つの接続A、B、C、D、およびEが、確立されており、対応するアプリケーション・バッファ1350〜1370が、これらの接続のためにホスト・システム1310メモリ内で確立されている。アプリケーション・バッファ1350および1360は、その中にDMA動作を使用してデータを直接に送ることができる個々のアプリケーション・バッファである。その代わりに、データを、上で述べたように、バッファリングされた送信/受信動作の一部として、ピン止めされたカーネル・バッファ1330を使用してこれらのアプリケーション・バッファ1350〜1360にコピーすることができる。
アプリケーション・バッファ1370は、接続C、D、およびEの間で共用される共用アプリケーション・バッファである。たとえば、接続C、D、およびEのすべてが、そのソケット接続に同一のポート番号を使用する場合があり、低帯域幅接続である場合があり、したがって、バッファ空間を共用することができる。その代わりに、接続C、D、およびEを、データのマルチキャストまたはブロードキャストのためにアプリケーション・バッファ1370を共用することになるマルチキャスト・グループまたはブロードキャスト・グループの一部とすることができる。
図13に示されているように、データのバッファリングされた送信/受信転送が利用される時に、データは、まず、DMA動作を使用して、オフロード・ネットワーク・アダプタ1320からホスト・システム1310のオペレーティング・システム1340内のピン止めされたカーネル・バッファ1330に送られる。ホスト・システム1310が出力記述子テーブル内にバッファ使用可能要求記述子をポストすることに応答して、オフロード・ネットワーク・アダプタ1320は、バッファ受信応答記述子を入力記述子テーブルにポストする。次に、ホスト・システム1310は、read()を呼び出して、データをピン止めされたカーネル・バッファ1330から接続C、D、およびE用の共用されるアプリケーション・バッファ1370にコピーすることができる。これらの共用されるアプリケーション・バッファ1370から、データを、共用されるアプリケーション・バッファ1370を共用する1つまたは複数のプロセスによって読み込むことができる。たとえば、プロセスZが、共用されるアプリケーション・バッファ1370からデータを読み込むことができる。接続C、D、またはEでデータをリスンするすべてのプロセスが、これらの動作を実行して、その接続上のデータをピン止めされたカーネル・バッファ1330から共用されるアプリケーション・バッファ1370に読み込むことができる。
その代わりに、個々のアプリケーション・バッファ1350および1360と同様に、接続C、D、およびEのデータを、オフロード・ネットワーク・アダプタ1320から共用されるアプリケーション・バッファ1370に直接にDMA転送することができる。この形では、本発明のゼロ・コピー実施態様は、複数の接続からの送信/受信のためのデータを保持するのに、共用されるアプリケーション・バッファ1370を利用することができる。
共用されるアプリケーション・バッファ1370が特に有用である1つの例は、アプリケーションがデータを受け取るアプリケーション・バッファを確立する前に、オフロード・ネットワーク・アダプタ1320がホスト・システム1310にデータをDMA転送する必要がある時である。たとえば、これは、データが、所定の閾値を超えてオフロード・ネットワーク・アダプタ1320で受信され続け、オフロード・ネットワーク・アダプタが、メモリ不足の危険に陥る可能性がある時に発生し得る。そのようなシナリオが存在し得ると仮定すると、ホスト・メモリ内の共用されるアプリケーション・バッファ1370へのデータの中間コピーは、この状況を軽減するのを助けるはずである。すなわち、データを、アプリケーション・バッファ1350などの専用接続アプリケーション・バッファではなく、オープンされている接続のすべてのための共用されるアプリケーション・バッファ1370にコピーすることができる。
したがって、ホスト・システムとオフロード・ネットワーク・アダプタとの間のゼロ・コピー・データ転送に関連する利点に加えて、本発明は、接続バッファによって使用されるホスト・システム・メモリの量を最小にし、オフロード・ネットワーク・アダプタ・メモリ・オーバーフローの場合にデータを処理する機構を提供し、専用接続バッファに割り振られる未使用ホスト・システム・メモリを回避するために、接続がそれによってバッファを共用できる機構をも提供する。
上のメモリ管理機構のほかに、本発明は、確立された接続の部分的受信バッファおよび部分的送信バッファも提供する。本発明の「部分的受信バッファおよび部分的送信バッファ」機能性は、アプリケーション用のデータを既に受信/送信したバッファに受信データを付加する、本発明の能力を指す。2つの別々のバッファが割り振られるのではなく、バッファが、アプリケーション・データ転送のために再利用される。
図14に、本発明の1つの例示的実施形態による部分的受信/送信バッファが動作する形を示す。部分的受信/送信バッファを用いる場合に、ホスト・システム1410は、特定の接続のために割り振られたアプリケーション・バッファ1430についてオフロード・ネットワーク・アダプタ1420に知らせる。たとえば、バッファ使用可能要求記述子を、入力記述子テーブルにポストすることができる。この形では、ホスト・システム1410は、アプリケーション・バッファ1430の所有権をオフロード・ネットワーク・アダプタ1420に引き渡す。
次に、オフロード・ネットワーク・アダプタ1420は、接続を介してデータを受信し、そのデータをホスト・システム1410上のアプリケーション・バッファ1430にDMA転送する。次に、オフロード・ネットワーク・アダプタ1420は、バッファ受信応答記述子を出力記述子テーブルにポストすることができる。図示の例では、アプリケーション・バッファ1430にDMA転送されるデータは、アプリケーション・バッファ1430を部分的に満たすのに十分なものに過ぎない。
アプリケーション・バッファ1430でのデータの到着についてホスト・システム1410に知らせる際に、ネットワーク・インターフェースは、この「部分的」アプリケーション・バッファ1430の制御をホスト・システム1410に引き渡す。最初のバッファの残りのすべての部分は、まだオフロード・ネットワーク・アダプタ1420の制御の下にある。Read()呼出しのセマンティクスは、応答内に「バイト・オフセット」値を追加することを必要とする。ホスト・システム1410内のアプリケーションは、返されたデータのオフセット+長さが元々のアプリケーション・バッファ1430の全長と等しい時に、アプリケーション・バッファ1430の完全な制御がホスト・システム1410に返されたことを知る。データのオフセット+長さが元々のアプリケーション・バッファ1430の全長と等しくない場合には、まだ、オフロード・ネットワーク・アダプタ1420がそのバッファの部分的制御を維持している。その代わりに、アプリケーション・バッファ1430のデータの最後の転送を示す追加フィールドを設けることができる。これがアプリケーション・バッファ1430のデータの最後の転送である場合に、制御は、ホスト・システム1410に返されており、オフロード・ネットワーク・アダプタ1420は、アプリケーション・バッファ1430の部分的制御を維持しない。
その後、追加データがその接続を介して受信される場合に、オフロード・ネットワーク・アダプタ1420は、この追加データをホスト・システム1410上の同一のアプリケーション・バッファ1430にDMA転送することができ、そのデータがアプリケーション・バッファ1430内に付加されるようになる。次に、ホスト・システム1410は、出力記述子テーブル内の別のバッファ受信応答記述子のポストを介するなど、オフロード・ネットワーク・アダプタ1420によって、追加データがその接続に関して到着していることを知らされる。
上で説明した機構を用いると、ネットワーク・パケット・サイズがホスト・メモリ・バッファ・サイズと等しくない場合に、フラグメンテーションが問題になる場合がある。しかし、大きい連続する仮想バッファがアプリケーション使用のために設けられる場合には、仮想連続空間プリファレンスを保つためにバッファ・フラグメントを使用することができる。これは、仮想メモリ上のバッファを連結するという追加の雑用からアプリケーションを助ける。
たとえば、データが転送される4メガバイトのアプリケーション・バッファを提供する、アプリケーションのRead()呼出しを検討されたい。これは、たとえば、大きいデータ・ファイルまたは表示のためのマルチメディア・ストリームの受信に備えたものとすることができる。オフロード・ネットワーク・アダプタは、このデータのうちの1500バイト部分を、ネットワークから受信された時にアプリケーション・バッファに直接に返すことができる。この配置は、このデータを連続した仮想(アプリケーション)空間で受け取ることを可能にし、アプリケーション側でのデータの再組立という追加の複雑さを省く。
その一方で、オフロード・ネットワーク・アダプタ1420は、アプリケーション・バッファが大きい連続仮想バッファの一部でない時にフラグメンテーションを許容して、受信データの配置を最適化することを選択することができる。フラグメンテーションの許容は、オフロード・ネットワーク・アダプタ1420からホスト・システム1410へおよびその逆に渡されるバッファの個数を減らすのを助ける可能性がある。したがって、データのゼロ・コピー転送、データのバッファリングされた転送、および共用バッファを許容することのほかに、本発明は、さらに、接続による使用のために割り振られるバッファの個数を最小にするために、部分的に充てんされたバッファを再利用する機構を提供する。
上で説明したように、オフロード・ネットワーク・アダプタが、それ自体とホスト・システムとの間で通信し、データを転送する形は、DMA動作を介するものである。通信の確立と同様に、オフロード・ネットワーク・アダプタは、オフロード・ネットワーク・アダプタおよびホスト・システムに/からデータを転送する時にこれらのDMA動作を遅延させることができ、その結果、データのバルク転送を達成できるようになる。すなわち、オフロード・ネットワーク・アダプタは、必ずしも、ホスト・システムがデータ転送を要求するや否やDMA要求を開始するのではない。オフロード・ネットワーク・アダプタが適当と考える時に、オフロード・ネットワーク・アダプタは、送られるデータに対していつDMA動作を開始するかを判断することができる。
たとえば、オフロード・ネットワーク・アダプタは、接続を介して送信すべき十分なデータをそのオフロード・ネットワーク・アダプタのメモリ内に既に有する場合に、その接続を介するデータの転送のためのDMA動作を遅延させることができる。オフロード・ネットワーク・アダプタは、さまざまな判断基準、たとえば、帯域幅と遅延との積の現在の推定値、輻輳ウィンドウ、そのオフロード・ネットワーク・アダプタで使用可能なメモリ、および類似物に基づいて、何がデータの「十分な」量を構成するかを決定することができる。オフロード・ネットワーク・アダプタは、公平なキューイング、接続に関連するアプリケーションに関連するサービス品質、サービスの区別など、他の可能な判断基準に基づいて判断を行うこともできる。
たとえば、アプリケーションのRead()呼出しが、データが転送される4メガバイトのアプリケーション・バッファを提供する場合を検討されたい。オフロード・ネットワーク・アダプタは、このデータのうちの1500バイト部分を、ネットワークから受信された時にバッファに直接に返すことができる。オフロード・ネットワーク・アダプタは、そのアプリケーションが、バルク・データ転送に備えて非常に大きいバッファを設けたことを認識することができ、その後、追加パケットの受信に備えて、ネットワークから受信される複数の1500バイト・パケットをバッチ化することができる。バルク転送での1500バイト・パケットの個数は、ホスト・システムとオフロード・ネットワーク・アダプタとの間の接続の特性の関数になるはずである。一例として、PCI−Expressなどのより新しいテクノロジは、データのより大きいブロック、たとば64Kを、より以前のPCI 2.1バス相互接続より効率的に移動することができる。
前に述べたように、データが、送信のためにアプリケーション・バッファに置かれる時に、バッファ送信要求記述子を、入力記述子テーブルにポストすることができる。このバッファ送信要求記述子には、そのデータの送信が優先されるか否かを示すas soon as possible(できる限り早く、ASAP)ビットを含めることができる。ASAPビットのセッティングは、さらに、DMA動作を遅延させるかどうか、およびどれだけ遅延させるかを決定する際にオフロード・ネットワーク・アダプタによって利用される判断基準とすることができる。もちろん、可能な時には必ず、オフロード・ネットワーク・アダプタは、このASAPビットのセッティングを介するデータの優先送信に関するホスト・システムの要求を尊重することを試みなければならない。
DMA動作は、プロセッサ・サイクル、必要なメモリ・リソース、および類似物に関する、固定されたセットアップ・コストならびにバイトあたりの転送コストを有する傾向がある。入出力バスをよりよく利用し、バイトあたりのコストに関するセットアップ・コストを減らすために、オフロード・ネットワーク・アダプタは、DMA転送に関する2つの要求が物理メモリの隣接領域に関するものであることを認識することによって、DMA転送を集約することができる。ホスト・システムは、たとえば、1接続あたりの大きいアプリケーション・バッファを割り振ることと、アプリケーション・バッファのサブセットに増分的に書き込むことと、それ相応にメモリの隣接サブセットに関する要求を生成することとによって、このプロセスを促進することを試みることができる。オフロード・ネットワーク・アダプタは、これらのサブセットを隣接するものとして認識し、これらのDMA転送を集約することができる。
一例として、記述子キューには、DMA転送のアドレスおよび長さの詳細な情報が含まれる。DMA動作を実行する前の隣接する記述子の検査によって、続くDMA要求が、単純に現在の要求の継続である、すなわち、メモリの隣接部分を対象とすることが示される場合がある。そうである場合に、両方のDMA転送を、行われる必要があるその両方のDMA動作を参照する単一の組み合わされた要求によって満足することができる。これは、これらのDMA転送のバルク通知を提供することによって、ホスト・システムとオフロード・ネットワーク・アダプタとの間のDMA転送要求処理のオーバーヘッドを減らす。
本発明は、十分な個数のDMAデータ転送が存在するようになるまで、DMAデータ転送を「蓄える」ことができる。「十分」を判定する判断基準は、上で述べたように変更することができる。十分な個数のDMAデータ転送が、実行の準備ができたならば、本発明は、これらのDMAデータ転送が行われる順序を決定する優先順位機構を使用する。したがって、本発明の1つの例示的実施形態で、DMA動作は、オフロード・ネットワーク・アダプタによって、優先順位機構に基づいてリオーダされ、その結果、長時間停止している接続および高優先順位の接続を優先できるようになる。
図15に、本発明の1つの例示的実施形態による例示的なDMA転送順序意思決定プロセスを示す。図15に示されているように、3つの接続すなわち接続A、B、およびCが確立されている。これらの接続は、A、B、およびCというセマンティック優先順位順序付けを与えられており、Aが、最上位のまたは優先される接続である。この優先順位順序付けは、たとえば、ユーザまたはホスト・システムによってアプリケーションまたはアプリケーション接続に割り当てられた優先順位に基づいて決定することができる。前に述べたように、オフロード・ネットワーク・アダプタは、確立された接続に関する情報を保管することができる。この優先順位情報は、オフロード・ネットワーク・アダプタ内で接続情報の一部として保管することができ、接続情報の残りと一緒にホスト・システムに複製することができる。この形では、優先順位情報は、DMA動作の順序付けを決定する際に使用するために、オフロード・ネットワーク・アダプタとホスト・システムの両方から使用可能にされる。
図示の時に、すべての接続が、接続A、B、およびCを介して送信すべき十分なデータをオフロード・ネットワーク・アダプタ1520上に有する。行う必要がある決定は、送信のためにアプリケーション・バッファ1530、1540、および1550からオフロード・ネットワーク・アダプタ・バッファ1560、1570、および1580にデータをDMA転送する順序に対するものである。
本発明を用いると、データのバルク転送は、送信動作とデータの送信に使用可能なアプリケーション・バッファ1530〜1550のアドレスとを記述した記述子のグループを入力記述子テーブル1590に保管することによって容易にされる。オフロード・ネットワーク・アダプタは、接続の指定された優先順位に基づいて、入力記述子テーブル1590内の記述子のリストをリオーダする。
記述子のリストのリオーダは、1つの例示的実施形態で、当初に、現在データが長時間停止している接続に基づいて実行される。すなわち、ある接続が、データが長時間停止している、すなわち、データが所定の時間期間の間のその接続を介して伝送されていない場合に、その接続を介する伝送に関するデータに関連する記述子が、記述子のリスト内で最初に順序付けられる。その後、記述子は、接続に関連する優先順位に基づいてリオーダされる。
したがって、図示の例によれば、入力記述子テーブル1590のエントリすなわち、接続A、B、およびCのバッファ送信要求記述子は、オフロード・ネットワーク・アダプタ1520によって読み取られ、リオーダされ、その結果、記述子のリオーダされたリストは、A1、A2、A3、B1、B2、B3、C1、C2、C3という順序を有するようになる。次に、データが、この順序でアプリケーション・バッファ1530〜1550から読み込まれ、優先順位が接続Aに与えられるようにオフロード・ネットワーク・アダプタ・バッファ1560〜1580に保管される。
したがって、本発明は、さらに、アプリケーション・バッファ、バッファ送信要求記述子、入力記述子テーブル、およびホスト・システムとオフロード・ネットワーク・アダプタとの間のDMA動作を使用するデータのバルク転送の機構を提供する。この形では、DMA動作を遅延することができ、その結果、ホスト・システムで稼動するアプリケーションの断片的な割込みでではなく、バルクでDMA動作を実行できるようになる。
図16は、本発明の1つの例示的実施形態の諸態様によるホスト・システムおよびオフロード・ネットワーク・アダプタを使用してデータを送信する時の例示的な動作の概要を示す流れ図である。図16に示されているように、この動作は、アプリケーションによってオペレーティング・システムに送られる、データを送信する要求(ステップ1610)から開始される。次に、このデータをアプリケーション・バッファからピン止めされたカーネル・バッファにコピーする(ステップ1620)。次に、バッファ送信記述子を入力記述子テーブルにポストする(ステップ1630)。
次に、オフロード・ネットワーク・アダプタは、DMA動作を介して、入力記述子テーブルの次のエントリを読み取る(ステップ1640)。この説明において、次のエントリは、バッファ送信記述子であると仮定する。入力記述子テーブルをバルク転送リストに保管し(ステップ1650)、遅延判断基準が満足されているかどうかに関する判定を行う(ステップ1660)。そうでない場合には、この動作はステップ1640に戻って、入力記述子テーブル内の次のエントリを読み取る。しかし、遅延判断基準が満足されている場合には、接続のうちのいずれかが長時間停止しているかどうかおよび接続優先順位に関する判定に基づいて、バルク転送リストを再編成する(ステップ1670)。
上で述べたように、この判定の一部として、バッファ送信記述子が、ASAPビットがセットされていることを示すかどうかを判定することができる。そうである場合には、遅延判断基準は、満足されていると判定され、可能な場合には、データの送信が即座に実行される。
その後、データを、DMA動作を介して、ピン止めされたカーネル・バッファから読み取り、バルク転送リストの再編成から決定された順序でオフロード・ネットワーク・アダプタによって送信する(ステップ1680)。次に、バッファ使用可能応答記述子を出力記述子テーブルにポストすることができ、この出力記述子テーブルが、ホスト・システム内で読み取られて、オフロード・ネットワーク・アダプタによるデータの送信が確認される(ステップ1690)。この動作は、その後、終了する。
図17は、本発明の1つの例示的実施形態の諸態様によるホスト・システムとオフロード・ネットワーク・アダプタとの間でのデータのゼロ・コピー転送を実行する時の例示的な動作の概要を示す流れ図である。図17に示されているように、この動作は、確立された接続を介してオフロード・ネットワーク・アダプタ内でデータを受信する(ステップ1710)ことによって開始される。次に、オフロード・ネットワーク・アダプタは、バッファ受信応答記述子を出力記述子テーブルにポストする(ステップ1720)。ホスト・システムは、出力記述子テーブル内の次のエントリを読み取る(ステップ1730)。この説明において、出力記述子テーブル内の次のエントリは、バッファ受信応答記述子であると仮定する。次に、出力記述子テーブル・エントリを、バルク転送リストに保管することができる(ステップ1740)。
遅延判断基準が満足されているかどうかに関する判定を行う(ステップ1750)。そうでない場合には、この動作はステップ1730に戻る。遅延判断基準が満足されている場合には、接続が長時間停止しているかどうかおよび接続優先順位に基づいて、バルク転送リストをリオーダする(ステップ1760)。次に、データを、バルク転送リストのリオーダから決定された順序で、DMA動作を使用して、データが存在する各接続に関連するアプリケーション・バッファに直接に転送する(ステップ1770)。次に、ホスト・システムは、完了したDMA動作ごとに、入力記述子テーブルにバッファ使用可能応答記述子をポストすることができる(ステップ1780)。この動作は、その後、終了する。
DMA動作を使用してデータが送られるアプリケーション・バッファに、1つまたは複数の共用アプリケーション・バッファを含めることができることを諒解されたい。したがって、1つまたは複数の共用アプリケーション・バッファを共用するさまざまな接続について受信されたデータを、その共用アプリケーション・バッファにDMA転送することができ、アプリケーションは、その共用アプリケーション・バッファからデータを取り出すことができる。これは、図16で説明したデータ送信動作にもあてはまる、すなわち、そこからデータが送信されるアプリケーション・バッファを、共用アプリケーション・バッファとすることができる。
したがって、本発明は、アプリケーション・バッファを共用し、データのバルク転送を達成できるようにホスト・システムとオフロード・ネットワーク・アダプタとの間の通信を遅延させ、ホスト・システムとオフロード・ネットワーク・アダプタとの間でデータのゼロ・コピー転送を行う機構を提供する。さらに、本発明は、それに送られたデータを既に有する同一のアプリケーション・バッファにデータを転送できるようにする部分的バッファ・データ転送の機構を提供する。
受信データの処理
接続確立およびメモリ管理のほかに、本発明は、オフロード・ネットワーク・アダプタを利用するデータ処理システムでの受信データの処理を改善する。上で述べたように、本発明のオフロード・ネットワーク・アダプタには、オフロード・ネットワーク・アダプタがホスト・システムへのデータ受信の通知を異なる形で遅延させることを可能にする論理を含めることができる。ホスト・システムへのデータ・パケット受信の通知を遅延させることの利点は、最初の1つの直後に到着する可能性がある複数のデータ・パケットを、たとえば単一の通知に集約する可能性である。連続するデータ・パケット到着を有するストリームを与えられて、通知遅延に関する値をセットすることができ、この値を、通信ソケットごとにホスト・システムについて構成可能とすることができる。
この遅延値は、静的にまたは動的にセットすることができる。たとえば、遅延値を、ソケット接続で受信されたデータのヒストリカル観察を介する、ある時間期間にわたって受信されたデータの速度または量に基づいてセットすることができる。一例を、特定の受信接続が、10ミリ秒にわたってデータの10個のパケットのバーストで動作し、その後、10秒間静止する場合に、ホスト・システムへの通知全体を減らすために、パケット到着のすべての通知を10ミリ秒だけ遅延させることが賢明である可能性があることとすることができる。
代替案では、ホスト・システムがアプリケーション・バッファを接続にポストしている速度を、監視し、この遅延値を動的にセットするための基礎として使用することができる。ホストが、特定の速度で、たとえば10ミリ秒おきに1回、アプリケーション・バッファをポストする場合に、オフロード・ネットワーク・アダプタからホスト・システムへのデータのゼロ・コピー転送のためにバッファが使用可能であることを保証するために、データ到着通知を10ミリ秒だけ遅延させることが意味をなすはずである。
もう1つの代替案として、ホスト・システムがデータ到着通知の後に接続のための新しいバッファをポストする速度を、監視し、この遅延値をセットするための基礎として使用することができる。これは、ホスト・システムが特定の接続からのデータを消費する速度を示す。たとえば、ホスト・システムが、あるバッファ内のデータを消費し、使用のためにオフロード・ネットワーク・アダプタにそのバッファをポストするのに10ミリ秒を要する場合がある。したがって、10ミリ秒の通知遅延は、オフロード・ネットワーク・アダプタとホスト・システムとの間のデータのゼロ・コピー転送用のデータ・バッファの置換を保証するのに賢明である可能性がある。
もう1つの代替案として、バッファ受信ポスト遅延の時間メトリックではなく、データの量を使用することができる。この場合に、遅延値は、データ・パケットの受信についてホスト・システムに通知する前に、ある量のデータが受信されるのを待つようにセットされる。データの量は、接続のセットアップでのオプションとしてホスト・システムによって静的に、またはヒストリカル観察に基づいてオフロード・ネットワーク・アダプタによって動的に、セットすることができる。遅延値のセッティングを決定する他の方法および機構を、本発明の趣旨および範囲から逸脱せずに使用することができる。
遅延の量を決定するのにどの代替実施形態が選択されるかにかかわりなく、最初のデータ到着とホスト・システムへのそのデータ到着の最終的な通知との間の最大遅延を識別するために、最大遅延値をオフロード・ネットワーク・アダプタ内で維持することができる。これは、データの到着とホスト・システムへのデータのその到着の通知との間に過度の遅延がないことを保証する。遅延値、最大遅延値、および遅延値を決定するのに必要な他の情報は、遅延値をセットする際の使用のためおよびオフロード・ネットワーク・アダプタからホスト・システムへの通知をどれほど長く遅延させるかを決定するために、オフロード・ネットワーク・アダプタ上のメモリに保管することができる。
本発明の動作の前の説明では、上で述べた1つまたは複数の代替案に従って決定された遅延値と、最大遅延値とが、遅延判断基準が満足されるかどうかの判定で利用される。たとえば、遅延判断基準が満足されるかどうかを判定する時に、最初のデータ・パケットの受信からのタイミング遅延の比較を、遅延値と比較することができる。タイミング遅延が、遅延値と一致するかこれを超えたならば、データ・パケットのバルク転送を、オフロード・ネットワーク・アダプタからホスト・システムへまたはその逆に行うことができる。同様に、遅延値が、データの量に関して提示される場合に、そこから最初のデータ・パケットが受信された接続を介して受信されたデータの量を、遅延値と比較して、データの量が遅延値でセットされたデータの量と一致しまたはこれを超えるかどうかを判定することができる。そうである場合には、オフロード・ネットワーク・アダプタからホスト・システムへまたはその逆のデータのバルク転送を、ホスト・システムまたはオフロード・ネットワーク・アダプタに送られたバルク・データ受信通知、たとえば入力記述子テーブルまたは出力記述子テーブルのいずれかにポストされたバッファ受信応答記述子を介して開始することができる。
現在の非インテリジェント・ホスト−ネットワーク・アダプタ・システムでは、すべてのデータが、ホストのオペレーティング・システム層内の非接続固有アプリケーション・バッファのプールを通過する。接続固有アプリケーション・バッファへのデータのゼロ・コピー転送が、本発明の機構を使用して可能であるならば、本発明は、接続固有のアプリケーション・バッファまたは共用アプリケーション・バッファが、データ受信のためにアプリケーションによって現在ポストされていない時の事例に関する判断プロセスを提供する。デフォルトで、接続固有のアプリケーション・バッファまたは共用アプリケーション・バッファが接続に割り振られていない場合に、本発明の判断プロセスは、非接続固有アプリケーション・バッファのプールからのバッファを使用して、オフロード・ネットワーク・アダプタからアプリケーションにデータを転送する。
しかし、本発明を用いると、ホスト・システムが供給した構成パラメータを、供給することができ、接続固有バッファが存在しない場合に、オフロード・ネットワーク・アダプタは、非接続固有アプリケーション・バッファを使用するのではなく、接続固有アプリケーション・バッファが割り振られるまで待つことができる。このパラメータは、オフロード・ネットワーク・アダプタのメモリに保管することができ、システムのデフォルト挙動をオーバーライドするのに使用することができ、その結果、オフロード・ネットワーク・アダプタは、データがホスト・システムにDMA転送される前に、接続固有アプリケーション・バッファが接続のために割り振られるまで待つようになる。この待機は、接続固有アプリケーション・バッファが割り振られる、または最大待機時間に一致するかこれを超えるのいずれかまで行うことができる。最大待機時間に一致するかこれを超える場合には、接続のためにオフロード・ネットワーク・アダプタに保管されたデータを、非接続固有アプリケーション・バッファにDMA転送することができる。
非接続固有アプリケーション・バッファを使用するというデフォルト挙動をオーバーライドするために事前定義のホスト供給の構成パラメータをセットするのではなく、ホスト・システムが接続固有アプリケーション・バッファを供給することのヒストリカル・データに基づいて、接続固有アプリケーション・バッファを待つかどうか、接続固有バッファをどれほど長く待つか、または接続固有アプリケーション・バッファを待たないかを判定することを可能にする論理を、オフロード・ネットワーク・アダプタ自体に与えることができる。
たとえば、ホスト・システムは、ヒストリカル・データで観察される時間枠の時間の100%で、ゼロ・コピー動作用の接続固有アプリケーション・データを供給している場合がある。すなわち、最後のx回のデータ転送で、接続固有アプリケーション・バッファが、これらのデータ転送を容易にするために、100%の時間で利用された。その結果、接続固有アプリケーション・バッファを待つという上の動作を実行することができる。
しかし、ヒストリカル・データが、100%の時間にデータ転送が接続固有アプリケーション・バッファを使用して実行されはしなかったことを示す場合には、接続固有アプリケーション・バッファが利用された時間のパーセンテージが所定の閾値量未満であるかどうかに関する判定を行う。そうである場合には、オフロード・ネットワーク・アダプタは、接続固有バッファが割り振られるのを待たず、非接続固有アプリケーション・バッファを利用することができる。代替案では、オフロード・ネットワーク・アダプタが接続固有アプリケーション・バッファを待つ時間の長さを、パーセンテージ値が所定の閾値未満であるかどうかに基づいて減らすことができる。データ転送が継続される時に、オフロード・ネットワーク・アダプタ内で維持されるヒストリカル・データを、各データ転送と共に移動する時間ウィンドウとすることができる。したがって、より多くのデータ転送が接続固有アプリケーション・バッファを使用して実行される時に、パーセンテージ値を、所定の閾値を超えて増やすことができ、システムは、接続固有アプリケーション・バッファが割り振られるのを待つことに戻るか、接続固有アプリケーション・バッファに関する最初の待ち時間に戻ることができる。
本発明の例示的実施形態のもう1つの態様では、非接続固有アプリケーション・バッファを、オフロード・ネットワーク・アダプタからホスト・システムへのデータのDMA転送で使用するためにプールから選択しなければならない場合に、本発明は、データを送るべき非接続固有アプリケーション・バッファを選択する、オフロード・ネットワーク・アダプタ内の論理を提供する。この論理は、バッファ・プール内のさまざまな非接続固有アプリケーション・バッファの特性のそれぞれを調べ、オフロード・ネットワーク・アダプタからホスト・システムに転送されるデータに関する最良一致をもたらすバッファを選択する。バッファに関する情報は、ホスト・システムまたはオフロード・ネットワーク・アダプタあるいはその両方で維持される接続情報から得ることができる。
たとえば、オフロード・ネットワーク・アダプタが、バッファ・プールからの非接続固有アプリケーション・バッファを使用しなければならないと判定する時に、オフロード・ネットワーク・アダプタは、プール内のバッファに関する特性情報をホスト・システムから読み込む。この特性情報は、たとえば、バッファのサイズ、バッファの速度、ホスト・プロセッサ・アーキテクチャ内のバッファの配置などとすることができる。これらの特性に基づいて、オフロード・ネットワーク・アダプタは、オフロード・ネットワーク・アダプタからホスト・システムへデータを転送するのに使用するための最良の候補であるバッファをプールから選択する。
一例として、選択プロセスがそれに対して調整される特性としてバッファ・サイズをとりあげると、バッファ・プールに、異なるサイズを有する、使用可能な複数の非接続固有アプリケーション・バッファがある場合がある。ある量のデータをホスト・システムに転送しなければならないと仮定して、オフロード・ネットワーク・アダプタは、そのデータを複数のバッファにまき散らすのではなく、そのデータを完全に含むのに十分なサイズを有する非接続固有アプリケーション・バッファをそのバッファ・プールから選択するはずである。上で述べた他の特性を、類似する形で使用して、特定のデータ転送に関する使用に最良のバッファを判定することができる。
図18は、本発明の1つの例示的実施形態の諸態様による、データを送るべきアプリケーション・バッファを判定する例示的動作の概要を示す流れ図である。図18に示されているように、この動作は、オフロード・ネットワーク・アダプタで、ホスト・システムに転送されるデータを受け取る(ステップ1810)ことによって開始される。受け取られたデータが向けられる接続のために接続固有アプリケーション・バッファが割り振られているかどうかに関する判定を行う(ステップ1820)。そうである場合には、DMA動作を使用して、そのデータを、割り振られている接続固有アプリケーション・バッファに送り(ステップ1830)、この動作は終了する。
データを向けられる接続固有アプリケーション・バッファが、接続のために割り振られていない場合(ステップ1820)には、待機パラメータがセットされているかどうかに関する判定を行う(ステップ1840)。そうである場合には、待機閾値を超えているかどうかに関する判定を行う(ステップ1850)。そうでない場合には、この動作は、ステップ1820にループ・バックし、待機閾値を超えるまで、または接続固有アプリケーション・バッファが割り振られるまでループし続ける。
待機閾値を超えている(ステップ1850)または待機パラメータがセットされていない(ステップ1840)場合には、バッファ・プール内の非接続固有アプリケーション・バッファに関する特性情報をホスト・システムから取り出す(ステップ1860)。次に、取り出された特性情報に基づいてこのプールから非接続固有アプリケーション・バッファを選択する(ステップ1870)。次に、DMA動作を使用して、選択された非接続固有アプリケーション・バッファに直接にデータを転送し(ステップ1880)、この動作は終了する。
追加の設計は、DMA配置に対するオプションとして、L3キャッシュ・アーキテクチャへのダイレクト・データ配置を可能にすることができる。すなわち、ホスト・システムによって提供されるキャッシュ注入(cache injection)機構および仮想アドレスを使用して、データをL3キャッシュにプッシュすることができる。アプリケーション・バッファ内のデータのDMA配置の代わりにまたはこれに加えて、すばやく処理される必要があるデータを、即座の処理のためにL3キャッシュに供給することができる。
特定のデータをL3キャッシュに注入すべきか否かを判断できる多数の形がある。たとえば、データをL3キャッシュに注入すべきかどうかの判定を、接続ごとにホスト・システムによって確立される明示的構成情報に基づくものとすることができる。代替案では、この判定を、キャッシュ・オーバーフロー状況がありそうであるかどうかを判定するために最近にL3キャッシュにどれほどのデータが既に注入されているかを監視することに基づくものとすることができる。L3キャッシュへのデータの注入が利益を得るかどうか、またはキャッシュ・オーバーフローを引き起こすかどうかを判定する他の機構も、使用することができる。
上で述べたように、このタイプのメモリ管理機構は、ウェブ要求/応答トラフィックなど、即座のCPUの注意を必要とする、ある種のトラフィックに好ましい可能性がある。ISCSIデータなど、ファイル・システムのためにプリフェッチされる他のタイプのデータは、しばらく必要でない場合があるので、DMAとしてより好都合である可能性がある。このパラメータは、ネットワーク読取の要求の出所または構成パラメータに基づいて識別することができる。
上で説明した代替実施形態が、L3キャッシュへのデータの注入に言及したが、この実施形態が、L3キャッシュと共に使用されることに限定されないことを諒解されたい。L3は、多数の既知のアーキテクチャで物理アドレス・マッピングを有するので、この例示的実施形態では好ましい。これは、データを入出力デバイスから直接に移動することの設計における複雑さを減らす。しかし、InfiniBandなどのシステム・エリア・ネットワークのRDMAネットワーク・アダプタなど、新生のネットワーク・アダプタでは、ユーザ・アドレスを供給することができ、このユーザ・アドレスは、仮想アドレス可能L3キャッシュならびにメモリ階層内の他のすべてのキャッシュへのデータ注入を可能にする。さらに、実アドレスから仮想アドレスへのアドレス変換を行うことができ、これによって、すべてのタイプのキャッシュに必要なアドレスが供給される。したがって、例示的な代替実施形態の機構を、システムの特定のアーキテクチャに応じて、任意のレベルのキャッシュに適用することができる。
本発明のもう1つの態様では、オフロード・ネットワーク・アダプタに、データ・バッファの、別々ではあるが順序通りのセグメントを再組立する論理を含めることができる。オフロード・ネットワーク・アダプタによって生成されつつある記述子を、その記述子を出力記述子テーブルにポストする前に検査して、移動されるデータが、連続する物理アドレス空間へのものであるかどうかを調べることができる。メモリ内の連続する物理アドレスを識別する複数の記述子が生成される場合には、複数の記述子を出力記述子テーブルにポストするのではなく、転送されるデータをオフロード・ネットワーク・アダプタ内で組み合わせることができ、単一の組み合わされた記述子を使用して、各データ転送を識別することができる。たとえば、TCP/IPセグメントを、適当なサイズのバッファ(たとえば、4Kページ整列されたデータ)に再組立し、バルクでホスト・システムに通信することができる。これは、ホスト・システムでのより簡単なデータ・バッファ管理およびより高い効率をもたらす。これは、潜在的に、これらの複数の接続をサービスするのに必要なバッファの個数を減らすことができる。
本発明の例示的実施形態のもう1つの態様では、オフロード・ネットワーク・アダプタに、受信パケット内のデータを検査するがそのデータを消費しない論理が与えられる。receive呼出しは、受信されたデータ・パケットの一部、たとえばヘッダのコピーをホスト・アプリケーションに供給できる「peek」オプションを指定することができる。これは、ホスト・アプリケーションが、ヘッダ・データを検査し、ペイロードをどのように消費できるかを判断することを可能にすることができる。一例として、アプリケーションが、ヘッダ識別子によってタグ付けされた異なるタイプのデータを受信することを期待している場合がある。これは、ヘッダおよびペイロード・データが可変長である場合に特に有用である。プログラムは、単に、すべてのヘッダの最大長について「peek」して、ヘッダ情報を調べることができる。ヘッダをpeekすることは、プログラムが、所期のプログラム・ストリームに基づいてデータ・パケットのペイロードが送られるアプリケーション・バッファを決定することを可能にすることができる。
したがって、オフロード・ネットワーク・アダプタ内で接続について「peek」オプションがセットされている場合には、ホスト・アプリケーションが、どのタイプのデータが受信されつつあり、どのソケットすなわち接続を介してデータ・パケット・ペイロードが伝送されるかを判定する時に、受信データ・パケットのヘッダのコピーがホスト・アプリケーションに供給される。たとえば、アプリケーションは、ビデオ・データおよびオーディオ・データについて別々の接続を有する場合がある。ヘッダから、そのアプリケーションは、データ・パケットのペイロード内のデータのタイプを判定できる場合がある。データがビデオ・データである場合には、peek動作は、そのデータ・パケット・ペイロードを第1接続に関連するアプリケーション・バッファにDMA転送しなければならないとホスト・アプリケーションが指定することを可能にする。データがオーディオ・データである場合には、peek動作は、そのデータ・パケット・ペイロードを第2接続に関連するアプリケーション・バッファにDMA転送しなければならないとホスト・アプリケーションが指定することを可能にする。
このpeek動作を補完するために、オフセット付きでデータを読み取るオプションが提供される。この形では、データ・パケットのペイロードを、peekされたヘッダから簡単に分離することができる。すなわち、ホスト・アプリケーションは、ヘッダの実際のサイズを知っているので、データ・パケットを処理する時にヘッダをスキップする際に使用するために、オフセットを生成し、保管することができる。これは、ヘッダが、peek動作で指定されるバイト数より小さい時に最も有用である。
本発明を、完全に機能するデータ処理システムの文脈で説明してきたが、本発明のプロセスを、命令のコンピュータ可読媒体の形およびさまざまな形で配布できることと、本発明が、配布の実行に実際に使用される信号担持媒体の特定のタイプに関わりなく同等に適用されることとを当業者が諒解するであろうことに留意することが重要である。コンピュータ可読媒体の例に、フロッピ・ディスク、ハード・ディスク・ドライブ、RAM、CD−ROM、DVD−ROMなどの記録可能型媒体、ならびに、ディジタル通信リンクと、アナログ通信リンクと、たとえばラジオ周波数伝送および光波伝送などの伝送形式を使用する有線または無線の通信リンクとなどの伝送型媒体が含まれる。コンピュータ可読媒体は、特定のデータ処理システムでの実際の使用のためにデコードされるコーディングされたフォーマットの形をとることができる。
本発明の説明は、例示および説明のために提示されたものであって、網羅的であることまたは開示された形の発明に制限されることを意図されたものではない。多数の修正形態および変形形態が、当業者に明白になるであろう。この実施形態は、本発明および実用的応用例の原理を最もよく説明するため、および、企図される特定の使用に適するさまざまな修正を伴うさまざまな実施形態のために当業者が本発明を理解することを可能にするために選択され、説明されたものである。
本発明の諸態様を実施できる分散データ処理システムを示す例示的な図である。 本発明の諸態様を実施できるサーバ・コンピューティング・デバイスを示す例示的な図である。 本発明の諸態様を実施できるクライアント・コンピューティング・デバイスを示す例示的な図である。 本発明の1つの例示的実施形態によるネットワーク・アダプタを示す例示的な図である。 普通のネットワーク・インターフェース・カードを利用するシステムでのTCP/IP処理を示す図である。 TCP/IPオフロード・エンジンまたはオフロード・ネットワーク・アダプタを利用するシステムでのTCP/IP処理を示す図である。 本発明のオフロード・ネットワーク・アダプタ・プログラミング・インターフェースに関する本発明の1つの例示的実施形態の諸態様を示す例示的な図である。 オフロード・ネットワーク・アダプタおよびオフロード・ネットワーク・アダプタ・プログラミング・インターフェースを使用する接続の確立に関する本発明の1つの例示的実施形態の諸態様を示す例示的な図である。 オフロード・ネットワーク・アダプタを使用して接続を確立する時の本発明のホスト・システムの例示的動作の概要を示す流れ図である。 本発明の1つの例示的実施形態に従って接続を確立する時のオフロード・ネットワーク・アダプタの例示的動作の概要を示す流れ図である。 データのバッファリングされた送信およびバッファリングされた受信が利用される、本発明によるメモリ管理機構を示す例示的な図である。 本発明の1つの例示的実施形態によるゼロ・コピー動作を示す例示的な図である。 本発明の1つの例示的実施形態による共用バッファ配置を示す例示的な図である。 本発明の1つの例示的実施形態による部分的受信/送信バッファが動作する形を示す図である。 本発明の1つの例示的実施形態による例示的なDMA転送順序意思決定プロセスを示す図である。 本発明の1つの例示的実施形態の諸態様によるホスト・システムおよびオフロード・ネットワーク・アダプタを使用してデータを送信する時の例示的な動作の概要を示す流れ図である。 本発明の1つの例示的実施形態の諸態様によるホスト・システムとオフロード・ネットワーク・アダプタとの間でのデータのゼロ・コピー転送を実行する時の例示的な動作の概要を示す流れ図である。 本発明の1つの例示的実施形態の諸態様による、データを送るべきアプリケーション・バッファを判定する例示的動作の概要を示す流れ図である。

Claims (30)

  1. データ処理システムにおいて、ホスト・システムとネットワーク・アダプタとの間でデータを転送する方法であって、
    ホスト・システムとネットワーク・アダプタとの間での転送のためにデータを第1バッファに受け取ることと、
    前記データを移動する先の第2バッファを識別することと、
    前記データを前記第1バッファから前記第2バッファにダイレクト・メモリ・アクセス動作を使用して直接に送ることであって、中間バッファへのコピーが実行されない、送ることと
    を含む方法。
  2. 前記第1バッファが、ホスト・システム・メモリ内にあり、前記第2バッファが、ネットワーク・アダプタ・メモリ内にある、請求項1に記載の方法。
  3. 前記第1バッファが、ネットワーク・アダプタ・メモリ内にあり、前記第2バッファが、ホスト・システム・メモリ内にある、請求項1に記載の方法。
  4. 前記第2バッファが、単一の固有の接続に割り振られた接続固有アプリケーション・バッファである、請求項3に記載の方法。
  5. 前記第2バッファが、複数の接続によって共用される共用アプリケーション・バッファである、請求項3に記載の方法。
  6. 前記第2バッファへの転送のために追加データを前記第1バッファに受け取ることと、
    前記追加データを受け取るために第3バッファを割り振るのではなく、前記第1バッファから前記第2バッファに前記追加データを直接に送ることと
    をさらに含む、請求項3に記載の方法。
  7. 前記データを前記第1バッファから前記第2バッファにダイレクト・メモリ・アクセス動作を使用して直接に送ることが、
    遅延判断基準が満足されているかどうかを判定することと、
    前記遅延判断基準が満足されている場合に限って前記第1バッファから前記第2バッファに前記データを送ることと
    を含む、請求項1に記載の方法。
  8. 前記遅延判断基準が満足されていない場合に、前記データに関連する記述子をバルク転送リストに追加することと、
    前記遅延判断基準が満足されたならば、前記バルク転送リスト内の記述子に対応するデータを前記ネットワーク・アダプタ内のバッファから前記ホスト・システム内のバッファへダイレクト・メモリ・アクセス動作を使用して転送することと
    をさらに含む、請求項7に記載の方法。
  9. 前記記述子に関連する接続に関連する優先順位に従って前記バルク転送リスト内の前記記述子をリオーダすることであって、前記記述子に対応するデータを転送することが、前記バルク転送リスト内の前記リオーダされた記述子によって指定される順序で前記データを転送することを含む、リオーダすること
    をさらに含む、請求項8に記載の方法。
  10. 前記バルク転送リスト内の前記記述子をリオーダすることが、データが長時間停止していると判定される接続に関連する記述子を優先することを含む、請求項9に記載の方法。
  11. ホスト・システムとネットワーク・アダプタとの間でデータを転送するシステムであって、
    ホスト・システムとネットワーク・アダプタとの間での転送のためにデータを第1バッファに受け取る手段と、
    前記データを移動する先の第2バッファを識別する手段と、
    前記データを前記第1バッファから前記第2バッファにダイレクト・メモリ・アクセス動作を使用して直接に送る手段であって、中間バッファへのコピーが実行されない、手段と
    を含むシステム。
  12. 前記第1バッファが、ホスト・システム・メモリ内にあり、前記第2バッファが、ネットワーク・アダプタ・メモリ内にある、請求項11に記載のシステム。
  13. 前記第1バッファが、ネットワーク・アダプタ・メモリ内にあり、前記第2バッファが、ホスト・システム・メモリ内にある、請求項11に記載のシステム。
  14. 前記第2バッファが、単一の固有の接続に割り振られた接続固有アプリケーション・バッファである、請求項13に記載のシステム。
  15. 前記第2バッファが、複数の接続によって共用される共用アプリケーション・バッファである、請求項13に記載のシステム。
  16. 前記第2バッファへの転送のために追加データを前記第1バッファに受け取る手段と、
    前記追加データを受け取るために第3バッファを割り振るのではなく、前記第1バッファから前記第2バッファに前記追加データを直接に送る手段と
    をさらに含む、請求項13に記載のシステム。
  17. 前記データを前記第1バッファから前記第2バッファにダイレクト・メモリ・アクセス動作を使用して直接に送る前記手段が、
    遅延判断基準が満足されているかどうかを判定する手段と、
    前記遅延判断基準が満足されている場合に限って前記第1バッファから前記第2バッファに前記データを送る手段と
    を含む、請求項11に記載のシステム。
  18. 前記遅延判断基準が満足されていない場合に、前記データに関連する記述子をバルク転送リストに追加する手段と、
    前記遅延判断基準が満足されたならば、前記バルク転送リスト内の記述子に対応するデータを前記ネットワーク・アダプタ内のバッファから前記ホスト・システム内のバッファへダイレクト・メモリ・アクセス動作を使用して転送する手段と
    をさらに含む、請求項17に記載のシステム。
  19. 前記記述子に関連する接続に関連する優先順位に従って前記バルク転送リスト内の前記記述子をリオーダする手段であって、前記記述子に対応するデータを転送する手段が、前記バルク転送リスト内の前記リオーダされた記述子によって指定される順序で前記データを転送する手段を含む、リオーダする手段
    をさらに含む、請求項18に記載のシステム。
  20. 前記バルク転送リスト内の前記記述子をリオーダする手段が、データが長時間停止していると判定される接続に関連する記述子を優先する手段を含む、請求項19に記載のシステム。
  21. ホスト・システムとネットワーク・アダプタとの間でデータを転送する、コンピュータ可読媒体内のコンピュータ・プログラム製品であって、
    ホスト・システムとネットワーク・アダプタとの間での転送のためにデータを第1バッファに受け取る第1命令と、
    前記データを移動する先の第2バッファを識別する第2命令と、
    前記データを前記第1バッファから前記第2バッファにダイレクト・メモリ・アクセス動作を使用して直接に送る第3命令であって、中間バッファへのコピーが実行されない、第3命令と
    を含むコンピュータ・プログラム製品。
  22. 前記第1バッファが、ホスト・システム・メモリ内にあり、前記第2バッファが、ネットワーク・アダプタ・メモリ内にある、請求項21に記載のコンピュータ・プログラム製品。
  23. 前記第1バッファが、ネットワーク・アダプタ・メモリ内にあり、前記第2バッファが、ホスト・システム・メモリ内にある、請求項21に記載のコンピュータ・プログラム製品。
  24. 前記第2バッファが、単一の固有の接続に割り振られた接続固有アプリケーション・バッファである、請求項23に記載のコンピュータ・プログラム製品。
  25. 前記第2バッファが、複数の接続によって共用される共用アプリケーション・バッファである、請求項23に記載のコンピュータ・プログラム製品。
  26. 前記第2バッファへの転送のために追加データを前記第1バッファに受け取る第4命令と、
    前記追加データを受け取るために第3バッファを割り振るのではなく、前記第1バッファから前記第2バッファに前記追加データを直接に送る第5命令と
    をさらに含む、請求項23に記載のコンピュータ・プログラム製品。
  27. 前記データを前記第1バッファから前記第2バッファにダイレクト・メモリ・アクセス動作を使用して直接に送る第3命令が、
    遅延判断基準が満足されているかどうかを判定する命令と、
    前記遅延判断基準が満足されている場合に限って前記第1バッファから前記第2バッファに前記データを送る命令と
    を含む、請求項21に記載のコンピュータ・プログラム製品。
  28. 前記遅延判断基準が満足されていない場合に、前記データに関連する記述子をバルク転送リストに追加する命令と、
    前記遅延判断基準が満足されたならば、前記バルク転送リスト内の記述子に対応するデータを前記ネットワーク・アダプタ内のバッファから前記ホスト・システム内のバッファへダイレクト・メモリ・アクセス動作を使用して転送する命令と
    をさらに含む、請求項27に記載のコンピュータ・プログラム製品。
  29. 前記記述子に関連する接続に関連する優先順位に従って前記バルク転送リスト内の前記記述子をリオーダする命令であって、前記記述子に対応するデータを転送することが、前記バルク転送リスト内の前記リオーダされた記述子によって指定される順序で前記データを転送することを含む、命令
    をさらに含む、請求項28に記載のコンピュータ・プログラム製品。
  30. 前記バルク転送リスト内の前記記述子をリオーダする命令が、データが長時間停止していると判定される接続に関連する記述子を優先する命令を含む、請求項29に記載のコンピュータ・プログラム製品。
JP2007521465A 2004-07-14 2005-05-23 ネットワーク・プロトコル処理のオフロードにおいてメモリ管理をサポートする装置および方法 Active JP4886685B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/890,978 2004-07-14
US10/890,978 US7930422B2 (en) 2004-07-14 2004-07-14 Apparatus and method for supporting memory management in an offload of network protocol processing
PCT/US2005/018006 WO2006046972A1 (en) 2004-07-14 2005-05-23 Apparatus and method for supporting memory management in an offload of network protocol processing

Publications (3)

Publication Number Publication Date
JP2008507030A true JP2008507030A (ja) 2008-03-06
JP2008507030A5 JP2008507030A5 (ja) 2008-05-15
JP4886685B2 JP4886685B2 (ja) 2012-02-29

Family

ID=34971167

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007521465A Active JP4886685B2 (ja) 2004-07-14 2005-05-23 ネットワーク・プロトコル処理のオフロードにおいてメモリ管理をサポートする装置および方法

Country Status (9)

Country Link
US (3) US7930422B2 (ja)
EP (1) EP1784735B1 (ja)
JP (1) JP4886685B2 (ja)
KR (1) KR101006260B1 (ja)
CN (1) CN100468377C (ja)
AT (1) ATE424583T1 (ja)
CA (1) CA2573156C (ja)
DE (1) DE602005013099D1 (ja)
WO (1) WO2006046972A1 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008299581A (ja) * 2007-05-31 2008-12-11 Mitsubishi Electric Corp データ転送制御装置
JP2010519785A (ja) * 2006-11-08 2010-06-03 スタンダード マイクロシステムズ コーポレーション ネットワーク・トラフィック・コントローラ
JP2010183450A (ja) * 2009-02-06 2010-08-19 Fujitsu Ltd ネットワークインターフェース装置
JP2013543169A (ja) * 2010-09-15 2013-11-28 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境を含むシステム
US9185054B2 (en) 2010-09-15 2015-11-10 Oracle International Corporation System and method for providing zero buffer copying in a middleware machine environment
JP2016123081A (ja) * 2008-06-19 2016-07-07 クゥアルコム・インコーポレイテッドQualcomm Incorporated Wwan技術のためのハードウェアアクセラレーション
US9495392B2 (en) 2010-09-15 2016-11-15 Oracle International Corporation System and method for parallel multiplexing between servers in a cluster

Families Citing this family (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002084499A1 (en) * 2001-04-11 2002-10-24 Chelsio Communications, Inc. Multi-purpose switching network interface controller
US8572289B1 (en) * 2003-12-19 2013-10-29 Nvidia Corporation System, method and computer program product for stateless offloading of upper level network protocol operations
US8413155B2 (en) 2004-03-13 2013-04-02 Adaptive Computing Enterprises, Inc. System and method for a self-optimizing reservation in time of compute resources
US20070266388A1 (en) 2004-06-18 2007-11-15 Cluster Resources, Inc. System and method for providing advanced reservations in a compute environment
US7930422B2 (en) * 2004-07-14 2011-04-19 International Business Machines Corporation Apparatus and method for supporting memory management in an offload of network protocol processing
US7533176B2 (en) * 2004-07-14 2009-05-12 International Business Machines Corporation Method for supporting connection establishment in an offload of network protocol processing
US8127045B2 (en) * 2004-09-13 2012-02-28 Apple Inc. Dynamically configurable connection on demand
WO2006053093A2 (en) 2004-11-08 2006-05-18 Cluster Resources, Inc. System and method of providing system jobs within a compute environment
WO2006107531A2 (en) 2005-03-16 2006-10-12 Cluster Resources, Inc. Simple integration of an on-demand compute environment
US9231886B2 (en) 2005-03-16 2016-01-05 Adaptive Computing Enterprises, Inc. Simple integration of an on-demand compute environment
CA2603577A1 (en) 2005-04-07 2006-10-12 Cluster Resources, Inc. On-demand access to compute resources
US20060259658A1 (en) * 2005-05-13 2006-11-16 Connor Patrick L DMA reordering for DCA
WO2007006146A1 (en) * 2005-07-12 2007-01-18 Advancedio Systems Inc. System and method of offloading protocol functions
US7616563B1 (en) 2005-08-31 2009-11-10 Chelsio Communications, Inc. Method to implement an L4-L7 switch using split connections and an offloading NIC
US7660306B1 (en) 2006-01-12 2010-02-09 Chelsio Communications, Inc. Virtualizing the operation of intelligent network interface circuitry
US7724658B1 (en) 2005-08-31 2010-05-25 Chelsio Communications, Inc. Protocol offload transmit traffic management
US8949154B2 (en) * 2005-10-07 2015-02-03 Google Inc. Content feed user interface with gallery display of same-type items
US8190997B2 (en) * 2005-10-07 2012-05-29 Google Inc. Personalized content feed suggestions page
US7735099B1 (en) * 2005-12-23 2010-06-08 Qlogic, Corporation Method and system for processing network data
US20070233886A1 (en) * 2006-04-04 2007-10-04 Fan Kan F Method and system for a one bit TCP offload
US7764676B1 (en) * 2006-07-31 2010-07-27 Qlogic, Corporation Method and system for processing network information
US8230361B2 (en) * 2006-09-28 2012-07-24 Google Inc. Content feed user interface
US8645497B2 (en) * 2006-09-28 2014-02-04 Google Inc. Bookmark-based access to content feeds
US8694607B2 (en) * 2006-10-06 2014-04-08 Google Inc. Recursive subscriptions to content feeds
US7835391B2 (en) * 2007-03-07 2010-11-16 Texas Instruments Incorporated Protocol DMA engine
US8935406B1 (en) 2007-04-16 2015-01-13 Chelsio Communications, Inc. Network adaptor configured for connection establishment offload
US8589587B1 (en) * 2007-05-11 2013-11-19 Chelsio Communications, Inc. Protocol offload in intelligent network adaptor, including application level signalling
US8060644B1 (en) 2007-05-11 2011-11-15 Chelsio Communications, Inc. Intelligent network adaptor with end-to-end flow control
US7936772B2 (en) * 2007-07-13 2011-05-03 International Business Machines Corporation Enhancement of end-to-end network QoS
US8060634B1 (en) * 2007-09-26 2011-11-15 Google Inc. Determining and displaying a count of unread items in content feeds
US10025871B2 (en) 2007-09-27 2018-07-17 Google Llc Setting and displaying a read status for items in content feeds
CN101425047B (zh) * 2007-11-02 2010-10-13 北京华旗资讯数码科技有限公司 实现安全卸载移动电子设备的方法
US8316276B2 (en) 2008-01-15 2012-11-20 Hicamp Systems, Inc. Upper layer protocol (ULP) offloading for internet small computer system interface (ISCSI) without TCP offload engine (TOE)
US9584446B2 (en) * 2008-03-18 2017-02-28 Vmware, Inc. Memory buffer management method and system having multiple receive ring buffers
US8321651B2 (en) * 2008-04-02 2012-11-27 Qualcomm Incorporated System and method for memory allocation in embedded or wireless communication systems
US7944946B2 (en) 2008-06-09 2011-05-17 Fortinet, Inc. Virtual memory protocol segmentation offloading
US9110885B2 (en) * 2008-09-18 2015-08-18 International Business Machines Corporation Techniques for cache injection in a processor system
US8443146B2 (en) * 2008-09-18 2013-05-14 International Business Machines Corporation Techniques for cache injection in a processor system responsive to a specific instruction sequence
US9256540B2 (en) * 2008-09-18 2016-02-09 International Business Machines Corporation Techniques for cache injection in a processor system using a cache injection instruction
US8429349B2 (en) * 2008-09-18 2013-04-23 International Business Machines Corporation Techniques for cache injection in a processor system with replacement policy position modification
US9336145B2 (en) * 2009-04-09 2016-05-10 International Business Machines Corporation Techniques for cache injection in a processor system based on a shared state
US9268703B2 (en) * 2009-04-15 2016-02-23 International Business Machines Corporation Techniques for cache injection in a processor system from a remote node
KR20110024147A (ko) * 2009-09-01 2011-03-09 삼성전자주식회사 저항성 메모리 장치의 저항 드리프트를 보상할 수 있는 메모리 시스템 및 메모리 시스템의 데이터 처리 방법
US11720290B2 (en) 2009-10-30 2023-08-08 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
IL211490A (en) * 2010-03-02 2016-09-29 Marvell Israel(M I S L ) Ltd Early next packets of information
US8214448B2 (en) * 2010-04-20 2012-07-03 International Business Machines Corporation Optimized utilization of DMA buffers for incoming data packets in a network protocol
CN102223307B (zh) * 2011-06-29 2017-02-15 中兴通讯股份有限公司 一种处理套接字的方法、分组数据传输的方法及装置
CN102857480B (zh) * 2011-06-30 2014-12-10 北京新媒传信科技有限公司 一种数据采集系统及其数据采集的方法
US8688914B2 (en) 2011-11-01 2014-04-01 International Business Machines Corporation Promotion of partial data segments in flash cache
US8947228B2 (en) * 2012-04-05 2015-02-03 Schneider Electric Industries Sas Diagnostics of hot-standby/redundant owner system in an EtherNet/IP adapter device
US9063928B2 (en) 2012-07-12 2015-06-23 International Business Machines Corporation Processing data packets from a receive queue in a remote direct memory access device
US9246982B2 (en) * 2012-09-14 2016-01-26 Microsoft Technology Licensing, Llc Reducing network usage of computing device
JP5677393B2 (ja) * 2012-09-27 2015-02-25 株式会社東芝 情報処理装置および命令のオフローディング方法
US10311014B2 (en) * 2012-12-28 2019-06-04 Iii Holdings 2, Llc System, method and computer readable medium for offloaded computation of distributed application protocols within a cluster of data processing nodes
WO2014113055A1 (en) * 2013-01-17 2014-07-24 Xockets IP, LLC Offload processor modules for connection to system memory
US9143403B2 (en) * 2013-06-19 2015-09-22 Hewlett-Packard Development Company, L.P. Autonomous metric tracking and adjustment
US9104334B2 (en) 2013-08-20 2015-08-11 Avago Technologies General Ip (Singapore) Pte. Ltd Performance improvements in input/output operations between a host system and an adapter-coupled cache
US9692642B2 (en) * 2014-02-26 2017-06-27 Red Hat, Inc. Offloading to a network interface card
US9680774B2 (en) 2014-02-26 2017-06-13 Red Hat, Inc. Network interface card offloading
US9317678B2 (en) * 2014-03-25 2016-04-19 Avago Technologies General Ip (Singapore) Pte. Ltd. System and method for managing logins in a network interface
FR3019339B1 (fr) * 2014-03-25 2016-04-01 Commissariat Energie Atomique Procede de transfert de donnees entre taches temps reel utilisant un controleur memoire dma
CN104639525A (zh) * 2014-06-30 2015-05-20 北京阅联信息技术有限公司 一种用于数据处理通道缓冲匹配的属性标识方法
US10083131B2 (en) 2014-12-11 2018-09-25 Ampere Computing Llc Generating and/or employing a descriptor associated with a memory translation table
US10540317B2 (en) 2015-07-08 2020-01-21 International Business Machines Corporation Efficient means of combining network traffic for 64Bit and 31 bit workloads
KR20180043451A (ko) 2016-10-19 2018-04-30 삼성전자주식회사 컴퓨팅 시스템 및 그것의 동작 방법
US10516710B2 (en) 2017-02-12 2019-12-24 Mellanox Technologies, Ltd. Direct packet placement
US11979340B2 (en) 2017-02-12 2024-05-07 Mellanox Technologies, Ltd. Direct data placement
US10210125B2 (en) * 2017-03-16 2019-02-19 Mellanox Technologies, Ltd. Receive queue with stride-based data scattering
CN107167174B (zh) * 2017-04-05 2018-03-20 中北大学 分布式微型数据采集系统
US11252464B2 (en) 2017-06-14 2022-02-15 Mellanox Technologies, Ltd. Regrouping of video data in host memory
US10367750B2 (en) 2017-06-15 2019-07-30 Mellanox Technologies, Ltd. Transmission and reception of raw video using scalable frame rate
KR101977850B1 (ko) 2017-09-15 2019-05-13 단국대학교 산학협력단 네트워크 인터페이스를 위한 어플리케이션 오프로딩 장치 및 방법
US11128575B2 (en) 2018-07-20 2021-09-21 Bank Of America Corporation System for increasing processing efficiency through automated resource field transformation
US11379404B2 (en) * 2018-12-18 2022-07-05 Sap Se Remote memory management
CN112953967A (zh) * 2021-03-30 2021-06-11 扬州万方电子技术有限责任公司 网络协议卸载装置和数据传输系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63276345A (ja) * 1987-05-08 1988-11-14 Nippon Telegr & Teleph Corp <Ntt> 通信制御装置の受信制御方式
WO2003104943A2 (en) * 2002-06-11 2003-12-18 Ashish A Pandya High performance ip processor for tcp/ip, rdma and ip storage applications

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01244666A (ja) 1988-03-25 1989-09-29 Nec Corp 半導体装置の製造方法
JP2624388B2 (ja) 1991-04-24 1997-06-25 松下電子工業株式会社 Dma装置
US5453847A (en) * 1993-11-01 1995-09-26 Motorola, Inc. LCD facsimile transmission
EP0707266B1 (en) 1994-10-11 2002-01-09 Sun Microsystems, Inc. Methods and apparatus for a data transfer mechanism in the field of computer systems
US5659758A (en) 1995-07-07 1997-08-19 Sun Microsystems, Inc. Interrupt modular for receiving bursty high speed network traffic
US5664116A (en) * 1995-07-07 1997-09-02 Sun Microsystems, Inc. Buffering of data for transmission in a computer communication system interface
US5978359A (en) * 1995-07-19 1999-11-02 Fujitsu Network Communications, Inc. Allocated and dynamic switch flow control
US5943479A (en) * 1997-01-02 1999-08-24 Digital Equipment Corporation Method for reducing the rate of interrupts in a high speed I/O controller
US5903733A (en) * 1997-02-13 1999-05-11 Toshiba America Information Systems, Inc. Multifunction peripheral controller
US5978849A (en) * 1997-06-13 1999-11-02 International Business Machines Corporation Systems, methods, and computer program products for establishing TCP connections using information from closed TCP connections in time-wait state
JP3712842B2 (ja) * 1997-08-05 2005-11-02 株式会社リコー データ転送制御方法、データ転送制御装置及び情報記録媒体
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
JPH11232195A (ja) * 1998-02-09 1999-08-27 Nec Eng Ltd 入出力処理装置の制御方式
US6154728A (en) * 1998-04-27 2000-11-28 Lucent Technologies Inc. Apparatus, method and system for distributed and automatic inventory, status and database creation and control for remote communication sites
US7020712B1 (en) * 1998-09-30 2006-03-28 Cisco Technology, Inc. Reducing CPU overhead in the forwarding process in an inbound/outbound controller for a router
DE69932317T2 (de) 1999-04-12 2007-07-05 International Business Machines Corp. Selbstanpassende Lastausgleichung in einem verbindungsorientierten Datenübertragungssystem
IT1308484B1 (it) * 1999-05-13 2001-12-17 Cselt Centro Studi Lab Telecom Apparecchiatura per la rimultiplazione di flussi audiovisivinumerizzati
JP2001014243A (ja) * 1999-07-01 2001-01-19 Mitsubishi Electric Corp 受信割込処理装置
JP3528170B2 (ja) 1999-07-09 2004-05-17 日本電気株式会社 ダイヤルアップインターネット接続分岐システム及び方法
EP1219068B1 (de) * 1999-08-13 2007-12-26 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Haus-kommunikationssystem, transportplattform für ein haus-kommunikationssystem und intelligentes netzabschlussgerät für ein haus-kommunikationssystem
US6775707B1 (en) 1999-10-15 2004-08-10 Fisher-Rosemount Systems, Inc. Deferred acknowledgment communications and alarm management
US20030061362A1 (en) * 2000-03-03 2003-03-27 Qiu Chaoxin C. Systems and methods for resource management in information storage environments
US6735620B1 (en) * 2000-07-18 2004-05-11 International Business Machines Corporation Efficient protocol for retransmit logic in reliable zero copy message transport
US20020191603A1 (en) * 2000-11-22 2002-12-19 Yeshik Shin Method and system for dynamic segmentation of communications packets
US20030046330A1 (en) * 2001-09-04 2003-03-06 Hayes John W. Selective offloading of protocol processing
US7159048B2 (en) * 2001-12-10 2007-01-02 Emulex Design & Manufacturing Corporation Direct memory access (DMA) transfer buffer processor
US7181531B2 (en) * 2002-04-30 2007-02-20 Microsoft Corporation Method to synchronize and upload an offloaded network stack connection with a network stack
US7113479B2 (en) * 2002-05-31 2006-09-26 Broadcom Corporation Aggregated rate control method and system
US7346701B2 (en) * 2002-08-30 2008-03-18 Broadcom Corporation System and method for TCP offload
WO2004021150A2 (en) 2002-08-30 2004-03-11 Broadcom Corporation System and method for tpc/ip offload independent of bandwidth delay product
US6711650B1 (en) * 2002-11-07 2004-03-23 International Business Machines Corporation Method and apparatus for accelerating input/output processing using cache injections
US7152033B2 (en) * 2002-11-12 2006-12-19 Motorola, Inc. Method, system and module for multi-modal data fusion
US7305493B2 (en) * 2002-11-27 2007-12-04 Intel Corporation Embedded transport acceleration architecture
US6996070B2 (en) * 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US7720930B2 (en) * 2003-12-30 2010-05-18 Intel Corporation Systems and methods using NIC-based prefetching for host TCP context lookup
US7930422B2 (en) * 2004-07-14 2011-04-19 International Business Machines Corporation Apparatus and method for supporting memory management in an offload of network protocol processing
US7493427B2 (en) * 2004-07-14 2009-02-17 International Business Machines Corporation Apparatus and method for supporting received data processing in an offload of network protocol processing
US7533176B2 (en) 2004-07-14 2009-05-12 International Business Machines Corporation Method for supporting connection establishment in an offload of network protocol processing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63276345A (ja) * 1987-05-08 1988-11-14 Nippon Telegr & Teleph Corp <Ntt> 通信制御装置の受信制御方式
WO2003104943A2 (en) * 2002-06-11 2003-12-18 Ashish A Pandya High performance ip processor for tcp/ip, rdma and ip storage applications

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010519785A (ja) * 2006-11-08 2010-06-03 スタンダード マイクロシステムズ コーポレーション ネットワーク・トラフィック・コントローラ
JP4870819B2 (ja) * 2006-11-08 2012-02-08 スタンダード マイクロシステムズ コーポレーション ネットワーク・トラフィック・コントローラ
JP2008299581A (ja) * 2007-05-31 2008-12-11 Mitsubishi Electric Corp データ転送制御装置
JP2016123081A (ja) * 2008-06-19 2016-07-07 クゥアルコム・インコーポレイテッドQualcomm Incorporated Wwan技術のためのハードウェアアクセラレーション
JP2016123082A (ja) * 2008-06-19 2016-07-07 クゥアルコム・インコーポレイテッドQualcomm Incorporated Wwan技術のためのハードウェアアクセラレーション
JP2010183450A (ja) * 2009-02-06 2010-08-19 Fujitsu Ltd ネットワークインターフェース装置
US8725879B2 (en) 2009-02-06 2014-05-13 Fujitsu Limited Network interface device
JP2013543169A (ja) * 2010-09-15 2013-11-28 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境を含むシステム
US9185054B2 (en) 2010-09-15 2015-11-10 Oracle International Corporation System and method for providing zero buffer copying in a middleware machine environment
US9495392B2 (en) 2010-09-15 2016-11-15 Oracle International Corporation System and method for parallel multiplexing between servers in a cluster

Also Published As

Publication number Publication date
CA2573156A1 (en) 2006-05-04
CN1981272A (zh) 2007-06-13
DE602005013099D1 (de) 2009-04-16
ATE424583T1 (de) 2009-03-15
US20110167134A1 (en) 2011-07-07
CN100468377C (zh) 2009-03-11
US8332531B2 (en) 2012-12-11
JP4886685B2 (ja) 2012-02-29
CA2573156C (en) 2012-06-05
KR20070030285A (ko) 2007-03-15
KR101006260B1 (ko) 2011-01-06
WO2006046972A1 (en) 2006-05-04
EP1784735B1 (en) 2009-03-04
US8316109B2 (en) 2012-11-20
US20110161456A1 (en) 2011-06-30
US7930422B2 (en) 2011-04-19
US20060015651A1 (en) 2006-01-19
EP1784735A1 (en) 2007-05-16

Similar Documents

Publication Publication Date Title
JP4886685B2 (ja) ネットワーク・プロトコル処理のオフロードにおいてメモリ管理をサポートする装置および方法
JP4577853B2 (ja) ネットワーク・プロトコル処理のオフロードにおいて接続確立をサポートする装置および方法
US7493427B2 (en) Apparatus and method for supporting received data processing in an offload of network protocol processing
US7930349B2 (en) Method and apparatus for reducing host overhead in a socket server implementation
JP4921569B2 (ja) オフロードユニットを使用したtcp接続のためのデータ処理
US5931915A (en) Method for processing early arrival messages within a multinode asynchronous data communications system
KR100437146B1 (ko) 지능망 인터페이스 장치 및 통신 가속 시스템
EP2216955B1 (en) Network interface device
US7457845B2 (en) Method and system for TCP/IP using generic buffers for non-posting TCP applications
JP2012018699A (ja) クライアントとサーバ間の接続を管理するためのシステムおよび方法
US20110280243A1 (en) TCP/IP Offload Device
US7469295B1 (en) Modified round robin load balancing technique based on IP identifier
JP2002312262A (ja) 遠隔要求を処理する方法および装置
WO2020082839A1 (zh) 报文处理方法、相关设备及计算机存储介质
US8527664B2 (en) Direct memory access with minimal host interruption
US20040267960A1 (en) Force master capability during multicast transfers
JP2001007862A (ja) 通信負荷分散方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080331

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080331

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110125

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110125

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20110125

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110127

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110713

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111007

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20111007

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20111017

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111124

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20111124

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20111124

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111209

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4886685

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150