vmsplice
システム コールにより、「SPLICE_F_GIFT」フラグを使用して、一連のユーザー レベル ページからパイプへのゼロ コピー送信を実装できます。私の質問は、逆の操作があるかどうかです。たとえば、パイプのもう一方の端で、パイプを単純に処理するのではなくread()
、aio_read()
パイプされたデータをアドレス空間にマップするだけの処理を実行できますか? これは最終的に、メモリ マッピングをコピーせずに送信側プロセスから受信側プロセスに転送 (移動) することを意味します。これは可能ですか?
編集:私のユースケースは次のようになります。A と B の 2 つのプロセスがあります。A はデータ (> メガバイト) を生成し、それを B に渡してさらに処理し、終了します。コピーを避けて、カーネルに「ここにこれらのページがあり、もう必要ないことを確認してください。それらを B のアドレス空間に添付して、処理を完了してください。
共有メモリまたは一時ファイルで動作する特定のメモリ アロケータを使用するように A を制限しない限り、A によって送信されたメモリはそのアドレス空間のどこにでもある可能性があるため、単純な共有メモリは機能しません。