Nitpick: the CPU time used by swapping is not usually significant. When the system is slow to respond during swapping, the usual problem is the disk time.
(1) Even worse with swap, there's no command to clean up unused swap
Disabling and then enabling swap is a valid and safe technique, if you want to trigger and wait for the swapped memory to be read back in. I just want to say "clean up unused swap" is not the right description - it's not something you would ever need to do.
The swap usage might look higher than you expected, but that does not mean it is not being used. A page of memory can be stored in both RAM and swap at the same time. There is a good reason for this.
When a swap page is read back in, it is not specifically erased, and it is still kept track of. This means if the page needs to be swapped out again, and it has not changed since it was written to swap, the page does not have to be written again.
This is also explained at linux-tutorial.info: Memory Management - The Swap Cache
If the page in memory is changed or freed, the copy of the page in swap space will be freed automatically.
If your system has relatively limited swap space and a lot of RAM, it might need to remove the page from swap space at some point. This happens automatically. (Kernel code: linux-5.0/mm/swap.c:800)
(2) The remaining question is when will Linux clean up disk caching and will it at all? If not, is it a good practice to manually clean up disk cache (echo 1 > /proc/sys/vm/drop_caches)?
Linux cleans up disk cache on demand. Inactive disk cache pages will be evicted when memory is needed.
If you change the value of /proc/sys/vm/swappiness
, you can alter the bias between reclaiming inactive file cache, and reclaiming inactive "anonymous" (swap-backed) program memory. The default is already biased against swapping. If you want to, you can experiment with tuning down the swappiness
value further on your system. If you want to think more about what swappiness
does, here's an example where it might be desirable to turn it up: Make or force tmpfs to swap before the file cache
Since Linux cleans up disk cache on demand, it is not generally recommended to use drop_caches
. It is mostly for testing purposes. As per the official documentation:
This file is not a means to control the growth of the various kernel caches
(inodes, dentries, pagecache, etc...) These objects are automatically
reclaimed by the kernel when memory is needed elsewhere on the system.
Use of this file can cause performance problems. Since it discards cached
objects, it may cost a significant amount of I/O and CPU to recreate the
dropped objects, especially if they were under heavy use. Because of this,
use outside of a testing or debugging environment is not recommended.
systemd-run
should be able to applysystemd.resource-control
properties to any command (these are also implemented using cgroups). As a non-root user, you can usesystemd-run --user
vm.swappiness
setting, as dolapevich said in his answer. You can disable it entirely by setting it to 0.