linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
To: Cody P Schafer <cody@linux.vnet.ibm.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mgorman@suse.de>, Linux MM <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/3] mm/page_alloc: convert zone_pcp_update() to use on_each_cpu() instead of stop_machine()
Date: Mon, 08 Apr 2013 18:18:50 -0400	[thread overview]
Message-ID: <5163424A.4000106@gmail.com> (raw)
In-Reply-To: <51631F4D.7050504@linux.vnet.ibm.com>

(4/8/13 3:49 PM), Cody P Schafer wrote:
> On 04/08/2013 12:26 PM, KOSAKI Motohiro wrote:
>> (4/8/13 1:32 PM), Cody P Schafer wrote:
>>> On 04/07/2013 08:39 AM, KOSAKI Motohiro wrote:
>>>> (4/5/13 4:33 PM), Cody P Schafer wrote:
>>>>> No off-cpu users of the percpu pagesets exist.
>>>>>
>>>>> zone_pcp_update()'s goal is to adjust the ->high and ->mark members of a
>>>>> percpu pageset based on a zone's ->managed_pages. We don't need to drain
>>>>> the entire percpu pageset just to modify these fields. Avoid calling
>>>>> setup_pageset() (and the draining required to call it) and instead just
>>>>> set the fields' values.
>>>>>
>>>>> This does change the behavior of zone_pcp_update() as the percpu
>>>>> pagesets will not be drained when zone_pcp_update() is called (they will
>>>>> end up being shrunk, not completely drained, later when a 0-order page
>>>>> is freed in free_hot_cold_page()).
>>>>>
>>>>> Signed-off-by: Cody P Schafer <cody@linux.vnet.ibm.com>
>>>>
>>>> NAK.
>>>>
>>>> 1) zone_pcp_update() is only used from memory hotplug and it require page drain.
>>>
>>> I'm looking at this code because I'm currently working on a patchset
>>> which adds another interface which modifies zone sizes, so "only used
>>> from memory hotplug" is a temporary thing (unless I discover that
>>> zone_pcp_update() is not intended to do what I want it to do).
>>
>> maybe yes, maybe no. I don't know temporary or not. However the fact is,
>> you must not break anywhere. You need to look all caller always.
> 
> Right, which is why I want to understand memory hotplug's actual 
> requirements.
> 
>>>> 2) stop_machin is used for avoiding race. just removing it is insane.
>>>
>>> What race? Is there a cross cpu access to ->high & ->batch that makes
>>> using on_each_cpu() instead of stop_machine() inappropriate? It is
>>> absolutely not just being removed.
>>
>> OK, I missed that. however your code is still wrong.
>> However you can't call free_pcppages_bulk() from interrupt context and
>> then you can't use on_each_cpu() anyway.
> 
> Given drain_pages() implementation, I find that hard to believe (It uses 
> on_each_cpu_mask() and eventually calls free_pcppages_bulk()).
> 
> Can you provide a reference backing up your statement?

Grr. I missed again. OK you are right. go ahead.



> If this turns out to be an issue, schedule_on_each_cpu() could be an 
> alternative.

no way. schedule_on_each_cpu() is more problematic and it should be removed
in the future.
schedule_on_each_cpu() can only be used when caller task don't have any lock.
otherwise it may make deadlock.







--
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:[~2013-04-08 22:18 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-05 20:33 [PATCH 0/3] mm: fixup changers of per cpu pageset's ->high and ->batch Cody P Schafer
2013-04-05 20:33 ` [PATCH 1/3] mm/page_alloc: factor out setting of pcp->high and pcp->batch Cody P Schafer
2013-04-07  1:37   ` Simon Jeons
2013-04-08 17:39     ` Cody P Schafer
2013-04-09  5:42       ` Simon Jeons
2013-04-05 20:33 ` [PATCH 2/3] mm/page_alloc: convert zone_pcp_update() to use on_each_cpu() instead of stop_machine() Cody P Schafer
2013-04-07 15:39   ` KOSAKI Motohiro
2013-04-08 17:32     ` Cody P Schafer
2013-04-08 19:26       ` KOSAKI Motohiro
2013-04-08 19:49         ` Cody P Schafer
2013-04-08 22:18           ` KOSAKI Motohiro [this message]
2013-04-09  1:52             ` Cody P Schafer
2013-04-05 20:33 ` [PATCH 3/3] mm: when handling percpu_pagelist_fraction, use on_each_cpu() to set percpu pageset fields Cody P Schafer
2013-04-07  1:56   ` Simon Jeons
2013-04-08 17:34     ` Cody P Schafer
2013-04-07 15:41   ` KOSAKI Motohiro
2013-04-08 12:20   ` Gilad Ben-Yossef
2013-04-08 17:28     ` Cody P Schafer
2013-04-08 19:50       ` Cody P Schafer
2013-04-08 22:23         ` KOSAKI Motohiro
2013-04-09  6:03       ` Gilad Ben-Yossef
2013-04-09  6:06         ` Gilad Ben-Yossef
2013-04-09 19:27           ` Cody P Schafer
2013-04-08 19:16     ` KOSAKI Motohiro
2013-04-07  1:32 ` [PATCH 0/3] mm: fixup changers of per cpu pageset's ->high and ->batch Simon Jeons
2013-04-08 19:37   ` Cody P Schafer
2013-04-07 15:23 ` KOSAKI Motohiro
2013-04-08 17:16   ` Cody P Schafer
2013-04-08 19:08     ` KOSAKI Motohiro
2013-04-08 21:17       ` Cody P Schafer

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=5163424A.4000106@gmail.com \
    --to=kosaki.motohiro@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=cody@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    /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).