fadvise – may be not what you expect

April 3, 2010
Author
Vadim Tkachenko
Share this Post:

I often hear suggestion to use

system call to avoid caching in OS cache.
We recently made patch for

, which supposes to create archive without polluting OS cache, as like in case with backup, you do not really expect any benefits from caching.

However working on the patch, I noticed, that

with

, does not really do what I expected (I used this call as it is often suggested for this purpose). In fact it does not prevent caching, it only releases already cached data.

And if we do

, it says exactly:

So it is totally fair. What we may really want is

call.

But… But, there is surprise. It does not work. And no wonder, there is Linux kernel source code:

which means that Linux kernel does nothing on fadvise call with FADV_NOREUSE.

Digging a little more on this topic, I found
http://kerneltrap.org/node/7563, where Linus Torvalds, about 3 years ago, confirms that FADV_NOREUSE is no-op operation.
Quite hopeless that it is not fixed for many years.

As for the patch for tar, I ended up with FADV_DONTNEED call after each copy of each block. Dirty, but it works, it only uses OS cache with one block size.

You can get patch there

, it adds parameter

, along with our old patch

to throttle read IO.

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

Far
Enough.

Said no pioneer ever.
MySQL, PostgreSQL, InnoDB, MariaDB, MongoDB and Kubernetes are trademarks for their respective owners.
© 2026 Percona All Rights Reserved