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.