All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang Liu <liuj97@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Wen Congyang <wency@cn.fujitsu.com>,
	David Rientjes <rientjes@google.com>,
	Jiang Liu <jiang.liu@huawei.com>,
	Maciej Rutecki <maciej.rutecki@gmail.com>,
	Chris Clayton <chris2553@googlemail.com>,
	"Rafael J . Wysocki" <rjw@sisk.pl>, Mel Gorman <mgorman@suse.de>,
	Minchan Kim <minchan@kernel.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Michal Hocko <mhocko@suse.cz>, Jianguo Wu <wujianguo@huawei.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [RFT PATCH v1 1/5] mm: introduce new field "managed_pages" to struct zone
Date: Wed, 21 Nov 2012 22:36:56 +0800	[thread overview]
Message-ID: <50ACE708.5050009@gmail.com> (raw)
In-Reply-To: <20121120113119.38d2a635.akpm@linux-foundation.org>

On 11/21/2012 03:31 AM, Andrew Morton wrote:

>>>> @@ -106,6 +106,7 @@ static void get_page_bootmem(unsigned long info,  struct page *page,
>>>>  void __ref put_page_bootmem(struct page *page)
>>>>  {
>>>>  	unsigned long type;
>>>> +	static DEFINE_MUTEX(ppb_lock);
>>>>  
>>>>  	type = (unsigned long) page->lru.next;
>>>>  	BUG_ON(type < MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE ||
>>>> @@ -115,7 +116,9 @@ void __ref put_page_bootmem(struct page *page)
>>>>  		ClearPagePrivate(page);
>>>>  		set_page_private(page, 0);
>>>>  		INIT_LIST_HEAD(&page->lru);
>>>> +		mutex_lock(&ppb_lock);
>>>>  		__free_pages_bootmem(page, 0);
>>>> +		mutex_unlock(&ppb_lock);
>>>
>>> The mutex is odd.  Nothing in the changelog, no code comment. 
>>> __free_pages_bootmem() is called from a lot of places but only this one
>>> has locking.  I'm madly guessing that the lock is here to handle two or
>>> more concurrent memory hotpluggings, but I shouldn't need to guess!!
>> Actually I'm a little hesitate whether we should add a lock here.
>>
>> All callers of __free_pages_bootmem() other than put_page_bootmem() should
>> only be used at startup time. And currently the only caller of put_page_bootmem()
>> has already been protected by pgdat_resize_lock(pgdat, &flags). So there's
>> no real need for lock, just defensive.
>>
>> I'm not sure which is the best solution here.
>> 1) add a comments into __free_pages_bootmem() to state that the caller should
>>    serialize themselves.
>> 2) Use a dedicated lock to serialize updates to zone->managed_pages, this need
>>    modifications to page_alloc.c and memory_hotplug.c.
>> 3) The above solution to serialize in put_page_bootmem().
>> What's your suggestions here?
> 
> Firstly, let's be clear about what *data* we're protecting here.  I
> think it's only ->managed_pages?
Yes, we are just trying to protect ->managed_pages.

> I agree that no locking is needed during the init-time code.
> 
> So afaict we only need be concerned about concurrent updates to
> ->managed_pages via memory hotplug, and lock_memory_hotplug() is
> sufficient there.  We don't need to be concerned about readers of
> managed_pages because it is an unsigned long (a u64 on 32-bit machines
> would be a problem).
> 
> All correct?  If so, the code is OK as-is and this can all be
> described/formalised in code comments.  If one wants to be really
> confident, we could do something along the lines of
OK, will add some comments to describe.

> void mod_zone_managed_pages(struct zone *zone, signed long delta)
> {
> 	WARN_ON(system_state != SYSTEM_BOOTING &&
> 		!is_locked_memory_hotplug());
> 	zone->managed_pages += delta;
> }
This seems a little overhead because __free_pages_bootmem() is on the hot path
and will be called many times at boot time.

Regards!
Gerry

--
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: Jiang Liu <liuj97@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Wen Congyang <wency@cn.fujitsu.com>,
	David Rientjes <rientjes@google.com>,
	Jiang Liu <jiang.liu@huawei.com>,
	Maciej Rutecki <maciej.rutecki@gmail.com>,
	Chris Clayton <chris2553@googlemail.com>,
	"Rafael J . Wysocki" <rjw@sisk.pl>, Mel Gorman <mgorman@suse.de>,
	Minchan Kim <minchan@kernel.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Michal Hocko <mhocko@suse.cz>, Jianguo Wu <wujianguo@huawei.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [RFT PATCH v1 1/5] mm: introduce new field "managed_pages" to struct zone
Date: Wed, 21 Nov 2012 22:36:56 +0800	[thread overview]
Message-ID: <50ACE708.5050009@gmail.com> (raw)
In-Reply-To: <20121120113119.38d2a635.akpm@linux-foundation.org>

