JP2007517286A - 順次処理を減らしたtcp/ipオフロードデバイス - Google Patents

順次処理を減らしたtcp/ipオフロードデバイス Download PDF

Info

Publication number
JP2007517286A
JP2007517286A JP2006542879A JP2006542879A JP2007517286A JP 2007517286 A JP2007517286 A JP 2007517286A JP 2006542879 A JP2006542879 A JP 2006542879A JP 2006542879 A JP2006542879 A JP 2006542879A JP 2007517286 A JP2007517286 A JP 2007517286A
Authority
JP
Japan
Prior art keywords
tcp
host
packet
toe
memory
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
JP2006542879A
Other languages
English (en)
Other versions
JP5066707B2 (ja
Inventor
スター,ダリル,ディー.
フィルブリック,クライヴ,エム
Original Assignee
アラクリテック・インコーポレイテッド
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 アラクリテック・インコーポレイテッド filed Critical アラクリテック・インコーポレイテッド
Publication of JP2007517286A publication Critical patent/JP2007517286A/ja
Application granted granted Critical
Publication of JP5066707B2 publication Critical patent/JP5066707B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/12Protocol engines
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Communication Control (AREA)
  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)

Abstract

TCPオフロードエンジン(TOE)デバイスが、複数のTCP/IPプロトコル処理操作を同時並行で行うステートマシンを備える。第1の態様では、該ステートマシンが第1メモリ、第2メモリ、及び組合せロジックを有する。第1メモリは複数のTCP状態変数を格納し、かつ同時に出力する。第2メモリは複数のヘッダ値を格納し、かつ同時に出力する。順次プロセッサ技術とは異なり、組合せロジックは、順次プロセッサ命令や順次メモリアクセスを実行することなくTCP状態変数とヘッダ値からフラッシュ検出信号を生成する。第2の態様では、TOEがTCBバッファにおける複数のTCP状態変数の更新を全て同時に行い、TCBバッファメモリへの複数の順次書き込みを不要とするステートマシンを備える。第3の態様では、TOEが、1つのステートマシンクロックサイクルでDMA転送をセットアップするステートマシンを含む。
【選択図】 図1

Description

