I am working on an application which does sequentially write a large file (and does not read at all), and I would like to use posix_fadvise() to optimize the filesystem behavior.
The function description in the manpage suggests that the most appropriate strategy would be POSIX_FADV_SEQUENTIAL. However, the Linux implementation description doubts that:
Under Linux,
POSIX_FADV_NORMALsets the readahead window to the default size for the backing device;POSIX_FADV_SEQUENTIALdoubles this size, andPOSIX_FADV_RANDOMdisables file readahead entirely.
As I’m only writing data (overwriting files possibly too), I don’t expect any readahead. Should I then stick with my POSIX_FADV_SEQUENTIAL or rather use POSIX_FADV_RANDOM to disable it?
How about other options, such as POSIX_FADV_NOREUSE? Or maybe do not use posix_fadvise() for writing at all?
It all depends on the temporal locality of your data. If your application won’t need the data soon after it was written, then you can go with
POSIX_FADV_NOREUSEto avoid writing to the buffer cache (in a similar way as theO_DIRECTflag fromopen()).