超过一分钟未提交到磁盘的小文件

时间:2012-08-09 13:34:24

标签: linux caching embedded disk xfs

我有一个嵌入式Linux应用程序以相当慢的速率写入文件( 50 字节/秒左右)。该文件位于硬盘驱动器XFS文件系统上。正在通过调用write()而不是fwrite()来写入文件。

如果我重新启动系统并检查文件,则会丢失超过一分钟的数据。我认为默认的Linux行为是每隔 5s同步磁盘缓存(我可以容忍 5s 值得丢失的数据,因此它们没有问题)。我应该检查一下为什么它不会长时间同步? /proc/sys/vm/dirty_writeback_centisecs 500 。我应该检查其他可变的东西吗?它肯定看起来是一个磁盘缓存问题 - 如果我ls -l文件,大小是预期的,并且在电源循环后它比以前少。

3 个答案:

答案 0 :(得分:1)

五秒行为仅适用于ext3 / ext4文件系统,您可以通过commit mount选项控制它(默认为commit = 5)。我不知道XFS是如何表现的。

您可能意味着VM子系统中有30秒的限制。默认情况下,Linux可以在写入数据时等待30秒。您可以使用以下方式获取/设置限制:

# cat /proc/sys/vm/dirty_expire_centiseconds
3000

展示了第二个人的爱好。

答案 1 :(得分:0)

嗯,我不确定5s是“Linux中的默认值”。据我所知,延迟是依赖于文件系统的,尽管我可能弄错了。我相信XFS上缓存同步的最大延迟是(或者至少是前一段时间)30秒。对于一些较旧的文件系统(我认为是ext2和ext3),这个5秒的数字是正确的,如果我没记错的话,它对ext4不适用。

总之,发生在你身上的是预期的行为。

如果你想超越缓存,我相信你需要使用fsync,O_SYNC或O_DIRECT。或者在安装文件系统时应用'sync'选项,这应该可以全局解决问题。

答案 2 :(得分:0)

嗯,XFS因这种“失败”而闻名。问题与写缓存有关。有关XFS FAQ的更多信息。