コンピュータは、TCP/IPプロトコルソフトを用いてインターネット(及び他のさまざまなネットワーク)を介して通信を行う。そのようなコンピュータは、TCP/IPパケットの形で情報をネットワークに送信し、ネットワークからTCP/IPパケットの形の情報を受け取ることによって通信を行う。しかし、TCP及びIPプロトコルはかなり複雑である。単純なコンピュータアーキテクチャでは、コンピュータの中央処理装置(CPU)がネットワークを介した通信をするのに必要なTCP/IPプロトコル処理を実行するために、その処理能力の多くの部分をそれにあてなければならないことがある。これによって、コンピュータの主な機能である他のタスクを行うために利用できる処理能力の量が減ることになる。
このため、TCPオフロードエンジン(TOE)デバイスと呼ばれるデバイスが開発されてきた。TOEデバイスとは、1つの定義では、コンピュータのCPUの処理能力を他のタスクに振り向けられるように、そのコンピュータのためにTCP及びIPプロトコル処理の一部または全部を行うデバイスである。TOEデバイスは、多くの場合、ネットワークインタフェースカード(NIC)と呼ばれる拡張カード上に実現される。ある種のTOEデバイスを備えたNICカードは、インテリジェントネットワークインタフェースカード(INIC)と呼ばれることもある。
米国特許第6,247,173号には、TOEの一例が記載されている。このTOEデバイスは、いくつかの他のデバイスとともにプロセッサを備える。このTOE上のプロセッサは、TOEデバイス上に格納されたファームウェア命令を実行する。ネットワーキング速度が高速化するにつれ、そのようなTOEのプロセッサに求められる処理要求も高くなってきた。TOEの処理能力を高める1つの方法は、プロセッサのクロック速度を高速化することである。これによって、プロセッサが命令をフェッチ及び/または実行する速度が高まる。しかし、プロセッサのクロック速度を高めることには実用上の限界が存在する。これまでの半導体プロセシング技術の進歩によって、プロセッサのクロック速度を高速化し続けることが可能となってきたが、ネットワーク速度の高速化の度合いがより大きいことから、クロック速度の高速化の早さは将来の処理能力の必要性に追いつくには不十分であると考えられる。
TOEスループットが単にプロセッサのクロック速度を速めるだけでは十分に高められなくなった場合、必要なスループットの上昇を達成するために他の技術を用いる必要がでてくる。スループットを高めるための技術の1つとして、プロセッサのデータバスの幅を広げ、より広いデータバス及びALUを用いることが挙げられる。これによれば、一定のTOEの機能を実施する速度を速められるかもしれないが、その他のTCP/IPオフロードタスクは順次処理であるため、それらの機能の実行は依然として不満足な遅さにとどまる傾向がでてくる。使用できる他のコンピュータアーキテクチャ技術として、単位時間当たりに実行される命令の数を増やすためのマルチスレッドプロセッサ及び/又はパイプライン処理の使用が挙げられるが、これも同様にクロック速度による制限があり得る。TCP/IPプロトコル処理に特に適した特別な命令セットを実行する特定目的プロセッサを用いて、所定の実行されるべき命令をより多く処理することが可能であるが、そのようなプロセッサもやはり命令を順次フェッチする必要がある。採用され得る他の技術には、同時に複数の命令を実行するスーパスカラプロセッサの使用がある。しかしこの場合も同様に、TCP/IPプロトコル処理タスクには逐次的な方式で行われる多くの異なる機能が含まれる。特別な命令セットとスーパスカラプロセッサを用いたとしても、将来のネットワーク速度によって課されるスループット要求を満たすためには、実現可能なクロック速度よりクロック速度を高める必要が生ずる可能性がある。次世代の高速ネットワークをサポートするためには最新式のプロセッサのクロック速度を利用可能な速度より高くする必要が出てくることが予想される。TOE上でそのような最新式の高額なプロセッサを用いることが可能であったとしても、そのようなプロセッサを使用することは、非現実的に複雑で、かつ経済面で非実用的となる可能性が高い。この問題を解決することが必要である。
ネットワークインタフェースデバイス(NID)は、ホストコンピュータからTCPプロトコル処理のタスクをオフロードできる。NIDは、TOE(TCPオフロードエンジン)デバイスと呼ばれることもある。
第1の態様では、前記NIDが第1メモリ、第2メモリ、及び組合せロジックを備える。第1メモリは複数のTCP状態変数を格納し、同時に出力する。これらのTCP状態変数としては、例えば、受信パケットシーケンスリミット数、予測受信パケットシーケンス番号、送信シーケンスリミット数、送信アクノリッジ(肯定応答)番号、及び送信シーケンス番号等が挙げられる。第2メモリは着信パケットのヘッダからの値を格納し、同時に出力する。これらのヘッダ値としては、例えば、受信パケットシーケンス番号、パケットペイロードサイズ数、パケットアクノジッリ番号、及びパケット送信ウインドウ数等が挙げられる。
組合せロジックは、(1)前記第1メモリからのTCP状態変数、及び(2)前記第メモリからのヘッダ値の全てを同時に受信する。前記組合せロジックは、2以上のTCP状態変数及び2以上のヘッダ値からフラッシュ検出信号を生成する。前記フラッシュ検出信号は、そのTCP状態変数が関連するTCPコネクションに関連して例外条件(例えばエラー条件)が発生しているか否かを示す。前記組合せロジックは、例えば、ステートマシンの部分であって、該ステートマシンに状態遷移させるクロック信号の1クロック時間に前記フラッシュ検出信号をTCP状態変数及びヘッダ値から決定する、該ステートマシンの部分である。
メモリからのTCP状態変数の読み出しを複数回行い、その読み出し値及び変数を用いてフラッシュ条件が存在しているか否かを判定するために命令のフェッチ、命令のデコード、そして命令の実行を行う順次プロセッサとは異なり、NIDの組合せロジックは、同時に判定を行うために必要な全てのTCP状態変数及びヘッダ値を供給される。従って、TCP状態変数及びヘッダ値を取り出すために、時間のかかる順次メモリアクセスを多数回行わずに済む。また、該ステートマシンは命令のフェッチや命令の実行は行わない。命令の順次フェッチは不要である。命令のデコードの複雑なパイプライン処理も不要である。更に、フラッシュ条件が存在するか否かの決定は、TCP状態変数及びヘッダ値が入力として供給される高速組合せハードウェアロジックによって行われる。この判定は、個別の論理テストのシーケンスとしてソフトウェア上で行うのではなく、組合せハードウェアロジックが、ハードウェアロジックゲートの動作速度で同時並行でこれらのテストを行う。
第2の態様では、NIDがステートマシンを含み、該ステートマシンは、そのTCBバッファにおいて複数のTCP状態変数の全てを同時に更新し、これによってこのタスクを行うための順次命令実行を不要とし、かつ複数の値のメモリ構造への順次書き込みを不要とする。狭いデータバスを通してメモリ構造へ書き込むことに伴う障害が避けられる。TCP状態変数を保持するメモリ構造は非常に幅が広く、TCP状態の更新が1回または非常に少ない回数のメモリ書き込み動作で行われるように全ての値を同時にメモリに書き込むことを可能としている。
第3の態様では、NIDがステートマシンとDMAコントローラを備える。前記ステートマシンはDMAコントローラを用いて情報をホストコンピュータとやりとりする。情報の移動を行うDMAコントローラをセットアップするために、その情報の発信元がDMAコントローラに供給され、移動する情報量がDMAコントローラに供給され、その情報が配置される宛先アドレスがDMAコントローラに与えられる。DMA転送をセットアップするために複数の順次ステップが必要な順次プロセッサNICカードの設計とは異なり、この第3の態様によるNIDのステートマシンは、そのステートマシン動作の1つの状態のなかで、移動する情報の発信元、移動する情報量、及びその情報が書き込まれる宛先アドレスの全てを同時にDMAコントローラに供給する。
TCP状態変数及びパケットヘッダをワイドメモリ構造に格納する際に、これらの変数及びヘッダがステートマシンによって同時並行で一度にアクセス・処理されるように、そして得られた更新後のTCP状態変数がワイドメモリに並行して1回でまたは非常に少ない数のメモリ書き込み操作で書き戻されるように格納するアーキテクチャの態様は、TCPコネクションの制御がTOEデバイスとホストとの間で移管し合うようなシステムに適用可能であるのみならず、TOEがTCPコネクションを制御し続け、TCPコネクションの制御がTOEとホストとの間で移ることのないシステムにも適用可能である。本明細書に記載の新規なTOEのアーキテクチャを用いることにより、最大クロック速度を速めることなく単位時間当たりに処理されるパケット数を増加させることが可能となり、或いは、単位時間当たりに処理されるパケット数が一定であるならば最大クロック速度を遅くすることもが可能となる。所定の処理スループットの量に対するクロック速度を遅くすることにより、TOEシステム全体の電力消費量が低減される。さらに、この新規なTOEアーキテクチャにより、所定のパケット処理スループットの大きさに対するメモリアクセスバンド幅に関する要求を緩めることが可能となり、これによって使用されるメモリを低価格のものとしてさらにTOEシステムのコストを低下させることができる。
他の実施形態及び詳細については以下に説明する。この発明の開示の欄は本発明を範囲を定義する趣旨で記載されたものではない。この欄の記載でなく、特許請求の範囲の記載により本発明は定義される。
図1は、本発明を例示するための実施形態であるシステム1の略図である。システム1はパケット交換ネットワーク2に接続されている。ネットワーク2は、例えば、ローカルエリアネットワーク(LAN)及び/またはネットワークの集合であり得る。ネットワーク2は、例えばインターネットであり得る。また、ネットワーク2は、iSCSIを走らせるIPベースのストレージエリアネットワーク(SAN)であり得る。ネットワーク2は、例えば電気信号をやりとりする媒体を介して、光ファイバケーブルを介して、及び/または無線通信チャネルを介してシステム1に接続されてもよい。
システム1は、ホスト3とネットワークインタフェースデバイス(NID)4とを備える。ホスト3は、例えばマザーボード上に具現され得る。NID4は、例えば、マザーボードに接続された拡張カードであり得る。ホスト3は、中央処理装置(CPU)5又はCPUチップセットと、ある程度の大きさのストレージ6とを備える。図示された例では、ストレージ6が半導体メモリと磁気ディスクストレージの組合せを含む。CPU5は、ストレージ6に格納されたソフトウェアを実行する。そのソフトウェアは、メディアアクセスプロトコル処理層、IPプロトコル処理層、TCPプロトコル処理層、及びアプリケーション層を含むネットワークプロトコル処理スタックを有する。TCPプロトコル処理層の上のプロトコル層は、セッション層と呼ばれることもあれば、アプリケーション層と呼ばれることもある。以下の説明では、これをアプリケーション層と呼ぶものとする。
NID4は、ホストバス7、ブリッジ8、及びローカルバス9を介してホスト3に接続される。ホストバス7は、例えば、PCIバス又は他のコンピュータ拡張バスであり得る。NID4は、特定用途向け集積回路(ASIC)10、ある程度の容量のダイナミックランダムアクセスメモリ(DRAM11)、及び物理層インタフェース(PHY)回路12を含む。NID4は”ファストパス(fast-path)”処理を実現するための専用プロトコル処理アクセラレーションハードウェアを備えており、ファストパス処理では一定の種類のネットワーク通信が、他の種類のネットワーク通信に対する”スローパス(slow-path)”処理と比較して高速化される。尚、スローパス処理では、ネットワーク通信が少なくとも部分的にホスト3上で実行されるプロトコル処理スタックによって取り扱われる。本実施例では、高速処理される一定の種類のネットワーク通信は、一定のファストパス基準を満たすTCP/IP通信である。従って、NID4はTCPオフロードエンジン(TOE)と称されることもある。
ファストパス及びスローパス処理を行うシステムについての他の情報は、米国特許第6,247,060号、第6,226,680号、第6,247,173号、米国特許出願公開第2001-0021949号、第2001-0027496号、第2001-0047433号、及び米国特許出願第10/420,364号を参照されたい(上記の各特許明細書、特許出願公開、及び特許出願の内容は、引用例により本明細書の一部とする)。図1のシステム1では、上記の文献に記載された、ホストプロトコル処理スタックとネットワークインタフェースデバイスとの間でTCP/IPコネクションの制御を転送するための技術が用いられている。TCP/IPコネクションの制御をホストからネットワークインタフェースデバイスに、そしてネットワークインタフェースデバイスからホストにどのように渡すかについての情報は、上記の文献の記載内容を背景技術情報として本明細書の一部とする。
図2は、図1のASIC10のブロック図である。ASIC10は、受信MACブロック(RcvMac)20、受信パーザブロック(RcvPrs)21、ソケット検出ブロック(SktDet)22、受信マネージャブロック(RcvMgr)23、ソケットエンジンブロック(SktEng)24、DMAコントローラ/PCIバスインタフェースユニットブロック25、DRAMコントローラブロック26、SRAMブロック27、送信フォーマットシーケンサブロック(XmtFmtSqr)28、及び送信MACブロック(XmtMac)29を有する。残りのブロックは、バッファやキューのようなメモリ構造を示す。末尾の文字がQである符合を付されたブロックは、キューである。末尾の文字がBufである符合を付されたブロックは、バッファ及びバッファの組を示す。キュー及びバッファは、他の種々のブロック間で情報の受け渡しを行うために用いられる。
システム1の動作は、(1)スローパス受信シーケンスについて説明し、(2)コネクションの制御がホストからNIDに渡されるコネクションハンドアウトシーケンスについて説明し、(3)渡されたコネクションを介して受信されたパケットのTCP及びIPプロトコル処理がNID上で実行されるファストパス受信シーケンスについて説明し、(4)ソケットエンジンの動作について説明し、かつ(5)コネクションの制御がNIDからホストに渡されるコネクションフラッシュシーケンスについて説明することによって後に詳述する。これらの説明では、図2の種々のブロックを指し示すためにニーモニックを用いる。
図3は、図2の種々のブロックを指し示すために用いられるニーモニックを記載した表である。図2における異なる種類のメモリブロックのそれぞれは、一定の形
図4は、図2の各メモリブロックがどのように編成されているかを記載した表である。例えば図4の第1行は、HdrIdによってアドレス指定される特定のハンドラバッファ(HdrBuf)エントリが、パーズヘッダ(PrsHd)とそれに続くパケットヘッダ(PktHd)を有することを示している。HdrBufはヘッダバッファを表すニーモニックであり、HdrIdはヘッダバッファ識別子を表すニーモニックであり、PrsHdはパーズヘッダを表すニーモニックであり、PktHdはパケットヘッダを表すニーモニックである。
図5は、図4の表で使用されている各ニーモニックの簡単な説明を記載した表である。図5に記載の情報の各項目は、以下の説明で「変数」と呼ぶこともある。その変数は、それ自体が複数の他の変数から構成され得る。
図6は、表の左欄の各変数を構成する種々の変数を記載した表である。例えば図6の第1行は、ソケットタプル(SkTpl)が送信アクノリッジ番号(XmtAckNum)、送信シーケンス番号(XmtSeqNum)、送信シーケンスリミット(XmtSeqLmt)、送信輻輳制御ウインドウサイズ(XmtCcwSz)、最大セグメントサイズ(MaxSegSz)、最大送信ウインドウ(MaxXmtWin)、受信シーケンスリミット(RcvSeqLmt)、予測受信シーケンス番号(RcvSeqExp)、予測ヘッダ長(ExpHdrLen)、及び送信制御ブロックアドレス(TcbAd)から構成されていることを示している。
[スローパスパケット受信シーケンス]
図7は、図2の種々のブロックがパケットのスローパス処理を行うために何を実行するかをハードウェア記述擬似コードで記載したものである。擬似コードの各行は、その行の左にある()で囲まれた行番号によって示されている。
初めに、図2の矢印30によって示されるように、ネットワーク情報のパケットがPHY12からASIC10に入力される。図7には、行701−703に、RcvMacブロック(RcvMac)20によって行われる処理が記載されている。行701に示すように、RcvMac20は着信パケットRcvPkをパーズ(構文解析)し、ネットワークに由来するプリアンブルとポストアンブルを調べる。RcvMac20はパケットの末尾のCRC値をチェックし、パケットがRcvMac上に受信され始めた後に衝突が発生したか否かを検出し、かつ他の標準的な機能を実行する。RcvMac20は、このチェックの結果を表す状態ワードRcvStを発生する。RcvMacは宛先リンクアドレスを調べ、この情報に基づいてNID4を宛先としないパケットを除外する。或る実施形態では、RcvMacは、別の会社によって設計された市販の回路ブロックである。パケットがNID4を宛先としている場合は、RcvMac20は対応するエントリをFIFOのRcvMacQ31に入れる。エントリの押し込みには、行702及び703に示すように、パケットRcvPkとともに状態ワードRcvStが含まれる。
受信パーザブロック(RcvPrs)21はRcvMacQからエントリをポップして出す。図7において、行705−708はRcvPrsブロック21によって行われる動作を示す。しかし、RcvPrs21は、エントリをポップする前に、その情報が格納されるDRAM11の位置を特定してある。NID4を通過する全てのパケットは、DRAM11に一時格納される。DRAM11は全部で2Mバイトであり、1024個のバッファに区分されている。各バッファはそれぞれ2048バイトの長さを有する。従って各バッファは、そのバッファの開始アドレスを特定する10ビットのバッファ識別子(Buffd)によって特定され得る。対応するバッファの21ビットの開始アドレスを取得するために、Bufldの右側に11個のゼロが加えられる。そのBufIdを、11個の(常にゼロである)ゼロ値を除いて格納することでメモリスペースを節約する。
受信バッファキューRcvBufQ(図2参照)と称するキューは、RcvPrsブロック21による使用のために解放され利用可能なDRAMバッファのBufldsに格納するキューである。RcvPrsブロック21は、行705に示すように、RcvBufQをポップしてBufldを取得する。RcvPrsはBufld値を受け取り、その値を左に11ビット分シフトしてDRAMのバッファにおける開始アドレスを得る。一旦RcvPrsがそのパケットをおく場所を有すると、RcvPrsはRcvMacQから引き出されたエントリのパーズを開始し(行706)、パーズヘッダPrsHdを発生する。
のパーズヘッダPrsHdの構成要素は図6に示されている。さらに詳細な情報については、図18及び図19を参照されたい。フレーム状態A及びフレーム状態BはともにPrsHdを有する。フレーム状態Aの23番目のビットはアテンションビットAttnである。Attnビットは、例外及びエラー条件のうち、パケットのトランスポート及びネットワーク層プロトコルがTCP及びIPでないか否かを示す。
パーズヘッダPrsHdの構成要素の1つは、ヘッダ長コードHdrCdである。ヘッダ長コードHdrCdは、ヘッダが受信されたパケット内にどの程度深く入り込んでいるかを示す。図4に示すように、RcvMacQのエントリは、受信パケットRcvPk及び受信状態RcvStを含む。図7に戻ると、RcvPrsブロック21はパーズヘッダPrsHdをパケットRcvPk上にプリペンドし(行707)、この情報を値Buffd(Bufldは行705においてRcvBufQからポップして出されたもの)によって特定された受信バッファRcvBuf内に書き込む。RcvPrs21は、PrsWrDatQに書き込まれるべき情報をそこに入れ、次いでDRAMコントローラ26への命令をPrsWrReqQに入れることによって書き込みを行う。PrsWeReqQ上の命令は、DRAMコントローラ26にデータをPrsWrDatQから出させて、それをDRAM内の適当なバッファに入れさせる。このリクエスト命令は、PrsWrDatQから出すバイト数を示しているとともに、DRAM内の開始アドレスを示している。DRAMコントローラ26は、その後、PrsWrDatQからどの程度のデータをポップさせ、そのデータをどこに書き込むべきかを命ずるリクエスト命令をPrsWrDatQからポップして出す。行707の"write RcvBuf[Bufld] {PrsHd,RcvPk}"という表記は、値Bufldによって特定された「受信バッファ」に書き込みを行い、RcvPkにプリペンドされたパーズヘッダPrsHdを書き込むことを意味する。記号{}のなかには、書き込まれる情報が入る。角かっこ記号[]のなかには、書き込みがなされるのがRcvBuf内の何れの受信バッファであるかを示す値が入る。
次に、行708において、RcvPrsブロック20はパーズイベントキューPrsEvtQ32(図2参照)にエントリを書き込む。このエントリは、ソケット検出ブロックSktDet22にパケットの着信を警告するパケットエンド標識PkEndと、バッファにおける書き込み可能な次の空き位置(PkEnd)とを含む。PkEndの"Packet end"は、DRAM内のパケットの終わり(DRAM内のバッファの開始アドレス+パケットサイズ+パーズヘッダのサイズ)を示すポインタである。ソケット検出器SktDetは、PkEndから、バッファの開始を示す元のバッファIDを抽出し、またパケットのサイズを抽出する。受信パーザRcvPrsは、それがPrsEvtQにプッシュしたエントリ内のソケット記述子(SktDsc)及びソケットハッシュ(SkHsh)も含む。図6に示すように、ソケット記述子SktDscは:ヘッダ長コード(HdrCd)、IP宛先アドレス(DstAd)、TCPソースポート(SrcPt)、及びTCP宛先ポート(DstPt)を含む。各ソケット記述子はDetEnビットを含む。
従来のTOEデバイスでは、ソケット記述子及びハッシュはDRAM内でパケットが格納された場所のパケットの前にプリペンドされていた。TCBルックアップを行うためには、それに必要なハッシュ及びソケット記述子を取得するために、初めにソケット記述子及びハッシュが格納されたパケットの前の部分をDRAMから出して転送しなければならなかった。そのような従来のTOEデバイスと異なり、本発明のTOEデバイスはハッシュをPrsEvtQを介して直接ソケット検出器に渡している。PrsEvtQの各エントリは、PkEnd、SkHsh及びSktDsc(行708参照)を含む。そのパケットはDRAM内に残される。ハッシュとソケット記述子をソケット検出器に直接渡すことにより、ソケット検出器がTCPルックアップ操作を実施可能となる前にDRAMをからパケットの前部を転送する必要がなくなる。このようにDRAMアクセスの量を減らすことにより、予備の利用可能DRAMアクセスバンド幅を他の目的で使用することが可能となる。
図7の行710−712には、ソケット検出器ブロックSktDet22の動作が示されている。SktDetブロック22は、行710に示すようにPrsEvtQをポップし、取り出したハッシュSkHshを用いて取り出したソケット記述子SktDscが、ソケット記述子バッファSktDscBufに格納された最大4096個のソケット記述子の1つであるか否かを確認する。SktDscBuf(図2参照)は、1024個のバケットを有するデュアルポートメモリであり、各バケットは4つのソケット記述子バッファを有し、各バッファは1つのソケット記述子を格納し得る。TCP/IPコネクションがファストパスで処理されている場合、そのコネクションのためのソケット記述子はSktDscBufに格納される。
PrsEvtQからポップされたエントリから取り出されたハッシュSkHshは、1024個のハッシュバッファの1つを特定する。ソケット記述子ブロックSktDetはこのSkHshを用いて適切なハッシュバケットを特定し、次にそのハッシュバケットに格納された可能な4つのソケット記述子のそれぞれについて、それらの格納されたソケット記述子の1つがPrsEvtQから取り出されたソケット記述子と一致しているか否かについて調べる。
ここに説明した実施例では、パケットはスローパスパケットである。従って、行711の"test"の結果は一致なしとなる。次にソケット検出器(SktDet)はDetEvtQにスローコードSlwCd、PkEnd値、及びヘッダ長コードHdrCdを書き込む。SlwCdは、パケットがスローパスパケットである(即ちソケット記述子の一致がない)ことを示す2ビットの値である。ヘッダコードHdrCdは、RcvPrsによって生成される、ヘッダが特定のパケット内にどの程度深く入り込んでいるかを示す2ビットコードである。ヘッダは、受信したパケットの種類に応じた異なる深さでパケット内に延びる。パケットが、802.3ヘッダ、snapヘッダ、VLANヘッダ、RDMAヘッダ、及びiSCSIヘッダ等の一定のヘッダを有することもあれば、有しないこともあることから、ヘッダの長さは様々となる。HdrCdは、パケットの全ての適切なヘッダが転送されるのを確実にするべくDRAM11からヘッダバッファHdrBuf内にDMA転送されることが必要なパケットがどの程度の量かを示す。DRAM11のバンド幅をとっておくために、DRAM11からヘッダバッファHdrBufへの64バイト、128バイト、192バイト、または256バイトの何れかのバイト数が転送される。転送される量は、ヘッダが転送されることになる範囲で最小の量である。ソケットエンジンSktEngブロック24は、ヘッダを見ることのみが必要であり、パケットペイロードを見る必要はない。
受信マネージャRcvMgrブロック23によって行われる操作は、図7の行714及び715に記載されている。RcvMgrはDetEvtQからエントリを引き出す。図4に示すように、DetEvtQ上のエントリは4種のフォーマットのうちの1つしか有し得ない。例えば、そのエントリは、関連パケットがスローパスで扱われることを示すスローコードSlwCdで始まるものであり得る。或いは、そのエントリは、関連パケットがファストパスで扱われることを示すファストコードFstCdで始まるものであり得る。DetEvtQエントリは、イネーブルコードEnbCdか、ディスエーブルコードDblCdで始まるものであり得る。
スローパスイベントキューSlwEvtQが設けられ、受信マネージャRcvMgrがスローパスイベントを更なる処理のためソケットエンジンSktEngに移す際にこれを介して行う。また、ファストパスイベントキューFstEvtQが設けられ、受信マネージャRcvMgrがファストパスイベントを更なる処理のためソケットエンジンSktEngに移す際にこれを介して行う。これらのキューのそれぞれはレディ(ready)ビットを有する。このビットは、そのキューが有するエントリをポップするソケットエンジンSktEngを示す。
本実施例では、RcvMgrブロック23はDetEvtQエントリにおいてスローコードSlwCdの存在を検出する。従ってRcvMgrブロック23はスローパスイベントキューSlwEvtQ上にそのエントリの書き込みを行うのみである。SlwEvtQ上に書き込まれるエントリの種々の変数は図4に示されている。
ソケットエンジンSktEngはそのアイドル状態にあり、SlwEvtQのレディビットを検出する。行717に示すように、ソケットエンジンはSlwEvtQのエントリをポップして出す。(ソケットエンジンの状態の説明の項で後述する、図10の行1001も参照されたい。)スローパス処理においては、ホストスタックがTCP/IPプロトコル処理を行うことから、ポップされるエントリにおけるスローコードSlwCdから、ソケットエンジンSktEngは関連するパケットをホスト3に渡す必要があることを知る。
NID4は、メッセージバッファ機構によってホスト3に情報を渡す。この機構により、ホスト3は、NID4上のメッセージバッファキューMsgBufQ(図2参照)にメッセージバッファ識別子のキューを維持する。これらのメッセージバッファ識別子のそれぞれは、ホストストレージ6における使用していないメッセージバッファの開始アドレスを示す。NID4は、これらのメッセージバッファを用いて情報をホストスタックに渡す。
従って、ソケットエンジンSktEngはMsgBufQをポップして、使用していないメッセージバッファのメッセージバッファアドレスMsgAdを得る(行718)。(ソケットエンジンの状態の説明の項で後述する、図10の行1079も参照されたい。)次にソケットエンジンSktEngは、Bufldによって特定された受信バッファからパーズヘッダPrsHdr及びパケットRcvPkを、ホストメモリHstMemのメッセージアドレスMsgAdとオフセット値MsgHdrLenによって要求されるホストメモリ上の位置にコピーする(行719)。ここで値BufidはPkEndから抽出される(行717参照)が、これはPkEndがBufldとPkLenとの連結だからである。次にスローパスパケットはメッセージバッファ内のホストメモリ6におかれる。
次にメッセージヘッダがホストに送信され、ホストにそのメッセージバッファがスローパスパケットを含むことを知らせる。このメッセージヘッダは、メッセージバッファの前に付加される。これを行うため(行720参照)、メッセージヘッダMsgHdはホストメモリにMsgAdから始めるように書き込まれ、従ってメッセージヘッダはアドレスMsgAdから開始されるメッセージバッファにおいてRcvPk及びPrsHdにプリペンドされる。(ソケットエンジンの状態の説明の項で後述する、図10の行1087も参照されたい。)DRAM11からパケットを出して、ネットワークから着信する他のパケットを格納するためにDRAMバッファが使用していない状態にされる。このことは、行721に示すように、現在使用していないDRAMバッファのBufIdを使用していないバッファのRcvBufQにプッシュするソケットエンジンSktEngによって行われる。
パケットとメッセージヘッダが、MsgAdによって特定されるホストメッセージバッファに一旦存在することになると、ホストスタックはホストメッセージバッファを(割込みのため、或いはホスト処理ポーリングのために)調べて、メッセージヘッダを取り出し、そのメッセージバッファがスローパスパケットを含んでいるか否かを判定し、そのパケットに対して必要なTCP及びIPプロトコル処理を行う。
[コネクションハンドアウトシーケンス]
NID4は、一定の種類のネットワーク通信に対して実質的に全てのTCP及びIP処理を行い、これによってホストスタックからこのタスクをオフロードする。この実施例では、TCPコネクションがホスト3で実行されるプロトコルスタックによってセットアップされる。一旦TCPコネクションがセットアップされると、TCPコネクションの制御はホスト3からNID4に渡される。TCPコネクションの制御がNID4に渡されると、NID4は、一定のエラー条件が発生しない限りそのTCPコネクションを介してやりとりされる後続のパケットに対して全てのTCP及びIPプロトコル処理を実施する。該コネクションを介して受信された後続のパケットのパケットペイロードは、NID4によってホスト3上のアプリケーションメモリの最終的な宛先に直接書き込まれる。そのパケットペイロードは、TCPまたはIPネットワークヘッダの何れかがない形で最終宛先に書き込まれる。ホスト3からNID4に渡されるこのTCPコネクションの制御のために、そのTCPコネクションのための情報のTCB(TCP制御ブロックのこと。トランザクション制御ブロック或いは送信制御ブロックと呼ばれることもある。)の制御は、ホスト3からNID4に渡される。TCBはTCPコネクションの状態についての情報を含む。この実施形態では、該コネクションのためのTCBの制御の移管のために、TCB情報の一部をホスト3からNID4に実際に転送する。TCPコネクションの制御は、以下に説明する2段階の「コネクションハンドアウト(connection handout)」プロセスでホスト3からNID4に渡される。
第1段階(スローパスパージ(消去)):
コネクションハンドアウトプロセスの第1段階では、ホスト3がTCPコネクションの制御をNID4に仮に移管する。NID4は、そのコネクションのためにNID4上に受信されたスローパスパケットの流れにパージマーカを入れ、そのコネクションのためにNID4にその後受信した着信パケットをホスト3に渡さずに保持するようにさせる。ホスト3はそのコネクションのためにスローパスパケットの流れの処理を継続して行う。ホスト3は、パージマーカを受信したとき、パケットのスローパスフローがパージされたこと、及びそのコネクションのために受信するパケットはもうないことを認識する。コネクションハンドアウトプロセスの第1段階は終了し、ホストはTCP状態をNID4に渡すために使用されていない状態となる。
図8は、コネクションハンドアウトを実施するために図2の種々のブロックが何を行うかを記述した擬似コードハードウェアについて説明している。行801に示すように、ホスト3はホストメモリ内の位置CmdAdに、受信コマンド(即ちパージ受信コマンド)を構築する。パージ受信コマンドは、パージ受信コマンドを示し、かつコネクションのTCBが格納されるホスト上のアドレスTcbAdを含むコマンドヘッダCmdHdを含む。次にホスト3は、行802に示すように、NID4上のHstEvtQにポインタ(CmdAd)とコネクションの表示(TcbId)を書き込むことによって、NID4にパージ受信コマンドを通知する。ポインタCmdAdは、ホストメモリ中の受信コマンドを指し示す。TcbIdは、どのコネクションのためにNID4がパケットの保持を開始すべきかを示す。
ソケットエンジンSktEngブロック24は、そのアイドル状態にありHstEvtQがレディ状態にあることを検出する。従って、ソケットエンジンはホストイベントキューHstEvtQをポップし(行804)、コマンドアドレスCmdAdとTcbIdを取り出す(ソケットエンジンの状態の説明の項で後述する、図10の行1049−1052も参照されたい。)。
ソケットエンジンSktEngは、DMAコントローラブロック25に、コマンドアドレスCmdAdから受信コマンド(コマンドヘッダCmdHd及びTcbAd)を取り出させる。ソケットエンジンSktEngはコマンドヘッダCmdHdにおけるコマンドコードCmdCdを調べて、これが「ソケット記述子インポート」コマンド(このコマンドによればTCBのソケット記述子部分がインポートされるがTCBのTCP状態部分はインポートされないにも関わらず、「Tcbインポート」コマンドとも呼ばれる)であることを確認する。ソケットエンジンの状態の説明の項で後述する、図10の行1144−1145も参照されたい。
ソケットエンジンSktEngはTcbAを用いて、ホストメモリHstMemにおけるTCBからソケット記述子SktDsc及びそのソケット記述子SktDscをコピーし(行806)、TcbIdで特定されたNID4上の特定のソケット記述子バッファSktDscBufのなかに入れる。上述のように、NID4によって処理されるファストパスであるTcbのそれぞれに対して、NID4上に1つのソケット記述子バッファが設けられる。図6に示すように、ソケット記述子SktDscは、ヘッダコードHdrCd、TCP発信元ポート、TCP宛先ポート、IP発信元アドレス、及びIP宛先アドレス、及び検出イネーブルビットDetEnを含む(ソケットエンジンの状態の説明の項で後述する、図10の行1153−1159も参照されたい。)。
一旦、そのコネクションのためのソケット記述子がNID4上のソケット記述子バッファSktDscBufにロードされると、ソケットエンジンSktEngは検出イネーブルコマンドEnbCdをソケット検出器SktDetブロック22に送る(行807)。この検出イネーブルブルコマンドEnbCdは、ソケット検出器SktDetブロック22に対して、このコネクションのためのパケットの検出を開始するように命ずるものである。この検出イネーブルブルコマンドは、行807に示すように、ソケットイネーブルコードEnbCd及びTcbIdを検出コマンドキューDetCmdQに書き込むソケットエンジンSktEngによって送信される(ソケットエンジンの状態の説明の項で後述する、図10の行1161−1162も参照されたい。)。
ソケット検出器SktDetブロック22はDetCmdQをポップし(行809)、ソケットイネーブルコードEnbCd及びTcbIdを取り出す。次にソケット検出器SktDetは、SktDscBuf [TcbId]によって特定された特定のソケット記述子バッファにおける検出イネーブルビットDetEnを「セット」する。この検出イネーブルビットDetEnは、ソケット検出器に対して、次回それがパケットを受信し、Tcbとパケット中のヘッダ群とを比較したとき、パーズヘッダPrsHdにおいてその一致を示すことが可能であることを知らせる。検出イネーブルビットDetEnがセットされない場合、Tcbが比較対象のパケットヘッダとの比較を行ったとしてもソケット検出器は一致を表示しない(検出イネーブルビットは、無効なソケット記述子エントリとの一致が用いられたために、ソケット検出器SktDetが着信パケットがフラットパスで取り扱われるべきであると誤って判定するのを防止する。)。
ソケット検出器SktDetブロック22は、イネーブルコードEnbCdパージマーカをTcbIdとともに検出イベントキューDetEvtQに書き込む(行811)。
受信マネージャRcvMgrはDetEvtQを読み出し(行813)、EnbCdパージマーカ及びTcbIdを取得する。RcvMgrは、EnbCd及びTcbIdをスローイベントキューSlwEvtQに書き込むことによって、EnbCdパージマーカをTcbIdによって特定されるコネクションのためのパケットの流れに入れる(行814)。かくして、スローパスパケットが格納されるDRAMにおけるバッファを指し示すPkEnd値を含むエントリに加えて、パージマーカのフォーマットを有するエントリもこのSlwEvtQに入り得る。EnbCdパージマーカを含むSlwEvtQエントリのよなフォーマットについては、図4を参照されたい。
従って、Tcbハンドアウトが受信される前に受信された受信記述子は、このTcbに対応するあらゆるパケットのために、EnbCdパージマーカの前にSlwEvtQのなかに入れられ、パージマーカがSlwEvtQからポップして出される前にホストスタックに送信されることによって通常のスローパス方式で取り扱われる。
一方、パージマーカの後に受信されたパケットのための受信記述子は、それをソケット受信キューSktRcvQ(図2参照)に入れることによってNID4に保持されることになる。そのようなパケットのための受信記述子はこのSktRcvQに重ねられる。実際のパケットは、DRAM受信バッファにおける受信パーザRcvPrsによって通常通りに格納されるが、これらのDRAM受信バッファはSktRcvQ上に保持された受信記述子におけるPkEnd変数によって指定される。
ソケットエンジンSktEngはそのアイドル状態にあり、SlwEvtQ上のエントリを検出する。従って、ソケットエンジンSktEngはSlwEvtQを読み出し(行816)、EnbCdパージマーカ及びTcbIdを取得する。EnbCdパージマーカは、イベントコードEvtCdの一種(EvtCd = = 1)である。ソケットエンジンSktEngがこの特定のEnbCdパージマーカを見つけると、SktEngは、(NID4がホスト3に送信するハンドアウトの段階1が終了したことを示すメッセージバッファMsgBufを指定する)メッセージバッファアドレスMsgAdを得る。従ってSktEngは、行817に示すようにMsgBufQをポップしてMsgAdを得る。SktEngブロック24は、DMAコントローラ25に、MsgAdで特定されたホスト上のメッセージバッファ内にメッセージヘッダMsgHdを書き込ませる。このメッセージヘッダHsgHdは、ここでイネーブルマークメッセージEnbMrkMsgを示す(ソケットエンジンの状態の説明の項で後述する、図10の行1094−1100も参照されたい。)。
NID4からホスト3への全てのメッセージは、ホストメモリにおけるメッセージバッファの仮想キューを通る。上述のように、ホスト3は使用されていないメッセージバッファの開始アドレス群をNsgBufQを介してNID4へ渡す。ホスト3は、メッセージバッファアドレスがNID4に渡される順番の追跡も行う。ホストスタックは正確なメッセージバッファが渡された順番でメッセージバッファを調べる。従って、パージマーカはこの仮想キューにおけるメッセージヘッダMsgHdの形でホストスタックを通して流れる。このメッセージヘッダMsgHdパージマーカは、ホスト受信コマンド(行805でソケットエンジンによって読み出される)がNID4によって終了したことをホストスタックに知らせる。
第2段階(ロードソケット状態):
ホスト3は、NID4がメッセージヘッダを置いた位置MsgAdにてMsgMemを読み出すことによってNID4からMsgHdパージマーカを読み出す(行820)。コネクションハンドアウトの第1段階の終了を検出したとき、ホスト3はTcbAdによって特定されるホストメモリの部分内にソケットタプルSkTplの形でソケット状態を書き込む(行821)。図6に示すように、ソケットタプルSkTplはそのコネクションのためのTCBの状態情報を含む。ホスト3は、CmdAdによって特定されたメッセージバッファ内にコメントヘッダCmdHd及びTcbAdの形でソケット受信コマンドSktRcvCmdの書き込みも行う(行822参照)。ホスト3は、NID4上のホストイベントキューHstEvtQ内にコマンドバッファのアドレスCmdAd及びTcbIdを含むエントリを書き込む(行823)。
ソケットエンジンSktEng24はアイドル状態にあり、HstEvtQがレディ状態にあることを検出する。従って、ソケットエンジンはHstEvtQをポップし(行825)、CmdAdポインタを用いてホストコマンド(コマンドヘッダCmdHd及びTcbAd)をホストメモリのバッファから読み出す(行826)(ソケットエンジンの状態の説明の項で後述する、図10の行1137−1141も参照されたい。)。
TcbAdはホストメモリにおけるソケットタプルの位置を特定する。このコマンドはソケットイネーブルコマンドである。従って、ソケットエンジンSktEngはTcbAdを用いて、状態情報SkTplを、ホストメモリHstMemからTcbIdによって特定されたNID4上のTcbバッファ内にコピーする(行827)(ソケットエンジンの状態の説明の項で後述する、図10の行1177−1183も参照されたい。)。
一旦状態がロードされると、SktEngは”アーム(特殊機能作動)”コードArmCdをMgrCmdQを介して受信マネージャに送信する(行828)(ソケットエンジンの状態の説明の項で後述する、図10の行187も参照されたい。)。
受信マネージャRcvMgrは1ビット幅のMgrBufにおけるイベントイネーブルEvtEnビットを維持する(図2参照)。NID4によって制御される各Tcbについて1つのそのようなイベントイネーブルビットが存在する。あるTcbのためのイベントイネーブルビットEvtEnがセットされた場合、RcvMgrはそのTcbのために1つのファストパスイベントをソケットエンジンSktEngに送信するべくアーム(特殊機能作動状態に)される。SktRcvQ上にキューイングされたそのTcbのためのイベントが存在しない場合には、受信マネージャRcvMgrはSktRcvQがそのTcbIdのエントリを有するまで待機する。ktRcvQRdy [TcbId]によって示されるようにそのTcbIdのために受信記述子がSktRcvQに存在するとき、受信マネージャRcvMgrはそのTcbIdのためにSktRcvQをポップし、そのエントリを用いてソケットエンジンSktEngのための1つのファストパスイベントを発生して、そのTcbIdのための処理を行う。
従って、受信マネージャRcvMgrはMgrCmdQ(行830)をポップし、ArmCd及びTcbIdを取り出す。SktRcvQ上にこのTcbIdのための受信記述子が存在する場合には、SktRcvQRdy [TcbId]は真となる。受信マネージャRcvMgrがそのTcbのためにSktRcvQをポップし、FstEvtQ上にFstCd及びTcbIdを書き込むことによって、そのイベントをファストパスイベントキューに移動させる(行832)。
現時点でSktRcvQ上にこのTcbIdのための受信記述子が存在していない場合には、SktRcvQRdy [TcbId]は偽となる。従って、行834に示すように受信マネージャRcvMgrはMgrBufにおけるEvtEnビットをセットする。このEvtEnビットがセットされ、従って次回、TcbIdのための受信記述子がSktRcvQ上に見つけられたときに、受信マネージャRcvMgrがTcbIdのためにSktRcvQからそれをポップして出し、FstEvtQ上のファストイベントを発生し(図9の行919参照)た上でIcbIdのためのMgrBufにおけるEvtEnをクリアすることになる。
従って、ファストパスイベントが受信マネージャRcvMgrによってソケットエンジンSktEngに戻されたときEvtビットがクリアされるので、EvtEnビットはワンタイムアームコマンド機構をインプリメントするために必要であることが理解されよう。EvtEnビットをセットすることにより、受信マネージャRcvMgrが、ただ1つのファストパスイベントをソケットエンジンSktEngに送信するべくアームされる。このワンタイムアームコマンド機構は、ソケットエンジンSktEngが、そのファストパスコネクション上での以前のパケットの処理を終了させた後にのみ、ファストパスコネクション(TcbId)上のパケットを処理するようにするために設けられる。
図8に記載の操作が終了したとき、TcbIdによって特定されるTCPコネクションを介した通信は、NID4によってファストパス方式で取り扱われている。ファストパスTCPコネクション上のパケットのための受信記述子は、受信マネージャRcvMgrからファストパス処理のためのファストイベントキューFstEvtQを介してソケットエンジンSktEngに渡される。
[ファストパスパケット受信シーケンス]
第1のファストパスパケット受信パケット(最終的な宛先をセットアップする初めのパケット)について以下説明する。
図2の矢印30によって示されるようにネットワーク情報のパケットはPHY12からASIC10に入る。受信MacブロックRcvMac20及び受信パーザブロックRcvPrs21を通しての処理は(図9の行900−908参照)、スローパス受信シーケンスと大部分同じように生ずるが、ファストパス受信シーケンスで異なる点は、図8を参照して上述したコネクションハンドアウトシーケンスが既に発生している点である。TCPコネクションのためのソケット記述子はソケット記述子バッファSktDscBuf内に既に存在し、TCPコネクションの状態を保持するソケットタプルSkTplは既にTcbバッファに存在する。
ソケット検出器SktDetブロック22がソケットハッシュSkHshを取り出し(行910)、SktDscBdfのテストを行ったとき(行911)、一致が検出される。従って、ソケット検出器SktDetはスローコードSlwCdではなくファストコードFstCdを検出イベントキューDetEvtQ内に書き込む(行912)。行912及び913によって示されるように、2つのエントリがDetEvtQにプッシュされ、ファストコードFstCd、ヘッダコードHdrCd、パケットエンドポインタPkEnd及びTcbIdが受信マネージャRcvMgrに渡される。2つのエントリが必要なのは、DetEvtQが32ビットの幅しかないからである。受信マネージャRcvMgrがFastCdを受けとったとき、受信マネージャは次のエントリがTcbIdであることを認識し、従って第1のエントリとともに第2のエントリをDetEvtQから自動的にポップする。
行915及び916に示すように、受信マネージャRcvMgrブロック23はDetEvtQを2回ポップし、受信パーザRcvPrsによってそこに配置されたエントリを取り出す。
受信マネージャRcvMgrはFIFOソケット受信キューSktRcvQを維持している。SktRcvQは実際には複数のキューであり、1つが各TcbIdに対応する。そのTcbIdのSktRcvQはそのIcbIdのための検出イベント記述子を保持している。受信マネージャRcvMgrブロック23がファストパスイベントをソケットエンジンSktEngに送信すべくアームされておらず、かつRcvMgrがDetEvtQからイベントを受けとった場合、RcvMgrブロック23はファストパスイベントをそのTcbIdのSktRcvQにプッシュする。従って、行917に示すように、この実施例において受信マネージャRcvMgrはSlwCdをそのTcbIdのためのSktRcvQに書き込む。RcvMgrはそのTcbIdのためのMgrBufをチェックし、そのTcbIdのEvtEnビットがセットされているかを確認する。EvtEnビットがセットされている場合は、RcvMgrはFstEvtQにFstCd及びTcbIdを入れて、EvtEnビットをクリアする(行920)。EvtEnビットがクリアされるのは、それが1回限りで、1つのファストパスイベントがソケットエンジンSktEngにフォワーディングされたばかりだからである。
ソケットエンジンは、それがファストイベントキューがレディ状態にあることを検出するとき、そのアイドル状態にある。従って、このソケットエンジンSktEngはFstEvtQをポップし(行923)、FstCd及びTcbIdを取り出す。次にソケットエンジンは、ReqCd、HdrId、及びTcbIdをその受信マネージャのためのMgrCmdQに書き込むことによってファストパスパケットのためのヘッダをリクエストする(そのTcbIdのためのTcbバッファは、状態、MDLエントリ、幾つかの作業エリア、及びヘッダを格納するためのエリアを有する。ソケットエンジンの状態の説明の項で後述する、図10の行1117も参照されたい。)。
受信マネージャはMgrCmdQをポップし(行926)、ReqCd、HdrId及びTcbIdを取り出す。TcbIdを用いて、受信マネージャはSktRcvQをポップし(行927)、現在のTcbIdのための受信イベント記述子を取得する。次に受信マネージャは、DRAMコントローラに、パーズヘッダPrsHd及びパケットヘッダPkHdをBufIdによって特定されたDRAM受信バッファからHdrIdによって特定されたヘッダバッファHdrBuf内に転送させる。HdrBufはキューではない。代わりに、各TcbIdに対して1つのHdrBufが設けられる。DRAMコントローラによってDRAM受信バッファから転送される量は、HdrCdに基づいている。次に受信マネージャRcvMgrは、TcbIdをHdrEvtQ内n書き込み(行929)、ソケットエンジンSktEngにヘッダがHdrBuf [TcbId]に入れられたことを知らせる。
同様にソケットエンジンSktEngはそのアイドル状態にあり、ヘッダイベントキューがレディ状態にあることを検出する。ソケットエンジンはHdrEvtQをポップし(行931)、TcbIdを取り出す。これによってソケットエンジンSktEngは、ヘッダがHdrBuf [TcbId]に存在すること、そしてそれがTcbIdによって特定されたソケットのためのパケットを有することを知らされる。ソケットエンジンSktEngはここでパケットを処理する。行933に示すように、ソケットエンジンはアクノリッジ、ウインドウ、シーケンサ番号をチェックする処理を同時並行で行う。パケットがこれらのテストを渡した場合は、パケットはファストパスで扱われ、ソケットエンジンSktEngはこのパケットにおけるデータの転送先を知る必要がある。
SktEngはデータの転送先を以下のようにして決定する。マルチパケットセッション層メッセージのための第1のTCPペイロードデータは、セッション層ヘッダを有し、その後のパケットは有していない。NID4は、ホストスタックへの第1のTCPパケットをホストメモリの仮想キューのなかにTcbIdを特定するメッセージヘッダとともに渡す。メッセージヘッダは、そのパケットがこのIcbIdのための初めの受信パケットでることをスタックに知らせる。ホストスタックはNID4で用いられるTcbIdをホストで用いられるTcb番号に変換する。ホストスタックはそのパケットのセッション層ヘッダをホスト上で動作するアプリケーションプログラムに渡す。アプリケーションプログラムは、セッション層メッセージのデータペイロードを入れる先を示すメモリ記述子リスト(MDL)を戻す。MDLはエントリのリストを含む、各エントリはアドレスとサイズを有する。MDLには全バイトカウントも含まれる。ホストは、適切なホストコマンドポインタをHstEvtQにプッシュすることによりMDLをNID4に渡す。ホストは、そのコマンドバッファの1つにコマンドを構築し、次にホスト上のそのコマンドバッファを指定するポインタをNID4のHstEvtQに入れることによって、コマンドをNID4に渡す。NID4はHstEvtQをポップし、ポインタを取り出し、ホストのコマンドバッファからコマンドにDMA転送をする。ここでNID4は、第1のMDLエントリのアドレスとサイズを有し、かつ全バイトカウントを有する。NID4は特定されたTcbId上のパケットのためにペイロードデータを受け取ったとき、NID4はデータペイロードを、ホストストレージ6のMDLエントリで特定されたアドレスにDMA転送し、移動されたペイロードデータの分だけMDLエントリのサイズ値をデクリメントする。ペイロードデータをさらに受け取るにつれ、MDLエントリはそのサイズ値がなくなるまでデクリメントされる。次に第2のMLDエントリがホストメモリから取り出され、第2のMDLエントリが一杯になるまで処理が進められる。この処理はMDLのための全バイトカウントがゼロになるまで継続される。エントリの全MDLリストが全部使われたとき、NIDカード4はマスターイベントキューMstEvtQを介してこの事実をホストに知らせ、ホストに割込みを送信する。次にNID4は、最初のパケットをホストスタックを通して上げてアプリケーションプログラムに渡す最初の段階に戻り、第2のMLDリストを取得しなおす。
従って、行934において、ソケットエンジンSktEngは、当該TcbIdのための有効な記述子エントリが存在するかを確認するチェックを行う。各TcbIdのTcbバッファにMDL有効ビットMdlVdが存在する。ソケットエンジンSktEngはこのMdlVdビットを調べる。それがセットされている場合、行935−942に記載の動作が実行され、そうでない場合には行943−961に記載の動作が実行される。
有効なMDLエントリが存在する場合、ソケットエンジンSktEngはHdrIdによって特定されたHdrBufからヘッダバッファIdBuffdを読み出す(行935)。(BuffdはパーズヘッダPrsHdの一部である。)ソケットエンジンは、このTcbIdのTcbバッファTcbBufに格納されたMDLエントリ(ここではApDscと呼ばれる)を読み出す。ソケットエンジンSktEngはパケットペイロードPayLdをDRAM受信バッファRcvBuf [BufId]からホストアプリケーションメモリHstMem [ApDsc]内にコピーする(行937)。ソケットエンジンSktEngは、リクエストをDRAMtoホストリクエストキューeD2hReqQ上に入れることによってデータ移動を行う。このリクエストにより、DRAMコントローラ26がペイロードをDRAM受信バッファからDRAMtoホストデータキューD2hDatQ内に移動する。次にソケットエンジンSktEngは、MstWrReqQを介してDMAコントローラ/PDIバスインタフェースユニットブロック25にリクエストを渡し、パケットペイロードをD2hDatQからホストメモリのApDscによって特定された位置(即ちMDLエントリ)に移動させる。
一旦データ転送が終了すると、DMAコントローラ/PDIバスインタフェースユニットブロック25はマスターイベントをMstEvtQ上のソケットシーケンサに戻す。このマスターイベントはソケットエンジンSktEngに、パケットペイロードのホストメモリへの転送が終了したことを知らせる。
ここで単純化のため、データの転送によりMDLエントリの最後のエントリが使われたと仮定する。従って、NID4はMDLエントリがデータで一杯にされたことをホストスタックに通知しなければならない。(この通知にはMDLのための第2のホスト割込みが必要となる。)第1の割込みは第1のパケットに生じて、これによりMDLがNID4に戻された。これはMDLがデータで一杯になった後の第2の割込みである。
ホストへの通知のため、NID4は、使用されていないメッセージバッファのアドレスMsgAdをメッセージバッファキューMsgBufQから読み出す(行938)。ソケットエンジンSktEngは適切なメッセージヘッダMsgHdをメッセージバッファ内に入れる。メッセージヘッダMsgHdは、ホストスタックに対して、TcbIdのためのアプリケーションメモリ空間にデータが入れられたことを示す。データペイロードはホストメモリに移動されていることから、NID4上のDRAM受信バッファはもはや不要であり、別のパケットを受信するために利用可能とされる。従って、DRAM受信バッファのBufIdは使用されていないバッファキューRcvBufQに再びプッシュされる(行940)。
ここで本実施例では、単純化のため、このデータペイロードの転送によって、MDL受信コマンドが終了し、ホストが利用可能とされた全MDLリストが一杯になるものと仮定する。従って、TcbIdのために埋められる利用可能なMDLエントリはもはや存在しない。従って、MDLは”無効”であり、ソケットエンジンSktEngは、行942に示すようにTcbBuf [TcbId]におけるMdlVdビットをクリアする。
ファストパスパケットが受信され、MDL有効ビットMdlVdが偽である場合、パケットはファストパスマルチパケットセッション層メッセージの第1のパケットである可能性がある。そのような状況では、MdlVdが偽であるため、処理は行943−961に進む。ホストスタックがそのコネクションで受信した次のファストパスパケットのためのMDLエントリを戻すことができるように、全パケット(ヘッダ及びデータ)はファストコードFstCdとともにホストスタックに渡される。従って、ソケットエンジンSktEngは使用されていないメッセージバッファのアドレスMsgAdをメッセージバッファキューMsgBufQから取り出す。次に全パケットペイロードPayLdがBuffdで特定されたDRAM受信バッファRcvBufからMsgAdで特定されたホスト上の汎用メッセージバッファ内にコピーされる。メッセージヘッダMsgHdは、パケットペイロードがファストパス受信パケットであることを示し、TcbIdを示し、かつどの程度の量の情報がホストに転送されているかを示す。一旦ペイロードPayLdがDRAM受信バッファからホストメモリにコピーされてしまうと、DRAM受信バッファは、DRAM受信バッファ識別子Bufldを使用されていない受信バッファキューRcvBufQ上に書き込むことによってリサイクルされる(行947)。
ホストスタックは、汎用ホストメッセージバッファHstMem [MsgAd]からメッセージを取り出し(行949)、メッセージMsgDtのペイロード(全パケット)をIPプロトコル処理層及びTCPプトロコル処理層を通して処理し、セッション層ヘッダをアプリケーション層プログラムに供給する。アプリケーション層プログラムはMDLリストを戻す。ホストスタックは第1パケットのセッション層メッセージのデータ部分をMDLエントリによって特定されるホストメモリのエリア内に移動させ、ホストメモリMDLエントリエリアにおけるデータの量を反映するように第1のMDLエントリをデクリメントする。次にホストスタックは(そのようにデクリメントされた)第1MDLエントリを、コマンドヘッダCmdHd及びMDLエントリ(ApDscと称する)をホストメモリ内の或る位置に書き込むことによってNIDに供給する(行950)。次にホストスタックは、コマンドCmdAdの開始アドレスとTcbIdをNID4上のホストイベントキューHstEvtQにプッシュすることによって(行951)、コマンドの通知をNID4に与える。
ソケットエンジンSktEngはHstEvtQをポップし(行953)。ホストメモリにおけるコマンドのアドレスCmdAd及びTcbIdを取り出す。次にコマンドヘッダCmdHd及びコマンドデータ(この場合はApDsc)がTcbバッファTcbBuf [TcbId]内に転送される(行954)。MDLエントリが埋められるべくNID4上に存在するので、ソケットエンジンSktEngはこのコネクション(TcbId)のためのTcbBufにおけるMDL有効MdlVdビットをセットする(行955)。次にソケットエンジンSktEngは、アームコードArmCdをTcbIdとともにマネージャコマンドキューMgrCmdQに書き込むことによって、アームコマンドを受信マネージャにか送信する。これによって、受信マネージャが、このTcbIdのために1つのファストパスイベントをソケットエンジンSktEngに送信するべくアームされる。
受信マネージャRcvMgrがMgrCmdQをポップし、アームコマンドArmCd及びTcbIdを取り出す(行958)。ソケット受信キューがこのTcbIdのためにポップされるべきエントリを有している場合(行959)は、受信マネージャRcvMgrは、ファストコードFstCd及びTcbIdをFstEvtQに書き込むことによって、.そのイベントをそのTcbのためのSktRcvQからファストイベントキューFstEvtQへと転送する(行960)。一方、そのTcbのためのソケット受信キュー上にイベントが存在していない場合には、受信マネージャRcvMgrは、将来のいずれかの時点でこのTcbIdのための受信マネージャRcvMgrによって受信イベントが受信されたときファストパスイベントをソケットエンジンSktEngに送信するように、アームされた状態のままとなる。従ってソケットエンジンSktEngは行922に戻り、ファストイベントキューFstEvtQをモニタして、受信マネージャRcvMgrからそこに渡されるファストパスイベントを待つ。
[ソケットエンジンの状態]
図10は、ソケットエンジンSktEngステートマシンの遷移する複数の状態を記載したものである。これらの状態には、アイドル(Idle)状態、SlwRcvEvt、SlwRcvO、EnbMrkEvt、DblMrkEvt、DblMrkO、FstRcvEvt、ClrMrkEvt、ClrMrkO、SktCmdEvt、SktCmdO、SktEnbCmd、SktEnbO、SktArmCmd、SktArmO、SktRcvCmd、SktRcvO、HdrDmaEvt、HdrEvtO、FastRcv、UpdMdlEntries、及びInitRcvがある。ソケットエンジンSktEngは現在の状態変数と着信する情報に基づいてある状態から他の状態へと進む。状態遷移はステートマシンを動作させるクロック信号の1クロック時間の立ち上がりエッジのタイミングのみに行われる。以下に記載された状態の定義に含まれる全ての動作は、その状態のなかで同時に発生する。
アイドル状態では、ステートマシンはやるべきことを探している。スローイベントキューがポップして出されるスローイベントエントリを有する場合(即ちSlwEvtQRdyが真の場合)、行1001−1008に記載の動作が行なわれる。イベントコードEvtCdがゼロの場合、EvtCdはスローコードSlwCdであり、行1002−1009の動作が行なわれる。イベントK−ドEvtCdが1の場合、EvtCdはイネーブルコードEnbCdであり、行1011−1018の動作が行なわれる。イベントコードEvtCdがゼロでも1でもない場合、EvtCdはディスエーブルコードDblCdであり、行1020−1028の動作が行なわれる。イベントコードEvtCdは、ソケット検出器SktDetブロック22によって上述のようにセットされる。アイドル状態に記載の”if then, else”ロジックとともに、SlwEvtQ {EvtCd}ビットのテストがデジタルハードウェアゲートによって実施される。
イベントコードEvtCdがゼロである場合(行1001参照)、スローパスパケットの処理はホストに渡される。符号Estate、EtcbId、EcmdAd、EhdrCd、EhdrCd、EhdrAd、EbufId及びEpkLenの前のEはソケットステートマシン内のローカルレジスタを示す。エンジン状態Estateは、ソケットエンジンが次にうつる先の状態を示す。従って、Estateはスローパス受信イベントを扱うための状態であるSlwRcvEvtである。SlwEvtQからポップされたエントリから抽出されたTcbIdはEtcbIdに書き込まれる。同様に、SlwEvtQからポップされたエントリから抽出されるヘッダHdrCdの長さ、受信バッファ番号Bufld及び受信バッファ長は、それぞれEhdrCd、EbufId、及びEpkLenにロードされる。ソケットエンジンが間違いなくパーズヘッダ、MACヘッダ、IPヘッダ、及びTCPヘッダを読み出しできるようにHdrCdはヘッダの大きさがどの程度かを示す、受信パーザRcvPrsブロック21によって生成されるコードである。図10では、値”x”がドントケア(値が決められていないこと)を表す。”x”を使用することによって、ハードウェア記述コードをロジックゲートの形に合成して、得られるハードウェアを単純化するハードウェアシンセサイザを利用可能となる。EvtCdがゼロである場合の開始−終了セクション内での全ての割り当ては、1クロックトランザクションで生ずる。
EvtCdが1である場合(即ちEnbCdである場合)、スローイベントはイネーブルマークイベントである(行1010参照)。イネーブルマークイベントでは、ソケットエンジンSktEngで受信されているパージマーカEnbCdが、ソケットエンジンSktEngに対して、ソケットエンジンがその記述子をこれ以上受け取らないであろうことを知らせる。これは、表示されたコネクションのための記述子がコネクションハンドアウトの第1段階で保持されていることからである(Dscインポート)。従って、Estateは、イネーブルマークイベントを扱うための状態であるEnbMrkEvtでロードされる。他の”E”値は、上述のようなイベントコードがゼロの場合と同様にロードされる。EvtCdが1である場合の開始−終了セクション内での全ての割り当ては、1クロックトランザクションで生ずる。
EvtCdが0でも1でもない場合(即ちEblCdである場合)、スローイベントはディスエーブルマークイベントである(行1019参照)。エンジン状態Estateは、ディスエーブルマークイベントを扱うための状態であるEblMrkEvtがロードされる。
SlwEvtWRdyが真でない(スローイベントキューからポップして出されるスローイベントが存在しない)が、FstEvtQRdyが真である(ファストイベントキューからポップして出されるエントリが存在する)場合、ソケットエンジンSktEngはFstEvtQをポップし、イベントコードEvtCdが抽出されてチェックされる(行1029参照)。
抽出されたEvtCdがゼロである場合(行1030)、ファストイベントはファスト受信イベントであり、行1030−1038の動作が行なわれる。従って、Estateはファスト受信イベントを扱うための状態であるPstRcvEvtがロードされる。”E”値は示されたようにロードされる。
抽出されたEvtCdがゼロでない場合、ファストイベントはクリアマークイベントであり、行1040−1047の動作が行なわれる。従ってEstateはクリアマークイベントを扱うための状態であるClrMrkEvtがロードされる。”E”値は示されたようにロードされる。
SlwEvtQtRdy及びFstEvtQRdyの両方が偽の場合、HstEvtQRdyがチェックされる(行1049参照)。HstEvtRdyが真の場合、HstEvtQからエントリがポップされ、行1050−1056の動作が行なわれる。Estateはホストコマンドが扱われる状態であるSktCmdEvtがロードされる。ポップされたエントリから抽出されたTcbIdをEtcbIdに保存することに加えて、ホストメモリにおけるコマンドのアドレスがポップされたエントリから抽出され、EcmdAdに格納される。これによって、NID4上のDMAコントローラブロック25がホストメモリからのコマンドの取り出しと、処理のためのコマンドのNID4へのロードとを行うことが可能となる。
SlwEvtQRdy、FstEvtQRdy、及びHstEvtQRdyが全て偽である場合、HdrEvtQRdyがチェックされる(行1058参照)。HdrEvtQRdyが真である場合、HdrEvtQがポップされる。Estateには、HdrEvtQからのエントリが扱われる状態であるHdrDmaEvtがロードされる。”E”値は示されたようにロードされる。
SlwEvtQRdy、FstEvtQRdy、HstEvtQRdy、及びHdrEvtQRdyが偽の場合には、実行されるべきイベントは存在せず、行1067−1075上の動作が行われる。
Estateには、次の状態がアイドル状態のままであるように状態Idleがロードされる。従って、ソケットステートマシンはアイドル状態で扱うイベントを探すチェックを継続する。
ソケットエンジンSktEngがアイドル状態にあり、SlwEvtQRdyが真になった場合、行1002のために状態はスローパス受信イベント状態SlwRcvEvtになり、この状態では行1078−1083の動作が行われる。値EstateにはSlwRcvOがロードされ、次の状態がSlwRcvO状態となる。使用されていないホストメッセージバッファはMsgBufQから取り出され、このアドレスはEmsgAdにロードされる(行1079)。これによって、ソケットエンジンSktEngがスローパスパケットをホストに渡すために用いるであろう、ホストメモリ内のメッセージバッファを特定する。EbufIdは左方向に11ビットシフトされ(行1080)、スローパスパケットを含む対応する2k受信バッファのDRAMアドレスを生成する。その受信バッファアドレスは、DRAMアドレスDrmAdとしてロードされる。
図11は、ホストにおけるメッセージバッファを示す図である。メッセージアドレスMsgAdはホストメモリの開始を指し示す。行1081において、メッセージの長さMsgHdLenがメッセージアドレスMsgAdに加えられ、HstAdが得られる。HstAdは、ホストのメッセージバッファにおいてメッセージデータMsgDatが始まるアドレスである。行1082では、スローパスパケットEpkLenの長さがHstSz内にロードされる。ソケットエンジンSktEngは、受信バッファtoホストDMAコマンドR2hCdをDMAコントローラブロック25へ開始することによって、全スローパスパケットを、NID4上のDRAMにおける受信バッファからホスト上のメッセージバッファへ移動させる。R2hは“受信バッファtoホスト(受信バッファからホストへ)”を意味する。DMAコントローラブロック25は値HstAd及びHstSzを用いてDMA操作を行う。ホストメモリへの書き込みは、ホストメッセージバッファ内のメッセージデータが始まる位置から始まる。行1078−1083の開始−終了セクション内での全ての操作は1つのクロック時間で生ずる。
次に処理は、行1085におけるスローパス受信ゼロ状態(SlwRcvO)に進む。この状態では、ソケットエンジンがスローパス受信メッセージSlwRcvMsgをエンジンtoホストバッファE2hBufに入れる。このメッセージは、ホストに受信されたとき、そのホストに対して、スローパス受信イベントデータがホストの汎用メッセージバッファの1つに入れられたこと、及びホストスタックがその着信データを処理する必要があることを知らせるものである。メッセージが配置されるホスト内のアドレスがセットされ(行1088)、同様にメッセージの長さもセットされる(行1089)。ソケットエンジンSktEngは、DMAコントローラ24のためのエンジンtoホストコマンドE2hCdをHstDmaCmdレジスタに入れることによって(行1090)、メッセージをE2hBufからホストに転送させる。スローパスパケットはNID4のDRAM受信バッファからホスト上のメッセージバッファに移動されたとき、EBufIdで特定される受信バッファは他の受信イベントによる使用のために使用されていない状態にされ得る。従ってEbufIdは、使用されていない受信バッファキューRcvBufQにプッシュされる(行1091)。次のクロックでは、EstateにIdleがロードされるので処理がアイドル状態に戻る(行1086)。
ホストがコマンドをNID4に向けて発した場合には、ホストイベント記述子エントリがホストイベントキューHstEvtQに存在することになる。ホストイベント記述子は、ホスト上のメモリにおけるホストコマンドを指定するポインタCmdAdを含む。ホストイベント記述子は、ホストコマンドが関連するTcbIdも含む。ホストがコマンドをNID4に向けて発した場合には、ソケットエンジンSktEngがそのアイドル状態になり、HstEvtQRdyが真であることを検出する(行1049)。次の状態はホストコマンドイベント状態SktCmdEvtにセットされる(行1050)。ソケットエンジンSktEngは、ホストイベントキューHstEvtQをポップし、ポインタCmdAd及びTcbIdを抽出し、行1051及び1052に示すようにこれらの値を格納する。SktEngはホストコマンドイベント状態SktCmdEvtに進む(行1137−1141参照)。
ホストコマンドイベント状態SktCmdEvt(行1137)では、ホストイベントキューからのホストコマンドがNID4に読み出される。次の状態はSktCmdO状態にセットされる。ホストコマンドが配置されるホスト上の開始アドレスは、値EcmdAdをHstAdにロードすることによってセットされる(行1139)。移動される情報の量を示すために、全てのホストコマンドについて常に同一であるヘッダ長定数CmdHdLenがHstSzにロードされる(行1140)。ホストDMAコマンドHstDmaCmdにホストtoエンジンコマンドH2eCdをロードすることによって(行1141)、DMAコントローラブロック25はホストtoNID転送を行うように指示される。DMAコントローラはホストコマンドをH2eBuf内に移動させる。
ソケットエンジンSktEngは、ホストコマンドのコマンドコードCmdCdが検出されるSktCmdO状態に進む。NID4内に読み出されたこのホストコマンドは、次の3種類のコマンド即ち、(1)ソケットイネーブルコマンド、(2)アームコマンド、及び(3)ソケット受信コマンドSktRcvCmdのうちの1つであり得る。ソケットエンジンコマンドSktEnbCmdはNID4に対して、そのソケットのためにパケットの保持を開始するように指示し、パージマーカをホストに戻す。ソケットアームコマンドSktArmCmdは、NID4がソケットの状態を制御・更新できるように、NID4に対して、ホストからソケット状態を取り出して、それをNID4にロードするように命ずる。Estateは、ホストコマンド内のコマンドコードまたはその値に応じて適切な次の状態をロードされる。
SktEnbCmd状態(行1153−1159)では、コネクションハンドアウトの第1段階を実行するためにソケット記述子がソケット記述子バッファSktDscBufに書き込まれる。これを行うため、EtcbIdにソケット記述子の長さが乗ぜられる。SktDscBufにおけるソケット記述子の長さは定数値である。メモリ内には4kの記述子バッファが存在する。これらの2つの値の積は、SktDscBufにおけるソケット記述子の開始アドレスDscBufAdである。これはロードされるソケット記述子のための宛先である。
ソケット記述子の発信元はホスト上のTcbバッファである。NID4にDMA転送されたホストからのコマンドヘッダは、H2eBufからアクセスされて、ホストによってそこに置かれたコマンドTcbAdをコマンドから抽出する。このTcbAdはホスト上のTcb bufferの開始点を指し示す。ホスト上のホストTcbバッファは異なる複数のセクションを有し、そのなかの1つはソケット記述子を含む。従って、不変の定数SktDscIxがTcbAdに加えられて、ホストTcbバッファ内でソケット記述子が配置されるホスト上の開始アドレスHstAdが決定される。SktDscIxは、ホスト上のTcbバッファのフォーマットによって決定される定数値である。ソケット記述子のサイズSktDscLenはHstSz内にロードされて、ホストTcbバッファから移動する情報の量をセットする(行1157)。次にDMA移動コマンドが発せられ、ホストto記述子コマンドH2dCdをHstDmaCmd上に書き込むことによって(行1158)、ソケット記述子がホスト上のTcbバッファからNID4上のソケット記述子バッファに移される。
状態SktEnbO(行1160)では、ソケットエンジンSktEngが、EnbCdコマンドをEtcbIdとともにでくタコマンドキューDetCmdQに入れることによって、ソケットイネーブルコマンドをソケット検出器ブロック22に送信する。このソケットイネーブルコードEnbCdは、ソケット検出器に、着信パケットと今ロードしたソケット記述子とをマッチングさせる試みを開始させる。ソケット検出器ブロック22は、DetCmdQからEnbCdコマンドを取り出すと、TcbIdのためのEnbCdコードを調べ、そのTcbIdのためのパージマーカを検出イベントキューDetEvtQにプッシュする。TcbIdのパージマーカを受信したことに応じて、受信マネージャRcvMgrは、そのソケット受信キューSktRcvQにおいてこのTcbIdのための後続のパケットの保持を開始し、かつソケットエンジンSktEngへのパージマーカをスローイベントキューSlwEvtQを介して送信する。このパージマーカは、ソケットエンジンSktEngに対して、このTcbId上で受信された後続のパケットがソケット受信キューSktRcvQにおける受信マネージャRcvMgrによって保持されていることを知らせる。次の状態はアイドル状態にセットされる(行1161)。
従って、ソケットエンジンSktEngはスローイベントキュー上のイベントを検出するが、今回に限って、そのイベントコードEvtCdは、パージマーカがスローイベントキュー上でソケットエンジンSktEngによって受信されたことを示すもの(行1010参照)である。次にソケットエンジンSktEngは、ホストがコネクションハンドアウトの第1段階が終了したことを認識するように、パージマーカをホストに戻す。従って、Tcb番号が保存され(ライン1012)、次の状態がイネーブルマークイベント状態EnbMrkEvtにセットされる(行1011)。
EnbMrkEvt状態(行1093−1101)では、ソケットエンジンSktEngは使用されていないメッセージバッファアドレスを、使用されていないメッセージバッファキューMsgBufQから取り出す(行1096)。このメッセージバッファアドレスはHstAdにロードされ(行1098)、移動すべき情報の量がセットされる(行1099)。ソケットエンジンSktEngはイネーブルマークメッセージEnbMrkMsgをエンジンtoホストバッファE2hBufに書き込む(行1097)。NID4上のE2hBufからホスト上のホストメッセージバッファへのイネーブルマークメッセージのDMA移動は、エンジンtoホストコードE2hCdをHstDmaCmd内にロードすることによって開始される。次にDMAコントローラ25はE2hBufからホスト上のメッセージバッファへイネーブルマークメッセージを移動させる。このホストはホストメッセージバッファにおけるメッセージを調べ、そのメッセージがイネーブルマークメッセージであることを判定し、これによってコネクションハンドアウトの第1段階が終了したことを知り、かつ現時点でそのホストがコネクションハンドアウトの第2段階においてTCP状態をNID4に転送可能であると決定する。
)行1095により、ソケットエンジンSktEngはアイドル状態に戻る。ホストはHstEvtQを介してホストコマンド(ソケットアームコマンド)をNID4に送信し、コネクションハンドアウトの第2段階を実行する。従って、ソケットエンジンSktEngはHstEvtQRdyを検出し(行1049)、ホストコマンドのTcbIdをEtcbId内に保存し、かつホストメモリ内のホストコマンドへのポインタCmdAdをEcmdAdに保存する。行1050を介して、処理はホストコマンドイベントSktCmdEvt状態に進む。行1137−1142の動作が発生する。DMAシーケンサブロック25はホストメッセージバッファからE2hBufへホストコマンドを転送する。ホストコマンドのコマンドコードCmdCdが状態SktCmdOでデコードされたとき、コマンドコードCmdCdはソケットアームコマンドを示すものである。行1147では、SktArmCmdがEstateにロードされ、処理はソケットアームコマンド状態SktArmCmdに進む(行1164−1171)。
状態SktArmCmd(行1165)では、NID4がそのコネクションのためのファストパスパケットを処理するべくアームされ得るように、そのコネクションのためのホスト上のソケット状態がNID4上の適当なTcbBuf内にロードされる。ソケット状態が入れられるNID4上のTcbバッファのアドレスTcbBufAdは、EtcbIdにTcbバッファ長TcbBufLenを乗ずることによって求められる(行1167)。ホスト上の正しいTcbのソケット状態を指し示すポインタは、固定オフセット値をホスト上のTcbバッファのアドレスTcbAdに加えることによって決定される。このオフセットは、ホスト上のTcbバッファの開始点とバッファのソケット状態(ソケットタプル)の開始位置との間の固定オフセットである。得られたポインタ(ホストのTcbバッファのソケットタプルを指し示す)はHsdAdにロードされる(行1168)。ソケットタプルのサイズSkTplLenはHstSzにロードされる(行1169)。次にDMA移動が開始されて、ホストtoソケットタプルコマンドH2tCdをDMAコントローラ25に向けて発することによって、ソケットタプルをホストからNID4に移動させる。このコマンドは、ホストtoソケットタプルコマンドH2tCdをHstDmaCmdにロードすることによって発せられる。処理はSktArmO状態に進む。
SktArmO状態(行1172)において、アームコード(ArmCd)はMgrCmdQ を介して受信マネージャRcvMgrに送信される(行1174)。このことは、ソケットエンジンに、このコネクションで取り扱うべき1つのファストパスイベントを送信させるべく受信マネージャをアーム(arm)する。ArmCdは2ビットでEtcbIdは12ビットである。従って、マネージャコマンドキューMgrCmdQは14ビットである。コネクションハンドアウトの第2段階はここで終了する。ソケット状態の制御はNID4に渡されている。一旦アームコードArmCdがソケットエンジンから受信マネージャに渡されると、受信マネージャはこのコネクションのための1つのイベント記述子をファストイベントキューFstEvtQに入れることができる。
ソケットエンジンはアイドル状態にある。受信マネージャRcvMgrブロック23がFstEvtQ上にファストイベント記述子入れると、FstEvtQRdyが真となる。ファストイベントキューからポップされたファストイベント記述子におけるイベントコードEvtCdはゼロであり(行1030)、このことは、これがファストパス受信イベントであること意味している。TcbId及びヘッダバッファポインタHdrIdは、ファストイベント記述子から抽出される(行1032及び1035)。ソケットエンジン処理は次の状態のFstRcvEvtに進む(行1114−1118)。
ファストパス受信イベント状態FstRcvEvt(行1114−1118)では、次の状態がアイドル状態にセットされ、ソケットエンジンSktEngがコマンドをMgrCmdQを介して受信マネージャに発して(行1117)、ファストパスパケットのヘッダをそのTcbIdのヘッダバッファHdrBuf内に入れる。これを行うために、適当なリクエストコマンドReqCd、TcbId、及びパケット識別子BufldがマネージャコマンドキューMgrCmdQ内にロードされる。BufIdはDRAM内のパケットの位置を記述する。受信マネージャRcvMgrはEtcbIdを用いて、SktRcvQにおける正しいソケット受信キューを特定し、示されたコネクションのための次のイベント記述子をそのキューから引き出し、そのイベント記述子を用いて、パケットヘッダを(Buildによって特定された)DRAM受信バッファから、そのTcbIdのヘッダバッファHdrBuf内にDMA移動させる。それによってヘッダバッファに入れられるヘッダは、パーズヘッダ、リンクヘッダ、TCP及びIPヘッダである。この時点でヘッダがヘッダバッファにあることをソケットエンジンSktEngに警告するために、受信マネージャRcvMgrはヘッダイベントキューHdrEvtQにヘッダイベントエントリを入れる。このエントリはTcbIdを示す。
ソケットエンジンはアイドル状態に戻る。受信マネージャRcvMgrの動作により、ヘッダイベントはヘッダイベントキュー上にあり、HdrEvtQRdyは真となる。従って、ソケットエンジンは行1058−1066の動作を実行する。TcbIdはヘッダイベントキューHdrEvtQエントリから抽出され(行1060)、次の状態はHdrDmaEvt状態にセットされる(行1059)。
HdrDmaEvt状態(行1190−1197)では、次の状態がHdrEvtOにセットされる。パケット長は、ヘッダバッファHdrBufのパーズヘッダから抽出され(行1196)、EpkLenに保存される。パケットペイロードデータが格納されているMRAMの受信バッファは、Ebuffdにも格納される(行1195)。ファストパス受信パケットにのせられて入ってくる情報とともに受信・送信ウインドウの現在状態を処理するためのフラッシュ検出操作FlushDetも行われる。
上述のように、スローパスでは、パーズヘッダとメッセージヘッダとを有する受信パケットがメッセージバッファ内に入れられて、メッセージバッファ機構を介してホストに渡される。ファストパスでは、全てのTCP及びIPプロトコル処理がNID4上で行われ、ペイロードデータのみがホスト上のMDL空間に入れられる。それでもなお、ホストは、ペイロードデータがMDLに供給されたことをNID4から通知される必要がある。この通知は、同じメッセージバッファ機構を介してホストに送信される。従って、ソケットエンジンSktEngは使用されていないメッセージバッファキューMsgBufQから使用されていないバッファアドレスを取り出し、このメッセージバッファアドレスが保存される(行1193)。
処理はヘッダイベントゼロ状態HdrEvtOに進む(行1198−1216)。HdrEvtO状態では、フラッシュが検出された場合(Eflushが真の場合)、動作の1組が行われる(行1199−1200)。フラッシュが検出されず、そして満たされるべきTcbのためのMDLエントリが存在する場合には、行1202−1208の動作が行なわれる。フラッシュが検出されず、かつ満たされるべきTcbのためのMDLエントリが存在しない場合には、行1209−1216の動作が行なわれる。フラッシュ条件が検出されないが、有効なMDLエントリが存在しない状態は、ファストパスマルチパケットメッセージの第1パケットの受信時である。そのような場合、NID4は、パケットペイロードを入れるべきホストメモリ内の位置が分からず、その後TcbのMdlVdビットが偽となる。
この実施例では、受信したファストパスパケットはマルチパケットメッセージの第1派えっとであり、TcbBufにはまだそのファストパスコネクションのためのMDLエントリが存在しない。従って、行1209−1216の動作が行なわれる。
次の状態はInitRcv状態(行1210)であり、第1ファストパスパケットはホストの汎用メッセージバッファ内に送信される。パケットを移動させるために、DRAM受信バッファのアドレスは、Ebuffdを11ビット分シフトさせることによって決定される(行1211)。パケット長EpktLenはHstSz内にロードされる。パケットペイロードデータは、ホストアドレスEmsgAdとメッセージヘッダ長MsgHdLenの合計であるホスト上の或るアドレスに転送されることになる。これはメッセージヘッダの終わりにパケットデータペイロード入れるということである。DMA移動は、受信バッファtoホストコマンドR2hCdをHstDmaCmd上に入れることにより開始される。これは、そのパケットをホストメッセージバッファを介してスローパスパケットのようにホストに供給されるようにするが、この初めのファストパスパケットの場合は異なる種類のメッセージヘッダ(受信リクエストメッセージヘッダ)が用いられる。このメッセージヘッダは、ホストスタックに対して、このコネクションで受信された後続のファストパスパケットのさらなるデータペイロードをどの位置に入れるべきかを示すMDLリストをアプリケーションから取得するように指示する。
従って、次の状態は受信リクエストメッセージがホストに送られる初期状態InitRcvである(行1232)。この受信リクエストメッセージは初期ファストパスパケットを含む。
ホストはそのメッセージバッファから受信リクエストメッセージを取得し、(初期ファストパスパケットである)そのパケットのデータ部分を処理し、かつその初期ファストパスパケットをアプリケーションプログラムに供給する。TCPプロトコル層を含む、以下の全てのプロトコル処理はNID4によって実行される。アプリケーションプログラムはそのコネクションのためのMDLリストを戻す。ホストスタックは、適切なTcbのためTcbホストバッファ内にMDLリストを書き込む。MDLとMDLリストは、この時点ではNID4に対してやりとりされていない。MDLエントリをNID4とやりとりさせるために、ホストはホストメモリにホストコマンドを形成する。次にホストは、ホストメモリ内のホストコマンドが入れられた位置を示すポインタCmdAdをHstEvtQにプッシュする。
次に、ソケットエンジンはアイドル状態に戻るが、このときそのパケットエンジンのためのHstEvtRdyが存在する。行1050−1057の動作が行われる。ソケットエンジンはHstEvtQからエントリをポップし、そのエントリからコマンドポインタCmdAd及びTcbIdを抽出する。次の状態はSktCmdEvtにセットされる。
SktCmdEvt(行1136−1142)では、ソケットエンジンがDMAコントローラブロック25に、ホストコマンドをホストからH2eBufに移動させる(行1141参照)。SktCmdO状態では、H2eBufのなかのホストコマンドが調べられ、コマンドコードCmdCdがデコードされる。ここで、そのコマンドはSktEnbCmdでもなければSktArmCmdでもない。従ってSktEng処理(行1150)は、ソケット受信コマンド状態SktRcvCmdに進む。
SktRcvCmd状態(行1176−1183)では、MLDリストの第2のMDLエントリ(ApDscと呼ばれる)を、ホスト上のTcbバッファからNID4上のTcbIdのためのTcbBufの適当なフィールドにロードされる。ホスト上のMDLエントリが配置された発信元アドレスは、アプリケーション記述子オフセットApDscIxをホストのTcbバッファ内の開始アドレスに追加することによってセットされる(行1180)。Tcbバッファからホストへ移動する情報の量は、定数ApDscLenにセットされる(行1181)。そして、MDLエントリの移動のための宛先がセットされる(行1179)。NID4のTcbバッファの開始アドレスは、TcbId数にTcbバッファの長さTcbBufLenを乗じたものである。次にTcbバッファ内のMDLエントリに対するオフセットApDscIxを開始アドレスに加えて、MDLエントリが書き込まれる宛先アドレスを求める。次にソケットエンジンSktEngは、DMAコントローラ25に、ホストtoソケットタプルコマンドH2tCdをHstDmaCmdに入れることによってMDLエントリをホストメモリからNID4上のTcbBufに移動させるようにする。
次に、状態SktRcvOにおいて、受信ウインドウTcbBuf {RSqMx}がインクリメントされる(行1186)。ホストは、データがアプリケーションによって消費されると、受信シーケンスを動かすことによってウインドウサイズを変更させる。ホストは我々にどの程度ウインドウを変化させることが可能であるかを知らせる。我々はTcbBufに進み、受信シーケンス最大値RSqMxを引出し、コマンドh2eBuf {SqInc}においてホストによって示された量を加え、更新値を新たな受信シーケンス最大値TcbBuf {RSqMx}としてTcbバッファTcbBufに戻す。(RSqMxはRcvSqLmtと表記されることもある。)フレームの送信に関連するハードウェアが存在し、そのハードウェアはウインドウ情報の一部を、我々にデータを送信した者に送信して、その送信者にどの程度の量のデータを送信者が我々に送信できるかを知らせ、我々はその送信者にウインドウサイズを知らせることによってそれを行い、そのウインドウサイズは部分的にこの受信シーケンスリミットから導き出される。従って、送信者が入ってくるこの情報を見れば、どの程度の量のデータを我々が受信できるかが分かる。従って、我々は受信シーケンスリミットを更新し、アイドル状態に戻る。
ここでMDLエントリがNID4上のTcbBuf内に存在していることから、Tcbバッファ内のMDL有効ビットがセットされる(行1188)。次にファスト受信イベントが生じたとき、既に有効MDLが存在しているので、Tcbバッファ内のMDL有効ビットはセットされ、ホストからMDLエントリを取り出す初期受信シーケンスを通さずに、ファスト受信シーケンスを通して処理を進めることになる。
ソケットエンジンSktEngはアイドル状態に戻る。受信マネージャRcvMgrがアームされている(armed)ことから、そのコネクション上の第2ファストパスパケットのための受信イベント記述子は、受信マネージャRcvMgrからファストイベントキューFstEvtQを介してソケットエンジンSktEngにフォワーディングされる。ソケットエンジンはFstEvtQRdyが真でり、イベントコードEvtCdがゼロであることを確認し、上述のTcbIdを抽出するプロセスを行い、FstRcvEvt状態に進む(行1115−1118)。ファストパス受信イベント状態FstRcvEvtでは、ソケットエンジンがMgrCmdQを介して受信マネージャに対して、TcbIdによって特定される第2のファストパスパケットのヘッダを供給するように命令し(行1117)、次いでアイドル状態に戻る。ヘッダはヘッダバッファHdrBufを通してソケットエンジンに進み、受信マネージャRcvMgrはそのTcbのためのヘッダイベントをHdrEvtQに入れる。
ソケットエンジンSktEngはアイドル状態にあり、HdrEvtQRdyを検出し、そして行1058−1066の動作を行う。ヘッダイベントキューからのTcbIdはEtcbIdに保存される(行1060)。EtcbIdはソケットエンジンにとってローカルなレジスタである。TcbIdをEtcbIdにロードすることによって、TcbIdによって特定された特定のTcbバッファの全てのビットがソケットエンジンに利用可能となる。特定されたTcbバッファの全てのビットは一度に利用可能となる。
ヘッダバッファポインタHdrIdはEhdrAd内に保存される(行1063)。EhdrAdはソケットエンジンにとってローカルなレジスタである。ヘッダバッファポインタをEhdrAdにロードすることによって、HdrAdで特定された特定のヘッダバッファHdrBufの全てのビットがソケットエンジンに利用可能となる。特定されたヘッダバッファの全てのビットは一度に利用可能となる。
次に、HdrDmaEvt状態において(行1191−1197)、(EhdrAdtheによって特定されたヘッダバッファによる出力としての)ヘッダのビット及び(EtcbIdによって特定されたTcbバッファの出力としての)Tcbのビットを用いて、フラッシュ検出FlushDetテストを行う(行1194)。フラッシュイベントが存在しないと仮定すると、ソケットエンジンはHdrEvtOに遷移する。今回はMdlVd [ETcbId]が真であり(初期受信がこの状態を通して渡されるのとは異なる)、従ってNID4はデータペイロードがホスト内のどこに入れられるべきかを認識している。バッファIdが11ビットシフトされて、DRAM受信バッファ内のパケット開始位置が求められ、パケットヘッダをスキップして実データのところに進む(行1204)。このアドレスDrmAd,はホストに移動されるデータペイロードの発信元である。ホスト上の宛先アドレスHstAdのために、NID4に格納されたアプリケーション記述子ApDsc(即ちMDLエントリ)が用いられる(行1205)。移動するペイロードデータの量は、パケット長EpkLenからヘッダの量HdrLenを差し引いた量である。NID4上のDRAM受信バッファからMDLエントリによって特定されたホスト上のアドレスへのパケットペイロードの移動は、受信バッファtoホストコマンドR2hCdをHstDmaCrndにプッシュすることによって開始される。DMAシーケンサブロック25はこの移動を実行する。
一旦データペイロードがホスト上にコピーされると、ソケットエンジンはファスト受信状態FastRcvに進む(行1217−1225)。この例では、ペイロードデータのMDLエントリへの移動がMDLエントリを全て使う。従ってファスト受信メッセージが準備されてホストスタックに送信され、ホストスタックに対して、特定のMDLエントリが全て使われてそのホストの受信コマンドが終了したことを知らせる。(ここには示していないが、或る状態(図示せず)では、MDLエントリのバイトカウントが、データペイロードの移動量に従ってデクリメントされて、MDLエントリが全て使われたことを確認し、MDLエントリが全部使われた場合には、処理はFastRcv状態に進み、そうでない場合には、更新されたMDL値が元のTcbBufにロードされ、ソケットエンジンがアイドル状態に戻して別のファストパス受信イベントを探す。)ファスト受信メッセージFstRcvMsgは同じ上述のストメッセージバッファ技術を用いて渡される。ソケットエンジンは、DMAシーケンサ25に、E2hCdコマンドをHstDmaCmdに入れることによって、メッセージをNID4からホスト上メッセージバッファへと移動させる(行1222)。TcbBufに格納されたソケットにおけるコネクション状態はTplUpdに更新される(行1224)。このタプル更新TplUpd値は図6に記載されている。行1224のTplUpdは、Tcbバッファ値が以下の式、即ち
TcbBuf [TcbId] {ExpRcvSeq} < = TplUpd {NxtSeqExp}
TcbBuftTcbId] {XmtAckNum} < = TplUpd {PktXmtAck}
TcbBuf [TcbId] {XmtSeqLmt} < = TplUpd {NxtXmtLmt}
TcbBuf [TcbId] {XmtCcwSz} < = TplUpd{NxtXmtCcw}
に記載のように更新されることを示している。
ここでソケットエンジンによるこの第2のファストパスパケットの処理は終了することから、ソケットエンジンは、受信マネージャRcvMgrを、そのコネクションのための別のイベント記述子を送信するべくアームする(行1225)。
処理は状態更新MDLエントリUpdMdlEntriesに進む。ホストにより供給されたMDLエントリが全部使われた場合、NID4上のTcbバッファにおけるMDL有効ビットはクリアされる(行1229)。次の状態はFastRcvにセットされる(行1231)。
[コネクションフラッシュシーケンス]
図12は、コネクション上でフラッシュ条件が検出された後にコネクションをNID4からホスト3に渡す際の、図2に示す種々のハードウェアのブロックが行う動作を示した図である。ファストパス受信状態では、ソケットエンジンSktEngがファストパス受信イベント状態FstRcvEvtに入る)(図10の行1114−1118参照)。ソケットエンジンSktEngは次の状態をアイドル状態にセットし(行1116)、受信マネージャRcvMgrにソケットエンジンにヘッダを共有するように指令する(行1117)。従って、ソケットエンジンSktEngはアイドル状態にあり、ヘッダイベントHdrEvtQRdyは真になる(行1058)。行1059のために、ソケットエンジンSktEngはヘッダDMAイベントHdrDmaEvt状態になり(行1191−1197参照)、次いでHdrEvtO状態となる(行1198−1216)。そこでフラッシュ検出条件が検出されると(行1194)、1ビット値FlushDetがEflushにロードされる。Eflushは真であり(行1198)、次にHdrEvtO状態にあるとき、ソケットエンジンSktEngは”プッシュ”コードPshCd(行1200)を受信マネージャのコマンドキューMgrCmdQにプッシュする。
図12を参照すると、受信マネージャRcvMgrはMgrCmdQをポップし(行1503)、プッシュコードPshCd及びTcbIdを取り出す。このプッシュコードは、受信マネージャRcvMgrがSktRcvQから最後の記述子をポップする効果を取り消させるようにする。プッシュコードPshCdは、RcvMgrがソケット受信キューSktRcvQのための読み出しポイントを、1つの記述子エントリに戻す形で”プッシュ”するようにする。そのTcbIdのためのソケット受信キューSktRcvQは読み出しポインタ及び書き込みポインタを有する。記述子がソケット受信キューSktRcvQからポップされたとき、その記述子は実際にメモリから消去されるわけではなくキューメモリに残され、次回にSktRcvQがキュー上の次のエントリが読み出されるように読み出しポインタが前に進められる。しかし、受信マネージャRcvMgrがプッシュコードPshCdを受信する場合、読み出しポインタは1つの記述子エントリにバックアップされ、前に進められない。以前にポップされた受信記述子はキューメモリ内に以前として残ってることから、読み出しポインタをプッシュバックすることで、最後にポップされた記述子がキューからポップされなかったのようにSktRcvQも元の状態に戻る。
受信マネージャRcvMgrは、パージマーカClrCd及びTcbIdをファストパスイベントキューFstEvtQに書き込むことによって、ClrCdをそのTcbIdのファストパス受信記述子の流れに挿入することも行う。その後、ソケットエンジンがこのTcbIdのための受信記述子をファストパスイベントキューから出して処理したとき、ソケットエンジンはそのClrCdを検出する。ClrCdを検出することで、ソケットエンジンには、エラーによりそのTcbIdのためのファストパスイベントがこれ以上存在しないことが知らされる。しかし、パージマーカClrCdの前のファストパスイベントキューFstEvtQにおけるファストパスパケット記述子は、ファストパスで扱われる。パケットがFlushDetを真にする前にファストパスパケットをファストパスモードで扱うことで、フラッシュ条件の取り扱いにおける待ち時間が短縮される。
受信マネージャRcvMgrはMgrBufにおけるイベントイネーブルビットEvtEnをクリアして(行1505)、ファストパス受信記述子がこれ以上受信マネージャRcvMgrからこのTcbIdのためのソケットエンジンに送信されないようにする。これで、コネクションフラッシュ動作の第1段階(ファストパスイベントパージ段階)が終了する。
FstEvtQRdyが真であることが検出されるとき、ソケットエンジンSktEngはアイドル状態にある(行1029参照)。そのSktEngはファストパスイベントキューFstEvtQを読み出し(行1507)、イベントコードEvtCdを取り出す。イベントコードEvtCdはパージマーカClrCd(”クリアマークイベント”コードとも称する)である。このイベントコードがクリアマークイベントであることで、ソケットエンジンSktEngに対して、ファストパスイベント受信キューFstEvtQにおいて、TcbIdで特定されたコネクションのためのファストパス受信イベント記述子がクリアされていることを知らせる。TcbIdhは、ファストパス受信キューFstEvtQからポップされたエントリから抽出される(行1041参照)。EvtCdがクリアマークイベントであることで、ソケットエンジンが状態ClrMrkEvtに遷移させられる(行1120−1128)。
状態ClrMrkEvtでは、ソケットエンジンSktEngが、そのソケット検出器SktDetのための検出コマンドキューDetCmdQに、ディスエーブルコードDblCd及びEtcbIdを入れる(行1127)。ソケットエンジンSktEngは、そのClrMrkO状態で将来使用するために、メッセージバッファキューMsgBufQからメッセージバッファアドレスを得る(行1122)。ソケットエンジンSktEngは、そのコネクションの現在のソケット状態SkTplのTcbバッファTcbBuf [TcbId]からホストメモリのTcbバッファHstMem [TcbAd]への移動をセットアップする(行1508参照)。ソケットエンジンは、タプルtoホストコマンドT2hCdをHstDmaCmdに入れることによってこれを行う。DMAコントローラ25はT2hCdを受け取り、ソケットタプル情報を示されたホストメッセージバッファに移動させる。さらなる詳細については図10の行1120−1126を参照されたい。
ソケットエンジンSktEngは状態ClrMrkOに遷移し、ホストに対して、TCP状態情報を有するソケットタプルSkTplが、このコネクションのためのホストTcbバッファに戻されたことを知らせる。ソケットエンジンは、使用されていないメッセージバッファアドレスをMsgBufQから取り出し(行1509)、次いで状態エクスポートメッセージExportMsgをエンジンtoホストバッファE2hBufに書き込む(行1131)ことによって、これを行う。DMA操作の宛先は、メッセージバッファアドレスEmsgAdにセットされる。DMA転送の長さは、メッセージヘッダの長さMsgHdLenにセットされる(行1133)。次にソケットエンジンSktEngは、エンジンtoホストコマンドをHstDmaCmdに入れることによってDMAを生じさせる(行1134)。次にDMAコントローラ25は、状態エクスポートメッセージをNID4からホスト上のメッセージバッファへと移動させる。これで、コネクションフラッシュ操作の第2段階(ソケット状態保存)が終了する。
コネクションフラッシュ動作の第3段階(ファストパスキューパージ)では、この後のパケットがホスト上のTCP処理のためにホストに渡されることから、ソケットエンジンSktEngがソケット検出器SktDetにこのTcbIdのためのパケットの検出を停止するように命ずる。状態ClrMrkEvtでは、ソケットエンジンSktEngがディスエーブルコマンドDblCd及びEtcbIdをソケット検出器コマンドキューDetCmdQに書き込む(図12の行1511)。図10の行1127も参照されたい。
ソケット検出器SktDet22は、検出器コマンドキューDetCmdQ上にディスエーブルコマンドDblCdを見つけるまで、このコネクション上のパケットの検出を行う。ディスエーブルコマンドDblCdはソケット検出器に、パケット検出を停止するように指示する。ソケット検出器SktDetはDetCmdQを読み出し(行1513)、ディスエーブルコマンドDblCd及び示されたTcbIdを得る。次にソケット検出器SktDetはTcbIdのためのソケット記述子バッファSktDscBufにおける検出イネーブルビットDetEnをクリアし(行1514)、パージマーカDblCdを検出イベントキューDetEvtQに書き込むことによってパージマーカをDblCdを受信マネージャRcvMgrに送る(行1515)。これによって、DblCdパージマーカの後に検出イベントキューDetEvtQにおいてそのTcbのために存在するものがファストパスになることはなく、ソケット検出器がそのTcbIdのためにディスエーブルにされていることからスローパスになるということが確実となる。DblCdパージマーカはDetEvtQを通して受信マネージャRcvMgrに流れる。受信マネージャRcvMgrはパージマーカDblCdとTcbIdを受信し(行1517)、SktRcvQからそのTcbIdのための全ての記述子を取り出し、それをスローイベントキューSlwEvtQに入れる(行1518−1519)。それを行ったとき、受信マネージャRcvMgrはパージマーカDblCdをスローイベントキューSlwEvtQに入れる(行1520)。
一方、ソケットエンジンSktEngは、それがアイドル状態にあり、スローイベントキューSlwEvtQを読み出してパージマーカDblCdを取得するまで、SlwEvtQからスローパスイベントを引き出している(行1522)。図10の行1020も参照されたい。ソケットエンジンSktEngはパージマーカDblCdを得ると、ソケットエンジンSktEngはDblMrkEvt状態に進む(図10の行1103−1106)。パージメッセージはホストに送られて、ホストに、そのソケット検出器が該TcbIdのためにディスエーブルにされたことを知らせる。ソケットエンジンSktEngは、ホストからメッセージバッファアドレスを得て(行1105)、ディスエーブルマークメッセージをエンジンtoホストバッファに入れ(行1109)、次にDMAコントローラ25にエンジンtoホストコマンドE2hCdをHstDmaCmdに入れることで(行1112)メッセージをNID4からホストに転送させることによって、この操作を行う。ホストがそのメッセージバッファ内にディスエーブルマークメッセージを見つけると、ホストは示されたソケット記述子がもう使用されていないこと、該TcbIdのためのソケット受信キューが空であること、そしてホストが異なるソケット記述子をソケット検出器SktDetに入れて、別のソケット上でのファストパス処理を可能とすることができることを知ることとなる。
[フラッシュ検出]
上記のプロセスでは、1ビットのFlushDet値によって示されるフラッシュ条件の検出(行1194参照)が、ソケットエンジンSktEngステートマシンに供給されるクロック信号の1クロックサイクルに行われる。図13乃至図16には、フラッシュ検出FlushDetの決定方法が示されている。図13乃至図16では、イタリック体で表示された値がTcbIdにより特定された特定のTcbバッファTcbBuからの値であり、下線を付された値はHdrIdによって特定されたヘッダバッファHdrBufから出力される着信するパケットのヘッダからの値である。両方の種類の値(TcbBuf値とHdrBuf値)は、ソケットエンジンSktEngの上に受信される。イタリックTcbIdでもなく下線も付されていない値は、他の値からソケットエンジンSktEng内で求められた値である。
FlushDet信号は、図15の行1712-1713に示すように決定される。FlushDet信号は、現在ウインドウオーバーフローCurWinOvr OR((NOT予測シーケンス検出!ExpSeqDet)AND(NOT前シーケンス検出!OldSeqDet))OR(次ウインドウ縮小NxtWinShr)OR((NOT転送ack有効!XmtAckVld)AND(NOT転送ack前!XmtAckOld))の条件を満たす場合に真となる。図において縦線は論理ORを示す。エクスクラメーションマークは論理NOTを示す。記号”&”は論理ANDを表す。引用符は定められた定数を示す。”==”は「〜と等しいならば(if equal to)」を意味する。A?B:Cという形の式は、「AならばB、AでなければC」を意味する。記号”!=”は「〜と等しくない」を意味する。記号”!<”は「(右辺)以上」(not less than)を意味する。記号”!>”は「(右辺)以下」(not greater than)を意味する。記号”<=”は、右辺の式の値を左辺に代入することを表す。記号”<<”は、左にシフトすることを示し、シフトの回数はこの記号の右の値で示される。
例えば、現在ウインドウオーバーフロー値CurWinOvrは、RcvSeqLmt、NxtSeqExp、及びQuadrantから式1708で示されるように決定される1ビットの値である。RcvSeqLmt−NxtSeqExpが定数Quadrant以上である場合、現在ウインドウのオーバーランが存在し、CurWinOvrは1にセットされる。RcvSeqLmtはTcb Bufから得られる32ビット値である。Tcbバッファの内容については図4及び図6を参照されたい。NxtSeqExpは、32ビット値PktRcvSeqを減じ、それに16ビット値PktPaySzを加えることによって計算される32ビット値である。PktRcvSeqはヘッダバッファに格納される値である。値PktPaySzは、ヘッダバッファ値PktRcvSeq及びNxtSeqExpから得られる値である。Quadrantは16進法で40000000である、32ビットの値である。
同様に、現在ウインドウオーバーラン値CurWinOvrは、図13乃至図16の式に従って計算され、行1712及び1713の式の右辺に現れる他の全ての値についても同様である。
行1712の式(!ExpSeqSet & !OldSeqDet)は、パケットの32ビットのシーケンス番号が先の時点でのシーケンス番号である場合に真となる。例えば二重パケットのような古いパケットは、予測シーケンス番号より小さい(即ち古い)シーケンス番号を有し得る。そのような古いパケットはフラッシュ検出を生じさせない。古いパケットは二重パケットであり得、そのような二重パケットはNIDにコネクションのフラッシュを生じさせることなくホストに渡されることになるからである。そのような場合、ホストは、その選択に応じてコネクションの制御をホストに戻すことができる。従って、予測シーケンス番号より小さい(即ち古い)シーケンス番号を有するパケットを受信した場合、FlushDet信号は真とならない。パケットのシーケンス番号が予測シーケンス番号である場合には、そのパケットはそれが有するべきシーケンス番号を有しており、フラッシュ検出はなされない。一方、受信されたパケットが予測シーケンス番号より大きいシーケンス番号を有する場合には、そのパケットはそれが受け取られるべき時点よりも先に受け取られた将来の時点のパケットであり、エラーが生じている可能性が高い。従って、パケットのシーケンス番号が予測シーケンス番号でない場合で、かつシーケンス番号が古いシーケンス番号でない場合に、フラッシュ検出は真となる(行1712参照)。
行1712の式で用いられている予測シーケンス番号検出値ExpSeqDetは行1703に示すように計算される。予測シーケンス番号検出値ExpSeqDetは、ヘッダバッファに格納されたパケットのシーケンス番号PktRcvSeqがTcbバッファに格納された予測受信シーケンス番号ExpRcvSeqと等しい場合に真となる。ExpRcvSeqは、そのコネクションで受信されるべき次のパケットのシーケンス番号である。パケットが受信されると、ExpRcvSeqはその前に受信されたパケットのデータペイロードの量だけ大きくされる。従って、次のExpRcvSeqを取得するには、現パケットのペイロードサイズPktPaySzがペットシーケンス番号PktRcvSeqに加えれられ、その合計が予測される次のシーケンス番号NxtSeqExpとなる。パケットペイロードPktPaySzの単位は、データのバイト数である。そのパケットが処理された後、NxtSeqExpはTcbバッファに格納される予測シーケンス番号ExpRcvSeqとなる。
行1713の式NxtWinShrは、NID4からデータを受信したマシンがそのTCP受信ウインドウを縮小させた場合に真となる。TCP受信ウインドウの縮小は、TCPプロトコルでは行われないようにされている。NID4からデータを受け取ったマシンは、NID4に送り返す次のパケットで、それが受け取ったデータのアクノリッジメントPktXmtAckを戻す。そのデータを受け取ったマシンは、戻しパケットにウインドウサイズPktXmtWinをも含める。NID4は戻しパケットを受け取り、前記2つの値を用いて他のマシンがその受信ウインドウを縮小しているか否かを決定する(行1618)。縮小TCP受信ウインドウは、現在の送信リミットXmtSeqLmtが次の送信リミットNxtXmtLmtより大きいか否かを判定することによって検出される。
現在の送信シーケンスリミットXmtSeqLmtは、NID4上のソケットタプルに格納されたシーケンス番号値である。NID4は、XmtSeqLmtシーケンス番号値を用いて、それが他のマシンに送信可能なデータ量を求める。他のマシンはこの値を制御するが、それを減らすことはできない。
次の送信リミットNxtXmtLmtは、PktXmtAckをウインドウサイズPktXmtWinに加えることによりNID4が決定する(行1606)。
NIDが送信を許可されているNxtXmtLmtは、前にNIDによる送信が許可された前の送信リミットXmtSeqLmtより小さい場合には、他のマシンはその受信ウインドウを縮小する。これは違反状態である。NID4は既にパケットを送信しており、NIDが送信したばかりのパケットが大きすぎることを通知するackを受け取ったとき、そのパケットは送信中であることが生じ得るからである。従って、次のウインドウ縮小NxtWinShrの値は、次の送信リミットNxtXmtLmtが前の送信リミットXmtSeqLmtより小さい場合に真となる。
番号NxtXmtLmt及びXmtSeqLmtは、循環する、符号なしの32ビットの数である。そのような符号なしの循環数どうしの比較は複雑なものとなり得る。行1618において、2つの符号なし数が、その2つの数同士の差と最大シーケンス番号(1G)の4分の1とを比較することによって比較されている。
行1713の次の式(! XmtAckVld & ExmtAckOld)では、受信したパケットのアクノリッジ番号が将来のアクノリッジ番号であるか否かを決定するために、そのパケットのアクノリッジ番号をチェックしている。従って、この式は、受信したアクノリッジ番号が有効でなく(行1611参照)、かつそのアクノリッジ番号が古いアクノリッジ番号でない場合(行1612参照)に真となる。
値FlushDetは、行1712及び1713に示すようにこれらの4つの式の論理ORをとったものである。この論理OR演算は、ソケットエンジンSktEngに供給されるクロック信号の1クロック周期において組合せハードウェアロジックによって実施される。組合せハードウェアロジックへの入力として供給される値は、(1)EtcbIdによって特定されるTcbバッファTcbBufからの出力値、及び(2)EhdrAdによって特定されるヘッダバッファHdrBufからの出力値である。FlushDetを求めるために用いられる特定のTcbバッファ値は、(1)RcvSeqLmt(32ビット)、(2)ExpRcvSeq(32ビット)、(3)XmtSeqLmt(32ビット)、(4)XmtAckNum(32ビット)、及び(5)XmtSeqNum(32ビット)である。FlushDetを求めるために用いられる特定のHdrBuf値は、(1)PktRcvSeq(32ビット)(2)PktPaySz(16ビット)、(3)PktXmtAck(32ビット)、及び(4)PktXmtWin(16ビット)である。
図13乃至図16の式において、各論理演算子の演算は、独立したALUタイプのハードウェアデジタルロジックのブロックによって行われる。一例として、”+”演算は、論理ゲートで構成されたデジタル加算器によって行われ得る。”−”演算は、デジタルゲートで構成されたデジタル減算器によって行われ得る。”=”演算は、デジタルゲードによって構成されたデジタル比較器によって行われ得る。
TcbBufは、特定の1つのTcbバッファの全ビットが同時に出力されるようにTcbのビット数と同じ幅を有するように編成されたデュアルポートメモリ構造である。なお、Tcbバッファはアドレス値EtcbIdによって特定される。図2の例では、TcbBufが256バイトの幅を有する。DMAコントローラ25は32ビット幅のポート及び複数の書き込みストローブを介してTcbBufに書き込みを行い、TcbBufは256バイト幅のポートを介してソケットエンジンSktEngにインタフェースする。
HdrBufは、特定の1つのヘッダバッファのビット数と同じ幅を有するように編成されたデュアルポートメモリ構造である。なお、ヘッダバッファはアドレス値EHdrAdによって特定される。図2の例では、HdrBufが128バイトの幅を有する。DMAコントローラ26は32ビット幅のポート及び複数の書き込みストローブを介してHdrBufに書き込みを行い、HdrBufは128バイト幅の読み出し/書き込みポートを介してソケットエンジンSktEngにインタフェースする。
[状態更新]
コネクション状態の更新は、Tcbバッファメモリのさまざまな場所への一連の値の書き込みとして順次Tcbバッファにおけるコネクション状態を更新するのでなく、ソケットエンジンSktEngステートマシンに供給されるクロック信号の1クロック時間で行われる。コネクション状態の更新は、図10の行1224にあるように、全てのタプル更新TplUpd値(図6参照)が、EtcbIdで示されるコネクションのためのTcbバッファの適切なフィールドにロードされる。ロードされる値は、ソケットエンジンSktEngについての上記の説明及び図10の行1224に記載されている。このタプル更新動作を容易にするため、Tcbバッファメモリ構造は、全てのTplUpdビットがTcbバッファに同時に並行して書き込まれるように、特定の1つのTcbバッファのビット数以上の幅を有するように編成される。
[マルチスレッドソケットエンジン]
上述のソケットエンジンSktEngの説明では、ソケットエンジンがDMAコントローラ移動をセットアップし、その移動は、次のステートマシンクロック時にその移動が既に生じているかのようにステートマシンが別の状態に遷移し得るように即座に生ずる。或る実施形態では、DMAコントローラ移動が終了するまでに、1つのステートマシンクロックサイクルより長い時間をかける。移動が完了するまで待機するソケットエンジンSktEngではなく、ソケットエンジンSktEngは、第1のスレッドを処理し、DMAコントローラには転送を行うように指示してDMAコントローラが転送を完了するまで第1スレッドの処理を停止し、DMAコントローラが転送を行っている間に第2スレッドを処理し、DMAコントローラが転送を終了したとき第1スレッドの処理の戻ることが可能なマルチスレッドステートマシンである。スレッドからスレッドにジャンプするために、ソケットエンジンの内部レジスタの内容は1つのコンテキストの形式で格納され得る。各スレッドに対してそのようなコンテキストが存在する。第1スレッドから第2スレッドへ移動するために、ソケットエンジンの内部レジスタの内容は、第1のコンテキストにロードされて、第2のコンテキストの内容はソケットエンジンの内部レジスタにロードされる。ソケットエンジンがマルチスレッドであるか否かとは無関係に、ソケットエンジンSktEngはステートマシンのある1つの状態においてDMAコントローラ移動をセットアップする。従ってSktEngステートマシンは、移動の発信元アドレスをDMAコントローラに供給し、移動データ量をDMAコントローラに供給し、宛先アドレスをDMAコントローラに供給し、かつ移動を開始するために複数の命令を実行し、いくつかの順次操作を行わなければならなかった従来型のシーケンサプロセッサよりも速度が向上している。
本発明について特定の実施例に関連付けて説明してきたが、本発明はその実施例に限定されない。NIDの機能は、ホストコンピュータに接続された拡張カード上にインプリメントされる必要はない。NIDの機能を、CPUチップセット内に実現することも可能である。例えば、ペンティアム(登録商標)チップセットのノースブリッジまたはサウスブリッジチップにNIDの機能を持たせてもよい。或る実施形態では、メモリに接続するための第1のインタフェースとCPUに接続するための第2のインタフェースとを有するメモリコントローラ集積回路にNIDの機能が実現される。別の実施形態では、CPUに接続するための第1のインタフェースとI/Oデバイスに接続するための他のインタフェースとを有するI/Oコントローラ集積回路にNIDの機能が実現される。例示のためステートマシンについてはパケットの受信に関連して説明してきたが、追加のステートマシンは、TCPプロトコルのサポートに関連するタイマー及び送信機能を果たす。TCP状態変数及びパケットヘッダをワイドメモリ構造に格納する際に、これらの変数及びヘッダがステートマシンによって同時並行で一度にアクセス・処理されるように、そして得られた更新後のTCP状態変数がワイドメモリに並行して1回でまたは非常に少ない数のメモリ書き込み操作で書き戻されるように格納することは、TCPコネクションの制御がTOEデバイスとホストとの間で移管し合うようなシステムに適用可能であるのみならず、TOEがTCPコネクションを制御し続け、TCPコネクションの制御がTOEとホストとの間で移ることのないシステムにも適用可能である。上述の実施例では、Tcb情報及びパケットヘッダは別々のメモリに格納されていたが、Tcbバッファとヘッダバッファは同じメモリの2つの部分でもよい。この1つのメモリは、TcbIdによってアドレス指定され得る。設計上、複数のパケットヘッダがTcbnoためにキューに入れられることが許容されるならば、メモリは複数のパケットヘッダを収容するべくより広く作られてもよい。Tcbがメモリの第1の部分に格納され、パケットヘッダはメモリの対応する他の複数の部分に格納される。Tcbと関連するパケットヘッダは、1つのメモリから同時並行で全部が出力される。Tcbのためのパケットヘッダのうちどれがソケットエンジンに供給されるかは、マルチプレクサによって決定される。HdrIdはマルチプレクサの選択値としての役目を果たす。従って、特許請求の範囲に記載された本発明の範囲から逸脱することなく、上述の実施例の各特徴に対して様々な変更や改変を加えたり、幾つかの特徴を組合せて実施することが可能である。
本発明によるネットワークインタフェースデバイス(NID)が動作するシステムを示す図。 図1のNIDの特定用途向け集積回路(ASIC)の簡略ブロック図。本図には、ここに記載するデータ転送を実行するために必要な種々のブロック間の全ての制御信号並びに全ての読み出し・書き込みストローブ信号が記載されているわけではない。これらの信号を含めることは説明されるべき情報の流れを不明確にし、印刷された特許文書において読みにくい大きい図となってしまうからである。 図2を構成する一部である。 図2の構成する一部である。 図2の種々のブロックを参照するために用いられるニーモニックを記述した表。 図3の各ブロックがどのように編成されているかを記述した表。 図4の表で用いられる各ニーモニックの簡単な説明を記述した表。 左欄の各変数を構成する種々の変数を記述した表。 パケットのスローパス受信処理を行うために図2の各ブロックが何を実行するかをハードウェア記述擬似コードで記述したものを示す図。 コネクションハンドアウトシーケンスにおいて図2の各ブロックが何を実行するかをハードウェア記述擬似コードで記述したものを示す図。 パケットのファストパス受信処理を行うために図2の各ブロックが何を実行するかをハードウェア記述擬似コードで記述したものを示す図。 図9を構成する一部である。 図9を構成する一部である。 図2のソケットエンジンSktEngステートマシンの各状態において何が生ずるかをハードウェア記述擬似コードで記述したものを示す図。 図10を構成する一部である。 図10を構成する一部である。 図10を構成する一部である。 図10を構成する一部である。 図10を構成する一部である。 ホストメッセージバッファの編成を示した図。 コネクションフラッシュシーケンスにおいて図2の各ブロックが何を実行するかをハードウェア記述擬似コードで記述したものを示す図。 着信アクノリッジ(ACK)処理を行うためにソケットエンジンSktEngステートマシンの組合せロジックが何を実行するかをハードウェア記述擬似コードで記述したものを示す図。 図13で用いられている変数間のさまざまな関係を示す図。 着信データ処理を行うためにソケットエンジンSktEngステートマシンの組合せロジックが何を実行するかをハードウェア記述擬似コードで記述したものを示す図。 図13で用いられている変数間のさまざまな関係を示す図。 ヘッダバッファのフォーマットを記述した図。 図17のヘッダバッファのフレーム状態A要素のさまざまな部分を記述した図。 図18を構成する一部である。 図18を構成する一部である。 図17のヘッダバッファのフレーム状態B要素のさまざまな部分を記述した図。 TCBバッファに格納されたTCBを構成するさまざまな要素値を記述した図。 図20を構成する一部である。 図20を構成する一部である。