On 11/21/2012 03:31 AM, Andrew Morton wrote:

>>>> @@ -106,6 +106,7 @@ static void get_page_bootmem(unsigned long info,  struct page *page,
>>>>  void __ref put_page_bootmem(struct page *page)
>>>>  {
>>>>  	unsigned long type;
>>>> +	static DEFINE_MUTEX(ppb_lock);
>>>>  
>>>>  	type = (unsigned long) page->lru.next;
>>>>  	BUG_ON(type < MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE ||
>>>> @@ -115,7 +116,9 @@ void __ref put_page_bootmem(struct page *page)
>>>>  		ClearPagePrivate(page);
>>>>  		set_page_private(page, 0);
>>>>  		INIT_LIST_HEAD(&page->lru);
>>>> +		mutex_lock(&ppb_lock);
>>>>  		__free_pages_bootmem(page, 0);
>>>> +		mutex_unlock(&ppb_lock);
>>>
>>> The mutex is odd.  Nothing in the changelog, no code comment. 
>>> __free_pages_bootmem() is called from a lot of places but only this one
>>> has locking.  I'm madly guessing that the lock is here to handle two or
>>> more concurrent memory hotpluggings, but I shouldn't need to guess!!
>> Actually I'm a little hesitate whether we should add a lock here.
>>
>> All callers of __free_pages_bootmem() other than put_page_bootmem() should
>> only be used at startup time. And currently the only caller of put_page_bootmem()
>> has already been protected by pgdat_resize_lock(pgdat, &flags). So there's
>> no real need for lock, just defensive.
>>
>> I'm not sure which is the best solution here.
>> 1) add a comments into __free_pages_bootmem() to state that the caller should
>>    serialize themselves.
>> 2) Use a dedicated lock to serialize updates to zone->managed_pages, this need
>>    modifications to page_alloc.c and memory_hotplug.c.
>> 3) The above solution to serialize in put_page_bootmem().
>> What's your suggestions here?
> 
> Firstly, let's be clear about what *data* we're protecting here.  I
> think it's only ->managed_pages?
Yes, we are just trying to protect ->managed_pages.

> I agree that no locking is needed during the init-time code.
> 
> So afaict we only need be concerned about concurrent updates to
> ->managed_pages via memory hotplug, and lock_memory_hotplug() is
> sufficient there.  We don't need to be concerned about readers of
> managed_pages because it is an unsigned long (a u64 on 32-bit machines
> would be a problem).
> 
> All correct?  If so, the code is OK as-is and this can all be
> described/formalised in code comments.  If one wants to be really
> confident, we could do something along the lines of
OK, will add some comments to describe.

> void mod_zone_managed_pages(struct zone *zone, signed long delta)
> {
> 	WARN_ON(system_state != SYSTEM_BOOTING &&
> 		!is_locked_memory_hotplug());
> 	zone->managed_pages += delta;
> }
This seems a little overhead because __free_pages_bootmem() is on the hot path
and will be called many times at boot time.

Regards!
Gerry

  reply	other threads:[~2012-11-21 14:37 UTC|newest]

