From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Minchan Kim <minchan.kim@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
CAI Qian <caiqian@redhat.com>,
avagin@gmail.com, Andrey Vagin <avagin@openvz.org>,
Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mel@csn.ul.ie>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
David Rientjes <rientjes@google.com>,
Hugh Dickins <hughd@google.com>, Oleg Nesterov <oleg@redhat.com>
Subject: Re: [PATCH 2/4] oom: kill younger process first
Date: Thu, 12 May 2011 07:38:44 -0700 [thread overview]
Message-ID: <20110512143844.GQ2258@linux.vnet.ibm.com> (raw)
In-Reply-To: <BANLkTi=dvb5tXxzLwY+vgG8o4eYq5f_X8Q@mail.gmail.com>
On Thu, May 12, 2011 at 01:17:13PM +0900, Minchan Kim wrote:
> On Thu, May 12, 2011 at 12:39 PM, KAMEZAWA Hiroyuki
> <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > On Thu, 12 May 2011 11:23:38 +0900
> > Minchan Kim <minchan.kim@gmail.com> wrote:
> >
> >> On Thu, May 12, 2011 at 10:53 AM, KAMEZAWA Hiroyuki
> >> <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> >> > On Thu, 12 May 2011 10:30:45 +0900
> >> > Minchan Kim <minchan.kim@gmail.com> wrote:
> >
> >> > As above implies, (B)->prev pointer is invalid pointer after list_del().
> >> > So, there will be race with list modification and for_each_list_reverse under
> >> > rcu_read__lock()
> >> >
> >> > So, when you need to take atomic lock (as tasklist lock is) is...
> >> >
> >> > 1) You can't check 'entry' is valid or not...
> >> > In above for_each_list_rcu(), you may visit an object which is under removing.
> >> > You need some flag or check to see the object is valid or not.
> >> >
> >> > 2) you want to use list_for_each_safe().
> >> > You can't do list_del() an object which is under removing...
> >> >
> >> > 3) You want to walk the list in reverse.
> >> >
> >> > 3) Some other reasons. For example, you'll access an object pointed by the
> >> > 'entry' and the object is not rcu safe.
> >> >
> >> > make sense ?
> >>
> >> Yes. Thanks, Kame.
> >> It seems It is caused by prev poisoning of list_del_rcu.
> >> If we remove it, isn't it possible to traverse reverse without atomic lock?
> >>
> >
> > IIUC, it's possible (Fix me if I'm wrong) but I don't like that because of 2 reasons.
> >
> > 1. LIST_POISON is very important information at debug.
>
> Indeed.
> But if we can get a better something although we lost debug facility,
> I think it would be okay.
>
> >
> > 2. If we don't clear prev pointer, ok, we'll allow 2 directional walk of list
> > under RCU.
> > But, in following case
> > 1. you are now at (C). you'll visit (C)->next...(D)
> > 2. you are now at (D). you want to go back to (C) via (D)->prev.
> > 3. But (D)->prev points to (B)
> >
> > It's not a 2 directional list, something other or broken one.
>
> Yes. but it shouldn't be a problem in RCU semantics.
> If you need such consistency, you should use lock.
>
> I recall old thread about it.
> In http://lwn.net/Articles/262464/, mmutz and Paul already discussed
> about it. :)
>
> > Then, the rculist is 1 directional list in nature, I think.
>
> Yes. But Why RCU become 1 directional list is we can't find a useful usecases.
>
> >
> > So, without very very big reason, we should keep POISON.
>
> Agree.
> I don't insist on it as it's not a useful usecase for persuading Paul.
> That's because it's not a hot path.
>
> It's started from just out of curiosity.
> Thanks for very much clarifying that, Kame!
Indeed, we would need a large performance/scalability/simplicity advantage
to put up with such a loss of debugging information. If it turns out
that you really need this, please let me know, but please also provide
data supporting your need.
Thanx, Paul
WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Minchan Kim <minchan.kim@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
CAI Qian <caiqian@redhat.com>,
avagin@gmail.com, Andrey Vagin <avagin@openvz.org>,
Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mel@csn.ul.ie>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
David Rientjes <rientjes@google.com>,
Hugh Dickins <hughd@google.com>, Oleg Nesterov <oleg@redhat.com>
Subject: Re: [PATCH 2/4] oom: kill younger process first
Date: Thu, 12 May 2011 07:38:44 -0700 [thread overview]
Message-ID: <20110512143844.GQ2258@linux.vnet.ibm.com> (raw)
In-Reply-To: <BANLkTi=dvb5tXxzLwY+vgG8o4eYq5f_X8Q@mail.gmail.com>
On Thu, May 12, 2011 at 01:17:13PM +0900, Minchan Kim wrote:
> On Thu, May 12, 2011 at 12:39 PM, KAMEZAWA Hiroyuki
> <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > On Thu, 12 May 2011 11:23:38 +0900
> > Minchan Kim <minchan.kim@gmail.com> wrote:
> >
> >> On Thu, May 12, 2011 at 10:53 AM, KAMEZAWA Hiroyuki
> >> <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> >> > On Thu, 12 May 2011 10:30:45 +0900
> >> > Minchan Kim <minchan.kim@gmail.com> wrote:
> >
> >> > As above implies, (B)->prev pointer is invalid pointer after list_del().
> >> > So, there will be race with list modification and for_each_list_reverse under
> >> > rcu_read__lock()
> >> >
> >> > So, when you need to take atomic lock (as tasklist lock is) is...
> >> >
> >> > 1) You can't check 'entry' is valid or not...
> >> > In above for_each_list_rcu(), you may visit an object which is under removing.
> >> > You need some flag or check to see the object is valid or not.
> >> >
> >> > 2) you want to use list_for_each_safe().
> >> > You can't do list_del() an object which is under removing...
> >> >
> >> > 3) You want to walk the list in reverse.
> >> >
> >> > 3) Some other reasons. For example, you'll access an object pointed by the
> >> > 'entry' and the object is not rcu safe.
> >> >
> >> > make sense ?
> >>
> >> Yes. Thanks, Kame.
> >> It seems It is caused by prev poisoning of list_del_rcu.
> >> If we remove it, isn't it possible to traverse reverse without atomic lock?
> >>
> >
> > IIUC, it's possible (Fix me if I'm wrong) but I don't like that because of 2 reasons.
> >
> > 1. LIST_POISON is very important information at debug.
>
> Indeed.
> But if we can get a better something although we lost debug facility,
> I think it would be okay.
>
> >
> > 2. If we don't clear prev pointer, ok, we'll allow 2 directional walk of list
> > under RCU.
> > But, in following case
> > 1. you are now at (C). you'll visit (C)->next...(D)
> > 2. you are now at (D). you want to go back to (C) via (D)->prev.
> > 3. But (D)->prev points to (B)
> >
> > It's not a 2 directional list, something other or broken one.
>
> Yes. but it shouldn't be a problem in RCU semantics.
> If you need such consistency, you should use lock.
>
> I recall old thread about it.
> In http://lwn.net/Articles/262464/, mmutz and Paul already discussed
> about it. :)
>
> > Then, the rculist is 1 directional list in nature, I think.
>
> Yes. But Why RCU become 1 directional list is we can't find a useful usecases.
>
> >
> > So, without very very big reason, we should keep POISON.
>
> Agree.
> I don't insist on it as it's not a useful usecase for persuading Paul.
> That's because it's not a hot path.
>
> It's started from just out of curiosity.
> Thanks for very much clarifying that, Kame!
Indeed, we would need a large performance/scalability/simplicity advantage
to put up with such a loss of debugging information. If it turns out
that you really need this, please let me know, but please also provide
data supporting your need.
Thanx, Paul
--
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-05-12 14:38 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-05 11:44 [PATCH] mm: check zone->all_unreclaimable in all_unreclaimable() Andrey Vagin
2011-03-05 11:44 ` Andrey Vagin
2011-03-05 15:20 ` Minchan Kim
2011-03-05 15:20 ` Minchan Kim
2011-03-05 15:34 ` Andrew Vagin
2011-03-05 15:53 ` Minchan Kim
2011-03-05 15:53 ` Minchan Kim
2011-03-05 16:41 ` Andrew Vagin
2011-03-05 16:41 ` Andrew Vagin
2011-03-05 17:07 ` Minchan Kim
2011-03-05 17:07 ` Minchan Kim
2011-03-07 21:58 ` Andrew Morton
2011-03-07 21:58 ` Andrew Morton
2011-03-07 23:45 ` Minchan Kim
2011-03-07 23:45 ` Minchan Kim
2011-03-09 5:37 ` KAMEZAWA Hiroyuki
2011-03-09 5:37 ` KAMEZAWA Hiroyuki
2011-03-09 5:43 ` KAMEZAWA Hiroyuki
2011-03-09 5:43 ` KAMEZAWA Hiroyuki
2011-03-10 6:58 ` Minchan Kim
2011-03-10 6:58 ` Minchan Kim
2011-03-10 23:58 ` KAMEZAWA Hiroyuki
2011-03-10 23:58 ` KAMEZAWA Hiroyuki
2011-03-11 0:18 ` Minchan Kim
2011-03-11 0:18 ` Minchan Kim
2011-03-11 6:08 ` avagin
2011-03-11 6:08 ` avagin
2011-03-14 1:03 ` Minchan Kim
2011-03-14 1:03 ` Minchan Kim
2011-03-08 0:44 ` KAMEZAWA Hiroyuki
2011-03-08 0:44 ` KAMEZAWA Hiroyuki
2011-03-08 3:06 ` KOSAKI Motohiro
2011-03-08 3:06 ` KOSAKI Motohiro
2011-03-08 19:02 ` avagin
2011-03-08 19:02 ` avagin
2011-03-09 5:52 ` KAMEZAWA Hiroyuki
2011-03-09 5:52 ` KAMEZAWA Hiroyuki
2011-03-09 6:17 ` KOSAKI Motohiro
2011-03-09 6:17 ` KOSAKI Motohiro
2011-03-10 14:08 ` KOSAKI Motohiro
2011-03-10 14:08 ` KOSAKI Motohiro
2011-03-08 8:12 ` Andrew Vagin
2011-03-08 8:12 ` Andrew Vagin
2011-03-09 6:06 ` KAMEZAWA Hiroyuki
2011-03-09 6:06 ` KAMEZAWA Hiroyuki
2011-05-04 1:38 ` CAI Qian
2011-05-09 6:54 ` KOSAKI Motohiro
2011-05-09 6:54 ` KOSAKI Motohiro
2011-05-09 8:47 ` CAI Qian
2011-05-09 8:47 ` CAI Qian
2011-05-09 9:19 ` KOSAKI Motohiro
2011-05-09 9:19 ` KOSAKI Motohiro
2011-05-10 8:11 ` OOM Killer don't works at all if the system have >gigabytes memory (was Re: [PATCH] mm: check zone->all_unreclaimable in all_unreclaimable()) KOSAKI Motohiro
2011-05-10 8:11 ` KOSAKI Motohiro
2011-05-10 8:14 ` [PATCH 1/4] oom: improve dump_tasks() show items KOSAKI Motohiro
2011-05-10 8:14 ` KOSAKI Motohiro
2011-05-10 23:29 ` David Rientjes
2011-05-10 23:29 ` David Rientjes
2011-05-13 10:14 ` KOSAKI Motohiro
2011-05-13 10:14 ` KOSAKI Motohiro
2011-05-10 8:15 ` [PATCH 2/4] oom: kill younger process first KOSAKI Motohiro
2011-05-10 8:15 ` KOSAKI Motohiro
2011-05-10 23:31 ` David Rientjes
2011-05-10 23:31 ` David Rientjes
2011-05-13 10:15 ` KOSAKI Motohiro
2011-05-13 10:15 ` KOSAKI Motohiro
2011-05-11 23:33 ` Minchan Kim
2011-05-11 23:33 ` Minchan Kim
2011-05-12 0:52 ` KAMEZAWA Hiroyuki
2011-05-12 0:52 ` KAMEZAWA Hiroyuki
2011-05-12 1:30 ` Minchan Kim
2011-05-12 1:30 ` Minchan Kim
2011-05-12 1:53 ` KAMEZAWA Hiroyuki
2011-05-12 1:53 ` KAMEZAWA Hiroyuki
2011-05-12 2:23 ` Minchan Kim
2011-05-12 2:23 ` Minchan Kim
2011-05-12 3:39 ` KAMEZAWA Hiroyuki
2011-05-12 3:39 ` KAMEZAWA Hiroyuki
2011-05-12 4:17 ` Minchan Kim
2011-05-12 4:17 ` Minchan Kim
2011-05-12 14:38 ` Paul E. McKenney [this message]
2011-05-12 14:38 ` Paul E. McKenney
2011-05-13 10:18 ` KOSAKI Motohiro
2011-05-13 10:18 ` KOSAKI Motohiro
2011-05-10 8:15 ` [PATCH 3/4] oom: oom-killer don't use permillage of system-ram internally KOSAKI Motohiro
2011-05-10 8:15 ` KOSAKI Motohiro
2011-05-10 23:40 ` David Rientjes
2011-05-10 23:40 ` David Rientjes
2011-05-13 10:30 ` KOSAKI Motohiro
2011-05-13 10:30 ` KOSAKI Motohiro
2011-05-10 8:16 ` [PATCH 4/4] oom: don't kill random process KOSAKI Motohiro
2011-05-10 8:16 ` KOSAKI Motohiro
2011-05-10 23:41 ` David Rientjes
2011-05-10 23:41 ` David Rientjes
2011-05-10 23:22 ` OOM Killer don't works at all if the system have >gigabytes memory (was Re: [PATCH] mm: check zone->all_unreclaimable in all_unreclaimable()) David Rientjes
2011-05-10 23:22 ` David Rientjes
2011-05-11 2:30 ` CAI Qian
2011-05-11 2:30 ` CAI Qian
2011-05-11 20:34 ` David Rientjes
2011-05-11 20:34 ` David Rientjes
2011-05-12 0:13 ` Minchan Kim
2011-05-12 0:13 ` Minchan Kim
2011-05-12 19:38 ` David Rientjes
2011-05-12 19:38 ` David Rientjes
2011-05-13 4:16 ` Minchan Kim
2011-05-13 4:16 ` Minchan Kim
2011-05-13 11:04 ` KOSAKI Motohiro
2011-05-13 11:04 ` KOSAKI Motohiro
2011-05-16 20:42 ` David Rientjes
2011-05-16 20:42 ` David Rientjes
2011-05-13 6:53 ` CAI Qian
2011-05-13 6:53 ` CAI Qian
2011-05-16 20:46 ` David Rientjes
2011-05-16 20:46 ` David Rientjes
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=20110512143844.GQ2258@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=avagin@gmail.com \
--cc=avagin@openvz.org \
--cc=caiqian@redhat.com \
--cc=hughd@google.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@csn.ul.ie \
--cc=minchan.kim@gmail.com \
--cc=oleg@redhat.com \
--cc=rientjes@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.