JP5282115B2 - ユーザーレベルスタック - Google Patents

ユーザーレベルスタック Download PDF

Info

Publication number
JP5282115B2
JP5282115B2 JP2011081728A JP2011081728A JP5282115B2 JP 5282115 B2 JP5282115 B2 JP 5282115B2 JP 2011081728 A JP2011081728 A JP 2011081728A JP 2011081728 A JP2011081728 A JP 2011081728A JP 5282115 B2 JP5282115 B2 JP 5282115B2
Authority
JP
Japan
Prior art keywords
data
network
application
network interface
interface device
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.)
Active
Application number
JP2011081728A
Other languages
English (en)
Other versions
JP2011141894A (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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=32344135&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP5282115(B2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by ソーラーフレア コミュニケーションズ インコーポレーテッド filed Critical ソーラーフレア コミュニケーションズ インコーポレーテッド
Publication of JP2011141894A publication Critical patent/JP2011141894A/ja
Application granted granted Critical
Publication of JP5282115B2 publication Critical patent/JP5282115B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)
  • Lock And Its Accessories (AREA)
  • Control Of Eletrric Generators (AREA)
  • Eyeglasses (AREA)

Description

発明の背景
本発明は、ネットワークインターフェース、例えばコンピューターをネットワークにリンクするためのインターフェースデバイスに関するものである。
図1は、ネットワークインターフェースカード(NIC)のようなネットワークインターフェースデバイス、およびそれが使用され得るシステムの一般的アーキテクチャを示す概略図である。ネットワークインターフェースデバイス10は、データリンク5を介してコンピューター1のような処理デバイスに、およびデータリンク14を介してデータネットワーク20に接続されている。さらに、処理デバイス30のようなネットワークインターフェースデバイスもネットワークに接続され、ネットワークおよび処理デバイス40のようなさらなる処理デバイス間のインターフェースを提供する。
コンピューター1は、例えばパーソナルコンピューター、サーバー、またはデータロガー若しくはコントローラのような専用処理デバイスであってもよい。この例においてそれは、プロセッサ2、プログラムストア4およびメモリ3を含む。プログラムストアは、オペレーティングシステム、およびそのオペレーティングシステム上で実行できるアプリケーションを規定する命令を保管する。オペレーティングシステムは、ドライバおよびインターフェースライブラリのような手段を提供し、それによりアプリケーションは、コンピューターと接続した周辺のハードウェアデバイスにアクセスできる。
ネットワークインターフェースデバイスは、標準的な転送プロトコル、例えばTCP、RDMAおよびISCSIを、ユーザーレベルで、即ちそれらがコンピューター1上で実行するアプリケーションプログラムにアクセスできるようにサポートできることが望ましい。そのようなサポートは、標準的なプロトコルの使用を要求し、データにカーネルスタックの全探索を要求しないデータ転送を可能にする。この例のネットワークインターフェースデバイスでは、標準的な転送プロトコルは、コンピューター1のオペレーティングシステムにアクセス可能な転送ライブラリ内でインプリメントされる。
典型的なコンピューターシステム1は、プロセッササブシステム(1つまたはそれ以上のプロセッサを含む)、メモリサブシステム(メインメモリ、キャッシュメモリ等を含む)、および周辺バスを介してプロセッササブシステムに接続された様々な「周辺デバイス」を含む。周辺デバイスは、例えばキーボード、マウスおよびディスプレイアダプタ、ディスクドライブおよびCD−ROMドライブ、ネットワークインターフェースデバイスなどを含み得る。プロセッササブシステムは、デバイスに予め割り当てられた特定アドレスへのコマンドおよび情報を読み書きすることにより、周辺デバイスと通信する。アドレスは、メインメモリ・アドレススペース、I/Oアドレススペース、または別のタイプの構成スペースの領域に予め割り当てられ得る。周辺デバイスとの通信は、ダイレクトメモリアクセス(DMA)を介して行うこともでき、その中で周辺デバイス(または周辺バスでの別のエージェント)は、メモリサブシステムと、周辺デバイスに割り当てられたアドレススペースの予め割り当てられた領域の1つとの間で直接データを送信する。
最新のコンピューターシステムはマルチタスクを行う。マルチタスクとは、コンピューターシステムが、複数の異なるアプリケーションプログラムを同じプロセッササブシステム上で同時に実行させることを意味する。最新のコンピューターシステムは、オペレーティングシステムも実行し、それは、他の事項の中で、それぞれの異なるアプリケーションプログラムのコードを実行するために、プロセッササブシステム上で時間を割り当てる。マルチタスクシステムで生じ得る1つの問題は、異なるアプリケーションプログラムが同じ周辺デバイスを同時に制御しようとすることである。そのような競合を防止するために、オペレーティングシステムの別のジョブは、周辺デバイス制御を調和させることである。特にオペレーティングシステムだけが、周辺デバイスに直接アクセスでき、周辺デバイスにアクセスしようとするアプリケーションプログラムは、オペレーティングシステム中のルーチンを呼び出すことによって、それをしなければならない。オペレーティングシステムにおける周辺デバイスの排他的制御の配置は、ハードウェアを制御するために、それぞれの分離アプリケーションプログラムがそれ自身のソフトウェアコードをインプリメントする必要性を無くすことで、システムのモジュール化も助ける。
ハードウェアを制御するオペレーティングシステムの部分は、通常カーネルである。典型的に、それは、ハードウェアの初期化、プロセッサ状態の設定および再設定、プロセッサ内部クロックの調節、ネットワークインターフェースデバイスの初期化、およびハードウェアの他の直接アクセスを行うカーネルである。カーネルは、カーネルモード(時おりトラステッドモードまたは特権モードとも呼ばれる)で実行し、一方、アプリケーションレベルプロセス(ユーザーレベルプロセスとも呼ばれる)は、ユーザーモードで実行する。典型的にそれは、カーネルコードのようなトラステッドモードのみがハードウェアに直接アクセスできることを確保するプロセッササブシステムハードウェア自体である。プロセッサは、これを少なくとも2つの方式で強化する:或る重要命令は、現行の特権レベルが充分に高まるまでプロセッサで実行されず、プロセッサは、プロセスに既に割り振られたユーザーレベルの物理または仮想アドレススペースの外側にあるメモリ位置(特定のハードウェアリソースに関係するアドレスにマップされたメモリを含む)に、ユーザーレベルプロセスがアクセスすることを許可しない。この中で使用されるように、用語「カーネルスペース」または「カーネルアドレススペース」は、カーネルを実行するアドレスおよびコードスペースを指す。これは、カーネルに対して、カーネルデータ構造および機能内部を含む。カーネルも同様にユーザープロセスのメモリにアクセスできるが、「カーネルスペース」は、一般に、カーネル専用であり、あらゆるユーザープロセスがアクセスできないメモリ(コードおよびデータを含む)を意味する。用語「ユーザースペース」または「ユーザーアドレススペース」は、実行可能ファイルからロードされ、ユーザープロセスにとって利用可能であり、コードにより割り振られたアドレスおよびコードスペースを指し、これは、カーネル専用コードデータ構造を排除する。この中で使用されるように、全ての4つの用語は、それ自身のアドレススペースのソフトウェアプログラムのビューと、それに対応する物理メモリ位置との間の介入マッピングの可能性を引き受けることが意図されている。典型的に、そのアドレススペースのソフトウェアプログラムのビューは隣接するのに対して、対応する物理アドレススペースは、ハードディスクドライブのような交換デバイス上で、非隣接で、オーダー外であり、場合により部分的に一様であり得る。
カーネルの部分は、分離した前進カーネルプロセスとして実行し得るが、実際上カーネルのほとんどは、システム上において、分離処理実行ではない。その代わりにそれは、ルーチン設定と考えることができ、ユーザープロセスはそのいくつかにアクセスできる。ユーザープロセスは、プロセスに代わってカーネルにいくつかのコードを実行させる機能であるシステムコールを実行することにより、カーネルルーチンを呼び出すことができる。「現行プロセス」はまだユーザープロセスであるが、システムコール中にそれは、「カーネル内部」を実行し、それによりカーネルアドレススペースにアクセスでき、特権モードで実行できる。割り込みハンドラーがカーネル内で見出されるので、カーネルコードも、ハードウェアデバイスにより出される割り込みに応答して、実行される。カーネルも、プロセススケジューラーとしての役割で、クロック割り込み(および他の手段)を使用して急速にプロセス間で制御をスイッチし、1つのプロセスからもう1つへのスイッチを起動する。カーネルルーチンが呼び出されるたびに、現行の特権レベルは、ルーチンがハードウェアに直接アクセスすることを許可するために、カーネルモードに対して増加する。カーネルが、ユーザープロセスのもとへ制御を解放するときは、現行の特権レベルは、ユーザープロセスのものに戻る。
ユーザーレベルプロセスがNICと通信することを望むときは、従来それは、オペレーティングシステムに対するコールを通じてのみ、それを行うことができる。オペレーティングシステムは、アプリケーションの代わりにプロトコル処理を行うシステムレベルプロトコル処理スタックをインプリメントする。特にTCP/IPコールを使用してデータパケットを送信しようとするアプリケーションは、(例えば送信()コールを使用して)オペレーティングシステムAPIを呼び出し、データが転送される。このコールは、コンテキストスイッチにカーネルルーチンを呼び出させ、データをカーネルデータバッファにコピーし、TCP送信処理を実行する。ここでプロトコルが適用され、充分に形成されたTCP/IPパケットは、インターフェースドライバで送信のために待ち行列に入れられる。別のコンテキストスイッチは、制御がアプリケーションプログラムに戻るときに行われる。ネットワークプロトコル処理のためのカーネルルーチンは、時間経過に起因しても呼び出され得ることは注意すべきである。一例は、再送信アルゴリズムの起動である。一般にオペレーティングシステムは、全てのOSモジュールに、(ハードウェアクロック割り込みにより駆動される)時間およびスケジューリングサービスを提供し、これは、接続ごとに基づきTCPスタックにタイマーをインプリメントさせることを可能にする。オペレーティングシステムは、そのようなタイマー起動機能を操作するために、次いで再びアプリケーションに戻るために、コンテキストスイッチを行う。
ネットワーク送信および受信操作は、過度なコンテキストスイッチングを含むことがあり、これはかなりのオーバーヘッドを引き起こし得ることが考えられる。その問題は、特にネットワーキング環境で深刻であり、その中でデータパケットはしばしばショートし、要求される制御作業の量を、全ネットワーク処理作業の割合として増大させる。
過去に試みられた1つの解決策は、オペレーティングシステムのものと並行に作動するユーザーレベルプロトコル処理スタックを作成することであった。そのようなスタックは、カーネルスタックを全探索することをデータに要求せずに、標準的なプロトコルを使用するデータ送信をなし得る。
図2は、この1つのインプリメンテーションを示す。このアーキテクチャでは、TCP(および他の)プロトコルは、図2でTCP1およびTCP2を表示するように、2回インプリメントされる。典型的なオペレーティングシステムにおいて、TCP2は、コンピューターのオペレーティングシステムに構築されているTCPプロトコルの標準インプリメンテーションであろう。ネットワークインターフェースデバイスを制御するおよび/またはそれと通信するために、コンピューター上でのアプリケーション実行は、API(アプリケーションプログラミングインターフェース)コールを出すことができる。いくつかのAPIコールは、ネットワークインターフェースデバイスをサポートするために供給された転送ライブラリで操作され得る。アプリケーションに対して直接利用できる転送ライブラリにより保守することができないAPIコールは、典型的に、アプリケーションおよびオペレーティングシステムの間のインターフェースを通じて受け渡すことができ、オペレーティングシステムに対して利用できるライブラリにより操作される。多くのオペレーティングシステムでのインプリメンテーションのために、転送ライブラリは、制御プレーン構造に基づく既存のイーサネット(登録商標)/IP:例えばSNMPおよびARPプロトコルを、OSインターフェースを介して使用することが便利である。
ユーザーレベルで転送プロトコルをインプリメントすることには多くの難しさがある。ほとんどのインプリメンテーションは、今日、事前カーネルコードベースをユーザーレベルに移植することに基づいている。これらの例は、アーセニック(Arsenic)およびジェットストリーム(Jet-stream)である。これらは、ユーザーレベル転送の可能性を示すが、完全で、強く、高性能で、商業的に実行できるインプリメンテーションを達成するために要求される、多くの問題を扱っていない。
図3は、標準カーネルTCP転送(TCPk)を用いるアーキテクチャを示す。
このアーキテクチャの操作は、以下のようなものである。
ネットワークインターフェースハードウェア(例えばネットワークインターフェースカード(NIC))からのパケット受信で、NICは事前に割り振られたデータバッファ(a)にデータを転送し、割り込みラインによりOS割り込みハンドラーを呼び出す(ステップi)。割り込みハンドラーは、ハードウェアインターフェースを管理する、例えば新しい受信バッファを通知し、プロトコル情報を探す受信(この場合イーサネット(登録商標))パケットを受け渡す。パケットが、有効なプロトコル、例えばTCP/IPに向かうように識別されていない場合、それは、(コピーされずに)適切な受信プロトコル処理ブロックに受け渡される(ステップii)。
TCP受信側処理が行われ、宛先部分がパケットから識別される。パケットがポートに対して有効なデータを含有している場合、パケットは、ポートのデータキュー(ステップiii)およびマークをつけられたポート(これは、スケジューラーおよびブロックされたプロセスの覚醒を含み得る)上で、有効データが保持されるようにはめ込まれる。
TCP受信処理は、例えば先に送信されたデータを再送信すべき場合、または先に待ち行列に入れられたデータが(おそらくTCPウィンドウがオープンであったため)現在送信できる場合に、他のパケットを送信することを要求し得る(ステップiv)。この場合、パケットは、送信のためにOS「NDIS」ドライバで待ち行列に入れられる。
アプリケーションがデータバッファを取り出すために、それは、例えばrecv()、選択()またはポーリング()のようなコールにより、OS APIを呼び出さなければならない(ステップv)。これは、アプリケーションにデータが受信されたことを通知し、(recv()コールの場合に)データをカーネルバッファからアプリケーションのバッファにコピーするという効果を有する。そのコピーは、DMAアクセス可能のような特別な属性を有するそのネットワークバッファを、カーネル(OS)が再使用できるようにし、およびそのコピーは、アプリケーションがネットワークにより供給される単位内でデータを操作する必要が無いこと、またはアプリケーションが演繹的にデータの最終宛先を知る必要があること、またはアプリケーションが後でデータ受信のために使用できるバッファを事前に割り振らなければならないことを意味する。
受信側では、非同期的に相互作用する少なくとも2つの制御特殊スレッド:割り込みからのアップコールおよびアプリケーションからのシステムコールがあることは注意すべきである。多くのオペレーティングシステムは、多すぎるコードを割り込み優先度で実行することを回避するために、例えば「ソフト割り込み」または「据え置き手順コール」技術でアップコールを分割することもある。
送信プロセスは、実行の1つのパスが通常存在する場合を除いては、同様に挙動する。アプリケーションは、(例えば送信()コールを使用して)オペレーティングシステムAPIを呼び出し、データが送信される(ステップvi)。このコールは、データをカーネルデータバッファにコピーし、TCP送信処理を呼び出す。ここでプロトコルが適用され、充分に形成されたTCP/IPパケットが、送信用インターフェースドライバで待ち行列に入れられる。
正常な場合、システムコールは、送信のために(ハードウェアにより)スケジュール付けられたデータの表示を伴って戻る。しかしデータがネットワークインターフェースデバイスにより待ち行列に入れられない多くの環境がある。例えば転送プロトコルが、保留中の肯定応答またはウィンドウアップデートを待ち行列に入れることがあり、デバイスドライバが、ハードウェアに対する保留中のデータ送信要求を、ソフトウェア内で、待ち行列に入れることがある。
システムによる第3の制御フローは、時間経過で実行されなければならないアクションにより発生する。一例は、再送信アルゴリズムの起動である。一般にオペレーティングシステムは、全てのOSモジュールに、(ハードウェアクロック割り込みにより駆動される)時間およびスケジューリングサービスを供給し、これはTCPスタックが、接続ごとに基いてタイマーをインプリメントすることを可能にする。
標準的なカーネルスタックがユーザーレベルでインプリメントされる場合、その構造は、一般に図4で示されるようなものであろう。アプリケーションは、OSインターフェースと直接リンクされるよりはむしろ、転送ライブラリとリンクされる。その構造は、ユーザーレベルパッケージにより供給されるタイマーサポート、およびユーザーレベル仮想インターフェースモジュールで置き換えられるデバイスドライバインターフェースのような
サービスでのカーネルスタックインプリメンテーションと非常に似ている。しかしTCPインプリメンテーションにより要求される非同期処理のモデルを供給するために、転送ライブラリ内での実行アクティブスレッドが多く存在しなければならない:
(i)アプリケーションにより供給されるシステムAPIコール
(ii)プロトコルコードへのタイマー発生コール
(iii)仮想ネットワークインターフェースおよび結果として生ずるプロトコルコードへのアップコールの管理。(iiおよびiiiは、いくつかのアーキテクチャのために組み合わせてもよい)
しかしこの配列は多くの問題を持ち込む:
(a)共有データ構造を保護するためのこれらスレッドおよびインプリメントロッキング間のコンテキストスイッチングのオーバーヘッドは重大であり得、かなりの量の処理時間を費やす。
(b)ユーザーレベルタイマーコードは、一般に、オペレーティングシステムにより供給されるタイマー/時間サポートを使用することにより作動する。タイマーモジュールからのシステムコールにより引き起こされる大きなオーバーヘッドの結果、システムが、オペレーティングシステムおよびデータバス間の相互作用を防ぐという目的に応じられなくなる。
(c)多くの独立アプリケーションが存在することがあり、それらは、それぞれネットワーク接続のサブセットを、いくつかはそれら自身の転送ライブラリを介して、およびいくつかは既存のカーネルスタック転送ライブラリにより管理する。NICは、効率よくパケットを解析し、それらを、IPポートおよびホストアドレスビットのようなプロトコル情報に基づく適切な仮想インターフェース(またはOS)に送信できなければならない。
(d)アプリケーションが、例えば、ユニックスオペレーティングシステム上でのフォーク()システムコール中に、特定のネットワーク接続制御を別のアプリケーションに受け渡すことは可能である。これは、接続状態にアクセスするために、完全に異なる転送ライブラリインスタンスが要求されることを必要とする。より悪いことに、多くのアプリケーションは、ネットワーク接続を共有することがあり、これは、転送ライブラリが、(プロセス間通信)技術を介して所有権を共有することを意味する。ユーザーレベルでの既存の転送は、これをサポートしようと試みていない。
(e)転送プロトコルが、ネットワークコネクションに、それがつながれているアプリケーションよりも長生きするよう指令することは一般的である。例えばTCPプロトコルを使用して、転送は、送られるが無応答のデータを送信するよう努めなければならず、送信アプリケーションが存在するか、または破損しているときには正常に接続を閉じるよう努めなければならない。これは、アプリケーションの状態(または存在)を問わずに、「タイマー」入力をプロトコルスタックに供給できるカーネルスタックインプリメンテーションでの問題ではなく、アプリケーションが存在する、破損する、またはデバッガー内で停止される場合に、(場合により非正常に)消失することがある転送ライブラリの課題である。
少なくとも部分的に、これら問題a〜eの1つまたはそれ以上に取り組むシステムを提供することは望まれているであろう。
発明の概要
本発明の一側面によれば、概略的に記載されるように、データ処理システムによるデータ送信方法が提供され、該システムは、オペレーティングシステムおよび少なくとも1つのアプリケーションをサポートでき、メモリに、およびネットワーク上で別のネットワークインターフェースデバイスとの通信リンクをサポートできるネットワークインターフェースデバイスにアクセスでき、該方法は:送信されるデータをアプリケーションにより形成するステップ;アプリケーションにより、データ処理システムの非オペレーティングシステム機能に、送信されるデータを送ることを要求するステップ;その要求に応答する:送信されるデータをメモリ領域に書き込むステップ;および非オペレーティングシステム機能およびネットワークインターフェースデバイス間の直接通信により、ネットワーク上に、データの少なくともいくつかの送信操作を開始するステップ;および続いて、オペレーティングシステムによりメモリにアクセスするステップ、およびネットワークインターフェースデバイスによりネットワーク上にデータの少なくともいくつかの送信操作の少なくとも一部を行うステップを含む。
好ましくは、オペレーティングシステムはネットワークインターフェースデバイスと直接通信できる。
非オペレーティングシステム機能間の前記直接通信は、好ましくはオペレーティングシステムを迂回する。
非オペレーティングシステム機能は、好ましくはソフトウェアにより、最も好ましくはデータ処理システム上で実行するソフトウェアによりインプリメントされる。それは、都合の良いことには、転送ライブラリであってもよい。非オペレーティングシステム機能は、最も好ましくは、それが行うステップを達成するために、特権レベルで増加を要求しない。
前記メモリ領域は、メモリの第2領域にマップされていてもよい。メモリの第2領域は、オペレーティングシステムとアクセス可能、最も好ましくは直接アクセス可能であってもよいが、非オペレーティングシステム機能とは直接アクセスできない。
該方法は、ネットワーク上にデータの送信操作を開始するときに、タイマーをスタートすること;および肯定応答がそのデータに対して受信される前にタイマーが予定値に達した場合に、ネットワークインターフェースデバイスからデータ処理システムに失敗メッセージを送信することを含み得る。
該方法は、ネットワーク上にデータの送信操作を開始するときに、その操作の記録およびデータソースであったアプリケーションの表示を保管すること;およびそのアプリケーションのためのデータを受信したときに、そのアプリケーションと関連する各記録に対してタイマーをスタートすること;および肯定応答がそのデータに対して受信される前に前述のタイマーが予定値に達した場合に、ネットワークインターフェースデバイスからデータ処理システムに失敗メッセージを送信することを含み得る。
好ましくは、タイマーまたは各タイマーはネットワークインターフェースデバイス上で実行される。
該方法は、データに対して肯定応答を受信したときにタイマーを取り消すことを含んでもよく、その中で失敗メッセージまたは各失敗メッセージは、オペレーティングシステムに向けて発せられる。
タイマーを取り消すステップは、エンティティをシグナル通知するアプリケーションを含んでもよく、そこでタイマーは、オペレーティングシステムを迂回する方式で実行される。
失敗メッセージまたは各失敗メッセージは、好ましくはデータソースであったアプリケーションに向けて発せられる。
オペレーティングシステムは、好ましくは、失敗メッセージに対応するデータに関して、前記送信操作の少なくとも一部を行うためのネットワークデバイスともはや通信していないアプリケーションに向けて発せられる失敗メッセージに応答する。
本発明の第2側面によれば、概略的に記載されるように、データ処理システムによりデータを受信するための方法が提供され、該システムは、少なくとも1つのアプリケーションをサポートでき、メモリに、およびネットワーク上で別のネットワークインターフェースデバイスとの通信リンクをサポートできるネットワークインターフェースデバイスにアクセスでき、該方法は:データ処理システムの非オペレーティングシステム機能により、アプリケーションでデータを受信するためのチャネルを確立するステップ、該チャネルはメモリ領域と関連する;そのチャネルを通じて:ネットワークインターフェースデバイスがメモリ領域に受信データを書き込むこと;およびアプリケーションがその領域から受信データを読み取ること;および続いてアプリケーションがネットワークデバイスと通信できない場合、オペレーティングシステムがその領域から受信データを読み取ることによりデータを受信するステップを含む。
好ましくは、オペレーティングシステムは、アプリケーションがネットワークデバイスと通信できないという決定がなされたときに、自動的にその領域から受信データを読み取るように構成されている。
本発明の第3側面によれば、概略的に記載されるように、データ処理システムによるデータ送信方法が提供され、該システムは、少なくとも1つのアプリケーションをサポートでき、メモリに、およびネットワーク上で別のネットワークインターフェースデバイスとの通信リンクをサポートできるネットワークインターフェースデバイスにアクセスでき、該方法は:送信されるデータをアプリケーションにより形成するステップ;そのデータを、送信のためにネットワークインターフェースデバイスに受け渡すステップ;ネットワークインターフェースデバイスによりデータを送信するステップ、および任意にその送信の際に、データに対応するタイマーを確立するステップ;および肯定応答がそのデータに対してネットワーク上で受信された場合に、タイマーを取り消すステップ;またはタイマーが予定値に達した場合に、ネットワークインターフェースデバイスにより、肯定応答がそのデータに対して受信されなかったことを示すために、オペレーティングシステムにシグナル通知するステップを含む。
タイマーを、そのタイマーの確立でスタートさせてもよい。
タイマーが確立されたときそれを、その送信でタイマーが確立されたデータのソースであったアプリケーションに向けて発せられるデータを受信することで、スタートさせてもよい。
前記データ受け渡しは、データ処理システムの非オペレーティングシステム機能により行い得る。
非オペレーティングシステム機能は、転送ライブラリであってもよい。
前記データ受け渡しは、オペレーティングシステムを迂回することで行い得る。
前記シグナル通知は、失敗イベントをオペレーティングシステムのイベントキューに適用することを含み得る。
本発明の第4側面によれば、概略的に記載されるように、データ処理システムによりデータを送信または受信するための方法が提供され、該システムは、オペレーティングシステムおよびアプリケーションをサポートし、メモリに、およびネットワーク上で別のネットワークインターフェースデバイスとの通信リンクをサポートできるネットワークインターフェースにアクセスでき、該方法は:データ処理システムおよびネットワークインターフェースデバイス間のデータ転送におけるデータバッファおよび接続状態バッファとして使用するために、1つまたはそれ以上のメモリ領域を割り当てること;ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、アプリケーションによりメモリ領域の少なくとも1つに直接アクセスすること;アプリケーションが無応答であると決定された場合に、ネットワークインターフェースデバイスが、オペレーティングシステムにシグナル通知して、前記メモリ領域の少なくとも1つにアクセスさせること;およびネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、オペレーティングシステムが、シグナルに応答して、データバッファおよび接続状態バッファの少なくとも1つに直接アクセスすることを含む。
好ましくは、該方法は:ネットワークデバイスによりネットワークからデータを受信すること;およびネットワークデバイスにより前記領域の少なくとも1つにデータを書き込むことを含む。
好ましくは、ネットワークデバイスは、アプリケーションが無応答であると決定された場合にオペレーティングシステムにシグナル通知して、前記領域の少なくとも1つにアクセスするように構成されており、方法は、前述のシグナルに対する応答において、オペレーティングシステムにより前記メモリ領域の少なくとも1つに直接アクセスする前記ステップを行うことを含む。前記シグナルは、割り込みであってもよい。
好ましくは、ネットワークデバイスはタイマーをサポートし、方法は、受信データが前記領域の少なくとも1つに書き込まれたときに、タイマーをスタートし、事前設定の初期値からカウントすることを含み、アプリケーションは、タイマーが事前設定の最終値に達した場合に、無応答であると決定される。好ましくは、最終値はゼロである。
好ましくは、該方法は、アプリケーションにより初期値および/または最終値を設定するステップを含む。最も好ましくは、最終値はゼロであり、初期値だけがアプリケーションにより設定される。
該方法は、好ましくはアプリケーションにより前記領域の少なくとも1つから受信データを読み取ったときに、アプリケーションによりタイマーを停止することを含む。
好ましくは、ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、メモリ領域の少なくとも1つに直接アクセスする前記ステップのそれぞれは、ネットワークインターフェースデバイスによりネットワークから受信され、前記領域の少なくとも1つに保管されたデータのプロトコル処理を含む。プロトコル処理は:受信データからトラフィックデータを抽出すること、受信データの少なくともいくつかに関して、肯定応答および/または再送信メッセージをネットワーク上に送信すること、受信データ中の受信データ単位のシーケンス値をチェックすること、および受信データに関してチェックサムを計算することの1つまたはそれ以上を含み得る。プロトコルはTCPであってもよい。
好ましくは、該方法は:ネットワークデバイスにより、前記領域の少なくとも1つからデータを読み取ること;およびネットワークデバイスにより、そのデータをネットワーク上に送信することを含む。
好ましくは、ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、メモリ領域の少なくとも1つに直接アクセスする前記ステップのそれぞれは、送信用のデータを前記領域の少なくとも1つに保管することを含む。
好ましくは、ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、メモリ領域の少なくとも1つに直接アクセスする前記ステップのそれぞれは、ネットワークデバイスを起動して、前記領域の少なくとも1つからデータを読み取る前記ステップを行うことを含む。
好ましくは、ネットワークデバイスは、アプリケーションが無応答であると決定された場合に、オペレーティングシステムにシグナル通知して、前記領域の少なくとも1つにアクセスするように構成されており、方法は、前述のシグナルに対する応答において、オペレーティングシステムにより前記メモリ領域の少なくとも1つに直接アクセスする前記ステップを行うことを含む。
本発明のさらなる側面によれば、上記のあらゆる方法を行うためのシステムが提供される。
図1は、使用時のネットワークインターフェースデバイスの概略図である。 図2は、転送ライブラリアーキテクチャのインプリメンテーションを示す。 図3は、ユーザーレベルTCP転送と共に標準的なカーネルTCP転送を用いるアーキテクチャを示す。 図4は、標準的なカーネルスタックがユーザーレベルでインプリメントされているアーキテクチャを示す。 図5は、TCP転送アーキテクチャの例を示す。 図6は、着信TCP/パケットをフィルターに掛けるために、ネットワークインターフェースデバイスにより行うことができるステップを示す。 図7は、コンテンツアドレス可能メモリによりサーバー(受動)接続の操作を示す。
図面の説明
本発明を、これから添付図面を参照しながら、例として説明していく:
図1は、使用時のネットワークインターフェースデバイスの概略図である;
図2は、転送ライブラリアーキテクチャのインプリメンテーションを示す;
図3は、ユーザーレベルTCP転送と共に標準的なカーネルTCP転送を用いるアーキテクチャを示す;
図4は、標準的なカーネルスタックがユーザーレベルでインプリメントされているアーキテクチャを示す;
図5は、TCP転送アーキテクチャの例を示す;
図6は、着信TCP/パケットをフィルターに掛けるために、ネットワークインターフェースデバイスにより行うことができるステップを示す;
図7は、コンテンツアドレス可能メモリによりサーバー(受動)接続の操作を示す。
図面の詳細な説明
以下の記載は、あらゆる当業者が本発明を作り、使用できるようにするために示され、特定の適用およびその要件との関連で提供される。開示された実施態様の様々な修正は、当業者にとって容易に理解できるであろう、そしてこの中で明確にされた一般原理は、本発明の意図および範囲から外れることなく、他の実施態様および適用に応用することができる。従って本発明は、示した実施態様に限定されることは意図されておらず、この中で開示された原理および機能と矛盾しない最も広い範囲と一致させられることが意図されている。
図5は、ネットワークインターフェースデバイス、例えば図1のデバイス10と、コンピューター、例えば図1のコンピューター1との間のインターフェースを提供するために適したTCP転送アーキテクチャの一例を示す。アーキテクチャは、このインプリメンテーションに限定されない。
図5の例のアーキテクチャと従来のアーキテクチャとの間の主な違いは、以下のようなものである。
(i)ネットワーク接続の代わりにプロトコル処理を行うTCPコードは、転送ライブラリおよびOSカーネルの両方に位置指定される。このコードがプロトコル処理を行うということが、特に重要である。
(ii)接続状態およびデータバッファは、カーネルメモリおよび転送ライブラリのアドレススペースにマップされたメモリに保持される。オペレーティングシステムは、それらバッファの所有者であり、そうしてそれらを完全に制御するが、それらは、その通信のためにそれらが使用されるアプリケーションにより直接アクセスすることができる。これは、アプリケーションが、それらバッファを通じてデータを直接送受信すること、および状態データを対応する状態バッファから読み取ることを可能にする。
(iii)カーネルおよび転送ライブラリコードの両方が、特定のネットワーク接続のために、およびこれに代わって、仮想ハードウェアインターフェースにアクセスできる。
(iv)タイマーは、仮想ハードウェアインターフェースを通じて管理することができ、(これらはネットワークインターフェースデバイス上の実タイマーに対応する)、システムコールにそれらを設定およびクリアすることを要求しなくてもよい。NICは、タイマーイベントを発生させ、それは、ネットワークインターフェースデバイスドライバにより受信され、デバイスのためにTCPサポートコードに受け渡される。
ネットワークインターフェースデバイスのためのTCPサポートコードは、汎用OSに加えて、TCPインプリメンテーションであることは注目すべきである。これは、適切には、ネットワークインターフェースデバイスのスタックと共存できる。
図5のアーキテクチャにおいてバッファは、ネットワーク上でデータを送信および/または受信するためにNICと共同して使用されるため、データプロセッサ上のメモリに割り振られる。データ送信に使用するための送信バッファの場合、NICは、そのバッファからデータを読み取り、それをネットワーク上に送信するために構成される。NICは、自動的にそのデータを読み取り、それを送信することができるか、またはそれは、アプリケーション、もしくはデータプロセッサ上で実行するオペレーティングシステムによりデータを読み取るために起動され得る。トリガーは、好都合には割り込みであり得る。データ受信に使用するための受信バッファの場合、NICは、そのバッファに、ネットワーク上で受信されたデータを書き込むために構成される。受信バッファ中のデータは、次いでアプリケーションまたはオペレーティングシステムにより読み取られ、さらにそれにより処理され得る。
バッファは、最も好都合にはオペレーティングシステムに所有される。これは、それが、制御を有し、その制御でエンティティがバッファにアクセスでき、それがバッファを割り当てるおよび/または作成し、そしてそれが、それらを削除する責任があるという意味である。しかしアプリケーションおよびオペレーティングシステムの両方は、バッファに、それらからデータを読み取り、それらにデータを書き込むために直接アクセスできる。これらステップが起こる環境は、以下で記載される。
データ送信の場合、アプリケーションは、送信のためにデータをバッファに書き込み、次いでNICを起動してバッファから読み取り、そのデータを送信することが期待される。いくつかの状態において、これ単独で、データをネットワーク上に首尾よく送信させるために充分であり得る。しかしNICは、送信または受信データのプロトコル処理を行わない。代わりにそれは、アプリケーションまたはオペレーティングシステムにより行われる。それゆえ、例えばデータが目的の受信側で首尾よく受信されない場合、アプリケーションまたはオペレーティングシステムは、肯定応答、再送信要求などを(使用時のプロトコルにより)処理し、NICに再送信させなければならない。普通これは、アプリケーションによりなされると考えることができる。NICが、肯定応答メッセージまたはアプリケーションに対するタイムアウトのようなデータを有するときは、NICは、それを受信バッファおよび/またはイベントキューのいずれかに書き込む。同時にそれは、タイマー実行をスタートする。アプリケーションがデータにアクセスするとき、それは、タイマーを停止およびリセットする。そのようにして、NICは、アプリケーションが応答であることを知る。しかし、タイマーが予定値に達した場合、NICは、アプリケーションが無応答であると決定し、アプリケーションのためにデータを操作するために、オペレーティングシステムに、例えば割り込みによりシグナル通知する。これは、多くの利点を有する。第1に、アプリケーションがビジーである、またはスケジュール解除(descheduled)された場合でさえ、データ送信をオペレーティングシステムにより進めることができる。第2にそれは、オペレーティングシステムが必要ならば引き継ぐので、アプリケーションがデータを送信キューに配置するとすぐに、アプリケーションに、例えばそれ自身スケジュール解除(descheduled)することにより、意図的にデータを無視する機会を与える。好ましくは、アプリケーションは、例えばその初期値を設定することにより、タイマーの長さを制御する。これにより、アプリケーションが、タイマーを設定して、その優先度に適合させることができる。タイマーは、好ましくはアプリケーションが直接アクセスできるNIC上のハードウェアリソースである。
データ受信の場合にNICは、データを受信し、それを受信バッファに書き込む。そうするときにそれは、上記のようにタイマーを設定し、好ましくはイベントキューを介してアプリケーションに通知する。アプリケーションがデータにアクセスするとき、それは上記のようにタイマーをリセットする。これは、アプリケーションが無応答であるときに、再びNICに決定の可能性を与える。他の手段、例えばバッファ中でのNICによるデータの定期的スキャンを、同じ目的のために使用してもよい。アプリケーションが無応答であると決定されると、再びNICは、受信データを処理するためにオペレーティングシステムにシグナル通知する。受信データの場合、アプリケーションまたはオペレーティングシステムのいずれかによる処理は、典型的に、プロトコル処理(例えばパケットシーケンス番号のチェック、チェックサムの処理、トラフィックデータの抽出および/または肯定応答若しくは再送信要求を送信するためのNICへのシグナル通知)および/または使用のための、典型的にユーザーレベルでのバッファからのデータ除去を含む。
バッファは、好ましくはオペレーティングシステムにより割り振られるが、それが、アプリケーションからの要求に応答して行われることは便利である。従って受信データが、アプリケーションのために利用できる受信バッファをオーバーフローさせる場合、アプリケーションは、オペレーティングシステムによりさらなるバッファの割り振りを要求できる。
NICは、フリーで残っている受信バッファの量のような要因を考慮する事前保管ルールに基づいてこの状態が生ずる場合に、イベントによりアプリケーションにシグナル通知することができる。再びそれは、このシグナル通知が行われたときにタイマーを設定することができ、そしてアプリケーションが応答しない場合にNICは、さらなる受信バッファのために、要求をオペレーティングシステムに送信できる。オペレーティングシステムは、次いでそのバッファを割り当てることができ、アプリケーションが無応答である場合でさえ、データがアプリケーションに受信され続けられるように、NICにそれを通知する。このアーキテクチャの効果は以下のようなものである。
(a)転送ライブラリでアクティブな複数スレッドのための要件
TCPコードは、転送ライブラリ中でシステムAPIコール(例えばrecv())(図5のステップi参照)の結果として、またはタイマーイベント(図5のステップii参照)の結果としてカーネルによるいずれかで実行することができるので、この要件は、図5のアーキテクチャのために存在しない。いずれかの場合、VI(仮想インターフェース)を管理でき、両方のコードパスは、接続状態またはデータバッファにアクセスでき、その保護および相互排他は、共有メモリロックにより管理できる。転送ライブラリレベルでスイッチするスレッドのオーバーヘッドが除去されるのと同様に、この機能は、アプリケーションがそれらスレッドおよび単一操作想定を変更する要件を妨げることができる:例えばいくつかの状態で、単一スレデッドアプリケーションに複数スレデッドライブラリとリンクするよう要求することは、非許容であり得る。
(b)タイマー管理のためにシステムコールを出す要件
ネットワークインターフェースデバイスは多くのタイマーをインプリメントすることができ、これらを、特定の仮想インターフェースインスタンスに割り当てることができる:例えばアクティブTCP転送ライブラリごとに1つのタイマーが存在し得るので、この要件は、図5のアーキテクチャのために存在しない。これらタイマーは、メモリマップVIを通じてプログラム可能にすることができ(図5のステップiii参照)、その結果、イベント(図5のステップiv参照)を出すことができる。タイマーは、システムコール無しで、−オペレーティングシステムを直接含まずに−、設定およびクリアできるので、タイマー管理のためのオーバーヘッドは大幅に削減される。
(c)複数転送ライブラリへのパケットの訂正配信
ネットワークインターフェースデバイスは、コンテンツアドレス可能メモリを含有するか、またはそれにアクセスでき、これは、着信パケットのヘッダーから得られるビットを並列ハードウェア一致操作として一致させることができる。一致の結果を、配信のために使用されなければならない宛先仮想インターフェースを示すために得ることができ、ハードウェアは、VIに押し付けられたバッファに、パケットを配信し続けることができる。一致処理のために1つの可能な配列は、以下で記載される。下記配列は、IPv6と関連したより大きなホストアドレスを逆多重化するために拡張してもよいが、これは、記載されるような配列よりも広いCAMまたはパケットごとに複数のCAM検索を要求するであろう。
この目的のためにCAM使用の1つの代替は、使用される仮想インターフェースを決定するためにパケットのヘッダーからのデータを処理させるハッシュアルゴリズムを使用することである。
(d)処理/アプリケーション/スレッド間の接続引渡し
ネットワーク接続が引き渡されるとき、同じシステム共通リソースハンドルを、アプリケーション間で受け渡すことができる。これは、例えばファイル記述子であってもよい。ネットワークインターフェースデバイスのアーキテクチャは、ネットワーク接続と関連した全ての状態を、その(例えば)ファイル記述子で接続でき、この状態で転送ライブラリにメモリマップすることを要求できる。ネットワーク接続の引渡し後に、新しいアプリケーションは(アプリケーション、スレッドまたは処理のいずれかとして)、−それが異なるアドレススペース内で実行する場合でさえ−、メモリマップし、状態を使用し続けることができる。さらに、カーネルおよび転送ライブラリ間で使用されるのと同じバッキングプリミティブにより、あらゆる数のアプリケーションは、標準的なシステムAPIにより指定されるのと同じ意味で、ネットワーク接続の使用を共有できる。
(e)転送ライブラリが停止または強制終了または終了されたときの転送プロトコル処理の完了
接続状態およびプロトコルコードはカーネル常駐のままでいられるので、このステップを、ネットワークインターフェースデバイスのアーキテクチャにおいて達成できる。OSカーネルコードは、汎用TCP(TCPk)プロトコルスタックと同じように、アプリケーション状態の変化を通知され得る。停止されたアプリケーションは、次いで先行プロトコル実行にスレッドを提供しないが、プロトコルは、例えば先行技術のカーネルスタックプロトコルのために知られているように、タイマーイベントを介して続けられるであろう。
IETF RDMAおよびiSCSIのような多くの新生プロトコルがある。これらプロトコルの少なくともいくつかは、TCPおよび他のプロトコルコードがネットワークインターフェースデバイス上で実行する環境で、実行するように設計された。機能は今から説明され、それによって前述のプロトコルが、ホストCPU上で(即ちネットワークインターフェースデバイスが接続されているコンピューターの処理手段を使用することで)実行できる。そのようなインプリメンテーションは有利である。なぜならそれにより、ユーザーは、コプロセッサに対するメインCPUテクノロジーの価格/パフォーマンスの優位を生かすことができるからである。
RDMAのようなプロトコルは、フレーム指示情報および巡回冗長検査(CRC)データをTCPストリーム内に埋め込むことを含む。フレーム指示情報は、プロトコルライブラリ内で計算するにはつまらないので、CRCは、(チェックサムとは対称的に)計算集約型であり、ハードウェアにより最良になされる。これを適合させるために、TCPストリームが、RDMAまたは類似のカプセル化を行うときに、仮想インターフェース中のオプションは、例えばフラグにより可能にされ得る。このオプションを検出するときに、NICは、送信で各パケットを構造解析し、RDMAフレームを回復し、RDMA CRCアルゴリズムを適用し、転送中の飛行でCCRCを挿入する。類似の手順を、有利には、エラーチェックデータの相対的に計算集約型の計算を要求するiSCSIのような他のプロトコルに関して使用できる。
このシステムと一致して、ネットワークインターフェースデバイスも、類似の論理を使用して受信パケットでCRCを検査できる。これは、例えば標準的なTCPチェックサムオフロード技術に似た方法で行うことができる。
RDMAのようなプロトコルは、従来のインプリメンテーションにおいてネットワークインターフェースデバイス上で追加知能を要求するRDMA READのような追加操作も命令する。RDMA/TCPは、最良にはコプロセッサネットワークインターフェースデバイスによりインプリメントされるべきであるという一般的信念に、このタイプのインプリメンテーションはつながっている。この中で記載されるタイプのアーキテクチャでは、特定のハードウェアフィルターは、前述の上位プロトコル要求を特定のネットワーク接続のために捕捉するようエンコードすることができる。そのような環境で、NICは、配信データメッセージと同様に、添付コンピューター上でのソフトウェア実行によりアクションを要求するために、タイマーイベントに似たイベントを生み出すことができる。そのような方式でイベントを起動することにより、NICは、転送ライブラリまたはカーネルヘルパーのいずれかが、要求に対して直ちに作動するという結果を達成できる。これは、転送ライブラリがスケジュールに入れられるまではカーネル拡張が実行されないという潜在的問題を回避でき、必要ならば他の上位プロトコルに適用できる。
コプロセッサTCPインプリメンテーションのために促進された1つの利点は、ゼロコピー操作を送受信で行う能力である。実際上、コンテキストスイッチまたは他のキャッシュまたはTLB(送信索引バッファ)フラッシュ操作が受信パス上で存在しない場合、(上記アーキテクチャのためのように)、受信で、単一コピーのためのオーバーヘッドがほとんど存在しない。これは、プロセッサに受信データをロードするという目的を果たすからである。アプリケーションは、続いてデータにアクセスするときに、それはキャッシュミスに影響されず、そうでなければこれは、ゼロコピーインターフェースのケースであろう。
しかし転送で、転送ライブラリにより作成された単一コピーは、プロセッササイクルおよびキャッシュ汚染の両方で追加オーバーヘッドを呼び出す。上記アーキテクチャは、例えば以下の機構がインプリメントされている場合、送信操作でのコピーを回避させることができる:
(i)(例えば低待ち時間環境で)送信データが、早急に確認され得る;代わりに
(ii)(例えば帯域幅×遅延の積がメッセージサイズよりも小さい場合)転送における全てのデータが送られる前に、そこでデータがほぼ完全に確認される。
転送ライブラリは、送信バッファを、それからのデータが確認されるまで単純に保持することができ、データはコピーされずに送信される。これは、非同期ネットワーキングAPIがアプリケーションによって使用されるときにも、行うことができる。
データコピーを回避できない場合でさえ、転送ライブラリは、非一時的ストアを実行するメモリコピールーチンを使用できる。これらは、(キャッシュよりもむしろ)メモリにコピーされたデータを残すことができ、そうしてキャッシュ汚染を回避する。送信のための次のステップは、ネットワークインターフェースデバイスによるデータのDMAであると期待され、このDMA操作のパフォーマンスは、キャッシュよりもむしろメモリ中にあるデータによっては影響されそうにないので、キャッシュ中にないデータは、パフォーマンスに影響しないと期待される。
図6は、着信TCPパケットをフィルターに掛けるために、上記ネットワークインターフェースデバイスにより取り得るステップを示す。ステップIでパケットは、ネットワークからネットワークインターフェースデバイスで受信され、受信デコードパイプラインに入る。ステップiiでハードウェアは、パケットから関連するビットを抽出し、CAMに与えられる(この例では32ビット長である)フィルターを形成する。関連ビットの構成および数は、使用中であるプロトコルに依存する;この例は、TCP/IPおよびUDP/IPに関する。ステップiiiではCAM一致がなされたとき、それは、インデックスに帰着する:MATCH_IDXは戻り、これは配信情報(例えばこの接続のための次の受信バッファのメモリアドレス)を検索するために使用できる。ステップivで、この配信情報は、パケットデコードパイプラインにフィードバックされ、パケットが適切なメモリ位置に配信されることを可能にする。
フィルターを形成するためのビットの選択およびそれらの使用をこれから記載する。
ネットワークインターフェースデバイスは、(好ましくはハードウェア中で)、それが実質上ネットワークヘッダーを休止できるようにするため、着信パケットフローに割り込むか、またはそれをバッファに入れることができる。このことは、データフローに影響せずに、それが着信パケット中の関連ビットシーケンスを識別することを許す。TCPおよび/またはUDPパケットのために、ビットシーケンスの識別を、例えば前述のパケットの単純ヘッダーレイアウトのせいで単純デコードパイプラインを使用して、インプリメントしても良い。これは、レジスターに保持された多くのフィールドに帰着する。
ゼロは、有効なポート番号または有効なIPアドレスのいずれでも無く、(フォーク()コマンドまたはその等価物の後に、ソケットが共有される場合を除いて)分離処理におけるインターフェースは、ローカルIPアドレスおよびポートペアを共有しないことが想定される。後者の条件は、受信TCPパケットを逆多重化するときに、ローカルIPアドレスを無視するのが安全であることを意味する。
TCPソケットだけをリスンするために、ローカルIPおよびポート番号が考慮される必要があり、一方、確立TCPソケットのためにリモートIPおよび両方のポート番号が考慮されるべきである。そのためネットワークインターフェースデバイスにより行われる処理は、(好都合にはハードウェア中で)、受信パケットがTCPまたはUDPパケットのいずれであるかを決定し、TCPパケットのためにSYNおよびACKビットを検査しなければならない。次いでそれは、しかるべくトークンを形成することができ、これはCAM中で検索される。CAM操作は、以下の表で示される。
Figure 0005282115
この表では、最初の列は受信パケットのタイプを示し、残りの列は、それぞれトークンの最初の32ビット、次の16ビットおよび最後の16ビットのコンテンツを示す。同じ規則が一貫して使用される場合、ビット順序は重要ではない。
以下の表は、例を示す:
Figure 0005282115
例では、番号1は、192.168.123.135:80でのローカルウェブサーブリスニングのための状態を示し;番号2は、そのサーバーにより66.35.250.150:33028から受け入れられる接続のための状態を示し;番号3は、ローカルに開始される66.35.250.150へのテルネット接続を示し;および番号4は、ポート123でのアプリケーション受信UDPパケットのための状態を示す。
表1の最初の行のように、TCP SYN=1&ACK=0の状態を分離することにより、そのようなエントリーは、(LISTEN状態のソケットに向けられる)TCP接続要求メッセージと一致するが、(SYN_SENT状態のソケットに向けられる)接続応答と一致しないことを確保できる。
ゼロフィールドの他の組合わせは、他のフィールドで逆多重化するために使用され得る。例えば逆多重化は、イーサネット(登録商標)ヘッダーのETHER_TYPEフィールドで行われ得る。
CAMフィルターの構成を決定する論理は、使用されるプロトコルに依存する。特定のインプリメンテーションにおいてCAMを、仮想インターフェースを通して転送ライブラリコードにより構成することができ、それは特定のインプリメンテーションのために動的にセットアップされる。
UDPプロトコル下では、UDPパケット中で指定される各ネットワークエンドポイントを、表1に示されるように、フィルターにより一意的に識別できる。
TCPプロトコル下において、エンドポイントの固有識別は、それが明確に指定されるために、全てのホストおよびポートフィールドを普通は要求する。複数クライアントが同じ宛先ホストおよびポートアドレスでネットワークエンドポイントと接続すること、接続がクライアントまたはサーバーのいずれかから開始されること、またはサーバーネットワークエンドポイントが単一エンドポイントで接続要求を受け入れ、データ転送を操作するために新しいネットワークエンドポイントを作成することを、TPCプロトコル定義が許すので、この要件が生ずる。
前述のパケットにおけるヘッダーは、典型的に96ビット長である。しかし96ビットフィルターを構成することは、ほとんどの市販CAMのためには効率的ではない。なぜならそれらは、典型的に(96よりはむしろ)64または128ビットの幅で入手されるからである。以下の機構は、64ビットフィルターがより効率的に構成されることを可能にする。CAMの長さは、アプリケーションを適合させるために選択することができる。便利なサイズは16kbであり得る。
(1)サーバー(PASSIVE)ソケットが新しい接続をリスンする場合、全ての有効な着信TCPパケットは、シーケンス番号を同期させる必要性を示すために、それらのSYNビットをそれらのヘッダー中に設定させる。そのタイプのパケットは、NICにより識別され、表1に示されるようにフィルターを形成するために使用される。フィルターのビットレイアウトは、このフィルターが、ゼロフィールド配置の故に、同じホスト:ポートペアを有するUDPエンドポイントと衝突できないことを意味することは注意すべきである。そうしてCAMフィルターのレイアウトは、プロトコルデコードケースを示すために使用される。
(2)接続が確立されるとすぐに、有効な着信パケットが、それらのSYNビットをゼロに設定し、表1に示された論理により正しくフィルターに掛けることができる。
ライブラリは、通常の受信過程で通常パケット検証手順の部分としてこのフィールドをチェックするけれども、この場合、訂正宛先転送ライブラリを識別するために、DEST(宛先)ホストの識別はもはや要求されないことは注意すべきである。この手順は、図7で説明されるように、サーバー(受動)接続、(サーバー転送ライブラリによりプログラムされる)CAMのコンテンツ、および各パケットでNICによりCAMに与えられるフィルターに関して説明される。これは以下のステップを含む:
(a)転送ライブラリは、ドライバを介してCAMエントリーを割り当てる。
(b)転送ライブラリの仮想インターフェースに割り振られるアドレススペースに、割り振られるCAMをマップするために、ドライバは、その保護制御インターフェースを通じてハードウェアをプログラムする。
(c)転送ライブラリは、仮想インターフェースを介してCAMエントリーをプログラムする。
アプリケーションが、プログラム可能CAMエントリーを受信するために不充分なアクセス権限しか有さないと考えられる場合、それは、代わりにOSコールを介してそれを行うことが許可され得る。
(ii)TCP/IPコンテンツパケットが到着する。パケットヘッダー中のSYNビットは1に設定され、パケットヘッダー中のACKビットはゼロに設定されるので、ネットワークインターフェースデバイスは、フィルター:
{dest host, 0, dest port}
をビットからパケットヘッダー中に構成でき、それをCAMに与えることができる。これは、一致をCAMインデックスXで生じさせる。次いで仮想インターフェース:βの基底アドレスを検出するために、ネットワークインターフェースデバイスは、SRAM中を検索できる。次いでNICは、仮想インターフェースβにパケットを配信できる。
接続パケットの結果としてサーバーアプリケーションは、ネットワーク接続を操作するために、別のネットワークエンドポイントを作成できる。このエンドポイントは、それ自身または別のアプリケーションコンテキスト内にあることができ、そうして別の転送ライブラリにより管理され得る。いずれかの場合、
{dest host, port}

{source host, port}
に結合するネットワーク接続を作成することができ、サーバーは、
{source host, source port, dest port}
で新しいCAMエントリーをプログラムする。
(iii)パケットが新しいネットワーク接続に到着するとき、それは、そのSYNビットをゼロに設定する。これは、NICにフィルター:
{source, host source port, dest port}
を構成させ、これは、CAMに与えられるときに、SRAM中で仮想インターフェースσと一致する一致インデックスθを生じさせる。ネットワーク接続がサーバーエンドポイントと同じ転送ライブラリにより管理される場合、σはβと同じであり得ることは注意すべきである。
このエンコードは、ホストにより開始されるアクティブ(クライアント)接続のため、並びにTCPおよびUDPプロトコル指定で指定される通信の全てのモデルのために、同様に用いることができる。
スキームをエンコードすることの注目に値する利益の1つは、それによりハードウェアが、1つだけのCAM検索を使用して仮想インターフェースのアドレスを決定できることである。
ネットワークインターフェースデバイスは、好ましくは操作モードもサポートし、その中でそれが、ネットワークエンドポイント上よりはむしろ、転送ライブラリ上でパケットを単純に逆多重化する。デバイスが、ネットワークと、同時に多数(例えば何百万)のネットワーク接続を保守するために要求されるサーバーとの間の通信を操作する場合、これは有益であろう。この例は、大容量ウェブサーバーノードであり得る。2つのオプションが利用できる。1つのオプションは、フォーム:
{dest host, dest port}
のフィルターだけをCAMに保管することである。別のオプションは、「ドント・ケア」ビットを使用してマスクできる3進法CAMを用いることである。両方の操作モードが同時に可能である場合、SYNビットが受信パケット中でゼロに設定されるときに、異なるフィルターを構成する必要があるために、2つのCAM検索が要求され得るので、効率が低下し得ることは注意すべきである。一度に1つだけのモードが可能であれば、この要件は回避し得る。
「ネットワークインターフェースカード」を、物理カードとして埋め込むことができ、またはそれを、別の方式で、例えばデータ処理デバイスのマザーボードに組み込まれる統合回路としてインプリメントできる。
このようにして、TCP/IPおよびUDP/IPパケットは、両方とも、64ビットのCAMを使用して一致させることができる。これは、ビット単位一致を全ヘッダー上で用いる標準サイズ化CAMが使用される場合に要求され得る128ビットとは、対照的である。
これにより出願人は、分離してこの中で記載された個々の機能、および2つまたはそれ以上の前述の機能のあらゆる組合せを、前述の機能または機能の組合わせがこの中で開示したあらゆる問題を解決するか否かにかかわらず、および請求項の範囲を制限せずに、当業者の共通する一般的知識を考慮して、前述の機能または組合せが、本明細書全体に基いて実行できる程度に開示する。出願人は、本発明の側面が、あらゆる前述の個々の機能または機能の組合せからなることができることを示す。上述の記載を考慮すれば、当業者にとって、様々な修正が、本発明の範囲内でなし得ることは明らかであろう。

Claims (16)

  1. データ処理システムによりデータを送信または受信するための方法であり、該システムは、オペレーティングシステムおよびアプリケーションをサポートし、メモリに、およびネットワーク上で別のネットワークインターフェースデバイスとの通信リンクをサポートできるネットワークインターフェースにアクセスでき、該方法は:
    データ処理システムおよびネットワークインターフェースデバイス間のデータ転送におけるデータバッファおよび接続状態バッファとして使用するために、1つまたはそれ以上のメモリ領域を割り当てること;
    ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、アプリケーションによりメモリ領域の少なくとも1つに直接アクセスすること;
    アプリケーションが無応答であると決定された場合に、ネットワークインターフェースデバイスが、オペレーティングシステムにシグナル通知して、前記メモリ領域の少なくとも1つにアクセスさせること;および
    ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、オペレーティングシステムが、シグナルに応答して、データバッファおよび接続状態バッファの少なくとも1つに直接アクセスすること、を含む方法。
  2. ネットワークデバイスによりネットワークからデータを受信すること;および
    ネットワークデバイスにより前記領域の少なくとも1つにデータを書き込むことを含む、請求項1に記載の方法。
  3. アプリケーションが無応答であると決定された場合に、前記領域の少なくとも1つにアクセスするために、ネットワークデバイスが、オペレーティングシステムにシグナル通知するように構成されており、また、前述のシグナルに対する応答において、オペレーティングシステムにより前記メモリ領域の少なくとも1つに直接アクセスする前記ステップを行うことを含む、請求項2に記載の方法。
  4. ネットワークデバイスがタイマーをサポートし、および受信データが前記領域の少なくとも1つに書き込まれたときに、方法が、タイマーをスタートし、事前設定の初期値からカウントすることを含み、およびタイマーが事前設定の最終値に達した場合に、アプリケーションが無応答であると決定される、請求項3に記載の方法。
  5. アプリケーションにより初期値および/または最終値を設定するステップを含む、請求項4に記載の方法。
  6. アプリケーションにより前記領域の少なくとも1つから受信データを読み取ったときに、アプリケーションによりタイマーを停止することを含む、請求項4または5に記載の方法。
  7. ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、メモリ領域の少なくとも1つに直接アクセスする前記ステップのそれぞれが、ネットワークインターフェースデバイスによりネットワークから受信され、前記領域の少なくとも1つに保管されたデータのプロトコル処理を含む、請求項1〜6のいずれかに記載の方法。
  8. プロトコル処理ステップが、受信データからトラフィックデータを抽出することを含む、請求項7に記載の方法。
  9. プロトコル処理ステップが、受信データの少なくともいくつかに関して、ネットワークインターフェースデバイスに、肯定応答および/または再送信メッセージをネットワーク上に送信させることを含む、請求項7に記載の方法。
  10. ネットワークデバイスにより、前記領域の少なくとも1つからデータを読み取ること;および
    ネットワークデバイスにより、そのデータをネットワーク上に送信すること
    を含む、請求項1に記載の方法。
  11. ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、メモリ領域の少なくとも1つに直接アクセスする前記ステップのそれぞれが、送信用のデータを前記領域の少なくとも1つに保管することを含む、請求項10に記載の方法。
  12. ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、メモリ領域の少なくとも1つに直接アクセスする前記ステップのそれぞれが、ネットワークデバイスを起動して、前記領域の少なくとも1つからデータを読み取る前記ステップを行うことを含む、請求項10または11に記載の方法。
  13. アプリケーションが無応答であると決定された場合に、前記領域の少なくとも1つにアクセスするために、ネットワークデバイスが、オペレーティングシステムにシグナル通知するように構成されており、および方法が、前述のシグナルに対する応答において、オペレーティングシステムにより前記メモリ領域の少なくとも1つに直接アクセスする前記ステップを行うことを含む、請求項12に記載の方法。
  14. ネットワークデバイスがタイマーをサポートし、および受信データが前記領域の少なくとも1つに書き込まれたことをネットワークインターフェースデバイスによりアプリケーションがシグナル通知されたときに、方法が、タイマーをスタートし、事前設定の初期値からカウントすることを含み、およびタイマーが事前設定の最終値に達した場合に、アプリケーションが無応答であると決定される、請求項13に記載の方法。
  15. アプリケーションにより初期値および/または最終値を設定するステップを含む、請求項14に記載の方法。
  16. データの送信または受信システムであり、該システムは:
    オペレーティングシステムおよびアプリケーションをサポートし、データ処理システムおよびネットワークインターフェースデバイス間のデータ転送におけるデータバッファおよび接続状態バッファとして使用するために割り振られている1つまたはそれ以上のメモリ領域にアクセスさせるデータ処理システム;および
    ネットワーク上で別のネットワークインターフェースデバイスとの通信リンクをサポートでき、アプリケーションが無応答であると決定された場合に、オペレーティングシステムにシグナル通知するように構成されているネットワークインターフェースデバイス(ここで、アプリケーションは、ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、メモリ領域の少なくとも1つに直接アクセスするように構成されており、オペレーティングシステムは、ネットワークインターフェースデバイスによるデータの送信および受信の少なくとも1つのために、前記データバッファおよび接続状態バッファの少なくとも1つに直接アクセスするように構成されている)を含む、システム。
JP2011081728A 2004-04-21 2011-04-01 ユーザーレベルスタック Active JP5282115B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB0408876.1A GB0408876D0 (en) 2004-04-21 2004-04-21 User-level stack
GB0408876.1 2004-04-21

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007508969A Division JP4825794B2 (ja) 2004-04-21 2005-04-21 ユーザーレベルスタック

Publications (2)

Publication Number Publication Date
JP2011141894A JP2011141894A (ja) 2011-07-21
JP5282115B2 true JP5282115B2 (ja) 2013-09-04

Family

ID=32344135

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2007508969A Active JP4825794B2 (ja) 2004-04-21 2005-04-21 ユーザーレベルスタック
JP2011081728A Active JP5282115B2 (ja) 2004-04-21 2011-04-01 ユーザーレベルスタック

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2007508969A Active JP4825794B2 (ja) 2004-04-21 2005-04-21 ユーザーレベルスタック

Country Status (7)

Country Link
US (2) US8005916B2 (ja)
EP (2) EP1738266B1 (ja)
JP (2) JP4825794B2 (ja)
CN (1) CN100478926C (ja)
AT (2) ATE533107T1 (ja)
GB (1) GB0408876D0 (ja)
WO (1) WO2005104475A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7096094B2 (ja) 2017-07-28 2022-07-05 積水化学工業株式会社 樹脂製透明継手

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8185602B2 (en) * 2002-11-05 2012-05-22 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters
EP3217285B1 (en) 2005-03-10 2021-04-28 Xilinx, Inc. Transmitting data
EP1891787B1 (en) 2005-06-15 2010-03-24 Solarflare Communications Incorporated Data processing system
GB0600417D0 (en) 2006-01-10 2006-02-15 Level 5 Networks Inc Virtualisation support
ATE492974T1 (de) * 2005-12-28 2011-01-15 Solarflare Communications Inc Verarbeitung empfangener daten
US7921046B2 (en) 2006-06-19 2011-04-05 Exegy Incorporated High speed processing of financial information using FPGA devices
US9948533B2 (en) 2006-07-10 2018-04-17 Solarflare Communitations, Inc. Interrupt management
US9686117B2 (en) 2006-07-10 2017-06-20 Solarflare Communications, Inc. Chimney onload implementation of network protocol stack
US8489761B2 (en) 2006-07-10 2013-07-16 Solarflare Communications, Inc. Onload network protocol stacks
US8089180B2 (en) * 2007-01-16 2012-01-03 Panasonic Corporation Integrated circuit device, method of controlling operation of integrated circuit device, and method of fabricating integrated circuit device
FR2939994B1 (fr) * 2008-12-12 2010-12-17 Canon Kk Procede de transmission d'un flux de donnees multi-canal sur un tunnel multi-transport, produit programme d'ordinateur, moyen de stockage et tetes de tunnel correspondantes
JP5871619B2 (ja) 2008-12-15 2016-03-01 アイ・ピー・リザブワー・エル・エル・シー 金融市場深度データの高速処理のための方法および装置
US8908542B2 (en) * 2009-12-22 2014-12-09 At&T Mobility Ii Llc Voice quality analysis device and method thereof
US9100459B2 (en) * 2010-04-30 2015-08-04 Qualcomm Incorporated Exchanging data associated with a communication session within a communications system
WO2012035689A1 (en) 2010-09-16 2012-03-22 Nec Corporation Network system and frame communication method
JP5344382B2 (ja) * 2010-11-02 2013-11-20 日本電気株式会社 ネットワークシステム及びフレーム通信方法
CN104734993B (zh) * 2013-12-24 2018-05-18 杭州华为数字技术有限公司 数据分流方法及分流器
US9563588B1 (en) 2014-01-29 2017-02-07 Google Inc. OS bypass inter-processor interrupt delivery mechanism
US9774706B2 (en) 2014-09-30 2017-09-26 Level 3 Communications, Llc Providing functional requirements for a network connection from a local library
US10320918B1 (en) * 2014-12-17 2019-06-11 Xilinx, Inc. Data-flow architecture for a TCP offload engine
US10749734B2 (en) * 2015-07-07 2020-08-18 International Business Machines Corporation Management of events and moving objects
EP3402172B1 (en) * 2017-05-12 2021-02-17 Xilinx, Inc. A data processing system
US11146508B2 (en) 2017-05-12 2021-10-12 Xilinx, Inc. Data processing system
US11093284B2 (en) 2017-05-12 2021-08-17 Xilinx, Inc. Data processing system
US10600322B2 (en) 2017-06-21 2020-03-24 International Business Machines Corporation Management of mobile objects
US10504368B2 (en) 2017-06-21 2019-12-10 International Business Machines Corporation Management of mobile objects
US10616339B2 (en) 2017-11-28 2020-04-07 Dell Products, L.P. System and method to configure, manage, and monitor stacking of ethernet devices in a software defined network
US11150817B2 (en) 2019-02-08 2021-10-19 International Business Machines Corporation Integrating kernel-bypass user-level file systems into legacy applications
US11734156B2 (en) * 2021-09-23 2023-08-22 Microsoft Technology Licensing, Llc Crash localization using crash frame sequence labelling

Family Cites Families (184)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2002A (en) * 1841-03-12 Tor and planter for plowing
US2545194A (en) * 1945-11-14 1951-03-13 Allan P Colburn Adsorption process for removal of carbon dioxide from the atmosphere of a submarine
US3491031A (en) * 1966-11-18 1970-01-20 Calgon C0Rp Reactivation of monoethanolamine impregnated activated carbon
US3594983A (en) * 1969-06-17 1971-07-27 Process Services Inc Gas-treating process and system
FR2127112A5 (ja) * 1971-02-24 1972-10-13 Air Liquide
US4005708A (en) * 1974-04-29 1977-02-01 A-T-O Inc. Apparatus for endothermal absorption of carbon dioxide
US4539189A (en) * 1984-01-23 1985-09-03 Chevron Research Company Method for removing sulfides from industrial gas
DE3572129D1 (en) * 1985-02-01 1989-09-14 Euratom Process for selective adsorption of sulfur compounds from gaseous mixtures containing mercaptans
US4675309A (en) * 1985-04-22 1987-06-23 Hidefumi Hirai Adsorbent for use in selective gas adsorption-separation and a process for producing the same
US4668255A (en) * 1985-10-30 1987-05-26 University Of Cincinnati Adsorption of gases by amine complexed Mn (II)
JPS6359322A (ja) 1986-08-29 1988-03-15 Arai Tekkosho:Kk 多目的分離装置
US4822383A (en) * 1987-04-30 1989-04-18 United Technologies Corporation Method and apparatus for removing carbon dioxide from air
JPH01149155A (ja) * 1987-12-07 1989-06-12 Yokogawa Electric Corp I/oチャネル制御装置
US4810266A (en) * 1988-02-25 1989-03-07 Allied-Signal Inc. Carbon dioxide removal using aminated carbon molecular sieves
JP2653370B2 (ja) 1989-01-12 1997-09-17 住友重機械工業株式会社 Co▲下2▼吸着用アミン系イオン交換樹脂の再生方法
DK0733395T3 (da) * 1991-10-09 2004-05-03 Kansai Electric Power Co Udvinding af carbondioxid fra forbrændingsudstødningsgas
EP0551191B1 (en) * 1992-01-09 2000-04-12 Cabletron Systems, Inc. Apparatus and method for transferring data to and from host system
US5281254A (en) * 1992-05-22 1994-01-25 United Technologies Corporation Continuous carbon dioxide and water removal system
US5325532A (en) 1992-09-25 1994-06-28 Compaq Computer Corporation Automatic development of operating system boot image
US5376614A (en) * 1992-12-11 1994-12-27 United Technologies Corporation Regenerable supported amine-polyol sorbent
EP0610677A3 (en) * 1993-02-12 1995-08-02 Ibm Communication device management module operating in two modes.
US5272599A (en) 1993-03-19 1993-12-21 Compaq Computer Corporation Microprocessor heat dissipation apparatus for a printed circuit board
CA2098513C (en) * 1993-06-16 2000-10-24 Septimus Hsien-Chai Liang Organic amine impregnated activated carbon
US5518626A (en) * 1993-12-23 1996-05-21 United Technologies Corporation Process employing thermally sterilizable aqueous polishing agents
JPH0816493A (ja) * 1994-06-30 1996-01-19 Canon Inc スキャナプリンタサーバーシステムのデータ通信制御方法
US6098112A (en) 1995-10-19 2000-08-01 Hewlett-Packard Company Streams function registering
US5913024A (en) * 1996-02-09 1999-06-15 Secure Computing Corporation Secure server utilizing separate protocol stacks
US5876488A (en) * 1996-10-22 1999-03-02 United Technologies Corporation Regenerable solid amine sorbent
US5886872A (en) 1997-04-23 1999-03-23 Compaq Computer Corporation Pivotable support and heat sink apparatus removably connectable without tools to a computer processor
US6049842A (en) * 1997-05-01 2000-04-11 International Business Machines Corporation Efficient data transfer mechanism for input/output devices
US6397316B2 (en) * 1997-07-24 2002-05-28 Intel Corporation System for reducing bus overhead for communication with a network interface
US6160554A (en) 1998-03-19 2000-12-12 Hewlett Packard Company Computer file content preview window
US6002804A (en) 1998-03-26 1999-12-14 Hewlett-Packard Company Tone dependent variable halftoning with adjustable algorithm selection
US6246683B1 (en) * 1998-05-01 2001-06-12 3Com Corporation Receive processing with network protocol bypass
JP3628514B2 (ja) * 1998-05-14 2005-03-16 株式会社日立製作所 計算機間データ送受信方法
US6865672B1 (en) * 1998-05-18 2005-03-08 Spearhead Technologies, Ltd. System and method for securing a computer communication network
US6260127B1 (en) 1998-07-13 2001-07-10 Compaq Computer Corporation Method and apparatus for supporting heterogeneous memory in computer systems
US6768996B1 (en) 1998-10-08 2004-07-27 Hewlett-Packard Development Company, L.P. System and method for retrieving an abstracted portion of a file without regard to the operating system of the current host computer
US6360241B1 (en) 1999-02-01 2002-03-19 Compaq Information Technologies Goup, L.P. Computer method and apparatus for division and square root operations using signed digit
US6466952B2 (en) 1999-04-08 2002-10-15 Hewlett-Packard Company Method for transferring and indexing data from old media to new media
US6502203B2 (en) 1999-04-16 2002-12-31 Compaq Information Technologies Group, L.P. Method and apparatus for cluster system operation
US6304945B1 (en) 1999-05-13 2001-10-16 Compaq Computer Corporation Method and apparatus for maintaining cache coherency in a computer system having multiple processor buses
US20020133620A1 (en) * 1999-05-24 2002-09-19 Krause Michael R. Access control in a network system
US7318102B1 (en) 1999-05-24 2008-01-08 Hewlett-Packard Development Company, L.P. Reliable datagram
US20030195983A1 (en) * 1999-05-24 2003-10-16 Krause Michael R. Network congestion management using aggressive timers
AU7036400A (en) 1999-09-08 2001-04-10 Mellanox Technologies Ltd. Synchronization of interrupts with data packets
US20030222693A1 (en) 1999-12-28 2003-12-04 Shai Cohen Variable delay generator
DE10009570A1 (de) * 2000-02-29 2001-08-30 Partec Ag Verfahren zur Steuerung der Kommunikation von Einzelrechnern in einem Rechnerverbund
US6799220B1 (en) * 2000-04-13 2004-09-28 Intel Corporation Tunneling management messages over a channel architecture network
US7103626B1 (en) 2000-05-24 2006-09-05 Hewlett-Packard Development, L.P. Partitioning in distributed computer system
DE60135127D1 (de) 2000-05-24 2008-09-11 Voltaire Ltd Gefilterte kommunikation von anwendung zu anwendung
AU6420001A (en) 2000-06-02 2001-12-11 Mellanox Technologies Ltd. Dma doorbell
US6690757B1 (en) 2000-06-20 2004-02-10 Hewlett-Packard Development Company, L.P. High-speed interconnection adapter having automated lane de-skew
US6364938B1 (en) * 2000-08-17 2002-04-02 Hamilton Sundstrand Corporation Sorbent system and method for absorbing carbon dioxide (CO2) from the atmosphere of a closed habitable environment
EP1327196A4 (en) 2000-08-24 2005-03-09 Voltaire Advanced Data Securit SYSTEM AND METHOD FOR HIGH SPEED-BASED CONTENT-BASED FILTERING, EXTREMELY EXPANDABLE AND LOAD BALANCING IN INTERCONNECTED FABRICS
US6765922B1 (en) 2000-09-08 2004-07-20 Hewlett-Packard Development Company, L.P. Speculative transmit for system area network latency reduction
US20020059052A1 (en) 2000-09-12 2002-05-16 Mellanox Technologies Ltd. Co-simulation of network components
US6349035B1 (en) 2000-09-29 2002-02-19 Compaq Information Technologies Group, L.P. Method and apparatus for tooless mating of liquid cooled cold plate with tapered interposer heat sink
US6718392B1 (en) 2000-10-24 2004-04-06 Hewlett-Packard Development Company, L.P. Queue pair partitioning in distributed computer system
AUPR108900A0 (en) 2000-10-28 2000-11-23 S4 Technology Pty Limited Modular digital transmission assembly
US6871296B2 (en) * 2000-12-29 2005-03-22 International Business Machines Corporation Highly available TCP systems with fail over connections
US6728743B2 (en) 2001-01-04 2004-04-27 Mellanox Technologies Ltd. Modulo remainder generator
US6898638B2 (en) * 2001-01-11 2005-05-24 International Business Machines Corporation Method and apparatus for grouping data for transfer according to recipient buffer size
US7254237B1 (en) 2001-01-12 2007-08-07 Slt Logic, Llc System and method for establishing a secure connection
US6950961B2 (en) 2001-02-13 2005-09-27 Hewlett-Packard Development Company, L.P. Highly available, monotonic increasing sequence number generation
GB2372914B (en) * 2001-02-28 2003-12-24 3Com Corp Direct data placement and message reassembly
US20020129293A1 (en) 2001-03-07 2002-09-12 Hutton John F. Scan based multiple ring oscillator structure for on-chip speed measurement
US20020140985A1 (en) 2001-04-02 2002-10-03 Hudson Kevin R. Color calibration for clustered printing
US7543290B2 (en) 2001-04-11 2009-06-02 Mellanox Technologies Ltd. Multiple queue pair access with single doorbell
US20020152328A1 (en) 2001-04-11 2002-10-17 Mellanox Technologies, Ltd. Network adapter with shared database for message context information
US6901052B2 (en) 2001-05-04 2005-05-31 Slt Logic Llc System and method for policing multiple data flows and multi-protocol data flows
US6944168B2 (en) 2001-05-04 2005-09-13 Slt Logic Llc System and method for providing transformation of multi-protocol packets in a data stream
US6904057B2 (en) 2001-05-04 2005-06-07 Slt Logic Llc Method and apparatus for providing multi-protocol, multi-stage, real-time frame classification
US7042848B2 (en) 2001-05-04 2006-05-09 Slt Logic Llc System and method for hierarchical policing of flows and subflows of a data stream
US6438130B1 (en) 2001-06-28 2002-08-20 Mellanox Technologies Ltd. Forwarding database cache
US6980328B2 (en) 2001-07-05 2005-12-27 Hewlett-Packard Development Company, L.P. Direction-dependent color conversion in bidirectional printing
US7136397B2 (en) 2001-08-20 2006-11-14 Slt Logic Llc Network architecture and system for delivering bi-directional xDSL based services
US7099275B2 (en) 2001-09-21 2006-08-29 Slt Logic Llc Programmable multi-service queue scheduler
US7151744B2 (en) 2001-09-21 2006-12-19 Slt Logic Llc Multi-service queuing method and apparatus that provides exhaustive arbitration, load balancing, and support for rapid port failover
US7161719B2 (en) 2001-09-26 2007-01-09 Hewlett-Packard Development Company, L.P. Generalized color calibration architecture and method
US6904534B2 (en) 2001-09-29 2005-06-07 Hewlett-Packard Development Company, L.P. Progressive CPU sleep state duty cycle to limit peak power of multiple computers on shared power distribution unit
US7023584B2 (en) 2001-10-02 2006-04-04 Hewlett-Packard Development Company, L.P. Color calibration method and apparatus
US20030065856A1 (en) 2001-10-03 2003-04-03 Mellanox Technologies Ltd. Network adapter with multiple event queues
US7054035B2 (en) 2001-10-29 2006-05-30 Hewlett-Packard Development Company, L.P. Method and system for management of color through conversion between color spaces
US7228550B1 (en) 2002-01-07 2007-06-05 Slt Logic, Llc System and method for making communication streams available to processes executing under control of an operating system but without the intervention of the operating system
US7093158B2 (en) 2002-03-11 2006-08-15 Hewlett-Packard Development Company, L.P. Data redundancy in a hot pluggable, large symmetric multi-processor system
JP2004007354A (ja) * 2002-04-02 2004-01-08 Nippon Telegr & Teleph Corp <Ntt> 計算機間データ転送方法及びデータ同報配信方法
US7245627B2 (en) 2002-04-23 2007-07-17 Mellanox Technologies Ltd. Sharing a network interface card among multiple hosts
US6705703B2 (en) 2002-04-24 2004-03-16 Hewlett-Packard Development Company, L.P. Determination of control points for construction of first color space-to-second color space look-up table
US6667918B2 (en) 2002-05-01 2003-12-23 Mellanox Technologies Ltd. Self-repair of embedded memory arrays
US7149227B2 (en) 2002-05-31 2006-12-12 Mellanox Technologies Ltd. Round-robin arbiter with low jitter
US7487264B2 (en) * 2002-06-11 2009-02-03 Pandya Ashish A High performance IP processor
CN1169063C (zh) 2002-06-21 2004-09-29 华中科技大学 现场总线与串行接口设备间的协议转换方法
US7024672B2 (en) * 2002-06-26 2006-04-04 Microsoft Corporation Process-mode independent driver model
JP2004054657A (ja) * 2002-07-22 2004-02-19 Canon Inc ネットワークデバイス管理装置
US7263103B2 (en) 2002-07-23 2007-08-28 Mellanox Technologies Ltd. Receive queue descriptor pool
US7143412B2 (en) 2002-07-25 2006-11-28 Hewlett-Packard Development Company, L.P. Method and apparatus for optimizing performance in a multi-processing system
US7631106B2 (en) 2002-08-15 2009-12-08 Mellanox Technologies Ltd. Prefetching of receive queue descriptors
US8631162B2 (en) * 2002-08-30 2014-01-14 Broadcom Corporation System and method for network interfacing in a multiple network environment
US8230090B2 (en) * 2002-09-11 2012-07-24 Broadcom Corporation System and method for TCP offloading and uploading
US7299266B2 (en) * 2002-09-05 2007-11-20 International Business Machines Corporation Memory management offload for RDMA enabled network adapters
US7316017B1 (en) 2003-01-06 2008-01-01 Slt Logic, Llc System and method for allocatiing communications to processors and rescheduling processes in a multiprocessor system
US7386619B1 (en) 2003-01-06 2008-06-10 Slt Logic, Llc System and method for allocating communications to processors in a multiprocessor system
US7190827B2 (en) 2003-01-22 2007-03-13 Hewlett-Packard Development Company, L.P. Color space conversion using interpolation
US7502826B2 (en) 2003-03-27 2009-03-10 Hewlett-Packard Development Company, L.P. Atomic operations
US8023520B2 (en) 2003-03-27 2011-09-20 Hewlett-Packard Development Company, L.P. Signaling packet
US7554993B2 (en) 2003-03-27 2009-06-30 Hewlett-Packard Development Company, L.P. Method and apparatus for performing connection management with multiple stacks
US7103744B2 (en) 2003-03-27 2006-09-05 Hewlett-Packard Development Company, L.P. Binding a memory window to a queue pair
US20040210754A1 (en) 2003-04-16 2004-10-21 Barron Dwight L. Shared security transform device, system and methods
US20050021680A1 (en) * 2003-05-12 2005-01-27 Pete Ekis System and method for interfacing TCP offload engines using an interposed socket library
US20040252685A1 (en) 2003-06-13 2004-12-16 Mellanox Technologies Ltd. Channel adapter with integrated switch
US7352893B2 (en) 2003-07-09 2008-04-01 Hewlett-Packard Development Company, L.P. Representing extended color gamut information
US7446901B2 (en) 2003-07-21 2008-11-04 Hewlett-Packard Development Company Conforming output intensities of pens
US20050039171A1 (en) 2003-08-12 2005-02-17 Avakian Arra E. Using interceptors and out-of-band data to monitor the performance of Java 2 enterprise edition (J2EE) applications
US7496903B2 (en) 2003-08-12 2009-02-24 Hewlett-Packard Development Company, L.P. Synthesizing application response measurement (ARM) instrumentation
US7484209B2 (en) 2003-08-12 2009-01-27 Hewlett-Packard Development Company, L.P. Instrumenting java code by modifying bytecodes
US7617376B2 (en) 2003-08-14 2009-11-10 Hewlett-Packard Development Company, L.P. Method and apparatus for accessing a memory
US7757232B2 (en) 2003-08-14 2010-07-13 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing work request lists
US7404190B2 (en) 2003-09-18 2008-07-22 Hewlett-Packard Development Company, L.P. Method and apparatus for providing notification via multiple completion queue handlers
US7543037B2 (en) * 2003-12-02 2009-06-02 International Business Machines Corporation RDMA completion and retransmit system and method
US7653754B2 (en) 2004-01-05 2010-01-26 Mellanox Technologies Ltd. Method, system and protocol that enable unrestricted user-level access to a network interface adapter
US20050172181A1 (en) 2004-01-16 2005-08-04 Mellanox Technologies Ltd. System and method for production testing of high speed communications receivers
US7168784B2 (en) 2004-03-30 2007-01-30 Hewlett-Packard Development Company, L.P. Formation of images
US20050219278A1 (en) 2004-03-30 2005-10-06 Hudson Kevin R Image formation with a flexible number of passes
US7929161B2 (en) 2004-04-15 2011-04-19 Hewlett-Packard Development Company, L.P. Image processing system and method
US7650386B2 (en) 2004-07-29 2010-01-19 Hewlett-Packard Development Company, L.P. Communication among partitioned devices
US20060045098A1 (en) 2004-08-31 2006-03-02 Krause Michael R System for port mapping in 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
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
US20060193318A1 (en) 2005-02-28 2006-08-31 Sriram Narasimhan Method and apparatus for processing inbound and outbound quanta of data
US7674564B2 (en) 2005-04-11 2010-03-09 Hewlett-Packard Development Company, L.P. Color filter
US7580415B2 (en) 2005-04-27 2009-08-25 Hewlett-Packard Development Company, L.P. Aggregation of hybrid network resources operable to support both offloaded and non-offloaded connections
US7580495B2 (en) 2005-06-30 2009-08-25 Slt Logic Llc Mixer-based phase control
US7573967B2 (en) 2005-07-01 2009-08-11 Slt Logic Llc Input threshold adjustment in a synchronous data sampling circuit
US8645964B2 (en) 2005-08-23 2014-02-04 Mellanox Technologies Ltd. System and method for accelerating input/output access operation on a virtual machine
US7813460B2 (en) 2005-09-30 2010-10-12 Slt Logic, Llc High-speed data sampler with input threshold adjustment
US7285996B2 (en) 2005-09-30 2007-10-23 Slt Logic, Llc Delay-locked loop
US9104894B2 (en) 2005-12-16 2015-08-11 Hewlett-Packard Development Company, L.P. Hardware enablement using an interface
US7827442B2 (en) 2006-01-23 2010-11-02 Slt Logic Llc Shelf management controller with hardware/software implemented dual redundant configuration
US7518164B2 (en) 2006-03-29 2009-04-14 Mellanox Technologies Ltd. Current-triggered low turn-on voltage SCR
US9111602B2 (en) 2006-04-07 2015-08-18 Mellanox Technologies, Ltd. Accurate global reference voltage distribution system with local reference voltages referred to local ground and locally supplied voltage
US7514978B2 (en) 2006-05-08 2009-04-07 Mellanox Technologies Ltd. Terminated input buffer with offset cancellation circuit
US7567267B2 (en) 2006-07-31 2009-07-28 Hewlett-Packard Development Company, L.P. System and method for calibrating a beam array of a printer
US7822594B2 (en) 2006-08-07 2010-10-26 Voltaire Ltd. Service-oriented infrastructure management
US8948199B2 (en) 2006-08-30 2015-02-03 Mellanox Technologies Ltd. Fibre channel processing by a host channel adapter
US7801027B2 (en) 2006-08-30 2010-09-21 Mellanox Technologies Ltd. Auto-negotiation by nodes on an infiniband fabric
US8522042B2 (en) 2006-10-31 2013-08-27 Hewlett-Packard Development Company, L.P. Method and apparatus for enforcement of software licence protection
US8296849B2 (en) 2006-10-31 2012-10-23 Hewlett-Packard Development Company, L.P. Method and apparatus for removing homogeneity from execution environment of computing system
US20080115217A1 (en) 2006-10-31 2008-05-15 Hewlett-Packard Development Company, L.P. Method and apparatus for protection of a computer system from malicious code attacks
US8244825B2 (en) 2006-11-06 2012-08-14 Hewlett-Packard Development Company, L.P. Remote direct memory access (RDMA) completion
US8233380B2 (en) 2006-11-06 2012-07-31 Hewlett-Packard Development Company, L.P. RDMA QP simplex switchless connection
US20080135774A1 (en) 2006-12-08 2008-06-12 Asml Netherlands B.V. Scatterometer, a lithographic apparatus and a focus analysis method
US8909742B2 (en) 2006-12-18 2014-12-09 Hewlett-Packard Development Company, L.P. Distributed configuration of network interface cards
US7864787B2 (en) 2007-03-26 2011-01-04 Voltaire Ltd. Device, system and method of multicast communication
US7848322B2 (en) 2007-03-26 2010-12-07 Voltaire Ltd. Device, system and method of UDP communication
US7856488B2 (en) 2007-03-30 2010-12-21 Hewlett-Packard Development Company, L.P. Electronic device profile migration
WO2008127672A2 (en) 2007-04-11 2008-10-23 Slt Logic Llc Modular blade for providing scalable mechanical, electrical and environmental functionality in the enterprise using advanced tca boards
US8817817B2 (en) 2007-06-06 2014-08-26 Hewlett-Packard Development Company, L.P. Method for ethernet power savings on link aggregated groups
US7802071B2 (en) 2007-07-16 2010-09-21 Voltaire Ltd. Device, system, and method of publishing information to multiple subscribers
US20090165003A1 (en) 2007-12-21 2009-06-25 Van Jacobson System and method for allocating communications to processors and rescheduling processes in a multiprocessor system
KR101408390B1 (ko) 2008-04-28 2014-06-17 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘.피. 데이터 전송 레이트 모니터 및 최대 데이터 전송 레이트 제어 방법
US8248930B2 (en) 2008-04-29 2012-08-21 Google Inc. Method and apparatus for a network queuing engine and congestion management gateway
US8520686B2 (en) 2008-05-08 2013-08-27 Hewlett-Packard Development Company, L.P. Method for interfacing a fibre channel network with an ethernet based network
US8108538B2 (en) 2008-08-21 2012-01-31 Voltaire Ltd. Device, system, and method of distributing messages
US20100088437A1 (en) 2008-10-06 2010-04-08 Mellanox Technologies Ltd Infiniband adaptive congestion control adaptive marking rate
US7921178B2 (en) 2008-12-04 2011-04-05 Voltaire Ltd. Device, system, and method of accessing storage
US8201168B2 (en) 2008-12-25 2012-06-12 Voltaire Ltd. Virtual input-output connections for machine virtualization
US8370675B2 (en) 2009-01-28 2013-02-05 Mellanox Technologies Ltd. Precise clock synchronization
US20110289210A1 (en) 2009-01-29 2011-11-24 Kelley Keith L Connecting ports of one or more electronic devices to different subsets of networks based on different operating modes
US8000336B2 (en) 2009-04-21 2011-08-16 Voltaire Ltd. Spanning tree root selection in a hierarchical network
US8255475B2 (en) 2009-04-28 2012-08-28 Mellanox Technologies Ltd. Network interface device with memory management capabilities
US8407478B2 (en) 2009-07-07 2013-03-26 Mellanox Technologies Ltd. Control message signature for device control
US8365057B2 (en) 2009-07-30 2013-01-29 Mellanox Technologies Ltd Processing of data integrity field
US8644140B2 (en) 2009-09-09 2014-02-04 Mellanox Technologies Ltd. Data switch with shared port buffers
US8225182B2 (en) 2009-10-04 2012-07-17 Mellanox Technologies Ltd. Processing of block and transaction signatures
US7934959B2 (en) 2009-10-06 2011-05-03 Mellanox Technologies Ltd. Adapter for pluggable module
WO2011043768A1 (en) 2009-10-07 2011-04-14 Ziebel, As Combination injection string and distributed sensing string
US8576715B2 (en) 2009-10-26 2013-11-05 Mellanox Technologies Ltd. High-performance adaptive routing
WO2011053305A1 (en) 2009-10-30 2011-05-05 Hewlett-Packard Development Co Thermal bus bar for a blade enclosure
EP2497023B1 (en) 2009-11-02 2015-02-25 Hewlett Packard Development Company, L.P. Multiprocessing computing with distributed embedded switching
US9110860B2 (en) 2009-11-11 2015-08-18 Mellanox Technologies Tlv Ltd. Topology-aware fabric-based offloading of collective functions
US8811417B2 (en) 2009-11-15 2014-08-19 Mellanox Technologies Ltd. Cross-channel network operation offloading for collective operations
US8213315B2 (en) 2009-11-19 2012-07-03 Mellanox Technologies Ltd. Dynamically-connected transport service
US20110173352A1 (en) 2010-01-13 2011-07-14 Mellanox Technologies Ltd Power Reduction on Idle Communication Lanes

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7096094B2 (ja) 2017-07-28 2022-07-05 積水化学工業株式会社 樹脂製透明継手

Also Published As

Publication number Publication date
ATE545911T1 (de) 2012-03-15
EP1738266B1 (en) 2011-11-09
CN100478926C (zh) 2009-04-15
EP2273375A1 (en) 2011-01-12
JP2011141894A (ja) 2011-07-21
US20110264758A1 (en) 2011-10-27
EP1738266A2 (en) 2007-01-03
ATE533107T1 (de) 2011-11-15
CN1969267A (zh) 2007-05-23
WO2005104475A3 (en) 2006-04-27
JP2007534073A (ja) 2007-11-22
US8005916B2 (en) 2011-08-23
WO2005104475A2 (en) 2005-11-03
GB0408876D0 (en) 2004-05-26
US8612536B2 (en) 2013-12-17
US20050226165A1 (en) 2005-10-13
JP4825794B2 (ja) 2011-11-30
EP2273375B1 (en) 2012-02-15

Similar Documents

Publication Publication Date Title
JP5282115B2 (ja) ユーザーレベルスタック
US11210148B2 (en) Reception according to a data transfer protocol of data directed to any of a plurality of destination entities
EP2632109B1 (en) Data processing system and method therefor
US9112752B2 (en) Network interface and protocol
WO2005104478A2 (en) Network interface card with rdma capability
US8737431B2 (en) Checking data integrity
US20070076712A1 (en) Processing packet headers

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110428

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7426

Effective date: 20110606

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110606

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130430

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130527

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5282115

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250