On Fri, Apr 03, 2009 at 05:57:05PM -0400, Jeff Garzik wrote:Janne Grunau wrote:On Fri, Apr 03, 2009 at 03:57:52PM -0400, Jeff Garzik wrote:Just curious, does MythTV need fsync(), or merely to tell the kernel to begin asynchronously writing data to storage?mythtv/libs/libmythtv/ThreadedFileWriter.cpp is a good place to start (Sync method... uses fdatasync if available, fsync if not).yeah, I'm on it.
mythtv is definitely a candidate for sync_file_range() style output, IMO.
quoting the TheadedFileWriter comments
/*
* NOTE: This doesn't even try flush our queue of data.
* This only ensures that data which has already been sent
* to the kernel for this file is written to disk. This * means that if this backend is writing the data over a * network filesystem like NFS, then the data will be visible
* to the NFS server after this is called. It is also useful
* in preventing the kernel from buffering up so many writes
* that they steal the CPU for a long time when the write
* to disk actually occurs.
*/
sync_file_range(..., SYNC_FILE_RANGE_WRITE) might be enough, if you do not need to actually wait for completion.
This may be the case, if the idea behind MythTV's fsync(2) is simply to prevent the kernel from building up a huge amount of dirty pages in the pagecache [which, in turn, produces bursty write-out behavior].
see above, we care only about the write-out. The f{data}*sync calls are
already in a seperate thread doing nothing else.