Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

As part of doing some cold cache timings, I'm trying to free the OS cache. The kernel documentation says:

drop_caches

Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
    echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
    echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation and dirty objects are not freeable, the
user should run `sync' first.

I'm a bit sketchy about the details. Running

echo 3 > /proc/sys/vm/drop_caches

frees pagecache, dentries and inodes. Ok.

So, if I want the system to start caching normally again, do I need to reset it to 0 first? My system has the value currently set to 0, which I assume is the default. Or will it reset on its own? I see at least two possibilities here, and I'm not sure which one is true:

  1. echo 3 > /proc/sys/vm/drop_caches frees pagecache, dentries and inodes. The system then immediately starts caching again. I'm not sure what I would expect the value in /proc/sys/vm/drop_caches to do if this is the case. Go back to 0 almost immediately?

  2. If /proc/sys/vm/drop_caches is set to 3, the system does not do any memory caching till it is reset to 0.

Which case is true?

share|improve this question
10  
To use it with sudo: echo 3 | sudo tee /proc/sys/vm/drop_caches – Volker Siegel Aug 3 '14 at 22:40
    
Holy cow! @VolkerSiegel I've been scrubbing the Interwebs for hours and randomly found your comment. Tried it and it worked perfectly! Thanks for adding this little trick. I don't want to hijack this question but if it's not inappropriate, I'd like to ask for explanation. When I use sshpass with sudo -i && echo 3 > /proc/sys/vm/drop_caches, I get an error: stdin: is not a tty. Using your "sudo" method works. Why? – harperville Feb 26 at 15:57
2  
@harperville Ask a question; this is almost certainly an unrelated issue. – Faheem Mitha Feb 26 at 16:36
    
@harperville Yes - that is a very good question - with an interesting answer, Do ask it separately! Then let me know here. Or you want me to ask the question myself and then answer it? – Volker Siegel Feb 26 at 16:57
    
Though the question might be a dupe - the issue sounds familiar. Do a search first. – Faheem Mitha Feb 26 at 17:34
up vote 32 down vote accepted

It isn't sticky - you just write to the file to make it drop the caches and then it immediately starts caching again.

Basically when you write to that file you aren't really changing a setting, you are issuing a command to the kernel. The kernel acts on that command (by dropping the caches) then carries on as before.

share|improve this answer
1  
Ok, thanks. Does the value immediately change back to 0? – Faheem Mitha Aug 3 '11 at 8:49
10  
@FaheemMitha No, the value you can read is whatever you put last, but it's not used anywhere, only the action of writing matters. The source code is in fs/drop_caches.c. – Gilles Aug 4 '11 at 0:16
    
@Gilles: Thanks. – Faheem Mitha Aug 4 '11 at 6:58
    
@TomH: Thanks!! – hermanjunge May 16 at 5:01

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.