カーネル内のコピーはLinuxのゼロコピーネットワークに常に存在しますか?

カーネル内のコピーはLinuxのゼロコピーネットワークに常に存在しますか?

インターネットでは、次のLinuxゼロコピーネットワークの例の図を見ました。

一般的なIOの例:

1

ゼロコピーIOの例:

2

私はこれがCPUのコピーを削除することを発見しました。また、一般的なカーネルバッファのコピーも削除します。

私が興味を持っているのは、ネットワークデータを受信して​​それをユーザースペースにマッピングするときにカーネル内のコピーが含まれるかどうかです。 「NICバッファ」から「ソケットバッファ」へのコピー、または2つは同じかもしれませんか?

私が理解したのは、高度なNICで「NICバッファ」がNIC独自のメモリにある可能性があるため、仮想試行がNICのメモリをmmapしようとしますか? (可能ですか?)

基本的に私が興味を持っているのは、NICへの「DMAコピー」が意味することです。これは、「ワイヤ」からmmapped(またはその逆)できるカーネルバッファにコピーすることを意味しますか、それとも必ずコピーがあることを意味しますか? NICバッファ(「ワイヤ」で埋められている)とユーザー空間で利用可能なカーネルバッファの間の一部の中間。

とにかく、「ソケットバッファ」をバイパスしてユーザー空間に直接データをインポートできますか?ディスクIOを使用するO_DIRECTのようです。 (完全なカーネルバイパスについて話すものではありません。)

私はこれが私の一般的なx86-64 Linuxボックスでどのように機能するのか、そして同じ現在の高度なアーキテクチャでどのように機能するのかを知りたいです。

ベストアンサー1

おすすめ記事