From Linux kernel's doc the advice POSIX_FADV_RANDOM seems to disable readahead. But whent I disable Readhead using (sudo hdparm -A 0 /dev/sdb) I get huge degradation in performances; also noticed that read(2) seems to get split every 512k and acts as separate calls (Not sure about the reason, may be the max sector per request).

So which option really disables the read-ahead? Does POSIX_FADV_RANDOM also disable OS caching, or shall I add a POSIX_FADV_DONTNEED.

1 Answer 1


POSIX_FADV_RANDOM disables read-ahead performed by the kernel's filesystem driver. It advises the filesystem layer not to read more than what was asked. The read-ahead is done at the file level: the filesystem layer may fetch extra data from the same file, but it won't do that (much) if you specify POSIX_FADV_RANDOM.

hdparm -A 0 disabled read-ahead performed by the disk itself. It advises the disk that when you read a sector, it shouldn't store the next few sectors in its internal cache.

Both disable read-ahead, but in a different layer of the system.

POSIX_FADV_RANDOM only disables prefetching. Set a region to POSIX_FADV_DONTNEED if you don't want it to be cached (or you want it to be removed from the cache).

  • Also, I am noticing that the system forgets an fadvise on the entire file (fd,0,0, POSIX_FADV_DONTNEED) that is done once after an open(2). It's seems that it has no effect when I have a loop of reads, each time I need to specify the data range I am reading and not want to cache. Is this true? Commented Jul 18, 2012 at 5:47
  • Thank you for the answer. So basically to completely disable the RA, one needs to do it on both levels (OS/Disk) Commented Jul 18, 2012 at 5:48
  • @DjellelEddine If you want to disable all readahead, you need to disable all readahead… That is supposed to hurt performance except in highly peculiar cases, so if you experience a slowdown, it means it's working. An fadvise with a length of 0 should happen to the whole file, yes. Note that it's only advice, I think the kernel will keep the data in cache anyway if it has nothing better to do with the memory. Commented Jul 18, 2012 at 7:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .