我正在为C编写Linux 2.6.X内核的自定义数据库引擎,我需要知道用O_DIRECT标志打开的文件的write()系统调用的最小写入大小是多少?在文档中说它自Linux 2.6内核版本起可以使用512字节块。但是,如果我的硬盘使用8K块呢?在这种情况下它会在写入时返回EINVAL错误吗?我听说512字节扇区的磁盘已经过时,新磁盘使用8K扇区,所以我需要确保当用户在这种磁盘上尝试时,我的应用不会崩溃。 如果可以在8k扇区的磁盘上使用512字节的写入,当我写入时会发生什么情况,比如2个512字节的数据块,linux内核是否从磁盘读取8k扇区,替换我告诉它的1k数据块写入8k扇区然后写回磁盘?这会很慢!最小写入大小与O_DIRECT
另外,我还有一个关于这个问题的问题,如果在打开文件时使用原始设备或ext3文件系统,最小写入大小是否会有所不同?
据我所知,没有最小尺寸。如果您愿意,您可以一次写入一个字节,但在这种情况下性能会很差。最佳写入可能是磁盘块大小的多倍。 – 2012-01-18 14:25:07
http://stackoverflow.com/a/8803741/841108是一个非常相关的问题的答案。我建议写64k字节。也许可以进行配置,因为最佳尺寸取决于系统和硬件。 – 2012-01-18 15:03:59
“据我所知,没有最小尺寸”< - 这是不正确的。我只编写了一个写例程,它返回EINVAL,因为写入大小不是512字节的倍数 – Nulik 2012-01-18 15:54:42