Re: [RFC PATCH] proc: do not include shmem and driver pages in /proc/meminfo::Cached

From: Konstantin Khlebnikov
Date: Mon Feb 29 2016 - 02:03:31 EST

On Mon, Feb 29, 2016 at 3:03 AM, Hugh Dickins <hughd@xxxxxxxxxx> wrote:
> On Fri, 19 Feb 2016, Andrew Morton wrote:
>> On Fri, 19 Feb 2016 09:40:45 +0300 Konstantin Khlebnikov <koct9i@xxxxxxxxx> wrote:
>> > >> What are your thoughts on this?
>> > >
>> > > My thoughts are NAK. A misleading stat is not so bad as a
>> > > misleading stat whose meaning we change in some random kernel.
>> > >
>> > > By all means improve Documentation/filesystems/proc.txt on Cached.
>> > > By all means promote Active(file)+Inactive(file)-Buffers as often a
>> > > better measure (though Buffers itself is obscure to me - is it intended
>> > > usually to approximate resident FS metadata?). By all means work on
>> > > /proc/meminfo-v2 (though that may entail dispiritingly long discussions).
>> > >
>> > > We have to assume that Cached has been useful to some people, and that
>> > > they've learnt to subtract Shmem from it, if slow or no swap concerns them.
>> > >
>> > > Added Konstantin to Cc: he's had valuable experience of people learning
>> > > to adapt to the numbers that we put out.
>> > >
>> >
>> > I think everything will ok. Subtraction of shmem isn't widespread practice,
>> > more like secret knowledge. This wasn't documented and people who use
>> > this should be aware that this might stop working at any time. So, ACK.
>> It worries me as well - we're deliberately altering the behaviour of
>> existing userspace code. Not all of those alterations will be welcome!
>> We could add a shiny new field into meminfo and train people to migrate
>> to that. But that would just be a sum of already-available fields. In
>> an ideal world we could solve all of this with documentation and
>> cluebatting (and some apologizing!).
> Ah, I missed this, and just sent a redundant addition to the thread;
> followed by this doubly redundant addition.

"Cached" has been used for ages as amount of "potentially free memory".
This patch corrects it in original meaning and makes it closer to that
meaining at the same time.

MemAvailable means exactly that and thing else so logic behind it could be
tuned and changed in the future. Thus, adding new fields makes no sense.

Glibc recently switched sysconf(_SC_PHYS_PAGES) / sysconf(_SC_AVPHYS_PAGES)
from /proc/meminfo MemTotal / MemFree to sysinfo(2) totalram / freeram for
performance reason. It seems possible to expose MemAvailable via sysinfo:
there is space for one field. Probably it's also possible to switch
to really available memory and add memcg awareness too.