All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@cmpxchg.org>
To: Michal Hocko <mhocko@suse.cz>
Cc: linux-mm@kvack.org, Hugh Dickins <hughd@google.com>,
	Tejun Heo <tj@kernel.org>,
	cgroups@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 6/9] mm: memcontrol: remove ordering between pc->mem_cgroup and PageCgroupUsed
Date: Tue, 27 May 2014 15:45:00 -0400	[thread overview]
Message-ID: <20140527194500.GC2878@cmpxchg.org> (raw)
In-Reply-To: <20140523132043.GB22135@dhcp22.suse.cz>

On Fri, May 23, 2014 at 03:20:43PM +0200, Michal Hocko wrote:
> On Wed 30-04-14 16:25:40, Johannes Weiner wrote:
> > There is a write barrier between setting pc->mem_cgroup and
> > PageCgroupUsed, which was added to allow LRU operations to lookup the
> > memcg LRU list of a page without acquiring the page_cgroup lock.  But
> > ever since 38c5d72f3ebe ("memcg: simplify LRU handling by new rule"),
> > pages are ensured to be off-LRU while charging, so nobody else is
> > changing LRU state while pc->mem_cgroup is being written.
> 
> This is quite confusing. Why do we have the lrucare path then?

Some charge paths start with the page on the LRU, lrucare makes sure
it's off during the charge.

> The code is quite tricky so this deserves a more detailed explanation
> IMO.
> 
> There are only 3 paths which check both the flag and mem_cgroup (
> without page_cgroup_lock) get_mctgt_type* and mem_cgroup_page_lruvec AFAICS.
> None of them have rmb so there was no guarantee about ordering anyway.

Yeah, exactly.  As per the changelog, this is a remnant of the way it
used to work but it's no longer needed because of guaranteed off-LRU
state.

> > Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
> 
> Anyway, the change is welcome
> Acked-by: Michal Hocko <mhocko@suse.cz>

Thanks!

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

WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <hannes@cmpxchg.org>
To: Michal Hocko <mhocko@suse.cz>
Cc: linux-mm@kvack.org, Hugh Dickins <hughd@google.com>,
	Tejun Heo <tj@kernel.org>,
	cgroups@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 6/9] mm: memcontrol: remove ordering between pc->mem_cgroup and PageCgroupUsed
Date: Tue, 27 May 2014 15:45:00 -0400	[thread overview]
Message-ID: <20140527194500.GC2878@cmpxchg.org> (raw)
In-Reply-To: <20140523132043.GB22135@dhcp22.suse.cz>

On Fri, May 23, 2014 at 03:20:43PM +0200, Michal Hocko wrote:
> On Wed 30-04-14 16:25:40, Johannes Weiner wrote:
> > There is a write barrier between setting pc->mem_cgroup and
> > PageCgroupUsed, which was added to allow LRU operations to lookup the
> > memcg LRU list of a page without acquiring the page_cgroup lock.  But
> > ever since 38c5d72f3ebe ("memcg: simplify LRU handling by new rule"),
> > pages are ensured to be off-LRU while charging, so nobody else is
> > changing LRU state while pc->mem_cgroup is being written.
> 
> This is quite confusing. Why do we have the lrucare path then?

Some charge paths start with the page on the LRU, lrucare makes sure
it's off during the charge.

> The code is quite tricky so this deserves a more detailed explanation
> IMO.
> 
> There are only 3 paths which check both the flag and mem_cgroup (
> without page_cgroup_lock) get_mctgt_type* and mem_cgroup_page_lruvec AFAICS.
> None of them have rmb so there was no guarantee about ordering anyway.

Yeah, exactly.  As per the changelog, this is a remnant of the way it
used to work but it's no longer needed because of guaranteed off-LRU
state.

> > Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
> 
> Anyway, the change is welcome
> Acked-by: Michal Hocko <mhocko@suse.cz>

