我有一个嵌入式Linux应用程序,以相当慢的速度(50个字节/ s左右)写入一个文件。 该文件是一个硬盘驱动器,XFS文件系统上。 该文件被调用写入write()
,而不是fwrite()
如果我动力循环的系统,并检查文件,过了一分钟的价值的数据的丢失。 我认为Linux的默认行为是同步的磁盘缓存每5秒 (我可以容忍丢失数据的5S不值那么它们肯定会在这个没问题)。 我应该被检查,看看它为什么没有得到同步的很长一段时间? /proc/sys/vm/dirty_writeback_centisecs
是500。 还有没有其他的东西改变的我应该检查? 它肯定看起来是一个磁盘缓存的问题-如果我ls -l
文件,大小与预期一致,功率循环后,小于之前。
嗯,我不知道的5S为“Linux的默认”。 据我所知延迟文件系统相关的,虽然也许我错了。 我相信,在XFS高速缓存同步的最大延迟(或至少是前一段时间)30秒。 5秒这个数字对于一些较老的文件系统(ext2和ext3我相信)真实,它不为EXT4持有真实的,如果我没有记错。
总之,什么是发生在你身上是预期的行为。
如果你想超越缓存,相信你将需要使用的fsync,O_SYNC或O_DIRECT。 或安装文件系统,应该在全球范围解决问题时应用了“同步”选项。
五秒行为是仅适用于EXT3 / EXT4文件系统,你可以控制这个被提交安装选项(默认为提交= 5)。 我不知道怎么XFS行为寿。
你或许意味着VM子系统30秒限制。 默认情况下,Linux可以等待30秒,写入数据。 你可以得到/使用设置的限制:
# cat /proc/sys/vm/dirty_expire_centiseconds
3000
显示第二hondreds。
那么,XFS是已知的这种“失败”。 问题是与写入高速缓存相连。 关于更多信息XFS常见问题解答 。