【发布时间】:2010-09-20 19:19:54
【问题描述】:
我正在尝试将数据从内核空间中的缓冲区移动到硬盘中 磁盘,而不必从内核缓冲区产生任何额外的副本到 用户缓冲区或任何其他内核缓冲区。任何想法/建议都是 最有帮助。
用例基本上是一个 demux 驱动程序,它将数据收集到一个 内核空间中的 demux 缓冲区,并且该缓冲区必须被清空 定期将内容复制到基于 FUSE 的分区中 磁盘。当缓冲区变满时,会向用户进程发出信号,然后 确定磁盘上的扇区号 需要复制的内容 到。
我希望将上面的 demux 内核缓冲区映射到用户地址 空间并向原始分区设备发出写入系统调用。但 从我所看到的,这个数据被内核缓存在它的 硬盘驱动程序的方法。所以我假设这涉及 linux 内核的额外副本。
此时我想知道是否还有其他机制可以做到这一点 不涉及内核的额外副本。我意识到这是一个 非嵌入式环境的不寻常使用场景,但我会 感谢您对可能的选项的任何反馈。
顺便说一句 - 我在打开原始分区时尝试使用 O_DIRECT,但是 如果传递的缓冲区是 映射缓冲区。
谢谢!
【问题讨论】:
-
也许你可以用一对 splice() 做点什么。
标签: linux-kernel