Re: [PATCH 4/5] mm: zswap: add basic meminfo and vmstat coverage

Johannes Weiner
2022-04-27T21:36:26Z

On Wed, Apr 27, 2022 at 05:20:31PM -0400, Johannes Weiner wrote:
> On Wed, Apr 27, 2022 at 01:29:34PM -0700, Minchan Kim wrote:
> > Hi Johannes,
> >
> > On Wed, Apr 27, 2022 at 12:00:15PM -0400, Johannes Weiner wrote:
> > > Currently it requires poking at debugfs to figure out the size and
> > > population of the zswap cache on a host. There are no counters for
> > > reads and writes against the cache. As a result, it's difficult to
> > > understand zswap behavior on production systems.
> > >
> > > Print zswap memory consumption and how many pages are zswapped out in
> > > /proc/meminfo. Count zswapouts and zswapins in /proc/vmstat.
> > >
> > > Signed-off-by: Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
> > > ---
> > > fs/proc/meminfo.c | 7 +++++++
> > > include/linux/swap.h | 5 +++++
> > > include/linux/vm_event_item.h | 4 ++++
> > > mm/vmstat.c | 4 ++++
> > > mm/zswap.c | 13 ++++++-------
> > > 5 files changed, 26 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
> > > index 6fa761c9cc78..6e89f0e2fd20 100644
> > > --- a/fs/proc/meminfo.c
> > > +++ b/fs/proc/meminfo.c
> > > @@ -86,6 +86,13 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
> > >
> > > show_val_kb(m, "SwapTotal: ", i.totalswap);
> > > show_val_kb(m, "SwapFree: ", i.freeswap);
> > > +#ifdef CONFIG_ZSWAP
> > > + seq_printf(m, "Zswap: %8lu kB\n",
> > > + (unsigned long)(zswap_pool_total_size >> 10));
> > > + seq_printf(m, "Zswapped: %8lu kB\n",
> > > + (unsigned long)atomic_read(&zswap_stored_pages) <<
> > > + (PAGE_SHIFT - 10));
> > > +#endif
> >
> > I agree it would be very handy to have the memory consumption in meminfo
> >
> > https://lore.kernel.org/all/YYwZXrL3Fu8%2FvLZw-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org/
> >
> > If we really go this Zswap only metric instead of general term
> > "Compressed", I'd like to post maybe "Zram:" with same reason
> > in this patchset. Do you think that's better idea instead of
> > introducing general term like "Compressed:" or something else?
>
> I'm fine with changing it to Compressed. If somebody cares about a
> more detailed breakdown, we can add Zswap, Zram subsets as needed.

It does raise the question what to do about cgroup, though. Should the
control files (memory.zswap.current & memory.zswap.max) apply to zram
in the future? If so, we should rename them, too.

I'm not too familiar with zram, maybe you can provide some
background. AFAIU, Google uses zram quite widely; all the more
confusing why there is no container support for it yet.

Could you shed some light?

Thanks