Re: free: regression due to a different calculation of Used memory

"Michal Hocko" <[email protected]> ("mhocko") Tue, 21 Jun 2022 15:19:22 +0200
Newsgroups gmane.linux.procps.devel
Message-ID <YrHFWhP81l7Z/[email protected]>
On Fri 17-06-22 19:14:41, Craig Small wrote:
[...]
> I think we can safely say putting Cached into the Used calculation is
> wrong. There is definitely 5 or 10MB of memory that is being used and the
> current free won't show this. It's probably a failure of Cached giving the
> "right" answer rather than free's fault, but we are beholden to what the
> kernel gives us. Cached used to mean cache for files paged/swapped to disk
> but it doesn't anymore.

Cached field in /proc/meminfo has always meant the amount of the page
cache. Shmem/tmpfs has always (to my knowledge) used the page cache to
maintain the memory. This turned out to be rather confusing because a
lot of people considered Cached the amount of easily disposable memory
because it can be easily refaulted from the storage. But that is not the
case for shmem/tmpfs because the IO involved is swap based.

The added confusion, and the reason why free(1) chosen to deduct Cached
from the used memory is because a lot of people simply do not like to
see all the memory being used because that might signal a memory
shortage. In general caches do not really create that danger because the
memory is reclaimed should there be a need.

> I also explored doing some delta of (Cached-Shmem) but for some systems
> they both increased by 5MB which was good, but for others Cached increased
> by 6MB and Shmem by 5MB.
> 
> We have several options here:
> 
>    1. Original: Used = Total - Free - Cached - SReclaimable - Buffers
>    2. No Cache: Used = Total - Free - SReclaimable - Buffers
>    3. Available: Used = Total - Available
>    4. Simple: Used = Total - Free

Of all above I would vote for using Available because that is an
estimate of usable memory. It is not a perfect estimatation but better
than the existing one. It also prevents panic for those who rely on Used
memory to be excluding easily reclaimable page cache.

HTH

-- 
Michal Hocko
SUSE Labs