All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <dave@linux.vnet.ibm.com>
To: gerald.schaefer@de.ibm.com
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, schwidefsky@de.ibm.com,
	heiko.carstens@de.ibm.com, kamezawa.hiroyu@jp.fujitsu.com,
	y-goto@jp.fujitsu.com, npiggin@suse.de
Subject: Re: [PATCH] memory hotplug: run lru_add_drain_all() on each cpu
Date: Wed, 03 Dec 2008 14:16:07 -0800	[thread overview]
Message-ID: <1228342567.13111.11.camel@nimitz> (raw)
In-Reply-To: <1228339524.6598.11.camel@t60p>

On Wed, 2008-12-03 at 22:25 +0100, Gerald Schaefer wrote:
> offline_pages() calls lru_add_drain_all() followed by drain_all_pages().
> While drain_all_pages() works on each cpu, lru_add_drain_all() only runs
> on the current cpu for architectures w/o CONFIG_NUMA.

I'm a bit confused why this is.  Is this because the LRUs are per-zone
and we expected !CONFIG_NUMA systems to only have LRUs sitting on the
same (only) node as the current CPU?

This doesn't make any sense, though.  The pagevecs that
drain_cpu_pagevecs() actually empties out are per-cpu.

> This let us run
> into the BUG_ON(!PageBuddy(page)) in __offline_isolated_pages() during
> memory hotplug stress test on s390. The page in question was still on the
> pcp list, because of a race with lru_add_drain_all() and drain_all_pages()
> on different cpus.
> 
> This is fixed with this patch by adding CONFIG_MEMORY_HOTREMOVE to the
> lru_add_drain_all() #ifdef, to let it run on each cpu.

This doesn't seem right to me.  CONFIG_MEMORY_HOTREMOVE doesn't change
the layout of the LRUs, unlike NUMA or UNEVICTABLE_LRU.  So, I think
this bug is more due to the hotremove code mis-expecting behavior out of
lru_add_drain_all().

Why does this not affect the other lru_add_drain_all() users?

-- Dave


WARNING: multiple messages have this Message-ID (diff)
From: Dave Hansen <dave@linux.vnet.ibm.com>
To: gerald.schaefer@de.ibm.com
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, schwidefsky@de.ibm.com,
	heiko.carstens@de.ibm.com, kamezawa.hiroyu@jp.fujitsu.com,
	y-goto@jp.fujitsu.com, npiggin@suse.de
Subject: Re: [PATCH] memory hotplug: run lru_add_drain_all() on each cpu
Date: Wed, 03 Dec 2008 14:16:07 -0800	[thread overview]
Message-ID: <1228342567.13111.11.camel@nimitz> (raw)
In-Reply-To: <1228339524.6598.11.camel@t60p>

On Wed, 2008-12-03 at 22:25 +0100, Gerald Schaefer wrote:
> offline_pages() calls lru_add_drain_all() followed by drain_all_pages().
> While drain_all_pages() works on each cpu, lru_add_drain_all() only runs
> on the current cpu for architectures w/o CONFIG_NUMA.

I'm a bit confused why this is.  Is this because the LRUs are per-zone
and we expected !CONFIG_NUMA systems to only have LRUs sitting on the
same (only) node as the current CPU?

This doesn't make any sense, though.  The pagevecs that
drain_cpu_pagevecs() actually empties out are per-cpu.

> This let us run
> into the BUG_ON(!PageBuddy(page)) in __offline_isolated_pages() during
> memory hotplug stress test on s390. The page in question was still on the
> pcp list, because of a race with lru_add_drain_all() and drain_all_pages()
> on different cpus.
> 
> This is fixed with this patch by adding CONFIG_MEMORY_HOTREMOVE to the
> lru_add_drain_all() #ifdef, to let it run on each cpu.

This doesn't seem right to me.  CONFIG_MEMORY_HOTREMOVE doesn't change
the layout of the LRUs, unlike NUMA or UNEVICTABLE_LRU.  So, I think
this bug is more due to the hotremove code mis-expecting behavior out of
lru_add_drain_all().

Why does this not affect the other lru_add_drain_all() users?

-- Dave

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

  reply	other threads:[~2008-12-03 22:16 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-03 21:25 [PATCH] memory hotplug: run lru_add_drain_all() on each cpu Gerald Schaefer
2008-12-03 21:25 ` Gerald Schaefer
2008-12-03 22:16 ` Dave Hansen [this message]
2008-12-03 22:16   ` Dave Hansen
2008-12-04  0:31   ` KAMEZAWA Hiroyuki
2008-12-04  0:31     ` KAMEZAWA Hiroyuki
2008-12-04  2:14     ` [PATCH] mm: remove UP version lru_add_drain_all() KOSAKI Motohiro
2008-12-04  2:14       ` KOSAKI Motohiro
2008-12-04  2:23       ` KOSAKI Motohiro
2008-12-04  2:23         ` KOSAKI Motohiro
2008-12-04 18:01       ` Gerald Schaefer
2008-12-04 18:01         ` Gerald Schaefer
2008-12-05 13:08   ` [PATCH] memory hotplug: run lru_add_drain_all() on each cpu Gerald Schaefer
2008-12-05 13:08     ` Gerald Schaefer
2008-12-05 20:43     ` Dave Hansen
2008-12-05 20:43       ` Dave Hansen
2008-12-07  4:43       ` KOSAKI Motohiro
2008-12-07  4:43         ` KOSAKI Motohiro
2008-12-08 13:56         ` Lee Schermerhorn
2008-12-08 13:56           ` Lee Schermerhorn
2008-12-08 14:30           ` KOSAKI Motohiro
2008-12-08 14:30             ` KOSAKI Motohiro

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=1228342567.13111.11.camel@nimitz \
    --to=dave@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=gerald.schaefer@de.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=npiggin@suse.de \
    --cc=schwidefsky@de.ibm.com \
    --cc=y-goto@jp.fujitsu.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.