Thread overview: 98+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-06  1:31 [PATCH] mm: fix a regression with HIGHMEM introduced by changeset 7f1290f2f2a4d Jiang Liu
2012-11-06  1:31 ` Jiang Liu
2012-11-06 10:23 ` Chris Clayton
2012-11-06 10:23   ` Chris Clayton
2012-11-06 20:43 ` Andrew Morton
2012-11-06 20:43   ` Andrew Morton
2012-11-14 14:52   ` Jiang Liu
2012-11-14 14:52     ` Jiang Liu
2012-11-15  9:22     ` Wen Congyang
2012-11-15  9:22       ` Wen Congyang
2012-11-15 11:28       ` Bob Liu
2012-11-15 11:28         ` Bob Liu
2012-11-15 14:23         ` Wen Congyang
2012-11-15 14:23           ` Wen Congyang
2012-11-15 15:40       ` Jiang Liu
2012-11-15 15:40         ` Jiang Liu
2012-11-15 21:41         ` David Rientjes
2012-11-15 21:41           ` David Rientjes
2012-11-15 19:24     ` Andrew Morton
2012-11-15 19:24       ` Andrew Morton
2012-11-15 21:17       ` Chris Clayton
2012-11-15 21:17         ` Chris Clayton
2012-11-15 21:27       ` David Rientjes
2012-11-15 21:27         ` David Rientjes
2012-11-18 16:07       ` [RFT PATCH v1 0/5] fix up inaccurate zone->present_pages Jiang Liu
2012-11-18 16:07         ` Jiang Liu
2012-11-18 16:07         ` [RFT PATCH v1 1/5] mm: introduce new field "managed_pages" to struct zone Jiang Liu
2012-11-18 16:07           ` Jiang Liu
2012-11-19 23:38           ` Andrew Morton
2012-11-19 23:38             ` Andrew Morton
2012-11-20 14:56             ` Jiang Liu
2012-11-20 14:56               ` Jiang Liu
2012-11-20 19:31               ` Andrew Morton
2012-11-20 19:31                 ` Andrew Morton
2012-11-21 14:36                 ` Jiang Liu [this message]
2012-11-21 14:36                   ` Jiang Liu
2012-11-21 19:31                   ` Andrew Morton
2012-11-21 19:31                     ` Andrew Morton
2012-11-21 15:06                 ` [RFT PATCH v2 " Jiang Liu
2012-11-21 15:06                   ` Jiang Liu
2012-11-18 16:07         ` [RFT PATCH v1 2/5] mm: replace zone->present_pages with zone->managed_pages if appreciated Jiang Liu
2012-11-18 16:07           ` Jiang Liu
2012-11-18 16:07         ` [RFT PATCH v1 3/5] mm: set zone->present_pages to number of existing pages in the zone Jiang Liu
2012-11-18 16:07           ` Jiang Liu
2012-11-18 16:07         ` [RFT PATCH v1 4/5] mm: provide more accurate estimation of pages occupied by memmap Jiang Liu
2012-11-18 16:07           ` Jiang Liu
2012-11-19 23:42           ` Andrew Morton
2012-11-19 23:42             ` Andrew Morton
2012-11-20 15:18             ` Jiang Liu
2012-11-20 15:18               ` Jiang Liu
2012-11-20 19:19               ` Andrew Morton
2012-11-20 19:19                 ` Andrew Morton
2012-11-21 14:52                 ` Jiang Liu
2012-11-21 14:52                   ` Jiang Liu
2012-11-21 19:35                   ` Andrew Morton
2012-11-21 19:35                     ` Andrew Morton
2012-11-22 16:17                     ` Jiang Liu
2012-11-22 16:17                       ` Jiang Liu
2012-11-21 15:09                 ` [RFT PATCH v2 " Jiang Liu
2012-11-21 15:09                   ` Jiang Liu
2012-11-28 23:52                   ` Andrew Morton
2012-11-28 23:52                     ` Andrew Morton
2012-11-29  2:25                     ` Jianguo Wu
2012-11-29  2:25                       ` Jianguo Wu
2012-11-29 10:52                     ` Chris Clayton
2012-11-29 10:52                       ` Chris Clayton
2012-12-02 19:55                       ` Chris Clayton
2012-12-02 19:55                         ` Chris Clayton
2012-12-03  7:26                         ` Chris Clayton
2012-12-03  7:26                           ` Chris Clayton
2012-12-03 23:17                         ` Andrew Morton
2012-12-03 23:17                           ` Andrew Morton
2012-12-04  1:21                           ` Jiang Liu
2012-12-04  1:21                             ` Jiang Liu
2012-12-04 10:05                           ` Chris Clayton
2012-12-04 10:05                             ` Chris Clayton
2012-11-20  2:15           ` [RFT PATCH v1 " Jaegeuk Hanse
2012-11-20  2:15             ` Jaegeuk Hanse
2012-11-18 16:07         ` [RFT PATCH v1 5/5] mm: increase totalram_pages when free pages allocated by bootmem allocator Jiang Liu
2012-11-18 16:07           ` Jiang Liu
2012-11-18 20:36         ` [RFT PATCH v1 0/5] fix up inaccurate zone->present_pages Chris Clayton
2012-11-18 20:36           ` Chris Clayton
2012-11-22  9:23           ` Chris Clayton
2012-11-22  9:23             ` Chris Clayton
2012-11-26  9:46             ` Chris Clayton
2012-11-26  9:46               ` Chris Clayton
2012-11-19 21:36         ` Maciej Rutecki
2012-11-19 21:36           ` Maciej Rutecki
2012-11-20 16:03           ` Jiang Liu
2012-11-20 16:03             ` Jiang Liu
2012-11-20  2:13         ` Jaegeuk Hanse
2012-11-20  2:13           ` Jaegeuk Hanse
2012-11-20  2:43           ` Jiang Liu
2012-11-20  2:43             ` Jiang Liu
2012-11-20  3:20             ` Jaegeuk Hanse
2012-11-20  3:20               ` Jaegeuk Hanse
2012-11-20  3:46               ` Jiang Liu
2012-11-20  3:46                 ` Jiang Liu

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=50ACE708.5050009@gmail.com \
    --to=liuj97@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=chris2553@googlemail.com \
    --cc=jiang.liu@huawei.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=maciej.rutecki@gmail.com \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.cz \
    --cc=minchan@kernel.org \
    --cc=rientjes@google.com \
    --cc=rjw@sisk.pl \
    --cc=wency@cn.fujitsu.com \
    --cc=wujianguo@huawei.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.