【发布时间】:2012-09-27 06:33:59
【问题描述】:
我正在录制音频并将其写入 SD 卡,数据速率约为 1.5 MB/s。我正在使用带有 ext4 文件系统的 4 类 SD 卡。
在一定的时间间隔后,内核会自动同步文件。这样做的缺点是,我的应用程序缓冲区堆积起来等待写入磁盘。
我认为,如果内核经常同步它现在正在做的事情,它可能会解决问题。
我在应用程序中使用fsync() 在一定间隔后进行同步。但这并不能解决问题,因为在调用 fsync() 的应用程序之前内核已经同步了某些时间,所以从应用程序调用 fsync() 是浪费时间。
我需要一个同步机制(例如,smart_fsync()),这样当应用程序调用 smart_fsync() 时,内核将仅在一段时间未同步时才会同步,否则它将返回。
由于没有smart_fsync() 的功能。有什么可能的解决方法?
【问题讨论】:
-
如果你没有超过文件缓冲区,我真的不相信内核会同步任何东西。通过手动同步(并且经常同步),您可以减少每次同步的时间,但总体而言 - 花费的时间几乎保持不变。您也可以使用非阻塞 i/o 或编写线程,但这会有点棘手。顺便说一句,4 类的 1.5Mb 相当低。禁用 FS 日志可能会有所帮助。