4 ms·
A long running Linux system uses 100% of its RAM. Every byte unused for applications will be used as a disk cache, given you read more data than your total RAM
by bayindirh 1y ago
A long running Linux system uses 100% of its RAM. Every byte unused for applications will be used as a disk cache, given you read more data than your total RAM amount.
This cache is evictable, but it'll be there eventually.
Linux used to don't touch unused pages in the RAM in the older days if your RAM was not under pressure, but now it swaps out pages unused for a long time. This allows more cache space in RAM.
> how does caching to swap help?
I think I failed to convey what I tried to say. Let me retry:
Kernel doesn't cache to SSD. It swaps out unused (not accessed) but unevictable pages to SWAP, assuming that these pages will stay stale for a very long time, allowing more RAM to be used as cache.
When I look to my desktop system, in 12 days, Kernel moved 2592MB of my RAM to SWAP despite having ~20GB of free space. ~15GB of this free space is used as disk cache.
So, to have 2.5GB more disk cache, Kernel moved 2592 MB of non-accessed pages to SWAP.
- wallstop 1y agoEdit: wallstop@fridge:~$ free -m total used free shared buff/cache available Mem: 15838 9627 3939 26 2637 6210 Swap: 4095 0 4095 wallstop@fridge:~$ uptime 00:43:54 up 37 days, 23:24, 1 user, load average: 0.00, 0.00, 0.00
- bayindirh 1y agoThe command you want to use is "free -m". This is from another system I have close: total used free shared buff/cache available Mem: 31881 1423 1042 10 29884 30457 Swap: 976 2 974 2MB of SWAP used, 1423 MB RAM used, 29GB cache, 1042 MB Free. Total RAM 32 GB.
- eru 1y agoIf you are interested in human consumption, there's "free --human" which decided on useful units by itself. The "--human" switch is also available for "du --human" or "df --human" or "ls -l --human". It's often abbreviated as "-h", but not always, since that also often stands for "--help".
- bayindirh 1y agoThanks, I generally use free -m since my brain can unconsciously parse it after all these years. ls -lh is one of my learned commands though. I type it in automatically when analyzing things. ls -lrt, ls -lSh and ls -lShr are also very common in my daily use, depending on what I'm doing.
- wallstop 1y agoThanks! My other problem was formatting. Just wanted to share that I see 0 swap usage and nowhere near 100% memory usage as a counterpoint.
- ta1243 1y agoSo that 2M of used swap is completely irrelevant. Same on my laptop total used free shared buff/cache available Mem: 31989 11350 4474 2459 16164 19708 Swap: 6047 20 6027 My syslog server on the other hand (which does a ton of stuff on disk) does use swap Mem: 1919 333 75 0 1511 1403 Swap: 2047 803 1244 With uptime of 235 days. If I were to increase this to 8G of ram instead of 2G, but for arguments sake had to have no swap as the tradeoff, would that be better or worse. Swap fans say worse.
- bayindirh 1y ago> So that 2M of used swap is completely irrelevant. As I noted somewhere, my other system has 2,5GB of SWAP allocated over 13 days. That system is a desktop system and juggles tons of things everyday. I have another server with tons of RAM, and the Kernel decided not to evict anything to SWAP (yet). > If I were to increase this to 8G of ram instead of 2G, but for arguments sake had to have no swap as the tradeoff, would that be better or worse. Swap fans say worse. I'm not a SWAP fan, but I support its use. On the other hand I won't say it'd be worse, but it'd be overkill for that server. Maybe I can try 4, but that doesn't seem to be necessary if these numbers are stable over time.
- adastra22 1y agoYes, and if I am writing an API service, for example, I don’t want to suddenly add latency because I hit pages that have been swapped out. I want guarantees about my API call latency variance, at least when the server isn’t overloaded. I DON’T WANT THE KERNEL PRIORITIZING CACHE OVER NRU PAGES. The easiest way to do this is to disable swap.
- eru 1y agoYou better not write your API in Python, or any language/library that uses amortised algorithms in the standard (like Rust and C++ do). And let's not mention garbage collection.
- pdimitar 1y agoHuh? Could you please clarify wrt to Rust and C++? Can't they use another allocator if needed? Or that's not the problem?
- sethherr 1y agoI’m asking because I genuinely don’t know - what are “pages” here?
- adastra22 1y agoThat’s a fair question. A page is the smallest allocatable unit of RAM, from the OS/kernel perspective. The size is set by the CPU, traditionally 4kB, but these days 8kB-4MB are also common. When you call malloc(), it requests a big chunk of memory from the OS, in units of pages. It then uses an allocator to divide it up into smaller, variable length chunks to form each malloc() request. You may have heard of “heap” memory vs “stack” memory. The stack of course is the execution/call stack, and heap is called that because the “heap allocator” is the algorithm originally used for keeping track of unused chunks of these pages. (This is beginner CS stuff so sorry if it came off as patronizing—I assume you’re either not a coder or self-taught, which is fine.)
- gnosek 1y agoOr you can set the vm.swappiness sysctl to 0.
- ta1243 1y ago> A long running Linux system uses 100% of its RAM. How about this server: total used free shared buffers cached Mem: 8106 7646 459 0 149 6815 -/+ buffers/cache: 681 7424 Swap: 6228 25 6202 Uptime of 2,105 days - nearly 6 years. How long does the server have to run to reach 100% of ram?
- bayindirh 1y agoYou already maxed it from Kernel's PoV. 8GB of RAM, where 6.8GB is cache. ~700MB is resident and 459 is free because I assume Kernel wants to have some free space to allocate something quite fast. 25MB swap use seems normal for a server which doesn't juggle much tasks, but works on one.
- ta1243 1y agoSo not 100% of ram, less than 95%