All of lore.kernel.org
 help / color / mirror / Atom feed
From: Li Zefan <lizf@cn.fujitsu.com>
To: Hugh Dickins <hughd@google.com>
Cc: Tejun Heo <tj@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Manfred Spraul <manfred@colorfullife.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Ying Han <yinghan@google.com>, Greg Thelen <gthelen@google.com>,
	cgroups@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] memcg: restore ss->id_lock to spinlock, using RCU for next
Date: Thu, 19 Jan 2012 15:31:03 +0800	[thread overview]
Message-ID: <4F17C6B7.5020606@cn.fujitsu.com> (raw)
In-Reply-To: <alpine.LSU.2.00.1201182155480.7862@eggly.anvils>

Hugh Dickins wrote:
> Commit c1e2ee2dc436 "memcg: replace ss->id_lock with a rwlock" has
> now been seen to cause the unfair behavior we should have expected
> from converting a spinlock to an rwlock: softlockup in cgroup_mkdir(),
> whose get_new_cssid() is waiting for the wlock, while there are 19
> tasks using the rlock in css_get_next() to get on with their memcg
> workload (in an artificial test, admittedly).  Yet lib/idr.c was
> made suitable for RCU way back.
> 
> 1. Revert that commit, restoring ss->id_lock to a spinlock.
> 
> 2. Make one small adjustment to idr_get_next(): take the height from
> the top layer (stable under RCU) instead of from the root (unprotected
> by RCU), as idr_find() does.
> 
> 3. Remove lock and unlock around css_get_next()'s call to idr_get_next():
> memcg iterators (only users of css_get_next) already did rcu_read_lock(),
> and comment demands that, but add a WARN_ON_ONCE to make sure of it.
> 
> Signed-off-by: Hugh Dickins <hughd@google.com>

Acked-by: Li Zefan <lizf@cn.fujitsu.com>

> ---
> 
>  include/linux/cgroup.h |    2 +-
>  kernel/cgroup.c        |   19 +++++++++----------
>  lib/idr.c              |    4 ++--
>  3 files changed, 12 insertions(+), 13 deletions(-)

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

WARNING: multiple messages have this Message-ID (diff)
From: Li Zefan <lizf@cn.fujitsu.com>
To: Hugh Dickins <hughd@google.com>
Cc: Tejun Heo <tj@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Manfred Spraul <manfred@colorfullife.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Ying Han <yinghan@google.com>, Greg Thelen <gthelen@google.com>,
	cgroups@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] memcg: restore ss->id_lock to spinlock, using RCU for next
Date: Thu, 19 Jan 2012 15:31:03 +0800	[thread overview]
Message-ID: <4F17C6B7.5020606@cn.fujitsu.com> (raw)
In-Reply-To: <alpine.LSU.2.00.1201182155480.7862@eggly.anvils>

Hugh Dickins wrote:
> Commit c1e2ee2dc436 "memcg: replace ss->id_lock with a rwlock" has
> now been seen to cause the unfair behavior we should have expected
> from converting a spinlock to an rwlock: softlockup in cgroup_mkdir(),
> whose get_new_cssid() is waiting for the wlock, while there are 19
> tasks using the rlock in css_get_next() to get on with their memcg
> workload (in an artificial test, admittedly).  Yet lib/idr.c was
> made suitable for RCU way back.
> 
> 1. Revert that commit, restoring ss->id_lock to a spinlock.
> 
> 2. Make one small adjustment to idr_get_next(): take the height from
> the top layer (stable under RCU) instead of from the root (unprotected
> by RCU), as idr_find() does.
> 
> 3. Remove lock and unlock around css_get_next()'s call to idr_get_next():
> memcg iterators (only users of css_get_next) already did rcu_read_lock(),
> and comment demands that, but add a WARN_ON_ONCE to make sure of it.
> 
> Signed-off-by: Hugh Dickins <hughd@google.com>

Acked-by: Li Zefan <lizf@cn.fujitsu.com>

> ---
> 
>  include/linux/cgroup.h |    2 +-
>  kernel/cgroup.c        |   19 +++++++++----------
>  lib/idr.c              |    4 ++--
>  3 files changed, 12 insertions(+), 13 deletions(-)

  reply	other threads:[~2012-01-19  7:31 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-19  6:05 [PATCH] memcg: restore ss->id_lock to spinlock, using RCU for next Hugh Dickins
2012-01-19  6:05 ` Hugh Dickins
2012-01-19  7:31 ` Li Zefan [this message]
2012-01-19  7:31   ` Li Zefan
     [not found] ` <alpine.LSU.2.00.1201182155480.7862-fupSdm12i1nKWymIFiNcPA@public.gmane.org>
2012-01-19  6:58   ` KAMEZAWA Hiroyuki
2012-01-19  6:58     ` KAMEZAWA Hiroyuki
2012-01-19  6:58     ` KAMEZAWA Hiroyuki
2012-01-19  7:33   ` Eric Dumazet
2012-01-19  7:33     ` Eric Dumazet
2012-01-19  7:33     ` Eric Dumazet
2012-01-19 12:28     ` Tejun Heo
2012-01-19 12:28       ` Tejun Heo
2012-01-19 12:28       ` Tejun Heo
2012-01-19 13:30       ` Eric Dumazet
2012-01-19 13:30         ` Eric Dumazet
2012-01-19 13:30         ` Eric Dumazet
2012-01-19 20:46         ` Hugh Dickins
2012-01-19 20:46           ` Hugh Dickins
2012-01-19 20:48           ` [PATCH 1/3] idr: make idr_get_next() good for rcu_read_lock() Hugh Dickins
2012-01-19 20:48             ` Hugh Dickins
2012-01-20 23:48             ` Andrew Morton
2012-01-20 23:48               ` Andrew Morton
2012-01-21  3:45               ` Hugh Dickins
2012-01-21  3:45                 ` Hugh Dickins
     [not found]                 ` <alpine.LSU.2.00.1201201922110.1396-fupSdm12i1nKWymIFiNcPA@public.gmane.org>
2012-01-21 20:43                   ` Randy Dunlap
2012-01-21 20:43                     ` Randy Dunlap
2012-01-21 20:43                     ` Randy Dunlap
     [not found]           ` <alpine.LSU.2.00.1201191235330.29542-fupSdm12i1nKWymIFiNcPA@public.gmane.org>
2012-01-19 20:50             ` [PATCH 2/3] cgroup: revert ss_id_lock to spinlock Hugh Dickins
2012-01-19 20:50               ` Hugh Dickins
2012-01-19 20:50               ` Hugh Dickins
2012-01-19 20:51           ` [PATCH 3/3] memcg: let css_get_next() rely upon rcu_read_lock() Hugh Dickins
2012-01-19 20:51             ` Hugh Dickins
     [not found]             ` <alpine.LSU.2.00.1201191250210.29542-fupSdm12i1nKWymIFiNcPA@public.gmane.org>
2012-01-19 20:53               ` Tejun Heo
2012-01-19 20:53                 ` Tejun Heo
2012-01-19 20:53                 ` Tejun Heo

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=4F17C6B7.5020606@cn.fujitsu.com \
    --to=lizf@cn.fujitsu.com \
    --cc=akpm@linux-foundation.org \
    --cc=cgroups@vger.kernel.org \
    --cc=gthelen@google.com \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=manfred@colorfullife.com \
    --cc=tj@kernel.org \
    --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.