From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
To: Johannes Weiner <jweiner@redhat.com>
Cc: Michal Hocko <mhocko@suse.cz>,
linux-mm@kvack.org, Balbir Singh <bsingharora@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org
Subject: Re: [patch] memcg: pin execution to current cpu while draining stock
Date: Thu, 18 Aug 2011 09:24:21 +0900 [thread overview]
Message-ID: <20110818092421.856b74fe.kamezawa.hiroyu@jp.fujitsu.com> (raw)
In-Reply-To: <20110817194927.GA10982@redhat.com>
On Wed, 17 Aug 2011 21:49:27 +0200
Johannes Weiner <jweiner@redhat.com> wrote:
> Commit d1a05b6 'memcg: do not try to drain per-cpu caches without
> pages' added a drain_local_stock() call to a preemptible section.
>
> The draining task looks up the cpu-local stock twice to set the
> draining-flag, then to drain the stock and clear the flag again. If
> the task is migrated to a different CPU in between, noone will clear
> the flag on the first stock and it will be forever undrainable. Its
> charge can not be recovered and the cgroup can not be deleted anymore.
>
> Properly pin the task to the executing CPU while draining stocks.
>
> Signed-off-by: Johannes Weiner <jweiner@redhat.com>
> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com
> Cc: Michal Hocko <mhocko@suse.cz>
Thanks. I think Shaoha Li reported this.
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com
==
http://www.spinics.net/lists/linux-mm/msg22635.html
I get below warning:
BUG: using smp_processor_id() in preemptible [00000000] code: bash/739
caller is drain_local_stock+0x1a/0x55
Pid: 739, comm: bash Tainted: G W 3.0.0+ #255
Call Trace:
[<ffffffff813435c6>] debug_smp_processor_id+0xc2/0xdc
[<ffffffff8114ae9b>] drain_local_stock+0x1a/0x55
[<ffffffff8114b076>] drain_all_stock+0x98/0x13a
[<ffffffff8114f04c>] mem_cgroup_force_empty+0xa3/0x27a
[<ffffffff8114ff1d>] ? sys_close+0x38/0x138
[<ffffffff811a7631>] ? environ_read+0x1d/0x159
[<ffffffff8114f253>] mem_cgroup_force_empty_write+0x17/0x19
[<ffffffff810c72fb>] cgroup_file_write+0xa8/0xba
[<ffffffff811522ce>] vfs_write+0xb3/0x138
[<ffffffff81152416>] sys_write+0x4a/0x71
[<ffffffff8114ffd5>] ? sys_close+0xf0/0x138
[<ffffffff8176deab>] system_call_fastpath+0x16/0x1b
drain_local_stock() should be run with preempt disabled.
==
Andrew, could you pull this one , too ?
http://www.spinics.net/lists/linux-mm/msg22636.html
Thanks,
-Kame
> ---
> mm/memcontrol.c | 9 ++-------
> 1 files changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 697a1d5..e9b1206 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -2085,13 +2085,7 @@ static void drain_all_stock(struct mem_cgroup *root_mem, bool sync)
>
> /* Notify other cpus that system-wide "drain" is running */
> get_online_cpus();
> - /*
> - * Get a hint for avoiding draining charges on the current cpu,
> - * which must be exhausted by our charging. It is not required that
> - * this be a precise check, so we use raw_smp_processor_id() instead of
> - * getcpu()/putcpu().
> - */
> - curcpu = raw_smp_processor_id();
> + curcpu = get_cpu();
> for_each_online_cpu(cpu) {
> struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu);
> struct mem_cgroup *mem;
> @@ -2108,6 +2102,7 @@ static void drain_all_stock(struct mem_cgroup *root_mem, bool sync)
> schedule_work_on(cpu, &stock->work);
> }
> }
> + put_cpu();
>
> if (!sync)
> goto out;
> --
> 1.7.6
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
--
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-08-18 0:31 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-22 12:43 [PATCH 0/4 v2] memcg: cleanup per-cpu charge caches Michal Hocko
2011-07-21 7:38 ` [PATCH 1/4] memcg: do not try to drain per-cpu caches without pages Michal Hocko
2011-07-25 1:16 ` KAMEZAWA Hiroyuki
2011-08-17 19:49 ` [patch] memcg: pin execution to current cpu while draining stock Johannes Weiner
2011-08-18 0:24 ` KAMEZAWA Hiroyuki [this message]
2011-08-18 5:56 ` Michal Hocko
2011-07-22 10:24 ` [PATCH 2/4] memcg: unify sync and async per-cpu charge cache draining Michal Hocko
2011-07-22 10:27 ` [PATCH 3/4] memcg: add mem_cgroup_same_or_subtree helper Michal Hocko
2011-07-22 11:20 ` [PATCH 4/4] memcg: get rid of percpu_charge_mutex lock Michal Hocko
2011-07-25 1:18 ` KAMEZAWA Hiroyuki
2011-08-08 18:47 ` Johannes Weiner
2011-08-08 21:47 ` Michal Hocko
2011-08-08 23:19 ` Johannes Weiner
2011-08-09 7:26 ` Michal Hocko
2011-08-09 9:31 ` [PATCH RFC] memcg: fix drain_all_stock crash Michal Hocko
2011-08-09 9:32 ` KAMEZAWA Hiroyuki
2011-08-09 9:45 ` Michal Hocko
2011-08-09 9:53 ` KAMEZAWA Hiroyuki
2011-08-09 10:09 ` Michal Hocko
2011-08-09 10:07 ` KAMEZAWA Hiroyuki
2011-08-09 11:46 ` Michal Hocko
2011-08-09 23:54 ` KAMEZAWA Hiroyuki
2011-08-10 7:29 ` 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=20110818092421.856b74fe.kamezawa.hiroyu@jp.fujitsu.com \
--to=kamezawa.hiroyu@jp.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=bsingharora@gmail.com \
--cc=jweiner@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.cz \
/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