Claims (24)

  1. TCPコネクションに関連するTCPプロトコル処理のタスクをホストからオフロードできるTCPオフロードエンジン(TOE)であって、
    前記TCPコネクションに関連する少なくとも2つのTCP状態値を格納しかつ同時に出力し、前記少なくとも2つのTCP状態値が受信パケットシーケンスリミット、予測受信パケットシーケンス番号、送信シーケンスリミット、送信アクノリッジ番号、及び送信シーケンス番号からなる群から選択されたものである、第1メモリと、
    前記TCPコネクションを介してやりとりされるパケットの少なくとも2つのパケットヘッダ値を格納しかつ同時に出力し、前記少なくとも2つのパケットヘッダ値が受信パケットシーケンス番号、パケットペイロードサイズ、パケットアクノリッジ番号、及びパケット送信ウインドウ値からなる群から選択されたものである、第2メモリと、
    前記少なくとも2つのTCP状態値及び前記少なくとも2つのパケットヘッダ値を受け取りかつそれらからエラー条件が発生したか否かを表すフラッシュ検出信号を生成し、前記少なくとも2つのTCP状態値及び前記少なくとも2つのパケットヘッダ値の全てが同時に供給される、組合せロジックとを有することを特徴とするTOE。
  2. 前記フラッシュ検出信号が前記エラー条件を示している場合、前記TOEが、前記受信パケットシーケンスリミット、前記予測受信パケットシーケンス番号、前記送信シーケンスリミット、前記送信アクノリッジ番号、及び前記送信シーケンス番号を前記ホストに転送することを特徴とする請求項1に記載のTOE。
  3. 前記TCP状態値の群の中の3以上の値が前記組合せロジックに同時に供給され、かつ前記TCP状態値の群の中の3以上の値が前記フラッシュ検出信号を生成するのに用いられることを特徴とする請求項1に記載のTOE。
  4. 前記パケットヘッダ値の群の中の3以上の値が前記組合せロジックに同時に供給され、かつ前記パケットヘッダ値の群の中の3以上の値が前記フラッシュ検出信号を生成するのに用いられることを特徴とする請求項1に記載のTOE。
  5. 前記TOEは、それぞれが1つのTCP識別子と関連付けられている複数のTCPコネクションを制御可能であり、
    前記第1メモリが複数のトランザクション制御ブロックを有し、
    前記第1メモリは、あるTCB識別子に関連するTCPコネクションのためのTCP状態情報を含むTCBにアクセスするために、そのTCB識別子によってアドレス指定が可能であることを特徴とする請求項1に記載のTOE。
  6. 前記組合せロジックは、クロック信号を供給されるステートマシンの部分であり、
    前記組合せロジックは、前記クロック信号の1クロック時間内に前記少なくとも2つのTCP状態値と前記少なくとも2つのパケットヘッダ値とから前記フラッシュ検出信号を生成することを特徴とする請求項1に記載のTOE。
  7. 前記ステートマシンは命令のフェッチ、命令のデコード、及び命令の実行を行わないことを特徴とする請求項6に記載のTOE。
  8. 前記ステートマシンは、前記クロック信号の1クロック時間内に、前記第1メモリ内の前記予測受信パケットシーケンス番号及び前記受信パケットシーケンスリミットの値が更新されるようにすることを特徴とする請求項7に記載のTOE。
  9. 前記TCPコネクションは、前記ホスト上のスタックの実行によってセットアップされたものであり、前記TCPコネクションの制御は、次いで前記ホストから前記TOEに渡されたものであることを特徴とする請求項8に記載のTOE。
  10. ペイロードを有するパケットが前記TOE上に受信され、
    前記TOEが、発信元アドレス値、移動する情報量を示すサイズ値、及び宛先アドレス値を用いて、前記ペイロードを前記TOEから前記ホストに移動させるDMAコントローラを更に有し、前記ステートマシンが該ステートマシンの1つの状態において、前記発信元アドレス値、前記サイズ値及び前記宛先アドレス値を前記DMAコントローラに供給させることを特徴とする請求項7に記載のTOE。
  11. TCPコネクションに関連するTCPプロトコル処理のタスクをホストからオフロードできるTCPオフロードエンジン(TOE)であって、
    前記TCPコネクションに関連する少なくとも2つのTCP状態値を格納しかつ同時に出力し、前記少なくとも2つのTCP状態値が、受信パケットシーケンスリミット、予測受信パケットシーケンス番号、送信シーケンスリミット、送信アクノリッジ番号、及び送信シーケンス番号からなる群から選択されたものである、第1メモリと、
    前記TCPコネクションを介してやりとりされるパケットの少なくとも2つのパケットヘッダ値を格納し同時に出力し、前記少なくとも2つのパケットヘッダ値が、受信パケットシーケンス番号、パケットペイロードサイズ、パケットアクノリッジ番号、及びパケット送信ウインドウ値からなる群から選択されたものである、第2メモリと、
    前記少なくとも2つのTCP状態値及び前記少なくとも2つのパケットヘッダ値を受け取りかつそれらから例外条件が発生したか否かを表す信号を生成し、前記2以上のTCP状態値及び前記2以上のパケットヘッダ値の全てがハードウェアステートマシンに同時に供給され、クロック信号の1クロック時間内に前記少なくとも2つのTCP状態値と前記少なくとも2つのパケットヘッダ値とから前記信号を生成するハードウェアステートマシンとを有することを特徴とするTOE。
  12. 前記ハードウェアステートマシンは、前記クロック信号の1クロック時間内に、前記第1メモリ内の前記予測受信パケットシーケンス番号及び前記受信パケットシーケンスリミットの値が更新されるようにすることを特徴とする請求項11に記載のTOE。
  13. 前記予測受信パケットシーケンス番号及び前記受信パケットシーケンスリミットの値は、前記予測受信パケットシーケンス番号の値及び前記受信パケットシーケンスリミットの値を前記第1メモリに同時に書き込むことによって更新されることを特徴とする請求項12に記載のTOE。
  14. 前記例外条件は、前記TCPコネクションの制御が前記TOEから前記ホストに渡される結果を生ずる条件であることを特徴とする請求項11に記載のTOE。
  15. 前記第1メモリが、第1インタフェースと第2インタフェースとを有するデュアルポートメモリであり、前記ハードウェアステートマシンは、前記第1インタフェースを介して前記第1メモリからの読み出し及び前記第1メモリへの書き込みを行い、
    前記ホストから前記第1メモリへは前記第2インタフェースを介して情報が渡されることを特徴とする請求項11に記載のTOE。
  16. 前記第1メモリは複数のTCBバッファを含み、前記TCBバッファの1つは前記TCPコネクションに関連付けられており、
    前記TCPコネクションに関連するメモリ記述子リストエントリが前記TCPコネクションに関連する前記TCBバッファに格納されることを特徴とする請求項15に記載のTOE。
  17. 複数のソケット記述子を格納する第3メモリを更に有し、
    前記ソケット記述子の1つが前記TCPコネクションに関連付けられていることを特徴とする請求項11に記載のTOE。
  18. 前記第2メモリは前記2以上のパケットヘッダ値とともにパーズ値を出力し、前記パーズ値は、関連するパケットの前記トランスポート層及びネットワーク層プロトコルがTCP及びIPプロトコルであるか否かを示すことを特徴とする請求項11に記載のTOE。
  19. TCPコネクションに関連するTCPプロトコル処理のタスクをホストからオフロードできるTCPオフロードエンジン(TOE)であって、
    前記TCPコネクションに関連する少なくとも2つの、受信パケットシーケンス番号、パケットペイロードサイズ、パケットアクノリッジ番号、及びパケット送信ウインドウ値からなる群から選択された、TCP状態値を同時に出力し、かつ前記TCPコネクションを介してやりとりされるパケットの少なくとも2つの、受信パケットシーケンスリミット、予測受信パケットシーケンス番号、送信シーケンスリミット、送信アクノリッジ番号、及び送信シーケンス番号からなる群から選択された、パケットヘッダ値を同時に出力するメモリと、
    前記少なくとも2つのTCP状態値及び前記少なくとも2つのパケットヘッダ値を受け取り、かつそれらから例外条件が発生したか否かを表す信号を生成するための、前記少なくとも2つのTCP状態値及び前記少なくとも2つのパケットヘッダ値の全てが同時に供給される、手段とを有することを特徴とするTOE。
  20. 前記メモリが第1メモリ部分と第2メモリ部分とを有し、前記第1メモリ部分は前記少なくとも2つのTCP状態値を格納し、前記第2メモリ部分は前記少なくとも2つのパケットヘッダ値を格納することを特徴とする請求項19に記載のTOE。
  21. 前記信号を生成する手段が、TCP状態値を前記メモリに書き込むことによってTCP状態値の更新をも行うことを特徴とする請求項19に記載のTOE。
  22. 前記信号を生成する手段が、順次ロジック要素を含まず、組合せロジック要素のみからなることを特徴とする請求項19に記載のTOE。
  23. 前記信号を生成する手段が、ステートマシンの部分であることを特徴とする請求項22に記載のTOE。
  24. 前記例外条件は、前記TCPコネクションの制御が前記TOEから前記ホストに渡される結果を生ずる条件であることを特徴とする請求項19に記載のTOE。
