Pádraig Brady wrote: > I noticed fadvise(DONTNEED) getting some love in the kernel recently > http://lkml.org/lkml/2011/2/17/169 > Which prompted me to implement this. With the attached one can now: > > # Advise to drop cache for whole file > dd if=ifile iflag=nocache count=0 > > # Ensure drop cache for whole file > dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0 > > # Drop cache for part of file > dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null > > # Stream data just using readahead cache > dd if=ifile of=ofile iflag=nocache oflag=nocache > > When count=0, i.e. when only manipulating the cache, > we propagate the posix_fadvise() return to the exit status. > > Note this will invalidate the cache even if another > process has the file open. That could be avoided with mincor: > http://insights.oetiker.ch/linux/fadvise.html > However, I don't think that's needed for a tool like dd.
I agree. > Subject: [PATCH] dd: add a flag to discard cached data > > * src/dd.c (usage): Add the 'nocache' flag. > (cache_round): A new function to help ignore cache > drop requests less than page_size. > (invalidate_cache): A new function to call posix_fadvise() > with the appropriate offset and length. Note we don't > use fdadvise() so we can detect errors when count=0. > (dd_copy): Call invalidate_cache() for the processed portions. > (main): Call invalidate_cache for page_size slop or > for full file when count=0. > * cfg.mk (sc_dd_O_FLAGS): Adjust to pass. > * doc/coreutils.texi (dd invocation): Describe the 'nocache' flag, > and give some examples of how it can be used. > * tests/dd/nocache: A new test. > * tests/Makefile.am: Reference the new test. > * NEWS: Mention the new feature. This looks great. Thanks! I'll try it out today. One quick question: does the test need something to make it skip (not fail) on systems that lack kernel support for the feature?
