关于特定物理内存和NVME之间传输数据的问题

关于特定物理内存和NVME之间传输数据的问题

我正在尝试将数据从特定保留的物理内存传输到我的 NVME、IIUC,有 3 个步骤:

  1. 在内核驱动程序中,保留内存(dts 中指定的物理地址和大小)通过 file_operation 的 mmap 暴露给用户空间。具体驱动实现可以使用memremap将pa映射到va,然后使用remap_pfn_range或者nopage构建页表(有调优的空间,因为两种方案各有优缺点,但IMO不会有太大影响,因为io这里不涉及)

  2. 然后用户空间应用程序使用设备fd上的mmap(2)来获取映射的缓冲区A

  3. 将上面的缓冲区A写入文件。这一步有多种方法,mmap、write、io_uring、aio、libaio等。有些可以支持直接io,有些则不能(例如mmap)。

问题:

  1. 步骤 1、2、3 都正确吗?
  2. 对于步骤1和2,除了mmap还有其他解决方案吗?
  3. 我不太确定是否可以使用 io_uring 从缓冲区 A(来自 mmap)写入磁盘文件,如果您知道,请告诉我。

相关内容