Re: free: regression due to a different calculation of Used memory
"Michal Hocko" <[email protected]> (Redacted sender "mhocko" for DMARC) Fri, 16 Apr 2021 08:15:46 +0200
| Newsgroups | gmane.linux.procps.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, I am sorry for being persistent here but I would really appreciate some further feedback on this. If there is no further action planned to address the reported concern then I can certainly live with that. The documentation (man page) should express that the value exludes shmem which can lead to discrepancies when there is a lot of shared memory in use, swap is not available globally or in a memory cgroup context and likely some other cases I am not thinking of right now. Thanks! On Tue 06-04-21 08:57:45, Michal Hocko wrote: > On Sat 03-04-21 16:26:58, Craig Small wrote: > > Hi Michal, > > You probably need to follow through several changes to get to where we > > are now. The fact that something else is not reporting the same thing as > > procps happens a lot because its both subjective and a lot of things > > (including procps) have and are wrong about how to calculate certain memory > > values. > > > > I'd suggest reading the links at > > https://gitlab.com/procps-ng/procps/-/commit/602b9a02ce2a3ed443b0b79fca457826da44d654 > > which discusses some of this issue. > > It has a link to the freelist thread where this is change was made. > > Thanks for the link. I have read through the discussion and I have to > say I do agree with the reporter. It is good to see that the obviously > broken slab accounting thing got fixed. I haven't checked the version we > are using in our distribution but it likely has that fix as well. But > Slab part was merely something I've spotted in the referenced commit and > not something that is causing the main problem. That is indeed ths > swap backed page cache. More on that below. > > > On Thu, 1 Apr 2021 at 18:30, Michal Hocko <[email protected]> > > wrote: > > > > > From a semantic point of view it is quite hard to understand what the > > > value is actually trying to represent. I assume that reducing the page > > > > > This is actually the main problem. What does used mean? > > Well, kernel doesn't expose counter like that. It does provide and > estimation of the usable memory which is likely what you want to > be expressed in its complement. > > If there is no clear semantic behind the value then it likely shouldn't > try to be clever. I do understand that many people are confused by their > system consuming a lot of memory for caching. This is not something new > and I am afraid that hiding that fact from them is just going to > continue confusion elsewhere. As you can see by this bug report. > > [...] > > The calculation is now (see > > https://gitlab.com/procps-ng/procps/-/blob/master/proc/sysinfo.c#L789 ) > > > > Memory Used = Memory Total - Memory Free - ( Cache + Slab Reclaimable ) - > > Main Buffers > > > > The first two parts are easy enough, total - free = used > > > > So the question is why are we, in effect, ignoring cache, reclaimable slab > > and buffers? > > > > Cache includes tmpfs which is file backed not memory > > No, this is not quite right. tmpfs/shmem is a general concept for > shared memory with swap as a backing storage. That can be MAP_SHARED | MAP_ANON > mapping, tmpfs mounted filesystem, memfd, System V shm and many others. > It is accounted as Cached because internally it is accounted as a Page > cache, mostly for historical reasons. Something many of us in the MM > area consider a mistake but something we cannot really change because > that would be suprising for users who already know that is the case. > There have been several attempts to change. > > > Reclaimable slab, well it's reclaimable so it's not used. > > Buffers, I'm not 100% sure why this is removed now but it made sense later. > > > > If you follow the mail archive at > > https://www.freelists.org/post/procps/OmegaPhilxxxxxxxxxxxxx-Bug799716-free-considers-cached-to-include-SUnreclaim > > you can see how we got to these figures. > > > > If you really want to go down the Memory Used rabbit hole, try > > https://github.com/brndnmtthws/conky/issues/130 > > Well, the problem is that there are users relying on free(1) and they > complain that some monitoring alerts are invalid because output of free > shows the system in a healthy state while it is not because MemAvailable > or other more precise metrics show a serious memory overutilization. We > can sure go and tell those users that Used: of the free(1) output is > incorrect but I believe it would be better to fix this in free instead. > One potential way to go ahead would be Total - MemAvailable. I would > still argue that Total - Free would be likely the only one which is > always correct but using Memavailable can give at least arguably > coherent view. > -- > Michal Hocko > SUSE Labs -- Michal Hocko SUSE Labs