linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@suse.cz>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
	"nishimura@mxp.nes.nec.co.jp" <nishimura@mxp.nes.nec.co.jp>,
	"bsingharora@gmail.com" <bsingharora@gmail.com>,
	Ying Han <yinghan@google.com>,
	"hannes@cmpxchg.org" <hannes@cmpxchg.org>
Subject: Re: [PATCH 1/7] Fix mem_cgroup_hierarchical_reclaim() to do stable hierarchy walk.
Date: Wed, 22 Jun 2011 17:15:00 +0200	[thread overview]
Message-ID: <20110622151500.GF14343@tiehlicka.suse.cz> (raw)
In-Reply-To: <20110616125141.5fbd230f.kamezawa.hiroyu@jp.fujitsu.com>

On Thu 16-06-11 12:51:41, KAMEZAWA Hiroyuki wrote:
[...]
> @@ -1667,41 +1668,28 @@ static int mem_cgroup_hierarchical_recla
>  	if (!check_soft && root_mem->memsw_is_minimum)
>  		noswap = true;
>  
> -	while (1) {
> +again:
> +	if (!shrink) {
> +		visit = 0;
> +		for_each_mem_cgroup_tree(victim, root_mem)
> +			visit++;
> +	} else {
> +		/*
> +		 * At shrinking, we check the usage again in caller side.
> +		 * so, visit children one by one.
> +		 */
> +		visit = 1;
> +	}
> +	/*
> +	 * We are not draining per cpu cached charges during soft limit reclaim
> +	 * because global reclaim doesn't care about charges. It tries to free
> +	 * some memory and  charges will not give any.
> +	 */
> +	if (!check_soft)
> +		drain_all_stock_async(root_mem);
> +
> +	while (visit--) {

This is racy, isn't it? What prevents some groups to disapear in the
meantime? We would reclaim from those that are left more that we want.

Why cannot we simply do something like (totally untested):

Index: linus_tree/mm/memcontrol.c
===================================================================
--- linus_tree.orig/mm/memcontrol.c	2011-06-22 17:11:54.000000000 +0200
+++ linus_tree/mm/memcontrol.c	2011-06-22 17:13:05.000000000 +0200
@@ -1652,7 +1652,7 @@ static int mem_cgroup_hierarchical_recla
 						unsigned long reclaim_options,
 						unsigned long *total_scanned)
 {
-	struct mem_cgroup *victim;
+	struct mem_cgroup *victim, *first_victim = NULL;
 	int ret, total = 0;
 	int loop = 0;
 	bool noswap = reclaim_options & MEM_CGROUP_RECLAIM_NOSWAP;
@@ -1669,6 +1669,11 @@ static int mem_cgroup_hierarchical_recla
 
 	while (1) {
 		victim = mem_cgroup_select_victim(root_mem);
+		if (!first_victim)
+			first_victim = victim;
+		else if (first_victim == victim)
+			break;
+
 		if (victim == root_mem) {
 			loop++;
 			/*
-- 
Michal Hocko
SUSE Labs
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9    
Czech Republic

--
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>

  reply	other threads:[~2011-06-22 15:15 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-16  3:47 [PATCH 0/7] memcg numa node scan update KAMEZAWA Hiroyuki
2011-06-16  3:51 ` [PATCH 1/7] Fix mem_cgroup_hierarchical_reclaim() to do stable hierarchy walk KAMEZAWA Hiroyuki
2011-06-22 15:15   ` Michal Hocko [this message]
2011-06-22 18:33     ` Michal Hocko
2011-06-23  6:21       ` KAMEZAWA Hiroyuki
2011-06-16  3:52 ` [PATCH 2/7] export memory cgroup's swappines by mem_cgroup_swappiness() KAMEZAWA Hiroyuki
2011-06-22 15:22   ` Michal Hocko
2011-06-22 16:31     ` Ying Han
2011-06-16  3:53 ` [PATCH 3/7] memcg: add memory.scan_stat KAMEZAWA Hiroyuki
2011-06-17 22:04   ` Ying Han
2011-06-19 23:41     ` KAMEZAWA Hiroyuki
2011-06-20  4:02       ` KAMEZAWA Hiroyuki
2011-06-20  6:59         ` Ying Han
2011-06-21  6:49   ` Ying Han
2011-06-21  6:52     ` Ying Han
2011-06-22  0:20     ` KAMEZAWA Hiroyuki
2011-06-24 21:40       ` Ying Han
2011-06-27  1:49         ` KAMEZAWA Hiroyuki
2011-06-16  3:54 ` [PATCH 4/7] memcg: update numa information based on event counter KAMEZAWA Hiroyuki
2011-06-22 15:53   ` Michal Hocko
2011-06-23  6:27     ` KAMEZAWA Hiroyuki
2011-06-23  8:12       ` Michal Hocko
2011-06-16  3:54 ` [PATCH 5/7] Fix not good check of mem_cgroup_local_usage() KAMEZAWA Hiroyuki
2011-06-17 22:27   ` Ying Han
2011-06-19 23:44     ` KAMEZAWA Hiroyuki
2011-06-22 15:58   ` Michal Hocko
2011-06-16  3:56 ` [PATCH 6/7] memcg: calc NUMA node's weight for scan KAMEZAWA Hiroyuki
2011-06-23 13:35   ` Michal Hocko
2011-06-23 14:27     ` Hiroyuki Kamezawa
2011-06-16  3:57 ` [PATCH 7/7] memcg: proportional fair vicitm node selection KAMEZAWA Hiroyuki
2011-06-23 13:48   ` Michal Hocko
2011-06-23 14:10     ` Hiroyuki Kamezawa
2011-06-23 14:30       ` Michal Hocko
2011-06-23 22:20         ` Hiroyuki Kamezawa

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=20110622151500.GF14343@tiehlicka.suse.cz \
    --to=mhocko@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=bsingharora@gmail.com \
    --cc=hannes@cmpxchg.org \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nishimura@mxp.nes.nec.co.jp \
    --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