All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shakeel Butt <shakeelb@google.com>
To: Kirill Tkhai <ktkhai@virtuozzo.com>
Cc: Matthew Wilcox <willy@infradead.org>,
	Vladimir Davydov <vdavydov.dev@gmail.com>,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Michal Hocko <mhocko@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Philippe Ombredanne <pombredanne@nexb.com>,
	stummala@codeaurora.org, gregkh@linuxfoundation.org,
	Stephen Rothwell <sfr@canb.auug.org.au>,
	Roman Gushchin <guro@fb.com>,
	mka@chromium.org,
	Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
	Chris Wilson <chris@chris-wilson.co.uk>,
	longman@redhat.com, Minchan Kim <minchan@kernel.org>,
	Huang Ying <ying.huang@intel.com>,
	Mel Gorman <mgorman@techsingularity.net>,
	jbacik@fb.com, Guenter Roeck <linux@roeck-us.net>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux MM <linux-mm@kvack.org>,
	lirongqing@baidu.com, Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Paul McKenney <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCH v8 03/17] mm: Assign id to every memcg-aware shrinker
Date: Tue, 3 Jul 2018 10:00:32 -0700	[thread overview]
Message-ID: <CALvZod6eomn1Mt5r28tMthq4b+3MWuWJKgishf_N4UjortzvHw@mail.gmail.com> (raw)
In-Reply-To: <a9fe3e9e-a1b7-ee19-35e6-af32b5f25a37@virtuozzo.com>

