cgroups.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
To: Waiman Long <llong-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Michal Hocko <mhocko-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Vladimir Davydov
	<vdavydov.dev-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Andrew Morton
	<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
	Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Christoph Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>,
	Pekka Enberg <penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	David Rientjes <rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Joonsoo Kim <iamjoonsoo.kim-Hm3cg6mZ9cc@public.gmane.org>,
	Vlastimil Babka <vbabka-AlSwsSmVLrQ@public.gmane.org>,
	Roman Gushchin <guro-b10kYP2dOMg@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
	Shakeel Butt <shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Muchun Song <songmuchun-EC8Uxl6Npydl57MIdRCFDg@public.gmane.org>,
	Alex Shi
	<alex.shi-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>,
	Chris Down <chris-6Bi1550iOqEnzZ6mRAm98g@public.gmane.org>,
	Yafang Shao <laoar.shao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Wei Yang
	<richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Masayoshi Mizuma
	<msys.mizuma-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Xing Zhengjun
	<zhengjun.xing-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Subject: Re: [PATCH v3 3/5] mm/memcg: Cache vmstat data in percpu memcg_stock_pcp
Date: Thu, 15 Apr 2021 14:13:38 -0400	[thread overview]
Message-ID: <YHiCUnqaVkIwGzUT@cmpxchg.org> (raw)
In-Reply-To: <5abe499a-b1ad-fa22-3487-1a6e00e30e17-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

On Thu, Apr 15, 2021 at 01:08:29PM -0400, Waiman Long wrote:
> On 4/15/21 12:50 PM, Johannes Weiner wrote:
> > On Tue, Apr 13, 2021 at 09:20:25PM -0400, Waiman Long wrote:
> > > Before the new slab memory controller with per object byte charging,
> > > charging and vmstat data update happen only when new slab pages are
> > > allocated or freed. Now they are done with every kmem_cache_alloc()
> > > and kmem_cache_free(). This causes additional overhead for workloads
> > > that generate a lot of alloc and free calls.
> > > 
> > > The memcg_stock_pcp is used to cache byte charge for a specific
> > > obj_cgroup to reduce that overhead. To further reducing it, this patch
> > > makes the vmstat data cached in the memcg_stock_pcp structure as well
> > > until it accumulates a page size worth of update or when other cached
> > > data change.
> > > 
> > > On a 2-socket Cascade Lake server with instrumentation enabled and this
> > > patch applied, it was found that about 17% (946796 out of 5515184) of the
> > > time when __mod_obj_stock_state() is called leads to an actual call to
> > > mod_objcg_state() after initial boot. When doing parallel kernel build,
> > > the figure was about 16% (21894614 out of 139780628). So caching the
> > > vmstat data reduces the number of calls to mod_objcg_state() by more
> > > than 80%.
> > Right, but mod_objcg_state() is itself already percpu-cached. What's
> > the benefit of avoiding calls to it with another percpu cache?
> > 
> There are actually 2 set of vmstat data that have to be updated. One is
> associated with the memcg and other one is for each lruvec within the
> cgroup. Caching it in obj_stock, we replace 2 writes to two colder
> cachelines with one write to a hot cacheline. If you look at patch 5, I
> break obj_stock into two - one for task context and one for irq context.
> Interrupt disable is no longer needed in task context, but that is not
> possible when writing to the actual vmstat data arrays.

