From: Kyeong Yoo Date: Tue, 3 Oct 2023 03:36:51 +0000 (+1300) Subject: proc: fix MemAvailable in /proc/meminfo to exclude tmpfs files X-Git-Tag: v6.0.0~9^2 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=5340b27fc543a1160dd6b763efe6c2e003b1c21d;p=mirror_lxcfs.git proc: fix MemAvailable in /proc/meminfo to exclude tmpfs files The "total_cache" from memory.stat of cgroup includes the memory used by tmpfs files ("total_shmem"). Considering it as available memory is wrong because files created on a tmpfs file system cannot be simply reclaimed. So the available memory is calculated with the sum of: * Memory the kernel knows is free * Memory that contained in the kernel active file LRU, that can be reclaimed if necessary * Memory that is contained in the kernel non-active file LRU, that can be reclaimed if necessary Signed-off-by: Kyeong Yoo --- diff --git a/src/proc_fuse.c b/src/proc_fuse.c index 40eb268..1d253bb 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c @@ -1351,7 +1351,7 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset, snprintf(lbuf, 100, "MemFree: %8" PRIu64 " kB\n", memlimit - memusage); printme = lbuf; } else if (startswith(line, "MemAvailable:")) { - snprintf(lbuf, 100, "MemAvailable: %8" PRIu64 " kB\n", memlimit - memusage + mstat.total_cache / 1024); + snprintf(lbuf, 100, "MemAvailable: %8" PRIu64 " kB\n", memlimit - memusage + (mstat.total_active_file + mstat.total_inactive_file) / 1024); printme = lbuf; } else if (startswith(line, "SwapTotal:")) { if (wants_swap) {