インターネットでは、次のLinuxゼロコピーネットワークの例の図を見ました。
一般的なIOの例:
ゼロコピーIOの例:
私はこれがCPUのコピーを削除することを発見しました。また、一般的なカーネルバッファのコピーも削除します。
私が興味を持っているのは、ネットワークデータを受信してそれをユーザースペースにマッピングするときにカーネル内のコピーが含まれるかどうかです。 「NICバッファ」から「ソケットバッファ」へのコピー、または2つは同じかもしれませんか?
私が理解したのは、高度なNICで「NICバッファ」がNIC独自のメモリにある可能性があるため、仮想試行がNICのメモリをmmapしようとしますか? (可能ですか?)
基本的に私が興味を持っているのは、NICへの「DMAコピー」が意味することです。これは、「ワイヤ」からmmapped(またはその逆)できるカーネルバッファにコピーすることを意味しますか、それとも必ずコピーがあることを意味しますか? NICバッファ(「ワイヤ」で埋められている)とユーザー空間で利用可能なカーネルバッファの間の一部の中間。
とにかく、「ソケットバッファ」をバイパスしてユーザー空間に直接データをインポートできますか?ディスクIOを使用するO_DIRECTのようです。 (完全なカーネルバイパスについて話すものではありません。)
私はこれが私の一般的なx86-64 Linuxボックスでどのように機能するのか、そして同じ現在の高度なアーキテクチャでどのように機能するのかを知りたいです。