JP2006542879A 2003-12-05 2004-12-03 順次処理を減らしたtcp/ipオフロードデバイス Expired - Fee Related JP5066707B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/729,111 2003-12-05
US10/729,111 US6996070B2 (en) 2003-12-05 2003-12-05 TCP/IP offload device with reduced sequential processing
PCT/US2004/040897 WO2005057945A2 (en) 2003-12-05 2004-12-03 Tcp/ip offload device withg reduced sequential processing

Publications (2)

Publication Number Publication Date
JP2007517286A true JP2007517286A (ja) 2007-06-28
JP5066707B2 JP5066707B2 (ja) 2012-11-07

Family

ID=34633852

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006542879A Expired - Fee Related JP5066707B2 (ja) 2003-12-05 2004-12-03 順次処理を減らしたtcp/ipオフロードデバイス

Country Status (5)

Country Link
US (2) US6996070B2 (ja)
EP (1) EP1690387B1 (ja)
JP (1) JP5066707B2 (ja)
CN (1) CN1910869B (ja)
WO (1) WO2005057945A2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008016037A (ja) * 2006-07-07 2008-01-24 Korea Electronics Telecommun iSCSIのためのデータ加速装置及びこれを用いたiSCSI記憶システム
JP2008517565A (ja) * 2004-10-19 2008-05-22 エヌヴィディア コーポレイション Rxfifoバッファを用いて高速ネットワークアプリケーションにてrxパケットを処理するシステムおよび方法
JP2009296546A (ja) * 2008-06-09 2009-12-17 Canon Inc 通信装置及び制御方法
JP2014082739A (ja) * 2012-09-28 2014-05-08 Oki Electric Ind Co Ltd ゲートウェイ装置、通信装置、及び通信コネクション管理方法
JP2016123082A (ja) * 2008-06-19 2016-07-07 クゥアルコム・インコーポレイテッドQualcomm Incorporated Wwan技術のためのハードウェアアクセラレーション

