Re: Linux 2.6.29

From: Jeff Garzik
Date: Fri Apr 03 2009 - 19:30:13 EST


Janne Grunau wrote:
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:
mythtv/libs/libmythtv/ThreadedFileWriter.cpp is a good place to start (Sync method... uses fdatasync if available, fsync if not).

mythtv is definitely a candidate for sync_file_range() style output, IMO.
yeah, I'm on it.
Just curious, does MythTV need fsync(), or merely to tell the kernel to begin asynchronously writing data to storage?

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.

If all you want to do is _start_ the write-out from kernel to disk, and let the kernel handle it asynchronously, SYNC_FILE_RANGE_WRITE will do that for you, eliminating the need for a separate thread.

If you need to wait for the data to hit disk, you will need the other SYNC_FILE_RANGE_xxx bits.



On a related subject, reads: consider posix_fadvise(POSIX_FADV_SEQUENTIAL) and/or readahead(2) for optimizing the reading side of things.

Jeff




Jeff


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/