6

http://www.solacesystems.com/blog/kernel-bypass-revving-up-linux-networkingごと:

[...] 「カーネル バイパス」技術を使用してアプリケーションとネットワーク ドライバーをユーザー空間で一緒に実行し、カーネルをバイパスする OpenOnload と呼ばれるネットワークドライバー。これにより、接続のアプリケーション側は、より低い一貫した待機時間で、1 秒あたりにより多くのメッセージを処理できます。

[...]

何年もの間コンテキスト切り替えと戦ってきた開発者またはアーキテクトであれば、カーネル バイパスはごまかしのように感じるかもしれませんが、幸いなことに、それは完全に規則の範囲内です。

そのようなカーネルバイパスを行うために必要な機能は何ですか?

4

3 に答える 3

2

TCP オフロード エンジンは「そのまま動作」し、特別なアプリケーション プログラミングは必要ありません。カーネル全体を迂回するのではなく、TCP/IP スタックの一部をカーネルからネットワーク カードに移動するだけなので、ドライバーのレベルはわずかに高くなります。カーネル API は同じです。

TCP オフロード エンジンは、最新のほとんどのギガビット インターフェイスでサポートされています。

あるいは、「SolarFlare ネットワーク アダプタの組み込みプロセッサ/FPGA 'Application Onload Engine' でコードを実行する」という意味であれば、それはカード固有です。基本的に組み込みシステム用のコードを書いているので、使用しているカードの種類を言う必要があります。

于 2013-03-29T12:17:14.083 に答える
1

さて、カーネルがネットワーク スタックをどのように処理するかを知らずに、質問に答えるのは簡単ではありません。

一般に、ネットワークスタックは多くのレイヤーで構成されており、最下層が実際のハードウェアです。通常、このハードウェアはドライバー (ネットワークインターフェイスごとに 1 つ) によってサポートされ、NIC は通常、非常に単純なインターフェイスを提供します。生データを送信します。

この物理接続の上には、データを送受信する機能を備えた多くのプロトコルがあり、それらも階層化されており、その下にあるのは IP プロトコルです。これにより、基本的に情報の受信者を指定できます。安定した接続をサポートする TCP を見つけることができます。

したがって、あなたの質問に答えるには、まず、ネットワーク スタックのどの部分を置き換える必要があるか、および何をする必要があるかを把握します。あなたの質問に対する私の理解からすると、元のネットワーク スタックを維持し、場合によっては独自のネットワーク スタックを使用する必要があるように思われます。その場合、実際には戦略パターンを実装し、どのパケットを使用すべきかを指定できるようにする必要があります。ネットワークスタックのどのトップレベルで処理されるか。

Linux でネットワーク スタックがどのように実装されているかによって、カーネルの変更なしでこれを実現できる場合とできない場合があります。ネットワーク スタックの各部分が独自のサービスに実装されているマイクロカーネル アーキテクチャでは、ネットワーク スタックの下位部分を戦略パターンに単純にパイプし、このパイプで入力を必要なネットワークの最上位層。

于 2013-03-29T12:09:06.747 に答える
1

生の IP パケットを送受信したいですか?

基本的に、ip-packet にヘッダーとデータを入力する必要があります。生のイーサネット パケットを送信する方法の例がいくつかあります。on-linux/

自分で TCP/IP を処理するには、カスタム カーネルで TCP ドライバーを無効にしてから、生の IP を読み取る独自のユーザー空間サーバーを作成する必要があると思います。

あまり効率的ではないかもしれませんが…

于 2013-03-29T12:21:02.710 に答える