ヘッダーデータの分割とは何ですか?TCP_ZEROCOPY_RECEIVEページのソートに必要な理由は何ですか?

ヘッダーデータの分割とは何ですか?TCP_ZEROCOPY_RECEIVEページのソートに必要な理由は何ですか?

現在調査中です。TCP_ZEROCOPY_RECEIVENICのヘッダデータ分割サポートが必要であることを読みました。私が理解したのは、この機能はDMAヘッダー(IP、TCPヘッダー)とデータ(残り)を別々のバッファーに入れることです。 (キャッシュ効率を向上させるために)TCP_ZEROCOPY_RECEIVEの場合、プロセスの仮想アドレスにマッピングするためにデータをページ整列する必要があることがわかります。私の質問は、データをページに並べ替えるためにNICのヘッダデータ分割をサポートする必要がある理由です。ネットワークデバイスドライバがsk_buff構造体を生成するときにヘッダーのみを読み取って別々に割り当てられたページにデータをコピーしてZero Copyを行うことはできませんか?また、ネットワークカードドライバがネットワークカードと対話してヘッダデータ分割機能を利用する方法を知りたいと思います。

私が理解した内容が間違っていると申し訳ありません。追加する必要がある場合はお知らせください。ありがとうございます。

答え1

私の質問は、データをページに並べ替えるためにNICのヘッダデータ分割をサポートする必要がある理由です。ネットワークデバイスドライバがsk_buff構造体を生成するときにヘッダーのみを読み取って別々に割り当てられたページにデータをコピーしてZero Copyを行うことはできませんか?

コンテキストでは、権限のないユーザースペースのみがデータに直接アクセスできるため、ヘッダーをデータから分離する必要があります。

ゼロコピーTCP受信の目的は、受信時にユーザースペースに正確にゼロのデータコピーを含めることです。状況が保証されると、NICはパケットをユーザー空間メモリ領域にDMAする必要があります。受信プロセスによって設定されます。ドライバが分割するためにデータをコピーする必要がある場合、それはゼロコピーではありません。

バラよりこれ カップルこのトピックの詳細については、この記事の著者: Jakub Kicinski

関連情報