ele*_*tro 5 linux filesystems linux-device-driver linux-kernel
我们正在开发一种ssd类型的存储硬件设备,它可以一次接收大块大小> 4KB的读/写请求(即使是MB大小).我的理解是linux及其文件系统会将文件"砍掉"成4KB的块大小,这些块大小将被传递给块设备驱动程序,这需要用来从设备中物理填充块(例如,用于写入)
我也知道内核页面大小在此限制中起作用,因为它设置为4KB.
对于实验,我想知道是否有办法实际增加这个块大小,这样我们将节省一些时间(而不是多次4KB写入,我们可以用更大的块大小来做).
有没有FS或任何现有的项目我可以看看这个?如果没有,那么做这个实验需要什么 - 需要修改linux的哪些部分?试图找出所需的困难和资源水平.或者,如果甚至不可能这样做和/或我们甚至不需要这样做的任何原因.任何评论表示赞赏.
谢谢.
尽管我从未为Linux编写过设备驱动程序,但我发现这不太可能是驱动程序接口的真正限制。我想您可能希望将 I/O 分解为分散-收集列表,其中列表中的每个条目都是一页长(以提高内存分配性能并减少内存碎片),但现在大多数设备类型都可以直接处理这些列表,我认为驱动程序界面中的任何内容实际上都不需要它。事实上,向块设备发出请求的最简单方式(在该文本的第 13 页(标记为第 476 页)中进行了描述)看起来像接收:
我怀疑,如果您只看到 4K 访问,则可能是调用者一次未请求超过 4K 的结果 - 如果您在设备上运行的文件系统仅发出 4K 读取,或者任何使用文件系统一次只能访问一个块,您的设备驱动程序无法自行更改它!
一次使用一个块对于数据库读取工作负载等随机访问模式很常见,但传统(非写时复制)文件系统上的数据库日志或 FS 日志写入或大型串行文件读取会发出大量 I/O,类似于你在期待。如果您想尝试直接对您的设备发出大量读取,以查看是否可以通过您现在拥有的任何驱动程序进行读取,您可以使用该参数来dd if=/dev/rdiskN of=/dev/null bs=N查看将bs参数从 4K 增加到 1M 是否会显示吞吐量显着增加。