我正在錄製音頻並將其寫入SD卡,數據速率約爲1.5 MB/s。我正在使用帶有ext4文件系統的Class 4 SD卡。linux:smart fsync()?
經過一定的時間間隔後,內核自動同步文件。這樣做的缺點是,我的應用程序緩衝區堆積如山,等待寫入磁盤。
我認爲,如果內核頻繁同步的是它現在正在做,它可能解決問題。
我在應用程序中使用fsync()
一定間隔後進行同步。但是這並不能解決問題,因爲在應用程序調用fsync()
之前內核已經同步了一段時間,所以從應用程序調用的fsync()是浪費時間。
我需要一個同步機制(比如說,smart_fsync()
),這樣當應用程序調用smart_fsync()時,內核只會在同步時才同步,否則它會返回。
由於smart_fsync()
沒有功能。什麼可能是一種可能的解決方法?
我真的不相信內核會同步任何東西,如果你沒有超過文件緩衝區。通過手動同步(並且經常),您可以減少每次同步的時間,但總體而言 - 所花費的時間將保持幾乎相同。你也可以使用非阻塞I/O或寫入線程,但它會有點棘手。順便說一句,對於4級1.5Mb是相當低的。禁用FS日誌可能會有所幫助。 – keltar