this post was submitted on 26 Nov 2024
767 points (97.5% liked)

196

16748 readers
2363 users here now

Be sure to follow the rule before you head out.

Rule: You must post before you leave.

^other^ ^rules^

founded 2 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 5 points 1 month ago* (last edited 1 month ago)

I work in tech, and I don’t understand people’s obsession with having all their RAM free at all times.

If you don’t use it, why do you have it?

Windows (not the best OS, but the one I know the most about), will lie to you about how much memory you have that’s free. It puts data in RAM as cache. In the event you need that data, it’s already loaded in RAM. Usually this is stuff like DLLs and executables for programs.

There’s a difference between “free” memory, and “available” memory.

Linux and macOS do the same, although I wouldn't call it lying per se :)

There is certainly a lack of understanding of the difference between free and available RAM. TLDR: yes, free RAM is indeed wasted RAM.

If you actually have a lot of free RAM, it's probably because you either booted or freed a lot of RAM very recently. After using your computer for a while, most of your available RAM should not be free but rather being used for page cache and other caches.

After a program has just read and/or written more data from disk than will fit in available RAM, the kernel's page cache (which is typically the bulk of that not-free-but-available memory) should be mostly populated by the most recent of those operations. This means that if that program (or any other program) reads those files again, before they are evicted from cache by other things, they will not need to wait for the disk and will get them back much faster.

However, managing all of this is the kernel's job, and the not-free-but-available RAM being used for page cache is not (in any OS, as far as I know, though I mostly know Linux) attributed to the program(s) responsible for putting things there.

So, when people are complaining about an application using 40% of their RAM it is not necessarily due to them misunderstanding free-vs-available RAM. The used number for an application does not include the portion of the system's not-free-but-available RAM which the application is also responsible for occupying.

(If you want to know which programs and/or which files are responsible for occupying your page cache... on Linux at least, it is not really possible without instrumenting your kernel. The kernel is just tracking blocks. There several tools which will let you see which blocks of a given file are cached, but there isn't a reverse mapping from blocks to files.)