Families Citing this family (175)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5978379A (en) 1997-01-23 1999-11-02 Gadzoox Networks, Inc. Fiber channel learning bridge, learning half bridge, and protocol
US9098297B2 (en) * 1997-05-08 2015-08-04 Nvidia Corporation Hardware accelerator for an object-oriented programming language
US7167927B2 (en) * 1997-10-14 2007-01-23 Alacritech, Inc. TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism
US6658480B2 (en) * 1997-10-14 2003-12-02 Alacritech, Inc. Intelligent network interface system and method for accelerated protocol processing
US8539112B2 (en) 1997-10-14 2013-09-17 Alacritech, Inc. TCP/IP offload device
US7174393B2 (en) 2000-12-26 2007-02-06 Alacritech, Inc. TCP/IP offload network interface device
US8782199B2 (en) * 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US7185266B2 (en) * 2003-02-12 2007-02-27 Alacritech, Inc. Network interface device for error detection using partial CRCS of variable length message portions
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US7237036B2 (en) * 1997-10-14 2007-06-26 Alacritech, Inc. Fast-path apparatus for receiving data corresponding a TCP connection
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US8621101B1 (en) 2000-09-29 2013-12-31 Alacritech, Inc. Intelligent network storage interface device
US6757746B2 (en) * 1997-10-14 2004-06-29 Alacritech, Inc. Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US6765901B1 (en) 1998-06-11 2004-07-20 Nvidia Corporation TCP/IP/PPP modem
US7664883B2 (en) * 1998-08-28 2010-02-16 Alacritech, Inc. Network interface device that fast-path processes solicited session layer read commands
US7430171B2 (en) 1998-11-19 2008-09-30 Broadcom Corporation Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost
WO2001013583A2 (en) 1999-08-16 2001-02-22 Iready Corporation Internet jack
US8898340B2 (en) 2000-04-17 2014-11-25 Circadence Corporation Dynamic network link acceleration for network including wireless communication devices
US8195823B2 (en) 2000-04-17 2012-06-05 Circadence Corporation Dynamic network link acceleration
US8065399B2 (en) * 2000-04-17 2011-11-22 Circadence Corporation Automated network infrastructure test and diagnostic system and method therefor
US8510468B2 (en) 2000-04-17 2013-08-13 Ciradence Corporation Route aware network link acceleration
US8996705B2 (en) 2000-04-17 2015-03-31 Circadence Corporation Optimization of enhanced network links
US8024481B2 (en) * 2000-04-17 2011-09-20 Circadence Corporation System and method for reducing traffic and congestion on distributed interactive simulation networks
US20110128972A1 (en) 2000-04-17 2011-06-02 Randy Thornton Peer to peer dynamic network link acceleration
WO2001080063A2 (en) * 2000-04-17 2001-10-25 Circadence Corporation System and method for serving a web site from multiple servers
US8019901B2 (en) * 2000-09-29 2011-09-13 Alacritech, Inc. Intelligent network storage interface system
US7039717B2 (en) * 2000-11-10 2006-05-02 Nvidia Corporation Internet modem streaming socket method
US7379475B2 (en) * 2002-01-25 2008-05-27 Nvidia Corporation Communications processor
WO2002084499A1 (en) * 2001-04-11 2002-10-24 Chelsio Communications, Inc. Multi-purpose switching network interface controller
US8218555B2 (en) * 2001-04-24 2012-07-10 Nvidia Corporation Gigabit ethernet adapter
US7535913B2 (en) * 2002-03-06 2009-05-19 Nvidia Corporation Gigabit ethernet adapter supporting the iSCSI and IPSEC protocols
US7543087B2 (en) * 2002-04-22 2009-06-02 Alacritech, Inc. Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device
US7496689B2 (en) * 2002-04-22 2009-02-24 Alacritech, Inc. TCP/IP offload device
US20070253430A1 (en) * 2002-04-23 2007-11-01 Minami John S Gigabit Ethernet Adapter
US7139679B1 (en) * 2002-06-27 2006-11-21 Cisco Technology, Inc. Method and apparatus for cryptographic protection from denial of service attacks
US7337241B2 (en) * 2002-09-27 2008-02-26 Alacritech, Inc. Fast-path apparatus for receiving data corresponding to a TCP connection
US20040088262A1 (en) * 2002-11-06 2004-05-06 Alacritech, Inc. Enabling an enhanced function of an electronic device
US7362772B1 (en) 2002-12-13 2008-04-22 Nvidia Corporation Network processing pipeline chipset for routing and host packet processing
US7324547B1 (en) 2002-12-13 2008-01-29 Nvidia Corporation Internet protocol (IP) router residing in a processor chipset
US7594002B1 (en) 2003-02-14 2009-09-22 Istor Networks, Inc. Hardware-accelerated high availability integrated networked storage system
US7363572B2 (en) * 2003-06-05 2008-04-22 Nvidia Corporation Editing outbound TCP frames and generating acknowledgements
US7420931B2 (en) * 2003-06-05 2008-09-02 Nvidia Corporation Using TCP/IP offload to accelerate packet filtering
US8176545B1 (en) 2003-12-19 2012-05-08 Nvidia Corporation Integrated policy checking system and method
US8065439B1 (en) * 2003-12-19 2011-11-22 Nvidia Corporation System and method for using metadata in the context of a transport offload engine
US7899913B2 (en) * 2003-12-19 2011-03-01 Nvidia Corporation Connection management system and method for a transport offload engine
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
US8549170B2 (en) 2003-12-19 2013-10-01 Nvidia Corporation Retransmission system and method for a transport offload engine
US7698361B2 (en) * 2003-12-31 2010-04-13 Microsoft Corporation Lightweight input/output protocol
US7298749B2 (en) * 2004-01-07 2007-11-20 International Business Machines Corporation Completion coalescing by TCP receiver
US20050195851A1 (en) * 2004-02-12 2005-09-08 International Business Machines Corporation System, apparatus and method of aggregating TCP-offloaded adapters
US7249306B2 (en) * 2004-02-20 2007-07-24 Nvidia Corporation System and method for generating 128-bit cyclic redundancy check values with 32-bit granularity
US7206872B2 (en) * 2004-02-20 2007-04-17 Nvidia Corporation System and method for insertion of markers into a data stream
US7562158B2 (en) * 2004-03-24 2009-07-14 Intel Corporation Message context based TCP transmission
US7668165B2 (en) * 2004-03-31 2010-02-23 Intel Corporation Hardware-based multi-threading for packet processing
US20060067346A1 (en) * 2004-04-05 2006-03-30 Ammasso, Inc. System and method for placement of RDMA payload into application memory of a processor system
US20050220128A1 (en) * 2004-04-05 2005-10-06 Ammasso, Inc. System and method for work request queuing for intelligent adapter
US7698413B1 (en) 2004-04-12 2010-04-13 Nvidia Corporation Method and apparatus for accessing and maintaining socket control information for high speed network connections
US7831745B1 (en) 2004-05-25 2010-11-09 Chelsio Communications, Inc. Scalable direct memory access using validation of host and scatter gather engine (SGE) generation indications
US7761529B2 (en) * 2004-06-30 2010-07-20 Intel Corporation Method, system, and program for managing memory requests by devices
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
US7761608B2 (en) * 2004-09-01 2010-07-20 Qlogic, Corporation Method and system for processing markers, data integrity fields and digests
US7620050B2 (en) * 2004-09-10 2009-11-17 Canon Kabushiki Kaisha Communication control device and communication control method
JP4373887B2 (ja) * 2004-09-30 2009-11-25 Okiセミコンダクタ株式会社 パケット処理方法
US8248939B1 (en) 2004-10-08 2012-08-21 Alacritech, Inc. Transferring control of TCP connections between hierarchy of processing mechanisms
KR100646858B1 (ko) * 2004-12-08 2006-11-23 한국전자통신연구원 Toe기반 소켓 정보의 생성 및 관리를 위한하드웨어 장치및 방법
US7403535B2 (en) * 2004-12-14 2008-07-22 Hewlett-Packard Development Company, L.P. Aggregation of network resources providing offloaded connections between applications over a network
US7551614B2 (en) * 2004-12-14 2009-06-23 Hewlett-Packard Development Company, L.P. Aggregation over multiple processing nodes of network resources each providing offloaded connections between applications over a network
US7643420B2 (en) * 2005-03-11 2010-01-05 Broadcom Corporation Method and system for transmission control protocol (TCP) traffic smoothing
US20060221946A1 (en) * 2005-04-04 2006-10-05 International Business Machines Corporation Connection establishment on a tcp offload engine
US7630388B2 (en) * 2005-05-04 2009-12-08 Arm Limited Software defined FIFO memory for storing a set of data from a stream of source data
KR20080013993A (ko) * 2005-05-04 2008-02-13 에이알엠 리미티드 데이터 처리장치 내의 데이터 엔진의 사용
US7920584B2 (en) * 2005-05-04 2011-04-05 Arm Limited Data processing system
JP4182083B2 (ja) * 2005-05-12 2008-11-19 キヤノン株式会社 ネットワークに接続されたネットワーク機器を管理する装置、方法、及びプログラム
US7596144B2 (en) * 2005-06-07 2009-09-29 Broadcom Corp. System-on-a-chip (SoC) device with integrated support for ethernet, TCP, iSCSI, RDMA, and network application acceleration
US7764612B2 (en) * 2005-06-16 2010-07-27 Acme Packet, Inc. Controlling access to a host processor in a session border controller
US20080304481A1 (en) * 2005-07-12 2008-12-11 Paul Thomas Gurney System and Method of Offloading Protocol Functions
US20070033301A1 (en) * 2005-07-18 2007-02-08 Eliezer Aloni Method and system for transparent TCP offload with dynamic zero copy sending
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
US7715436B1 (en) 2005-11-18 2010-05-11 Chelsio Communications, Inc. Method for UDP transmit protocol offload processing with traffic management
US7724658B1 (en) 2005-08-31 2010-05-25 Chelsio Communications, Inc. Protocol offload transmit traffic management
US7660306B1 (en) 2006-01-12 2010-02-09 Chelsio Communications, Inc. Virtualizing the operation of intelligent network interface circuitry
US7660264B1 (en) 2005-12-19 2010-02-09 Chelsio Communications, Inc. Method for traffic schedulign in intelligent network interface circuitry
US7506080B2 (en) * 2005-09-16 2009-03-17 Inter Corporation Parallel processing of frame based data transfers
WO2007044914A2 (en) * 2005-10-11 2007-04-19 Telcordia Technologies, Inc. Packet loss prevention during handoff through managed buffer nodes
US7826424B2 (en) * 2005-10-11 2010-11-02 Toshiba America Research, Inc. Packet loss prevention during handoff through managed buffer nodes architecture
US7760733B1 (en) 2005-10-13 2010-07-20 Chelsio Communications, Inc. Filtering ingress packets in network interface circuitry
KR100738339B1 (ko) * 2005-12-01 2007-07-12 한국전자통신연구원 인터넷 프로토콜 오프로드의 패킷 전송 장치 및 방법
US7738500B1 (en) 2005-12-14 2010-06-15 Alacritech, Inc. TCP timestamp synchronization for network connections that are offloaded to network interface devices
US7675854B2 (en) 2006-02-21 2010-03-09 A10 Networks, Inc. System and method for an adaptive TCP SYN cookie with time validation
US20080040519A1 (en) * 2006-05-02 2008-02-14 Alacritech, Inc. Network interface device with 10 Gb/s full-duplex transfer rate
TWI326417B (en) * 2006-06-01 2010-06-21 Ind Tech Res Inst System and method for recognizing offloaded packet
US20070291791A1 (en) * 2006-06-16 2007-12-20 The Boeing Company. Dynamic reconfigurable embedded compression common operating environment
US8190698B2 (en) 2006-06-30 2012-05-29 Microsoft Corporation Efficiently polling to determine completion of a DMA copy operation
US8621030B2 (en) 2006-09-28 2013-12-31 Intel Corporation Techniques to copy an operating system
US9794378B2 (en) * 2006-11-08 2017-10-17 Standard Microsystems Corporation Network traffic controller (NTC)
JP2008134775A (ja) * 2006-11-28 2008-06-12 Hitachi Ltd 記憶サブシステム及びこれを利用したリモートコピーシステム
US9137212B2 (en) * 2006-12-04 2015-09-15 Oracle America, Inc. Communication method and apparatus using changing destination and return destination ID's
US7849214B2 (en) * 2006-12-04 2010-12-07 Electronics And Telecommunications Research Institute Packet receiving hardware apparatus for TCP offload engine and receiving system and method using the same
KR100898345B1 (ko) 2006-12-04 2009-05-20 한국전자통신연구원 Toe의 패킷 수신 하드웨어 장치 및 toe 패킷 수신하드웨어를 이용한 수신 시스템 및 수신 방법
US7975120B2 (en) * 2006-12-27 2011-07-05 Freescale Semiconductor, Inc. Dynamic allocation of message buffers
US7908364B2 (en) * 2007-01-26 2011-03-15 Bigfoot Networks, Inc. Method storing socket state information in application space for improving communication efficiency of an application program
US8935406B1 (en) 2007-04-16 2015-01-13 Chelsio Communications, Inc. Network adaptor configured for connection establishment offload
US20080263171A1 (en) * 2007-04-19 2008-10-23 Alacritech, Inc. Peripheral device that DMAS the same data to different locations in a computer
US8806028B2 (en) * 2007-04-26 2014-08-12 Novatel Wireless, Inc. System and method for accessing data and applications on a host when the host is in a dormant state
US7813339B2 (en) * 2007-05-02 2010-10-12 Tehuti Networks Ltd. Direct assembly of a data payload in an application memory
US7826350B1 (en) 2007-05-11 2010-11-02 Chelsio Communications, Inc. Intelligent network adaptor with adaptive direct data placement scheme
US8060644B1 (en) * 2007-05-11 2011-11-15 Chelsio Communications, Inc. Intelligent network adaptor with end-to-end flow control
US8589587B1 (en) 2007-05-11 2013-11-19 Chelsio Communications, Inc. Protocol offload in intelligent network adaptor, including application level signalling
US7831720B1 (en) 2007-05-17 2010-11-09 Chelsio Communications, Inc. Full offload of stateful connections, with partial connection offload
US7843915B2 (en) * 2007-08-01 2010-11-30 International Business Machines Corporation Packet filtering by applying filter rules to a packet bytestream
US7885260B2 (en) * 2007-11-20 2011-02-08 Cisco Technology, Inc. Determining packet forwarding information for packets sent from a protocol offload engine in a packet switching device
US8103785B2 (en) * 2007-12-03 2012-01-24 Seafire Micros, Inc. Network acceleration techniques
EP2079203A1 (en) 2008-01-08 2009-07-15 Axis AB Network offloading with reduced packet loss.
US8539513B1 (en) 2008-04-01 2013-09-17 Alacritech, Inc. Accelerating data transfer in a virtual computer system with tightly coupled TCP connections
US7751401B2 (en) * 2008-06-30 2010-07-06 Oracle America, Inc. Method and apparatus to provide virtual toe interface with fail-over
US20100008248A1 (en) * 2008-07-08 2010-01-14 Barry Constantine Network tester for real-time measuring of tcp throughput
US8341286B1 (en) 2008-07-31 2012-12-25 Alacritech, Inc. TCP offload send optimization
US9306793B1 (en) 2008-10-22 2016-04-05 Alacritech, Inc. TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies
KR101221045B1 (ko) * 2008-12-22 2013-01-10 한국전자통신연구원 패킷 처리 방법 및 이를 이용한 toe 장치
US7996548B2 (en) * 2008-12-30 2011-08-09 Intel Corporation Message communication techniques
US8645596B2 (en) * 2008-12-30 2014-02-04 Intel Corporation Interrupt techniques
US8363836B2 (en) * 2009-01-16 2013-01-29 Cisco Technology, Inc. Using authentication tokens to authorize a firewall to open a pinhole
JP5175773B2 (ja) * 2009-02-27 2013-04-03 株式会社東芝 通信装置、方法及びプログラム
US9960967B2 (en) 2009-10-21 2018-05-01 A10 Networks, Inc. Determining an application delivery server based on geo-location information
US9454325B2 (en) * 2009-11-04 2016-09-27 Broadcom Corporation Method and system for offline data access on computer systems
US9215275B2 (en) 2010-09-30 2015-12-15 A10 Networks, Inc. System and method to balance servers based on server load status
JP5204195B2 (ja) * 2010-10-29 2013-06-05 株式会社東芝 データ送信システムおよびデータ送信プログラム
CN102098290A (zh) * 2010-12-17 2011-06-15 天津曙光计算机产业有限公司 一种tcp流淘汰替换方法
CN102098288B (zh) * 2010-12-17 2014-01-22 曙光信息产业股份有限公司 一种采用静态链表构造tcp节点池优化tcp连接管理的方法
CN102075525B (zh) * 2010-12-17 2014-07-23 曙光信息产业(北京)有限公司 一种通过软件向硬件发送连接无效请求实现删除硬件中tcp连接的方法
CN102143218B (zh) * 2011-01-24 2014-07-02 上海红神信息技术有限公司 web接入云体系结构及接入方法
MX2014001056A (es) * 2011-07-25 2014-09-16 Servergy Inc Método y sistema para construir un sistema informatico de baja potencia.
US9246846B2 (en) * 2011-09-02 2016-01-26 Mediatek Co. Network processor
US8897154B2 (en) 2011-10-24 2014-11-25 A10 Networks, Inc. Combining stateless and stateful server load balancing
US9386088B2 (en) * 2011-11-29 2016-07-05 A10 Networks, Inc. Accelerating service processing using fast path TCP
US9094364B2 (en) 2011-12-23 2015-07-28 A10 Networks, Inc. Methods to manage services over a service gateway
US10044582B2 (en) 2012-01-28 2018-08-07 A10 Networks, Inc. Generating secure name records
CN103248605B (zh) * 2012-02-02 2016-12-14 哈尔滨安天科技股份有限公司 一种基于ipv6的tcp流汇聚方法及系统
US8934332B2 (en) * 2012-02-29 2015-01-13 International Business Machines Corporation Multi-threaded packet processing
US8782221B2 (en) 2012-07-05 2014-07-15 A10 Networks, Inc. Method to allocate buffer for TCP proxy session based on dynamic network conditions
US9075953B2 (en) 2012-07-31 2015-07-07 At&T Intellectual Property I, L.P. Method and apparatus for providing notification of detected error conditions in a network
US9674052B2 (en) * 2012-09-20 2017-06-06 Hewlett Packard Enterprise Development Lp Data packet stream fingerprint
KR101692751B1 (ko) 2012-09-25 2017-01-04 에이10 네트워크스, 인코포레이티드 데이터망 부하 분산
US9843484B2 (en) 2012-09-25 2017-12-12 A10 Networks, Inc. Graceful scaling in software driven networks
US10021174B2 (en) 2012-09-25 2018-07-10 A10 Networks, Inc. Distributing service sessions
US9531846B2 (en) 2013-01-23 2016-12-27 A10 Networks, Inc. Reducing buffer usage for TCP proxy session based on delayed acknowledgement
WO2014144837A1 (en) 2013-03-15 2014-09-18 A10 Networks, Inc. Processing data packets using a policy based network path
WO2014179753A2 (en) 2013-05-03 2014-11-06 A10 Networks, Inc. Facilitating secure network traffic by an application delivery controller
US10027761B2 (en) 2013-05-03 2018-07-17 A10 Networks, Inc. Facilitating a secure 3 party network session by a network device
JP6351363B2 (ja) * 2013-08-01 2018-07-04 キヤノン株式会社 通信装置およびそのデータ処理方法
KR101541349B1 (ko) * 2013-11-19 2015-08-05 주식회사 윈스 고성능 네트워크 장비의 패킷 전달 시스템 및 그 전달 방법
US10230770B2 (en) 2013-12-02 2019-03-12 A10 Networks, Inc. Network proxy layer for policy-based application proxies
CN104883335B (zh) * 2014-02-27 2017-12-01 王磊 一种全硬件tcp协议栈实现系统
US9942152B2 (en) 2014-03-25 2018-04-10 A10 Networks, Inc. Forwarding data packets using a service-based forwarding policy
US10020979B1 (en) 2014-03-25 2018-07-10 A10 Networks, Inc. Allocating resources in multi-core computing environments
US9942162B2 (en) 2014-03-31 2018-04-10 A10 Networks, Inc. Active application response delay time
US9806943B2 (en) 2014-04-24 2017-10-31 A10 Networks, Inc. Enabling planned upgrade/downgrade of network devices without impacting network sessions
US9906422B2 (en) 2014-05-16 2018-02-27 A10 Networks, Inc. Distributed system to determine a server's health
US9986061B2 (en) 2014-06-03 2018-05-29 A10 Networks, Inc. Programming a data network device using user defined scripts
US10129122B2 (en) 2014-06-03 2018-11-13 A10 Networks, Inc. User defined objects for network devices
US9992229B2 (en) 2014-06-03 2018-06-05 A10 Networks, Inc. Programming a data network device using user defined scripts with licenses
US9654483B1 (en) * 2014-12-23 2017-05-16 Amazon Technologies, Inc. Network communication rate limiter
CN104601484B (zh) * 2015-01-20 2017-10-31 电子科技大学 一种tcp卸载引擎的发送单元
US10581976B2 (en) 2015-08-12 2020-03-03 A10 Networks, Inc. Transmission control of protocol state exchange for dynamic stateful service insertion
US10243791B2 (en) 2015-08-13 2019-03-26 A10 Networks, Inc. Automated adjustment of subscriber policies
JP6618330B2 (ja) * 2015-10-28 2019-12-11 キヤノン株式会社 通信装置及びその方法、コンピュータプログラム
US10318288B2 (en) 2016-01-13 2019-06-11 A10 Networks, Inc. System and method to process a chain of network applications
CN106789708B (zh) * 2016-12-06 2020-10-09 中国电子科技集团公司第三十二研究所 Tcp/ip卸载引擎中的多通道处理方法
US10389835B2 (en) 2017-01-10 2019-08-20 A10 Networks, Inc. Application aware systems and methods to process user loadable network applications
US20220311716A1 (en) * 2021-03-25 2022-09-29 Nokia Solutions And Networks Oy Supporting communications for data storage
CN113179327B (zh) * 2021-05-14 2023-06-02 中兴通讯股份有限公司 基于大容量内存的高并发协议栈卸载方法、设备、介质
CN115460300A (zh) * 2021-06-08 2022-12-09 中兴通讯股份有限公司 数据处理方法、toe硬件及计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003229900A (ja) * 2002-02-04 2003-08-15 Mitsubishi Electric Corp 中継処理装置及び中継処理方法
JP2003348184A (ja) * 2002-05-27 2003-12-05 Nec Corp 通信制御装置

