From: Tejun Heo <tj@kernel.org>
To: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>,
Andrew Morton <akpm@linux-foundation.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
LKML <linux-kernel@vger.kernel.org>,
linux-mm@kvack.org
Subject: Re: [PATCH -v2 4/6] memcg: make sure that memcg is not offline when charging
Date: Wed, 5 Feb 2014 10:42:02 -0500 [thread overview]
Message-ID: <20140205154202.GA2786@htj.dyndns.org> (raw)
In-Reply-To: <20140205152821.GY6963@cmpxchg.org>
Hello, guys.
On Wed, Feb 05, 2014 at 10:28:21AM -0500, Johannes Weiner wrote:
> I thought more about this and talked to Tejun as well. He told me
> that the rcu grace period between disabling tryget and calling
> css_offline() is currently an implementation detail of the refcounter
> that css uses, but it's not a guarantee. So my initial idea of
Yeah, that's an implementation detail coming from how percpu_ref is
implemented at the moment. Also, it's a sched_rcu grace period, not a
normal one. The only RCU-related guarnatee that cgroup core gives is
that there will be a full RCU grace period between css's ref reaching
zero and invocation of ->css_free() so that it's safe to do
css_tryget() inside RCU critical sections.
In short, offlining is *not* protected by RCU. Freeing is.
> Well, css_free() is the callback invoked when the ref counter hits 0,
> and that is a guarantee. From a memcg perspective, it's the right
> place to do reparenting, not css_offline().
So, css_offline() is cgroup telling controllers two things.
* The destruction of the css, which will commence when css ref reaches
zero, has initiated. If you're holding any long term css refs for
caching and stuff, put them so that destruction can actually happen.
* Any css_tryget() attempts which haven't finished yet are guaranteed
to fail. (there's no implied RCU protection here)
Maybe offline is a bit of misnomer. It's really just telling the
controllers to get prepared to be destroyed.
> Here is the only exception to the above: swapout records maintain
> permanent css references, so they prevent css_free() from running.
> For that reason alone we should run one optimistic reparenting in
> css_offline() to make sure one swap record does not pin gigabytes of
> pages in an offlined cgroup, which is unreachable for reclaim. But
> the reparenting for *correctness* is in css_free(), not css_offline().
A more canonical use case can be found in blkcg. blkcg holds "cache"
css refs for optimization in the indexing data structure. On offline,
blkcg purges those refs so that those stale cache refs don't put off
actual destruction for too long. But yeah the above sounds like a
plausible use case too.
Thanks.
--
tejun
--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2014-02-05 15:42 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-04 13:28 [PATCH -v2 0/6] memcg: some charge path cleanups + css offline vs. charge race fix Michal Hocko
2014-02-04 13:28 ` [PATCH -v2 1/6] memcg: do not replicate try_get_mem_cgroup_from_mm in __mem_cgroup_try_charge Michal Hocko
2014-02-04 15:55 ` Johannes Weiner
2014-02-04 16:05 ` Michal Hocko
2014-02-05 13:49 ` Michal Hocko
2014-02-04 13:28 ` [PATCH -v2 2/6] memcg: cleanup charge routines Michal Hocko
2014-02-04 16:05 ` Johannes Weiner
2014-02-04 16:12 ` Michal Hocko
2014-02-04 16:40 ` Johannes Weiner
2014-02-04 19:11 ` Michal Hocko
2014-02-04 19:36 ` Johannes Weiner
2014-02-04 13:28 ` [PATCH -v2 3/6] memcg: mm == NULL is not allowed for mem_cgroup_try_charge_mm Michal Hocko
2014-02-04 16:05 ` Johannes Weiner
2014-02-04 13:28 ` [PATCH -v2 4/6] memcg: make sure that memcg is not offline when charging Michal Hocko
2014-02-04 16:29 ` Johannes Weiner
2014-02-05 13:38 ` Michal Hocko
2014-02-05 15:28 ` Johannes Weiner
2014-02-05 15:42 ` Tejun Heo [this message]
2014-02-05 16:19 ` Michal Hocko
2014-02-05 16:29 ` Michal Hocko
2014-02-05 16:30 ` Tejun Heo
2014-02-05 16:45 ` Johannes Weiner
2014-02-05 17:23 ` Michal Hocko
2014-02-04 13:28 ` [PATCH -v2 5/6] memcg, kmem: clean up memcg parameter handling Michal Hocko
2014-02-04 16:32 ` Johannes Weiner
2014-02-04 16:42 ` Michal Hocko
2014-02-04 13:29 ` [PATCH -v2 6/6] Revert "mm: memcg: fix race condition between memcg teardown and swapin" 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=20140205154202.GA2786@htj.dyndns.org \
--to=tj@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kosaki.motohiro@jp.fujitsu.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;
as well as URLs for NNTP newsgroup(s).