On Tue, Jul 3, 2018 at 9:17 AM Kirill Tkhai <ktkhai@virtuozzo.com> wrote:
>
> Hi, Shakeel,
>
> On 03.07.2018 18:46, Shakeel Butt wrote:
> > On Tue, Jul 3, 2018 at 8:27 AM Matthew Wilcox <willy@infradead.org> wrote:
> >>
> >> On Tue, Jul 03, 2018 at 06:09:05PM +0300, Kirill Tkhai wrote:
> >>> +++ b/mm/vmscan.c
> >>> @@ -169,6 +169,49 @@ unsigned long vm_total_pages;
> >>>  static LIST_HEAD(shrinker_list);
> >>>  static DECLARE_RWSEM(shrinker_rwsem);
> >>>
> >>> +#ifdef CONFIG_MEMCG_KMEM
> >>> +static DEFINE_IDR(shrinker_idr);
> >>> +static int shrinker_nr_max;
> >>
> >> So ... we've now got a list_head (shrinker_list) which contains all of
> >> the shrinkers, plus a shrinker_idr which contains the memcg-aware shrinkers?
> >>
> >> Why not replace the shrinker_list with the shrinker_idr?  It's only used
> >> twice in vmscan.c:
> >>
> >> void register_shrinker_prepared(struct shrinker *shrinker)
> >> {
> >>         down_write(&shrinker_rwsem);
> >>         list_add_tail(&shrinker->list, &shrinker_list);
> >>         up_write(&shrinker_rwsem);
> >> }
> >>
> >>         list_for_each_entry(shrinker, &shrinker_list, list) {
> >> ...
> >>
> >> The first is simply idr_alloc() and the second is
> >>
> >>         idr_for_each_entry(&shrinker_idr, shrinker, id) {
> >>
> >> I understand there's a difference between allocating the shrinker's ID and
> >> adding it to the list.  You can do this by calling idr_alloc with NULL
> >> as the pointer, and then using idr_replace() when you want to add the
> >> shrinker to the list.  idr_for_each_entry() skips over NULL entries.
> >>
> >> This will actually reduce the size of each shrinker and be more
> >> cache-efficient when calling the shrinkers.  I think we can also get
> >> rid of the shrinker_rwsem eventually, but let's leave it for now.
> >
> > Can you explain how you envision shrinker_rwsem can be removed? I am
> > very much interested in doing that.
>
> Have you tried to do some games with SRCU? It looks like we just need to
> teach count_objects() and scan_objects() to work with semi-destructed
> shrinkers. Though, this looks this will make impossible to introduce
> shrinkers, which do synchronize_srcu() in scan_objects() for example.
> Not sure, someone will actually use this, and this is possible to consider
> as limitation.
>

Hi Kirill, I tried SRCU and the discussion is at
https://lore.kernel.org/lkml/20171117173521.GA21692@infradead.org/T/#u

Paul E. McKenney suggested to enable SRCU unconditionally. So, to use
SRCU for shrinkers, we first have to push unconditional SRCU.

Tetsuo had another lockless solution which was a bit involved but does
not depend on SRCU.

thanks,
Shakeel

  reply	other threads:[~2018-07-03 17:00 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-03 15:08 [PATCH v8 00/17] Improve shrink_slab() scalability (old complexity was O(n^2), new is O(n)) Kirill Tkhai
2018-07-03 15:08 ` [PATCH v8 01/17] list_lru: Combine code under the same define Kirill Tkhai
2018-07-03 15:08 ` [PATCH v8 02/17] mm: Introduce CONFIG_MEMCG_KMEM as combination of CONFIG_MEMCG && !CONFIG_SLOB Kirill Tkhai
2018-07-03 15:09 ` [PATCH v8 03/17] mm: Assign id to every memcg-aware shrinker Kirill Tkhai
2018-07-03 15:27   ` Matthew Wilcox
2018-07-03 15:46     ` Shakeel Butt
2018-07-03 16:17       ` Kirill Tkhai
2018-07-03 17:00         ` Shakeel Butt [this message]
2018-07-03 17:32           ` Kirill Tkhai
2018-07-12 11:13             ` Kirill Tkhai
2018-07-12 11:19               ` Kirill Tkhai
2018-07-03 17:47       ` Matthew Wilcox
2018-07-03 20:39         ` Al Viro
2018-07-03 15:46     ` Kirill Tkhai
2018-07-03 17:58       ` Matthew Wilcox
2018-07-03 19:12         ` Kirill Tkhai
2018-07-03 19:19           ` Shakeel Butt
2018-07-03 19:25             ` Matthew Wilcox
2018-07-03 19:54               ` Shakeel Butt
2018-07-03 15:09 ` [PATCH v8 04/17] memcg: Move up for_each_mem_cgroup{, _tree} defines Kirill Tkhai
2018-07-03 15:09 ` [PATCH v8 05/17] mm: Assign memcg-aware shrinkers bitmap to memcg Kirill Tkhai
2018-07-03 20:50   ` Andrew Morton
2018-07-04 15:51     ` Kirill Tkhai
2018-07-05 22:10       ` Andrew Morton
2018-07-06 17:50         ` Vladimir Davydov
2018-07-05 22:50     ` Matthew Wilcox
2018-07-06 17:30     ` Vladimir Davydov
2018-07-03 15:09 ` [PATCH v8 06/17] mm: Refactoring in workingset_init() Kirill Tkhai
2018-07-03 15:09 ` [PATCH v8 07/17] fs: Refactoring in alloc_super() Kirill Tkhai
2018-07-03 15:09 ` [PATCH v8 08/17] fs: Propagate shrinker::id to list_lru Kirill Tkhai
2018-07-03 15:10 ` [PATCH v8 09/17] list_lru: Add memcg argument to list_lru_from_kmem() Kirill Tkhai
2018-07-03 15:10 ` [PATCH v8 10/17] list_lru: Pass dst_memcg argument to memcg_drain_list_lru_node() Kirill Tkhai
2018-07-03 15:10 ` [PATCH v8 11/17] list_lru: Pass lru " Kirill Tkhai
2018-07-03 15:10 ` [PATCH v8 12/17] mm: Export mem_cgroup_is_root() Kirill Tkhai
2018-07-03 15:10 ` [PATCH v8 13/17] mm: Set bit in memcg shrinker bitmap on first list_lru item apearance Kirill Tkhai
2018-07-03 20:54   ` Andrew Morton
2018-07-03 15:11 ` [PATCH v8 14/17] mm: Iterate only over charged shrinkers during memcg shrink_slab() Kirill Tkhai
2018-07-03 20:58   ` Andrew Morton
2018-07-04 14:56     ` Kirill Tkhai
2018-07-03 15:11 ` [PATCH v8 15/17] mm: Generalize shrink_slab() calls in shrink_node() Kirill Tkhai
2018-07-03 15:11 ` [PATCH v8 16/17] mm: Add SHRINK_EMPTY shrinker methods return value Kirill Tkhai
2018-07-03 15:11 ` [PATCH v8 17/17] mm: Clear shrinker bit if there are no objects related to memcg Kirill Tkhai

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=CALvZod6eomn1Mt5r28tMthq4b+3MWuWJKgishf_N4UjortzvHw@mail.gmail.com \
    --to=shakeelb@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=aryabinin@virtuozzo.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=gregkh@linuxfoundation.org \
    --cc=guro@fb.com \
    --cc=hannes@cmpxchg.org \
    --cc=jbacik@fb.com \
    --cc=ktkhai@virtuozzo.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@roeck-us.net \
    --cc=lirongqing@baidu.com \
    --cc=longman@redhat.com \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@kernel.org \
    --cc=minchan@kernel.org \
    --cc=mka@chromium.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=penguin-kernel@i-love.sakura.ne.jp \
    --cc=pombredanne@nexb.com \
    --cc=sfr@canb.auug.org.au \
    --cc=stummala@codeaurora.org \
    --cc=tglx@linutronix.de \
    --cc=vdavydov.dev@gmail.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.org \
    --cc=ying.huang@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.