Family Cites Families (170)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4366538A (en) 1980-10-31 1982-12-28 Honeywell Information Systems Inc. Memory controller with queue control apparatus
US4589063A (en) 1983-08-04 1986-05-13 Fortune Systems Corporation Data processing system having automatic configuration
US5097442A (en) 1985-06-20 1992-03-17 Texas Instruments Incorporated Programmable depth first-in, first-out memory
DE3701716C3 (de) * 1987-01-22 1996-06-20 Basf Magnetics Gmbh Verfahren zum Schneiden von Magnetbändern
US5212778A (en) 1988-05-27 1993-05-18 Massachusetts Institute Of Technology Message-driven processor in a concurrent computer
US4991133A (en) 1988-10-07 1991-02-05 International Business Machines Corp. Specialized communications processor for layered protocols
US5303344A (en) 1989-03-13 1994-04-12 Hitachi, Ltd. Protocol processing apparatus for use in interfacing network connected computer systems utilizing separate paths for control information and data transfer
JP2986802B2 (ja) 1989-03-13 1999-12-06 株式会社日立製作所 プロトコル高速処理方法
US5058110A (en) 1989-05-03 1991-10-15 Ultra Network Technologies Protocol processor
US5163131A (en) 1989-09-08 1992-11-10 Auspex Systems, Inc. Parallel i/o network file server architecture
CA2066566C (en) 1989-09-08 2001-12-25 David Hitz Multiple facility operating system architecture
JPH077975B2 (ja) * 1990-08-20 1995-01-30 インターナショナル・ビジネス・マシーンズ・コーポレイション データ伝送を制御するためのシステムおよび方法
JP2863295B2 (ja) * 1990-10-04 1999-03-03 沖電気工業株式会社 通信機能付き情報処理装置
US5289580A (en) 1991-05-10 1994-02-22 Unisys Corporation Programmable multiple I/O interface controller
JP2791236B2 (ja) 1991-07-25 1998-08-27 三菱電機株式会社 プロトコル並列処理装置
US5524250A (en) 1991-08-23 1996-06-04 Silicon Graphics, Inc. Central processing unit for processing a plurality of threads using dedicated general purpose registers and masque register for providing access to the registers
JP3130609B2 (ja) 1991-12-17 2001-01-31 日本電気株式会社 オンライン情報処理装置
JPH05260045A (ja) 1992-01-14 1993-10-08 Ricoh Co Ltd デ−タ端末装置の通信方法
EP0895162A3 (en) 1992-01-22 1999-11-10 Enhanced Memory Systems, Inc. Enhanced dram with embedded registers
JPH05252228A (ja) 1992-03-02 1993-09-28 Mitsubishi Electric Corp データ伝送装置及びその通信路管理方法
EP0630499A4 (en) 1992-03-09 1996-07-24 Auspex Systems Inc ACCELERATION SYSTEM WITH NON-VOLATILE, PROTECTED, WRITABLE RAM CACHE.
US5742760A (en) 1992-05-12 1998-04-21 Compaq Computer Corporation Network packet switch using shared memory for repeating and bridging packets at media rate
US6026452A (en) 1997-02-26 2000-02-15 Pitts; William Michael Network distributed site cache RAM claimed as up/down stream request/reply channel for storing anticipated data and meta data
US5671355A (en) 1992-06-26 1997-09-23 Predacomm, Inc. Reconfigurable network interface apparatus and method
US5412782A (en) 1992-07-02 1995-05-02 3Com Corporation Programmed I/O ethernet adapter with early interrupts for accelerating data transfer
US5280477A (en) 1992-08-17 1994-01-18 E-Systems, Inc. Network synchronous data distribution system
FR2699706B1 (fr) 1992-12-22 1995-02-24 Bull Sa Système de transmission de données entre un bus d'ordinateur et un réseau.
US5619650A (en) 1992-12-31 1997-04-08 International Business Machines Corporation Network processor for transforming a message transported from an I/O channel to a network by adding a message identifier and then converting the message
GB9300942D0 (en) 1993-01-19 1993-03-10 Int Computers Ltd Parallel computer system
DE69320321T2 (de) 1993-02-05 1998-12-24 Hewlett-Packard Co., Palo Alto, Calif. Verfahren und Gerät zum Nachprüfen von CRC-Koden, wobei CRC Teilkode kombiniert werden
US5815646A (en) 1993-04-13 1998-09-29 C-Cube Microsystems Decompression processor for video applications
JP3358254B2 (ja) 1993-10-28 2002-12-16 株式会社日立製作所 通信制御装置および通信制御用回路装置
US5448566A (en) 1993-11-15 1995-09-05 International Business Machines Corporation Method and apparatus for facilitating communication in a multilayer communication architecture via a dynamic communication channel
US5758194A (en) 1993-11-30 1998-05-26 Intel Corporation Communication apparatus for handling networks with different transmission protocols by stripping or adding data to the data stream in the application layer
JP2596718B2 (ja) * 1993-12-21 1997-04-02 インターナショナル・ビジネス・マシーンズ・コーポレイション ネットワーク通信バッファを管理する方法
US5517668A (en) * 1994-01-10 1996-05-14 Amdahl Corporation Distributed protocol framework
US5485455A (en) * 1994-01-28 1996-01-16 Cabletron Systems, Inc. Network having secure fast packet switching and guaranteed quality of service
JPH08180001A (ja) 1994-04-12 1996-07-12 Mitsubishi Electric Corp 通信方式及び通信方法及びネットワークインタフェース
US6047356A (en) 1994-04-18 2000-04-04 Sonic Solutions Method of dynamically allocating network node memory's partitions for caching distributed files
US5485460A (en) * 1994-08-19 1996-01-16 Microsoft Corporation System and method for running multiple incompatible network protocol stacks
AU3412295A (en) 1994-09-01 1996-03-22 Gary L. Mcalpine A multi-port memory system including read and write buffer interfaces
US5548730A (en) 1994-09-20 1996-08-20 Intel Corporation Intelligent bus bridge for input/output subsystems in a computer system
US5634127A (en) 1994-11-30 1997-05-27 International Business Machines Corporation Methods and apparatus for implementing a message driven processor in a client-server environment
US5634099A (en) 1994-12-09 1997-05-27 International Business Machines Corporation Direct memory access unit for transferring data between processor memories in multiprocessing systems
US5583733A (en) * 1994-12-21 1996-12-10 Polaroid Corporation Electrostatic discharge protection device
US5566170A (en) 1994-12-29 1996-10-15 Storage Technology Corporation Method and apparatus for accelerated packet forwarding
US5598410A (en) 1994-12-29 1997-01-28 Storage Technology Corporation Method and apparatus for accelerated packet processing
US5758084A (en) 1995-02-27 1998-05-26 Hewlett-Packard Company Apparatus for parallel client/server communication having data structures which stored values indicative of connection state and advancing the connection state of established connections
US5701434A (en) 1995-03-16 1997-12-23 Hitachi, Ltd. Interleave memory controller with a common access queue
US5592622A (en) 1995-05-10 1997-01-07 3Com Corporation Network intermediate system with message passing architecture
US5664114A (en) 1995-05-16 1997-09-02 Hewlett-Packard Company Asynchronous FIFO queuing system operating with minimal queue status
US5558121A (en) * 1995-06-07 1996-09-24 Aeroquip Corporation Fluid actuated ball check valve assembly
US5629933A (en) 1995-06-07 1997-05-13 International Business Machines Corporation Method and system for enhanced communication in a multisession packet based communication system
JPH096706A (ja) 1995-06-22 1997-01-10 Hitachi Ltd 疎結合計算機システム
US5596574A (en) * 1995-07-06 1997-01-21 Novell, Inc. Method and apparatus for synchronizing data transmission with on-demand links of a network
US5752078A (en) 1995-07-10 1998-05-12 International Business Machines Corporation System for minimizing latency data reception and handling data packet error if detected while transferring data packet from adapter memory to host memory
US5812775A (en) 1995-07-12 1998-09-22 3Com Corporation Method and apparatus for internetworking buffer management
US5742840A (en) 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US5758186A (en) 1995-10-06 1998-05-26 Sun Microsystems, Inc. Method and apparatus for generically handling diverse protocol method calls in a client/server computer system
US5913028A (en) 1995-10-06 1999-06-15 Xpoint Technologies, Inc. Client/server data traffic delivery system and method
US6047323A (en) 1995-10-19 2000-04-04 Hewlett-Packard Company Creation and migration of distributed streams in clusters of networked computers
US5758089A (en) 1995-11-02 1998-05-26 Sun Microsystems, Inc. Method and apparatus for burst transferring ATM packet header and data to a host computer system
US5809328A (en) 1995-12-21 1998-09-15 Unisys Corp. Apparatus for fibre channel transmission having interface logic, buffer memory, multiplexor/control device, fibre channel controller, gigabit link module, microprocessor, and bus control device
US5706514A (en) * 1996-03-04 1998-01-06 Compaq Computer Corporation Distributed execution of mode mismatched commands in multiprocessor computer systems
US6014557A (en) * 1996-03-14 2000-01-11 Bellsouth Intellectual Property Corporation Apparatus and methods for providing wireless system fraud and visibility data
US5668373A (en) 1996-04-26 1997-09-16 Trustees Of Tufts College Methods and apparatus for analysis of complex mixtures
US5802258A (en) 1996-05-03 1998-09-01 International Business Machines Corporation Loosely coupled system environment designed to handle a non-disruptive host connection switch after detection of an error condition or during a host outage or failure
US5727142A (en) 1996-05-03 1998-03-10 International Business Machines Corporation Method for a non-disruptive host connection switch after detection of an error condition or during a host outage or failure
US5878225A (en) 1996-06-03 1999-03-02 International Business Machines Corporation Dual communication services interface for distributed transaction processing
US5742765A (en) * 1996-06-19 1998-04-21 Pmc-Sierra, Inc. Combination local ATM segmentation and reassembly and physical layer device
US5878227A (en) * 1996-07-01 1999-03-02 Sun Microsystems, Inc. System for performing deadlock free message transfer in cyclic multi-hop digital computer network using a number of buffers based on predetermined diameter
US5749095A (en) 1996-07-01 1998-05-05 Sun Microsystems, Inc. Multiprocessing system configured to perform efficient write operations
US5751723A (en) * 1996-07-01 1998-05-12 Motorola, Inc. Method and system for overhead bandwidth recovery in a packetized network
US5870394A (en) * 1996-07-23 1999-02-09 Northern Telecom Limited Method and apparatus for reassembly of data packets into messages in an asynchronous transfer mode communications system
US5751715A (en) 1996-08-08 1998-05-12 Gadzoox Microsystems, Inc. Accelerator fiber channel hub and protocol
US6038562A (en) 1996-09-05 2000-03-14 International Business Machines Corporation Interface to support state-dependent web applications accessing a relational database
US5941696A (en) * 1996-09-10 1999-08-24 Embrex, Inc. Peristaltic pump
US5892903A (en) * 1996-09-12 1999-04-06 Internet Security Systems, Inc. Method and apparatus for detecting and identifying security vulnerabilities in an open network computer communication system
US6034963A (en) 1996-10-31 2000-03-07 Iready Corporation Multiple network protocol encoder/decoder and data processor
US6523119B2 (en) * 1996-12-04 2003-02-18 Rainbow Technologies, Inc. Software protection device and method
US5930830A (en) 1997-01-13 1999-07-27 International Business Machines Corporation System and method for concatenating discontiguous memory pages
US6094708A (en) * 1997-05-06 2000-07-25 Cisco Technology, Inc. Secondary cache write-through blocking mechanism
US5872919A (en) * 1997-05-07 1999-02-16 Advanced Micro Devices, Inc. Computer communication network having a packet processor with an execution unit which is variably configured from a programmable state machine and logic
US6049528A (en) * 1997-06-30 2000-04-11 Sun Microsystems, Inc. Trunking ethernet-compatible networks
US6014380A (en) * 1997-06-30 2000-01-11 Sun Microsystems, Inc. Mechanism for packet field replacement in a multi-layer distributed network element
US6044438A (en) 1997-07-10 2000-03-28 International Business Machiness Corporation Memory controller for controlling memory accesses across networks in distributed shared memory processing systems
US6021446A (en) 1997-07-11 2000-02-01 Sun Microsystems, Inc. Network device driver performing initial packet processing within high priority hardware interrupt service routine and then finishing processing within low priority software interrupt service routine
WO1999004343A1 (en) 1997-07-18 1999-01-28 Interprophet Corporation Tcp/ip network accelerator system and method
US6145017A (en) 1997-08-05 2000-11-07 Adaptec, Inc. Data alignment system for a hardware accelerated command interpreter engine
US6370145B1 (en) * 1997-08-22 2002-04-09 Avici Systems Internet switch router
US5898713A (en) 1997-08-29 1999-04-27 Cisco Technology, Inc. IP checksum offload
US5991299A (en) 1997-09-11 1999-11-23 3Com Corporation High speed header translation processing
US6172980B1 (en) 1997-09-11 2001-01-09 3Com Corporation Multiple protocol support
US6041058A (en) * 1997-09-11 2000-03-21 3Com Corporation Hardware filtering method and apparatus
US6247173B1 (en) 1997-09-24 2001-06-12 Hewlett-Packard Company Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling
US6005849A (en) 1997-09-24 1999-12-21 Emulex Corporation Full-duplex communication processor which can be used for fibre channel frames
US6065096A (en) 1997-09-30 2000-05-16 Lsi Logic Corporation Integrated single chip dual mode raid controller
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6658480B2 (en) * 1997-10-14 2003-12-02 Alacritech, Inc. Intelligent network interface system and method for accelerated protocol processing
US7237036B2 (en) * 1997-10-14 2007-06-26 Alacritech, Inc. Fast-path apparatus for receiving data corresponding a TCP connection
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6389479B1 (en) 1997-10-14 2002-05-14 Alacritech, Inc. Intelligent network interface device and system for accelerated communication
US7167927B2 (en) * 1997-10-14 2007-01-23 Alacritech, Inc. TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism
US5941969A (en) 1997-10-22 1999-08-24 Auspex Systems, Inc. Bridge for direct data storage device access
US5937169A (en) * 1997-10-29 1999-08-10 3Com Corporation Offload of TCP segmentation to a smart adapter
US6122670A (en) * 1997-10-30 2000-09-19 Tsi Telsys, Inc. Apparatus and method for constructing data for transmission within a reliable communication protocol by performing portions of the protocol suite concurrently
US6057863A (en) 1997-10-31 2000-05-02 Compaq Computer Corporation Dual purpose apparatus, method and system for accelerated graphics port and fibre channel arbitrated loop interfaces
US6219693B1 (en) * 1997-11-04 2001-04-17 Adaptec, Inc. File array storage architecture having file system distributed across a data processing platform
US6009478A (en) 1997-11-04 1999-12-28 Adaptec, Inc. File array communications interface for communicating between a host computer and an adapter
US6061368A (en) 1997-11-05 2000-05-09 Xylan Corporation Custom circuitry for adaptive hardware routing engine
US5950203A (en) 1997-12-31 1999-09-07 Mercury Computer Systems, Inc. Method and apparatus for high-speed access to and sharing of storage devices on a networked digital data processing system
US5941972A (en) 1997-12-31 1999-08-24 Crossroads Systems, Inc. Storage router and method for providing virtual local storage
US6101555A (en) 1998-01-12 2000-08-08 Adaptec, Inc. Methods and apparatus for communicating between networked peripheral devices
US5996024A (en) 1998-01-14 1999-11-30 Emc Corporation Method and apparatus for a SCSI applications server which extracts SCSI commands and data from message and encapsulates SCSI responses to provide transparent operation
US6041381A (en) * 1998-02-05 2000-03-21 Crossroads Systems, Inc. Fibre channel to SCSI addressing method and system
US6016513A (en) 1998-02-19 2000-01-18 3Com Corporation Method of preventing packet loss during transfers of data packets between a network interface card and an operating system of a computer
FR2777673B1 (fr) * 1998-04-15 2001-09-21 Bull Cp8 Dispositif de traitement de l'information comprenant des moyens pour gerer une memoire virtuelle, et procede de stockage d'informations associe
US6246683B1 (en) 1998-05-01 2001-06-12 3Com Corporation Receive processing with network protocol bypass
US6298403B1 (en) 1998-06-02 2001-10-02 Adaptec, Inc. Host adapter having a snapshot mechanism
US6070200A (en) 1998-06-02 2000-05-30 Adaptec, Inc. Host adapter having paged data buffers for continuously transferring data between a system bus and a peripheral bus
US6202105B1 (en) 1998-06-02 2001-03-13 Adaptec, Inc. Host adapter capable of simultaneously transmitting and receiving data of multiple contexts between a computer bus and peripheral bus
US6141705A (en) * 1998-06-12 2000-10-31 Microsoft Corporation System for querying a peripheral device to determine its processing capabilities and then offloading specific processing tasks from a host to the peripheral device when needed
US6157955A (en) 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
US6452915B1 (en) * 1998-07-10 2002-09-17 Malibu Networks, Inc. IP-flow classification in a wireless point to multi-point (PTMP) transmission system
US7664883B2 (en) * 1998-08-28 2010-02-16 Alacritech, Inc. Network interface device that fast-path processes solicited session layer read commands
US6223242B1 (en) * 1998-09-28 2001-04-24 Sifera, Inc. Linearly expandable self-routing crossbar switch
KR100280642B1 (ko) * 1998-11-18 2001-05-02 윤종용 이더넷 컨트롤러의 메모리 관리 장치 및 그 제어방법
US6453360B1 (en) * 1999-03-01 2002-09-17 Sun Microsystems, Inc. High performance network interface
US6480489B1 (en) * 1999-03-01 2002-11-12 Sun Microsystems, Inc. Method and apparatus for data re-assembly with a high performance network interface
US6389468B1 (en) 1999-03-01 2002-05-14 Sun Microsystems, Inc. Method and apparatus for distributing network traffic processing on a multiprocessor computer
US6434651B1 (en) 1999-03-01 2002-08-13 Sun Microsystems, Inc. Method and apparatus for suppressing interrupts in a high-speed network environment
US6356951B1 (en) 1999-03-01 2002-03-12 Sun Microsystems, Inc. System for parsing a packet for conformity with a predetermined protocol using mask and comparison values included in a parsing instruction
US6678283B1 (en) * 1999-03-10 2004-01-13 Lucent Technologies Inc. System and method for distributing packet processing in an internetworking device
US6345301B1 (en) 1999-03-30 2002-02-05 Unisys Corporation Split data path distributed network protocol
US6526446B1 (en) * 1999-04-27 2003-02-25 3Com Corporation Hardware only transmission control protocol segmentation for a high performance network interface card
US6343360B1 (en) * 1999-05-13 2002-01-29 Microsoft Corporation Automated configuration of computing system using zip code data
US6768992B1 (en) * 1999-05-17 2004-07-27 Lynne G. Jolitz Term addressable memory of an accelerator system and method
US6542504B1 (en) * 1999-05-28 2003-04-01 3Com Corporation Profile based method for packet header compression in a point to point link
US6449656B1 (en) * 1999-07-30 2002-09-10 Intel Corporation Storing a frame header
US6427169B1 (en) 1999-07-30 2002-07-30 Intel Corporation Parsing a packet header
US6842896B1 (en) * 1999-09-03 2005-01-11 Rainbow Technologies, Inc. System and method for selecting a server in a multiple server license management system
US6681364B1 (en) * 1999-09-24 2004-01-20 International Business Machines Corporation Cyclic redundancy check for partitioned frames
US6421742B1 (en) 1999-10-29 2002-07-16 Intel Corporation Method and apparatus for emulating an input/output unit when transferring data over a network
US6683851B1 (en) * 2000-01-05 2004-01-27 Qualcomm, Incorporated Flow control of multiple entities sharing a common data link
ATE550852T1 (de) 2000-09-29 2012-04-15 Alacritech Inc Intelligentes netzwerkspeicherschnittstellensystem und solche einrichtungen
US7149817B2 (en) * 2001-02-15 2006-12-12 Neteffect, Inc. Infiniband TM work queue to TCP/IP translation
US7065702B2 (en) * 2001-04-12 2006-06-20 Siliquent Technologies Ltd. Out-of-order calculation of error detection codes
US20030046330A1 (en) * 2001-09-04 2003-03-06 Hayes John W. Selective offloading of protocol processing
US6865264B2 (en) * 2001-10-31 2005-03-08 International Business Machines Corporation Apparatus and method for providing conference call roster information with speaker voice identification
US7269661B2 (en) * 2002-02-12 2007-09-11 Bradley Richard Ree Method using receive and transmit protocol aware logic modules for confirming checksum values stored in network packet
US7016361B2 (en) * 2002-03-02 2006-03-21 Toshiba America Information Systems, Inc. Virtual switch in a wide area network
US7496689B2 (en) * 2002-04-22 2009-02-24 Alacritech, Inc. TCP/IP offload device
US7181531B2 (en) * 2002-04-30 2007-02-20 Microsoft Corporation Method to synchronize and upload an offloaded network stack connection with a network stack
US7441262B2 (en) * 2002-07-11 2008-10-21 Seaway Networks Inc. Integrated VPN/firewall system
US7426579B2 (en) * 2002-09-17 2008-09-16 Broadcom Corporation System and method for handling frames in multiple stack environments
WO2004021626A2 (en) * 2002-08-30 2004-03-11 Broadcom Corporation System and method for handling out-of-order frames
US7313623B2 (en) * 2002-08-30 2007-12-25 Broadcom Corporation System and method for TCP/IP offload independent of bandwidth delay product
US7181544B2 (en) * 2002-09-03 2007-02-20 Intel Corporation Network protocol engine
US20040049580A1 (en) * 2002-09-05 2004-03-11 International Business Machines Corporation Receive queue device with efficient queue flow control, segment placement and virtualization mechanisms
US7519650B2 (en) * 2002-09-05 2009-04-14 International Business Machines Corporation Split socket send queue apparatus and method with efficient queue flow control, retransmission and sack support mechanisms
US20040059926A1 (en) * 2002-09-20 2004-03-25 Compaq Information Technology Group, L.P. Network interface controller with firmware enabled licensing features
US7337241B2 (en) * 2002-09-27 2008-02-26 Alacritech, Inc. Fast-path apparatus for receiving data corresponding to a TCP connection
US7324540B2 (en) * 2002-12-31 2008-01-29 Intel Corporation Network protocol off-load engines
US7389462B1 (en) * 2003-02-14 2008-06-17 Istor Networks, Inc. System and methods for high rate hardware-accelerated network protocol processing
US7363572B2 (en) * 2003-06-05 2008-04-22 Nvidia Corporation Editing outbound TCP frames and generating acknowledgements
US20050060538A1 (en) * 2003-09-15 2005-03-17 Intel Corporation Method, system, and program for processing of fragmented datagrams
US7519699B2 (en) * 2004-08-05 2009-04-14 International Business Machines Corporation Method, system, and computer program product for delivering data to a storage buffer assigned to an application
US7533198B2 (en) * 2005-10-07 2009-05-12 International Business Machines Corporation Memory controller and method for handling DMA operations during a page copy
US7836220B2 (en) * 2006-08-17 2010-11-16 Apple Inc. Network direct memory access

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003229900A (ja) * 2002-02-04 2003-08-15 Mitsubishi Electric Corp 中継処理装置及び中継処理方法
JP2003348184A (ja) * 2002-05-27 2003-12-05 Nec Corp 通信制御装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008517565A (ja) * 2004-10-19 2008-05-22 エヌヴィディア コーポレイション Rxfifoバッファを用いて高速ネットワークアプリケーションにてrxパケットを処理するシステムおよび方法
JP2008016037A (ja) * 2006-07-07 2008-01-24 Korea Electronics Telecommun iSCSIのためのデータ加速装置及びこれを用いたiSCSI記憶システム
JP2009296546A (ja) * 2008-06-09 2009-12-17 Canon Inc 通信装置及び制御方法
JP2016123082A (ja) * 2008-06-19 2016-07-07 クゥアルコム・インコーポレイテッドQualcomm Incorporated Wwan技術のためのハードウェアアクセラレーション
JP2014082739A (ja) * 2012-09-28 2014-05-08 Oki Electric Ind Co Ltd ゲートウェイ装置、通信装置、及び通信コネクション管理方法

