「ゼロコピーネットワーキング」と「カーネルバイパス」の違いは何ですか? 2つのフレーズは同じことを意味していますか、それとも違うのですか?カーネルは「ゼロコピーネットワーキング」内で使用される技術をバイパスしますか?これは関係ですか?
「ゼロコピーネットワーキング」と「カーネルバイパス」の違いは何ですか? 2つのフレーズは同じことを意味していますか、それとも違うのですか?カーネルは「ゼロコピーネットワーキング」内で使用される技術をバイパスしますか?これは関係ですか?
TL; DR-概念は異なりますが、カーネルバイパスAPI /フレームワーク内でゼロコピーがサポートされる可能性が高いです。
ユーザーバイパス
この通信モードも考慮する必要があります。 DMA-to-DMAの場合、CPUをまったく使用しないトランザクションが可能です。アイデアは、splice()
または同様の関数を使用してser spaceをまったく回避することです。 splice()
を使用すると、データストリーム全体でユーザー空間をバイパスする必要がないことに注意してください。ヘッダーはユーザー空間で読み取られ、データは直接ディスクにストリーミングされます。これの最も一般的な欠点は、splice()
がチェックサムのオフロードを行わないことです。
ゼロコピー
zero copyコンセプトは、ネットワークバッファが所定の位置に固定され、移動されないことだけです。多くの場合、これは本当に有益ではありません。最新のネットワークハードウェアは スキャッターギャザー をサポートし、バッファ記述子などとも呼ばれます。アイデアは- ネットワークハードウェアは物理ポインターを理解します。通常、バッファ記述子は、
利点は、ネットワークヘッダーが存在する必要がないことですside-by-sideおよび[〜#〜] ip [〜#〜]、[〜#〜] tcp [〜#〜]、およびApplicationヘッダーは、アプリケーションデータとは物理的に分離して存在できます。
コントローラーがこれをサポートしていない場合、TCP/IPヘッダーをユーザーデータの前に置き、ネットワークに送信する前に入力できるようにする必要がありますコントローラー。
zero copyは、ページが共有されるようにカーネルユーザーMMUセットアップ.
カーネルバイパス
もちろん、カーネルをバイパスできます。これが pcap であり、他のスニファーソフトウェアがしばらくしてきたことです。ただし、特定のハードウェアに関連付けられていない限り、ser spaceが確実に勝つ場合は見にくいです。 ネットワークコントローラーには、コントローラーでスキャッターギャザーがサポートされているものとサポートされていないものがあります。
カーネルのバイパスを実現するために、カーネルインターフェイスにはさまざまな形があります。
これをまとめるには...
2つのフレーズは同じことを意味していますか、それとも違うのですか?
うまくいけば説明するように、それらは異なっています。
カーネルは「ゼロコピーネットワーキング」内で使用される技術をバイパスしますか?これは関係ですか?
反対です。カーネルバイパスはzero copyを使用できます。バッファがアプリケーションの制御下にあるため、ほとんどの場合これをサポートします。また、カーネルとユーザー空間の間でメモリ共有がありません(MMU共有ページおよび引き起こされる可能性のあるキャッシュ/ TLB効果は不要です)。つまり、カーネルバイパス、多くの場合、ゼロコピーをサポートする方が有利です。
Scatter-gather DMAが利用可能な場合(最新のコントローラーの場合)、ユーザー空間またはカーネルのいずれかが使用できます。zero copyは、この場合はあまり役に立ちません。
参照:
ゼロコピーネットワーキング
ユーザー空間とカーネル空間の間でデータを決してコピーしないとき、ゼロコピーネットワーキングを行っています(メモリスペースを意味します)。例で:
C言語recv(fd, buffer, BUFFER_SIZE, 0);
デフォルトでは、データがコピーされます:
buffer
にコピーします。ゼロコピー方式では、データはコピーされず、ネットワークスタックからユーザー空間に直接送られます。
カーネルバイパス
カーネルバイパスは、ユーザー空間、ネットワークスタック、ハードウェアなどで自分自身を管理する場合です。難しいですが、多くのパフォーマンスが得られます(すべてのデータがユーザー空間にあるため、コピーはゼロです)。この link は、さらに情報が必要な場合に興味深いかもしれません。
パケットを送受信する場合、すべてのパケットデータをser-spaceバッファからkernel-space送信用に、またはその逆に受信用にコピーする必要があります。 zero-copyドライバーは、ユーザースペースとドライバーがパケットバッファーメモリを直接共有することでこれを回避します。
送信および受信を使用する代わりに、後でコピーする必要があるカーネル空間のバッファーをポイントし、ユーザー空間のメモリの領域が割り当てられ、特定の領域にマッピングされますカーネルバッファーとユーザースペースバッファー間で共有メモリとなる物理メモリを確保し、各ディスクリプタバッファが新しく割り当てられたメモリ内の対応する場所を指すようにします。
カーネルバイパスとゼロコピーの他の例は、DPDKとRDMAです。アプリケーションがDPDKを使用する場合、カーネルTCP/IPスタックをバイパスします。アプリケーションはイーサネットフレームを作成し、NIC DMAでこれらのフレームをユーザースペースメモリから直接取得し、ユーザースペースからのコピーがないためコピーがゼロになるようにします。アプリケーションは、RDMAを使用して同様の処理を実行できます。アプリケーションは、NICが直接アクセスして送信するキューペアに書き込みます。RDMAiblibverbsは、カーネル内でも使用されます。カーネルバイパスではありませんが、コピーはゼロです。
https://www.openfabrics.org/index.php/openfabrics-software.html