From: Johannes Weiner <jweiner@redhat.com>
To: Michal Hocko <mhocko@suse.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>,
Balbir Singh <bsingharora@gmail.com>,
Ying Han <yinghan@google.com>, Greg Thelen <gthelen@google.com>,
Michel Lespinasse <walken@google.com>,
Rik van Riel <riel@redhat.com>,
Minchan Kim <minchan.kim@gmail.com>,
Christoph Hellwig <hch@infradead.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 03/11] mm: vmscan: distinguish between memcg triggering reclaim and memcg being scanned
Date: Tue, 20 Sep 2011 10:58:11 +0200 [thread overview]
Message-ID: <20110920085811.GC11489@redhat.com> (raw)
In-Reply-To: <20110919142955.GG21847@tiehlicka.suse.cz>
On Mon, Sep 19, 2011 at 04:29:55PM +0200, Michal Hocko wrote:
> On Mon 12-09-11 12:57:20, Johannes Weiner wrote:
> > Memory cgroup hierarchies are currently handled completely outside of
> > the traditional reclaim code, which is invoked with a single memory
> > cgroup as an argument for the whole call stack.
> >
> > Subsequent patches will switch this code to do hierarchical reclaim,
> > so there needs to be a distinction between a) the memory cgroup that
> > is triggering reclaim due to hitting its limit and b) the memory
> > cgroup that is being scanned as a child of a).
> >
> > This patch introduces a struct mem_cgroup_zone that contains the
> > combination of the memory cgroup and the zone being scanned, which is
> > then passed down the stack instead of the zone argument.
> >
> > Signed-off-by: Johannes Weiner <jweiner@redhat.com>
>
> Looks good to me. Some minor comments bellow
> Anyways:
> Reviewed-by: Michal Hocko <mhocko@suse.cz>
Thanks!
> > @@ -1853,13 +1865,13 @@ static int vmscan_swappiness(struct scan_control *sc)
> > *
> > * nr[0] = anon pages to scan; nr[1] = file pages to scan
> > */
> > -static void get_scan_count(struct zone *zone, struct scan_control *sc,
> > - unsigned long *nr, int priority)
> > +static void get_scan_count(struct mem_cgroup_zone *mz, struct scan_control *sc,
> > + unsigned long *nr, int priority)
> > {
> > unsigned long anon, file, free;
> > unsigned long anon_prio, file_prio;
> > unsigned long ap, fp;
> > - struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
> > + struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(mz);
> > u64 fraction[2], denominator;
> > enum lru_list l;
> > int noswap = 0;
>
> You can save some patch lines by:
> struct zone *zone = mz->zone;
> and not doing zone => mz->zone changes that follow.
Actually, I really hate that I had to do that local zone variable in
other places. I only did it where it's used so often that it would
have changed every other line. If you insist, I'll change it, but I
would prefer to avoid it when possible.
> > @@ -2390,6 +2413,18 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont,
> > }
> > #endif
> >
> > +static void age_active_anon(struct zone *zone, struct scan_control *sc,
> > + int priority)
> > +{
> > + struct mem_cgroup_zone mz = {
> > + .mem_cgroup = NULL,
> > + .zone = zone,
> > + };
> > +
> > + if (inactive_anon_is_low(&mz))
> > + shrink_active_list(SWAP_CLUSTER_MAX, &mz, sc, priority, 0);
> > +}
> > +
>
> I do not like this very much because we are using a similar construct in
> shrink_mem_cgroup_zone so we are duplicating that code.
> What about adding age_mem_cgroup_active_anon (something like shrink_zone).
I am not sure I follow and I don't see what could be shared between
the zone shrinking and this as there are different exit conditions to
the hierarchy walk. Can you elaborate?
WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <jweiner@redhat.com>
To: Michal Hocko <mhocko@suse.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>,
Balbir Singh <bsingharora@gmail.com>,
Ying Han <yinghan@google.com>, Greg Thelen <gthelen@google.com>,
Michel Lespinasse <walken@google.com>,
Rik van Riel <riel@redhat.com>,
Minchan Kim <minchan.kim@gmail.com>,
Christoph Hellwig <hch@infradead.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 03/11] mm: vmscan: distinguish between memcg triggering reclaim and memcg being scanned
Date: Tue, 20 Sep 2011 10:58:11 +0200 [thread overview]
Message-ID: <20110920085811.GC11489@redhat.com> (raw)
In-Reply-To: <20110919142955.GG21847@tiehlicka.suse.cz>
On Mon, Sep 19, 2011 at 04:29:55PM +0200, Michal Hocko wrote:
> On Mon 12-09-11 12:57:20, Johannes Weiner wrote:
> > Memory cgroup hierarchies are currently handled completely outside of
> > the traditional reclaim code, which is invoked with a single memory
> > cgroup as an argument for the whole call stack.
> >
> > Subsequent patches will switch this code to do hierarchical reclaim,
> > so there needs to be a distinction between a) the memory cgroup that
> > is triggering reclaim due to hitting its limit and b) the memory
> > cgroup that is being scanned as a child of a).
> >
> > This patch introduces a struct mem_cgroup_zone that contains the
> > combination of the memory cgroup and the zone being scanned, which is
> > then passed down the stack instead of the zone argument.
> >
> > Signed-off-by: Johannes Weiner <jweiner@redhat.com>
>
> Looks good to me. Some minor comments bellow
> Anyways:
> Reviewed-by: Michal Hocko <mhocko@suse.cz>
Thanks!
> > @@ -1853,13 +1865,13 @@ static int vmscan_swappiness(struct scan_control *sc)
> > *
> > * nr[0] = anon pages to scan; nr[1] = file pages to scan
> > */
> > -static void get_scan_count(struct zone *zone, struct scan_control *sc,
> > - unsigned long *nr, int priority)
> > +static void get_scan_count(struct mem_cgroup_zone *mz, struct scan_control *sc,
> > + unsigned long *nr, int priority)
> > {
> > unsigned long anon, file, free;
> > unsigned long anon_prio, file_prio;
> > unsigned long ap, fp;
> > - struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
> > + struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(mz);
> > u64 fraction[2], denominator;
> > enum lru_list l;
> > int noswap = 0;
>
> You can save some patch lines by:
> struct zone *zone = mz->zone;
> and not doing zone => mz->zone changes that follow.
Actually, I really hate that I had to do that local zone variable in
other places. I only did it where it's used so often that it would
have changed every other line. If you insist, I'll change it, but I
would prefer to avoid it when possible.
> > @@ -2390,6 +2413,18 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont,
> > }
> > #endif
> >
> > +static void age_active_anon(struct zone *zone, struct scan_control *sc,
> > + int priority)
> > +{
> > + struct mem_cgroup_zone mz = {
> > + .mem_cgroup = NULL,
> > + .zone = zone,
> > + };
> > +
> > + if (inactive_anon_is_low(&mz))
> > + shrink_active_list(SWAP_CLUSTER_MAX, &mz, sc, priority, 0);
> > +}
> > +
>
> I do not like this very much because we are using a similar construct in
> shrink_mem_cgroup_zone so we are duplicating that code.
> What about adding age_mem_cgroup_active_anon (something like shrink_zone).
I am not sure I follow and I don't see what could be shared between
the zone shrinking and this as there are different exit conditions to
the hierarchy walk. Can you elaborate?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2011-09-20 8:58 UTC|newest]
Thread overview: 130+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-12 10:57 [patch 0/11] mm: memcg naturalization -rc3 Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-12 10:57 ` [patch 01/11] mm: memcg: consolidate hierarchy iteration primitives Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-12 22:37 ` Kirill A. Shutemov
2011-09-12 22:37 ` Kirill A. Shutemov
2011-09-13 5:40 ` Johannes Weiner
2011-09-13 5:40 ` Johannes Weiner
2011-09-19 13:06 ` Michal Hocko
2011-09-19 13:06 ` Michal Hocko
2011-09-13 10:06 ` KAMEZAWA Hiroyuki
2011-09-13 10:06 ` KAMEZAWA Hiroyuki
2011-09-19 12:53 ` Michal Hocko
2011-09-19 12:53 ` Michal Hocko
2011-09-20 8:45 ` Johannes Weiner
2011-09-20 8:45 ` Johannes Weiner
2011-09-20 8:53 ` Michal Hocko
2011-09-20 8:53 ` Michal Hocko
2011-09-12 10:57 ` [patch 02/11] mm: vmscan: distinguish global reclaim from global LRU scanning Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-12 23:02 ` Kirill A. Shutemov
2011-09-12 23:02 ` Kirill A. Shutemov
2011-09-13 5:48 ` Johannes Weiner
2011-09-13 5:48 ` Johannes Weiner
2011-09-13 10:07 ` KAMEZAWA Hiroyuki
2011-09-13 10:07 ` KAMEZAWA Hiroyuki
2011-09-19 13:23 ` Michal Hocko
2011-09-19 13:23 ` Michal Hocko
2011-09-19 13:46 ` Michal Hocko
2011-09-19 13:46 ` Michal Hocko
2011-09-20 8:52 ` Johannes Weiner
2011-09-20 8:52 ` Johannes Weiner
2011-09-12 10:57 ` [patch 03/11] mm: vmscan: distinguish between memcg triggering reclaim and memcg being scanned Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:23 ` KAMEZAWA Hiroyuki
2011-09-13 10:23 ` KAMEZAWA Hiroyuki
2011-09-19 14:29 ` Michal Hocko
2011-09-19 14:29 ` Michal Hocko
2011-09-20 8:58 ` Johannes Weiner [this message]
2011-09-20 8:58 ` Johannes Weiner
2011-09-20 9:17 ` Michal Hocko
2011-09-20 9:17 ` Michal Hocko
2011-09-29 7:55 ` Johannes Weiner
2011-09-29 7:55 ` Johannes Weiner
2011-09-12 10:57 ` [patch 04/11] mm: memcg: per-priority per-zone hierarchy scan generations Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:27 ` KAMEZAWA Hiroyuki
2011-09-13 10:27 ` KAMEZAWA Hiroyuki
2011-09-13 11:03 ` Johannes Weiner
2011-09-13 11:03 ` Johannes Weiner
2011-09-14 0:55 ` KAMEZAWA Hiroyuki
2011-09-14 0:55 ` KAMEZAWA Hiroyuki
2011-09-14 5:56 ` Johannes Weiner
2011-09-14 5:56 ` Johannes Weiner
2011-09-14 7:40 ` KAMEZAWA Hiroyuki
2011-09-14 7:40 ` KAMEZAWA Hiroyuki
2011-09-20 8:15 ` Michal Hocko
2011-09-20 8:15 ` Michal Hocko
2011-09-20 8:45 ` Michal Hocko
2011-09-20 8:45 ` Michal Hocko
2011-09-20 9:10 ` Johannes Weiner
2011-09-20 9:10 ` Johannes Weiner
2011-09-20 12:37 ` Michal Hocko
2011-09-20 12:37 ` Michal Hocko
2011-09-12 10:57 ` [patch 05/11] mm: move memcg hierarchy reclaim to generic reclaim code Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:31 ` KAMEZAWA Hiroyuki
2011-09-13 10:31 ` KAMEZAWA Hiroyuki
2011-09-20 13:09 ` Michal Hocko
2011-09-20 13:09 ` Michal Hocko
2011-09-20 13:29 ` Johannes Weiner
2011-09-20 13:29 ` Johannes Weiner
2011-09-20 14:08 ` Michal Hocko
2011-09-20 14:08 ` Michal Hocko
2011-09-12 10:57 ` [patch 06/11] mm: memcg: remove optimization of keeping the root_mem_cgroup LRU lists empty Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:34 ` KAMEZAWA Hiroyuki
2011-09-13 10:34 ` KAMEZAWA Hiroyuki
2011-09-20 15:02 ` Michal Hocko
2011-09-20 15:02 ` Michal Hocko
2011-09-29 9:20 ` Johannes Weiner
2011-09-29 9:20 ` Johannes Weiner
2011-09-29 9:49 ` Michal Hocko
2011-09-29 9:49 ` Michal Hocko
2011-09-12 10:57 ` [patch 07/11] mm: vmscan: convert unevictable page rescue scanner to per-memcg LRU lists Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:37 ` KAMEZAWA Hiroyuki
2011-09-13 10:37 ` KAMEZAWA Hiroyuki
2011-09-21 12:33 ` Michal Hocko
2011-09-21 12:33 ` Michal Hocko
2011-09-21 13:47 ` Johannes Weiner
2011-09-21 13:47 ` Johannes Weiner
2011-09-21 14:08 ` Michal Hocko
2011-09-21 14:08 ` Michal Hocko
2011-09-12 10:57 ` [patch 08/11] mm: vmscan: convert global reclaim " Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:41 ` KAMEZAWA Hiroyuki
2011-09-13 10:41 ` KAMEZAWA Hiroyuki
2011-09-21 13:10 ` Michal Hocko
2011-09-21 13:10 ` Michal Hocko
2011-09-21 13:51 ` Johannes Weiner
2011-09-21 13:51 ` Johannes Weiner
2011-09-21 13:57 ` Michal Hocko
2011-09-21 13:57 ` Michal Hocko
2011-09-12 10:57 ` [patch 09/11] mm: collect LRU list heads into struct lruvec Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:43 ` KAMEZAWA Hiroyuki
2011-09-13 10:43 ` KAMEZAWA Hiroyuki
2011-09-21 13:43 ` Michal Hocko
2011-09-21 13:43 ` Michal Hocko
2011-09-21 15:15 ` Michal Hocko
2011-09-21 15:15 ` Michal Hocko
2011-09-12 10:57 ` [patch 10/11] mm: make per-memcg LRU lists exclusive Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:47 ` KAMEZAWA Hiroyuki
2011-09-13 10:47 ` KAMEZAWA Hiroyuki
2011-09-21 15:24 ` Michal Hocko
2011-09-21 15:24 ` Michal Hocko
2011-09-21 15:47 ` Johannes Weiner
2011-09-21 15:47 ` Johannes Weiner
2011-09-21 16:05 ` Michal Hocko
2011-09-21 16:05 ` Michal Hocko
2011-09-12 10:57 ` [patch 11/11] mm: memcg: remove unused node/section info from pc->flags Johannes Weiner
2011-09-12 10:57 ` Johannes Weiner
2011-09-13 10:50 ` KAMEZAWA Hiroyuki
2011-09-13 10:50 ` KAMEZAWA Hiroyuki
2011-09-21 15:32 ` Michal Hocko
2011-09-21 15:32 ` Michal Hocko
2011-09-13 20:35 ` [patch 0/11] mm: memcg naturalization -rc3 Kirill A. Shutemov
2011-09-13 20:35 ` Kirill A. Shutemov
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=20110920085811.GC11489@redhat.com \
--to=jweiner@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=bsingharora@gmail.com \
--cc=gthelen@google.com \
--cc=hch@infradead.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.cz \
--cc=minchan.kim@gmail.com \
--cc=nishimura@mxp.nes.nec.co.jp \
--cc=riel@redhat.com \
--cc=walken@google.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 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.