From: Pintu Agarwal > Sent: 06 January 2022 16:50 > > On Thu, 6 Jan 2022 at 21:41, Cyrill Gorcunov <gorcunov@xxxxxxxxx> wrote: > > > > On Thu, Jan 06, 2022 at 09:04:10PM +0530, Pintu Kumar wrote: > > > The sysinfo member does not have any "available ram" field and > > > the bufferram field is not much helpful either, to get a rough > > > estimate of available ram needed for allocation. > > > > > > One needs to parse MemAvailable field separately from /proc/meminfo > > > to get this info instead of directly getting if from sysinfo itself. > > > > > > Thus, this patch introduce a new field as availram in sysinfo > > > so that all the info total/free/available can be retrieved from > > > one place itself. > > > > > > There are couple of places in kernel as well where this can be improved. > > > For example: > > > In fs/proc/meminfo.c: > > > meminfo_proc_show: > > > si_meminfo(&i); > > > available = si_mem_available(); > > > Now with this change the second call be avoided. > > > Thus, we can directly do: > > > show_val_kb(m, "MemAvailable: ", i.availram); > > > > > > Note, this also requires update in procfs for free and other commands. > > > Like in free command as well we frist call sysinfo then again parse > > > /proc/meminfo to get available field. > > > This can be avoided too with higher kernel version. > > > > > > A sample output with single sysinfo call is shown below: > > > Total RAM: 248376 kB > > > Free RAM: 231540 kB > > > Avail RAM: 230448 kB > > > > > > Signed-off-by: Pintu Kumar <quic_pintu@xxxxxxxxxxx> > > > Signed-off-by: Pintu Agarwal <pintu.ping@xxxxxxxxx> > > > --- > > > include/uapi/linux/sysinfo.h | 1 + > > > kernel/sys.c | 4 ++++ > > > mm/page_alloc.c | 2 ++ > > > 3 files changed, 7 insertions(+) > > > > > > diff --git a/include/uapi/linux/sysinfo.h b/include/uapi/linux/sysinfo.h > > > index 435d5c2..6e77e90 100644 > > > --- a/include/uapi/linux/sysinfo.h > > > +++ b/include/uapi/linux/sysinfo.h > > > @@ -12,6 +12,7 @@ struct sysinfo { > > > __kernel_ulong_t freeram; /* Available memory size */ > > > __kernel_ulong_t sharedram; /* Amount of shared memory */ > > > __kernel_ulong_t bufferram; /* Memory used by buffers */ > > > + __kernel_ulong_t availram; /* Memory available for allocation */ > > > __kernel_ulong_t totalswap; /* Total swap space size */ > > > __kernel_ulong_t freeswap; /* swap space still available */ > > > __u16 procs; /* Number of current processes */ > > > > Hi! Sorry, but I don't understand -- the sysinfo structure seems to > > be part of user API, no? Don't we break it up here? > > Yes, the corresponding user space header /usr/include/linux/sysinfo.h > also needs to be updated. > When we generate the kernel header it will be updated automatically. You can't add a field in the middle of a UAPI structure. It breaks compatibility for old binaries. Depending on the interface definition you may be able to add one at the end. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)