特定の予約済み物理メモリからNVME、IIUCにデータを転送しようとしています。 3つのステップがあります。
カーネルドライバでは、予約されたメモリ(dtsで指定された物理アドレスとサイズ)がfile_Operationのmmapを介してユーザー空間に公開されます。特定のドライバ実装では、memremapを使用してpaをvaにマップし、remap_pfn_rangeまたはnopageを使用してページテーブルを構築できます(両方のソリューションは独自の長所と短所があるため、調整する余地がありますが、IMOでは大きな影響を与えます。ではありません。
その後、ユーザースペースアプリケーションは、デバイスfdでmmap(2)を使用してマッピングされたバッファAを取得します。
上記のバッファAをファイルに書き込みます。このステップには、mmap、write、io_uring、aio、libaioなど、さまざまな方法があります。一部は直接IOをサポートできますが、一部はサポートしていません(例:mmap)。
質問:
- ステップ1、2、3は正しいですか?
- ステップ1と2の場合、mmap以外に他のソリューションがありますか?
- io_uringを使用してバッファA(mmapから)からディスクファイルに書き込むことができるかどうかはわかりません。ご存知でしたら教えてください。