Thanks!

  reply	other threads:[~2014-05-27 19:45 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-30 20:25 [patch 0/9] mm: memcontrol: naturalize charge lifetime Johannes Weiner
2014-04-30 20:25 ` Johannes Weiner
2014-04-30 20:25 ` [patch 1/9] mm: memcontrol: fold mem_cgroup_do_charge() Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
2014-04-30 20:25 ` [patch 2/9] mm: memcontrol: rearrange charging fast path Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
     [not found]   ` <1398889543-23671-3-git-send-email-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-05-07 14:33     ` Michal Hocko
2014-05-07 14:33       ` Michal Hocko
2014-05-07 14:33       ` Michal Hocko
2014-05-08 18:22       ` Johannes Weiner
2014-05-08 18:22         ` Johannes Weiner
     [not found]         ` <20140508182224.GO19914-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-05-12  7:59           ` Michal Hocko
2014-05-12  7:59             ` Michal Hocko
2014-05-12  7:59             ` Michal Hocko
2014-04-30 20:25 ` [patch 3/9] mm: memcontrol: retry reclaim for oom-disabled and __GFP_NOFAIL charges Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
2014-05-07 14:43   ` Michal Hocko
2014-05-07 14:43     ` Michal Hocko
2014-05-08 18:28     ` Johannes Weiner
2014-05-08 18:28       ` Johannes Weiner
2014-04-30 20:25 ` [patch 4/9] mm: memcontrol: catch root bypass in move precharge Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
2014-05-07 14:55   ` Michal Hocko
2014-05-07 14:55     ` Michal Hocko
2014-05-08 18:30     ` Johannes Weiner
2014-05-08 18:30       ` Johannes Weiner
2014-04-30 20:25 ` [patch 5/9] mm: memcontrol: use root_mem_cgroup res_counter Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
2014-05-07 15:14   ` Michal Hocko
2014-05-07 15:14     ` Michal Hocko
2014-04-30 20:25 ` [patch 6/9] mm: memcontrol: remove ordering between pc->mem_cgroup and PageCgroupUsed Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
     [not found]   ` <1398889543-23671-7-git-send-email-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-05-23 13:20     ` Michal Hocko
2014-05-23 13:20       ` Michal Hocko
2014-05-23 13:20       ` Michal Hocko
2014-05-27 19:45       ` Johannes Weiner [this message]
2014-05-27 19:45         ` Johannes Weiner
2014-05-28 11:31         ` Michal Hocko
2014-05-28 11:31           ` Michal Hocko
2014-04-30 20:25 ` [patch 7/9] mm: memcontrol: do not acquire page_cgroup lock for kmem pages Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
2014-05-23 13:39   ` Michal Hocko
2014-05-23 13:39     ` Michal Hocko
2014-05-23 13:40     ` Michal Hocko
2014-05-23 13:40       ` Michal Hocko
     [not found]     ` <20140523133938.GC22135-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2014-05-23 14:29       ` Vladimir Davydov
2014-05-23 14:29         ` Vladimir Davydov
2014-05-23 14:29         ` Vladimir Davydov
2014-05-27 19:53     ` Johannes Weiner
2014-05-27 19:53       ` Johannes Weiner
     [not found]       ` <20140527195342.GD2878-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-05-28 11:33         ` Michal Hocko
2014-05-28 11:33           ` Michal Hocko
2014-05-28 11:33           ` Michal Hocko
2014-04-30 20:25 ` [patch 8/9] mm: memcontrol: rewrite charge API Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
     [not found]   ` <1398889543-23671-9-git-send-email-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-05-23 14:18     ` Michal Hocko
2014-05-23 14:18       ` Michal Hocko
2014-05-23 14:18       ` Michal Hocko
2014-05-23 14:54   ` Michal Hocko
2014-05-23 14:54     ` Michal Hocko
     [not found]     ` <20140523145413.GF22135-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2014-05-23 15:18       ` Michal Hocko
2014-05-23 15:18         ` Michal Hocko
2014-05-23 15:18         ` Michal Hocko
2014-05-27 20:05     ` Johannes Weiner
2014-05-27 20:05       ` Johannes Weiner
     [not found]       ` <20140527200516.GE2878-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-05-28 11:37         ` Michal Hocko
2014-05-28 11:37           ` Michal Hocko
2014-05-28 11:37           ` Michal Hocko
2014-04-30 20:25 ` [patch 9/9] mm: memcontrol: rewrite uncharge API Johannes Weiner
2014-04-30 20:25   ` Johannes Weiner
2014-05-04 14:32   ` Johannes Weiner
2014-05-04 14:32     ` Johannes Weiner
2014-05-27  7:43   ` Kamezawa Hiroyuki
2014-05-27  7:43     ` Kamezawa Hiroyuki
2014-05-27 18:59     ` Johannes Weiner
2014-05-27 18:59       ` Johannes Weiner
     [not found] ` <1398889543-23671-1-git-send-email-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-05-02 11:26   ` [patch 0/9] mm: memcontrol: naturalize charge lifetime Michal Hocko
2014-05-02 11:26     ` Michal Hocko
2014-05-02 11:26     ` 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=20140527194500.GC2878@cmpxchg.org \
    --to=hannes@cmpxchg.org \
    --cc=cgroups@vger.kernel.org \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.cz \
    --cc=tj@kernel.org \
    /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.