linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@suse.cz>
To: Ying Han <yinghan@google.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Tejun Heo <htejun@gmail.com>,
	Glauber Costa <glommer@parallels.com>,
	Li Zefan <lizefan@huawei.com>
Subject: [PATCH] memcg,vmscan: do not break out targeted reclaim without reclaimed pages
Date: Fri, 14 Dec 2012 11:56:26 +0100	[thread overview]
Message-ID: <20121214105626.GE6898@dhcp22.suse.cz> (raw)
In-Reply-To: <CALWz4ix7byi=R9_N=LbtpgpvK_rV5UCZGHyWaTECiKqCB2rGwQ@mail.gmail.com>

On Thu 13-12-12 17:06:38, Ying Han wrote:
[...]
> Off topic of the following discussion.
> Take the following hierarchy as example:
> 
>                 root
>               /  |   \
>             a   b     c
>                         |  \
>                         d   e
>                         |      \
>                         g      h
> 
> Let's say c hits its hardlimit and then triggers target reclaim. There
> are two reclaimers at the moment and reclaimer_1 starts earlier. The
> cgroup_next_descendant_pre() returns in order : c->d->g->e->h
> 
> Then we might get the reclaim result as the following where each
> reclaimer keep hitting one node of the sub-tree for all the priorities
> like the following:
> 
>                 reclaimer_1  reclaimer_2
> priority 12  c                 d
> ...             c                 d
> ...             c                 d
> ...             c                 d
>            0   c                 d
> 
> However, this is not how global reclaim works:
> 
> the cgroup_next_descendant_pre returns in order: root->a->b->c->d->g->e->h
> 
>                 reclaimer_1  reclaimer_1 reclaimer_1  reclaimer_2
> priority 12  root                 a            b                 c
> ...             root                 a            b                 c
> ...
> ...
> 0
> 
> There is no reason for me to think of why target reclaim behave
> differently from global reclaim, which the later one is just the
> target reclaim of root cgroup.

Well, this is not a fair comparison because global reclaim is not just
targeted reclaim of the root cgroup. The difference is that global
reclaim balances zones while targeted reclaim only tries to get bellow
a threshold (hard or soft limit). So we cannot really do the same thing
for both.

On the other hand you are right that targeted reclaim iteration can be
weird, especially when nodes higher in the hierarchy do not have any
pages to reclaim (if they do not have any tasks then only re-parented
are on the list). Then we would drop the priority rather quickly and
hammering the same group again and again until we exhaust all priorities
and come back to the shrinker which finds out that nothing changed so it
will try again and we will slowly get to something to reclaim (always
starting with DEF_PRIORITY). So true we are doing a lot of work without
any point.

Maybe we shouldn't break out of the loop if we didn't reclaim enough for
targeted reclaim. Something like:
---

  reply	other threads:[~2012-12-14 10:56 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-26 18:47 rework mem_cgroup iterator Michal Hocko
2012-11-26 18:47 ` [patch v2 1/6] memcg: synchronize per-zone iterator access by a spinlock Michal Hocko
2012-11-26 18:47 ` [patch v2 2/6] memcg: keep prev's css alive for the whole mem_cgroup_iter Michal Hocko
2012-11-28  8:38   ` Kamezawa Hiroyuki
2012-11-26 18:47 ` [patch v2 3/6] memcg: rework mem_cgroup_iter to use cgroup iterators Michal Hocko
2012-11-28  8:47   ` Kamezawa Hiroyuki
2012-11-28  9:17     ` Michal Hocko
2012-11-28  9:23       ` Glauber Costa
2012-11-28  9:33         ` Michal Hocko
2012-11-28  9:35           ` Glauber Costa
2012-11-30  4:07   ` Kamezawa Hiroyuki
2012-12-07  3:39   ` Ying Han
2012-12-07  3:43     ` Ying Han
2012-12-07  8:58       ` Michal Hocko
2012-12-07 17:12         ` Ying Han
2012-12-07 17:27           ` Michal Hocko
2012-12-07 19:16             ` Ying Han
2012-12-07 19:35               ` Michal Hocko
2012-12-07  9:01     ` Michal Hocko
2012-12-09 16:59   ` Ying Han
2012-12-11 15:50     ` Michal Hocko
2012-12-11 16:15       ` Michal Hocko
2012-12-11 18:10         ` Michal Hocko
2012-12-11 22:43         ` Ying Han
2012-12-12  8:55           ` Michal Hocko
2012-12-12 17:57             ` Ying Han
2012-12-12 18:08               ` Michal Hocko
2012-12-11 22:31       ` Ying Han
2012-12-09 19:39   ` Ying Han
2012-12-11 15:54     ` Michal Hocko
2012-12-11 22:36       ` Ying Han
2012-12-12  9:06         ` Michal Hocko
2012-12-12 18:09           ` Ying Han
2012-12-12 18:34             ` Michal Hocko
2012-12-12 18:42               ` Michal Hocko
2012-12-14  1:06                 ` Ying Han
2012-12-14 10:56                   ` Michal Hocko [this message]
2012-12-12 19:24           ` Michal Hocko
2012-12-14  1:14             ` Ying Han
2012-12-14 12:07               ` Michal Hocko
2012-12-14 23:08                 ` Ying Han
2012-12-14 12:37             ` Michal Hocko
2012-11-26 18:47 ` [patch v2 4/6] memcg: simplify mem_cgroup_iter Michal Hocko
2012-11-28  8:52   ` Kamezawa Hiroyuki
2012-11-30  4:09   ` Kamezawa Hiroyuki
2012-12-09 17:01   ` Ying Han
2012-12-11 15:57     ` Michal Hocko
2012-12-11  4:35   ` Ying Han
2012-12-11 16:01     ` Michal Hocko
2012-12-11 22:52       ` Ying Han
2012-11-26 18:47 ` [patch v2 5/6] memcg: further " Michal Hocko
2012-11-30  4:10   ` Kamezawa Hiroyuki
2012-11-30  9:08   ` Glauber Costa
2012-11-30 10:23     ` Michal Hocko
2012-11-26 18:47 ` [patch v2 6/6] cgroup: remove css_get_next Michal Hocko
2012-11-30  4:12   ` Kamezawa Hiroyuki
2012-11-30  8:18     ` Michal Hocko

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=20121214105626.GE6898@dhcp22.suse.cz \
    --to=mhocko@suse.cz \
    --cc=glommer@parallels.com \
    --cc=hannes@cmpxchg.org \
    --cc=htejun@gmail.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lizefan@huawei.com \
    --cc=yinghan@google.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 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).