Ah, thanks for the explanation. Both of these points are worth
mentioning in the changelog of this patch.

  parent reply	other threads:[~2021-04-15 18:13 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-14  1:20 [PATCH v3 0/5] mm/memcg: Reduce kmemcache memory accounting overhead Waiman Long
2021-04-14  1:20 ` [PATCH v3 4/5] mm/memcg: Separate out object stock data into its own struct Waiman Long
     [not found]   ` <20210414012027.5352-5-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15  3:28     ` Masayoshi Mizuma
2021-04-15 16:57     ` Johannes Weiner
     [not found] ` <20210414012027.5352-1-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-14  1:20   ` [PATCH v3 1/5] mm/memcg: Pass both memcg and lruvec to mod_memcg_lruvec_state() Waiman Long
     [not found]     ` <20210414012027.5352-2-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15  3:27       ` Masayoshi Mizuma
2021-04-15 16:40       ` Johannes Weiner
     [not found]         ` <YHhsapGx3vTlyZvF-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 16:59           ` Waiman Long
     [not found]             ` <59a85df9-3e77-1d43-8673-2ff50a741130-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-16 15:48               ` Johannes Weiner
2021-04-14  1:20   ` [PATCH v3 2/5] mm/memcg: Introduce obj_cgroup_uncharge_mod_state() Waiman Long
     [not found]     ` <20210414012027.5352-3-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15  3:27       ` Masayoshi Mizuma
2021-04-15 16:30       ` Johannes Weiner
2021-04-15 16:35         ` Waiman Long
     [not found]           ` <1c85e8f6-e8b9-33e1-e29b-81fbadff959f-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 18:10             ` Johannes Weiner
     [not found]               ` <YHiBlhUWoCKqQgM7-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 18:47                 ` Waiman Long
     [not found]                   ` <8a104fd5-64c7-3f41-981c-9cfa977c78a6-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 19:40                     ` Johannes Weiner
2021-04-15 19:44                       ` Waiman Long
     [not found]                         ` <cba964b6-d2b6-9a74-f556-e2733b65dd81-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 20:19                           ` Johannes Weiner
2021-04-14  1:20   ` [PATCH v3 3/5] mm/memcg: Cache vmstat data in percpu memcg_stock_pcp Waiman Long
     [not found]     ` <20210414012027.5352-4-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15  3:28       ` Masayoshi Mizuma
2021-04-15 16:50     ` Johannes Weiner
     [not found]       ` <YHhu1BOMj1Ip+sb3-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 17:08         ` Waiman Long
     [not found]           ` <5abe499a-b1ad-fa22-3487-1a6e00e30e17-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 18:13             ` Johannes Weiner [this message]
2021-04-14  1:20   ` [PATCH v3 5/5] mm/memcg: Optimize user context object stock access Waiman Long
     [not found]     ` <20210414012027.5352-6-longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15  3:28       ` Masayoshi Mizuma
2021-04-15  9:44         ` Christoph Lameter
     [not found]           ` <alpine.DEB.2.22.394.2104151143080.632904-LoxgEY9JZOazQB+pC5nmwQ@public.gmane.org>
2021-04-15 12:16             ` Masayoshi Mizuma
2021-04-15 17:53     ` Johannes Weiner
     [not found]       ` <YHh9l1+TUIzzFBtO-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 18:16         ` Waiman Long
     [not found]           ` <8dbd3505-9c51-362f-82d8-5efa5773e020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 18:53             ` Johannes Weiner
     [not found]               ` <YHiLmxE9oCOfmbS3-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2021-04-15 19:06                 ` Waiman Long
2021-04-15  3:26   ` [PATCH v3 0/5] mm/memcg: Reduce kmemcache memory accounting overhead Masayoshi Mizuma
2021-04-15 13:17     ` Waiman Long
     [not found]       ` <12cba05a-e268-3a5d-69d7-feb00e36ef40-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2021-04-15 15:47         ` Masayoshi Mizuma
2021-04-15 17:10   ` Matthew Wilcox
     [not found]     ` <20210415171035.GB2531743-FZi0V3Vbi30CUdFEqe4BF2D2FQJk+8+b@public.gmane.org>
2021-04-15 17:41       ` Waiman Long

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YHiCUnqaVkIwGzUT@cmpxchg.org \
    --to=hannes-druugvl0lcnafugrpc6u6w@public.gmane.org \
    --cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
    --cc=alex.shi-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org \
    --cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=chris-6Bi1550iOqEnzZ6mRAm98g@public.gmane.org \
    --cc=cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org \
    --cc=guro-b10kYP2dOMg@public.gmane.org \
    --cc=iamjoonsoo.kim-Hm3cg6mZ9cc@public.gmane.org \
    --cc=laoar.shao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
    --cc=llong-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=mhocko-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=msys.mizuma-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=songmuchun-EC8Uxl6Npydl57MIdRCFDg@public.gmane.org \
    --cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=vbabka-AlSwsSmVLrQ@public.gmane.org \
    --cc=vdavydov.dev-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=zhengjun.xing-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).