Also Published As

Publication number Publication date
US20060168281A1 (en) 2006-07-27
WO2005057945A3 (en) 2005-09-09
US20050122986A1 (en) 2005-06-09
US6996070B2 (en) 2006-02-07
EP1690387A2 (en) 2006-08-16
JP5066707B2 (ja) 2012-11-07
EP1690387A4 (en) 2007-08-15
EP1690387B1 (en) 2012-09-19
WO2005057945A2 (en) 2005-06-23
CN1910869B (zh) 2011-11-23
CN1910869A (zh) 2007-02-07

Similar Documents

Publication Publication Date Title
JP5066707B2 (ja) 順次処理を減らしたtcp/ipオフロードデバイス
US7496689B2 (en) TCP/IP offload device
US7126952B2 (en) Multiprotocol decapsulation/encapsulation control structure and packet protocol conversion method
US7813342B2 (en) Method and apparatus for writing network packets into computer memory
KR100437146B1 (ko) 지능망 인터페이스 장치 및 통신 가속 시스템
US8265092B2 (en) Adaptive low latency receive queues
US7916632B1 (en) Systems and methods for handling packet fragmentation
US20030051076A1 (en) Methods and system for pre-fetching descriptors
US7936758B2 (en) Logical separation and accessing of descriptor memories
US20080040519A1 (en) Network interface device with 10 Gb/s full-duplex transfer rate
US20040034718A1 (en) Prefetching of receive queue descriptors
US20020095519A1 (en) TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism
US20150032835A1 (en) Iwarp send with immediate data operations
US7398300B2 (en) One shot RDMA having a 2-bit state
US8798085B2 (en) Techniques to process network protocol units
WO2007130476A2 (en) Network interface device with 10 gb/s full-duplex transfer rate
US6463478B1 (en) Method and apparatus for identifying runt data frames received by a network switch
US5948079A (en) System for non-sequential transfer of data packet portions with respective portion descriptions from a computer network peripheral device to host memory
US7016354B2 (en) Packet-based clock signal
US7500239B2 (en) Packet processing system
US20020078246A1 (en) Method and system for network protocol processing
Benz et al. TCP Acceleration on Network Processors.

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080207

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100223

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100316

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100616

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100716

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100812

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100816

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100916

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100708

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101104

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101118

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100927

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20101013

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110610

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110909

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111212

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111211

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20111003

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120427

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120514

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120719

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

Free format text: PAYMENT UNTIL: 20150824

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150824

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees